[Saga-devel] saga SVN commit 3243: /trunk/adaptors/ssh/
amerzky at cct.lsu.edu
amerzky at cct.lsu.edu
Tue Jan 6 12:10:09 CST 2009
User: amerzky
Date: 2009/01/06 12:10 PM
Added:
/trunk/adaptors/ssh/
.env, Makefile, configure, configure.in
/trunk/adaptors/ssh/config/
Makefile, config.hpp.in, make.cfg.in, saga.config.ssh.c.mk.in, saga_ssh.m4
/trunk/adaptors/ssh/external/
/trunk/adaptors/ssh/external/sshfs/
/trunk/adaptors/ssh/external/sshfs/macos/
/trunk/adaptors/ssh/external/sshfs/macos/bin/
README.txt, sshfs, sshfs-static-leopard, sshfs-static-tiger
/trunk/adaptors/ssh/ssh_context/
Makefile, ssh_context_adaptor.cpp, ssh_context_adaptor.hpp, ssh_context_adaptor.ini.in
/trunk/adaptors/ssh/ssh_file/
Makefile, README, ssh_file_adaptor.cpp, ssh_file_adaptor.hpp, ssh_file_adaptor.ini, ssh_file_adaptor_dir.hpp, ssh_file_adaptor_dir_impl.cpp, ssh_file_adaptor_dir_nsdir_impl.cpp, ssh_file_adaptor_dir_nsentry_impl.cpp, ssh_file_adaptor_dir_perm_impl.cpp, ssh_file_adaptor_file.hpp, ssh_file_adaptor_file_impl.cpp, ssh_file_adaptor_file_nsentry_impl.cpp, ssh_file_adaptor_file_perm_impl.cpp, ssh_file_adaptor_sshfs.cpp, ssh_file_adaptor_sshfs.hpp
/trunk/adaptors/ssh/ssh_job/
Makefile, ssh_job.cpp, ssh_job.hpp, ssh_job_adaptor.cpp, ssh_job_adaptor.hpp, ssh_job_adaptor.ini, ssh_job_async.cpp, ssh_job_istream.hpp, ssh_job_ostream.hpp, ssh_job_service.cpp, ssh_job_service.hpp, ssh_job_service_async.cpp, ssh_job_stream.hpp
Log:
Hohoho: ssh file adaptor is working!
Check out the README: you just need fuse/sshfs installed..
Even remote-to-remote copies are ok :-) Some code examples will
follow shortly.
Basically, the ssh file adaptor mounts the remote FS into the
local name space, and then uses the local file adaptor to
perform all operations. The adaptor simply translates URLs back
and forth between the name spaces...
The ssh job adaptor is not yet working - but that code lives in
the aws job adaptor at the moment - just need to copy it over.
Stay tuned :-)
Cheers, Andre.
File Changes:
Directory: /trunk/adaptors/ssh/external/sshfs/macos/bin/
========================================================
File [added]: README.txt
Delta lines: +5 -0
===================================================================
--- trunk/adaptors/ssh/external/sshfs/macos/bin/README.txt 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/external/sshfs/macos/bin/README.txt 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,5 @@
+These binaries require a version of MacFUSE that's *newer* than MacFUSE 1.7.
+
+At the time of this writing, if you want to use these binaries, you will have
+to install the Developer release of MacFUSE. This should be sorted out soon
+enough as a new release of MacFUSE is just around the corner.
File [added]: sshfs
Delta lines: +1 -0
===================================================================
--- trunk/adaptors/ssh/external/sshfs/macos/bin/sshfs 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/external/sshfs/macos/bin/sshfs 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1 @@
+link sshfs-static-leopard
\ No newline at end of file
Property changes on: trunk/adaptors/ssh/external/sshfs/macos/bin/sshfs
___________________________________________________________________
Name: svn:special
+ *
File [added]: sshfs-static-leopard
Delta lines: +0 -0
===================================================================
(Binary files differ)
Property changes on: trunk/adaptors/ssh/external/sshfs/macos/bin/sshfs-static-leopard
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
File [added]: sshfs-static-tiger
Delta lines: +0 -0
===================================================================
(Binary files differ)
Property changes on: trunk/adaptors/ssh/external/sshfs/macos/bin/sshfs-static-tiger
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Directory: /trunk/adaptors/ssh/config/
======================================
File [added]: Makefile
Delta lines: +15 -0
===================================================================
--- trunk/adaptors/ssh/config/Makefile 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/config/Makefile 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,15 @@
+# Copyright (c) 2005-2006 Andre Merzky (andre at merzky.net)
+#
+# Use, modification and distribution is subject to the Boost Software
+# License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+-include make.cfg
+-include $(SAGA_MAKE_INCLUDE_ROOT)/saga.mk
+
+default::
+ @$(TRUE)
+
+distclean::
+ @$(RM) make.cfg config.hpp saga.config.*.mk
+
File [added]: config.hpp.in
Delta lines: +11 -0
===================================================================
--- trunk/adaptors/ssh/config/config.hpp.in 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/config/config.hpp.in 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,11 @@
+
+#ifndef SAGA_ADAPTOR_AWS_CONFIG_HPP
+#define SAGA_ADAPTOR_AWS_CONFIG_HPP
+
+#include <saga/saga-defs.hpp>
+
+#define SAGA_HAVE_AWS @CPP_HAVE_AWS@
+#define SAGA_HAVE_JAVA @CPP_HAVE_JAVA@
+
+#endif // SAGA_ADAPTOR_AWS_CONFIG_HPP
+
File [added]: make.cfg.in
Delta lines: +36 -0
===================================================================
--- trunk/adaptors/ssh/config/make.cfg.in 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/config/make.cfg.in 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,36 @@
+# Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+# vim: ft=make
+
+ifndef MAKE_CFG_SSH_IN
+ MAKE_CFG_SSH_IN=yes
+
+
+TMP_SAGA_LOCATION = @TMP_SAGA_LOCATION@
+TMP_SAGA_INSTTYPE = @TMP_SAGA_INSTTYPE@
+
+ifeq "$(TMP_SAGA_INSTTYPE)" "source"
+ SAGA_ROOT = $(TMP_SAGA_LOCATION)
+ SAGA_MAKE_INCLUDE_ROOT = $(TMP_SAGA_LOCATION)/make
+else
+ SAGA_LOCATION = $(TMP_SAGA_LOCATION)
+ SAGA_MAKE_INCLUDE_ROOT = $(TMP_SAGA_LOCATION)/share/saga/make
+endif
+
+SAGA_HAVE_SSH = @HAVE_SSH@
+SAGA_HAVE_SSHFS = @HAVE_SSHFS@
+
+SAGA_SSH = @SAGA_SSH@
+SAGA_SSHFS = @SAGA_SSHFS@
+
+SAGA_BUILD_ADAPTOR_CONTEXT = @BUILD_ADAPTOR_CONTEXT@
+SAGA_BUILD_ADAPTOR_FILE = @BUILD_ADAPTOR_FILE@
+SAGA_BUILD_ADAPTOR_JOB = @BUILD_ADAPTOR_JOB@
+
+
+endif # guard
+
File [added]: saga.config.ssh.c.mk.in
Delta lines: +24 -0
===================================================================
--- trunk/adaptors/ssh/config/saga.config.ssh.c.mk.in 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/config/saga.config.ssh.c.mk.in 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,24 @@
+# Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+#
+# Distributed under the Boost Software License, Version 1.0. (See accompanying
+# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+ifndef SAGA_MK_INC_CONF_AWS
+ SAGA_MK_INC_CONF_AWS = yes
+
+############################################################
+#
+# AWS
+#
+include @CONFDIR@/make.cfg
+
+ifeq "$(SAGA_HAVE_AWS)" "yes"
+ SAGA_HAVE_AWS_DETAIL = @HAVE_AWS_DETAIL@
+ SAGA_AWS_LOCATION = @AWS_LOCATION@
+ SAGA_AWS_VERSION = @AWS_VERSION@
+endif
+#
+###########################################################
+
+endif # guard
+
File [added]: saga_ssh.m4
Delta lines: +103 -0
===================================================================
--- trunk/adaptors/ssh/config/saga_ssh.m4 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/config/saga_ssh.m4 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,103 @@
+
+#
+# SYNOPSIS
+#
+# AX_SAGA_CHECK_SSH([MINIMUM-VERSION])
+#
+# DESCRIPTION
+#
+# Test for the ssh command line tools.
+#
+# If no path to the installed aws tools is given,
+# the macro searchs under /usr, /usr/local, /opt and
+# /usr/local/package/aws-*
+#
+# This macro calls:
+#
+# AC_SUBST(HAVE_SSH)
+# AC_SUBST(SAGA_SSH)
+# AC_SUBST(HAVE_SSHFS)
+# AC_SUBST(SAGA_SSHFS)
+#
+# LAST MODIFICATION
+#
+# 2008-10-14
+#
+# COPYLEFT
+#
+# Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+#
+# Copying and distribution of this file, with or without
+# modification, are permitted in any medium without royalty
+# provided the copyright notice and this notice are preserved.
+
+
+AC_DEFUN([AX_SAGA_CHECK_SSH],
+[
+ AC_ARG_WITH([ssh],
+ [AS_HELP_STRING([--with-ssh],
+ [path to ssh binary @<:@default=check@:>@])],
+ [],
+ [with_ssh=check])
+
+ if test "x$with_ssh" = "xcheck"; then
+
+ AC_PATH_PROG(SAGA_SSH, ssh)
+
+ HAVE_SSH=no
+
+ if ! test "x$SAGA_SSH" = "x"; then
+ HAVE_SSH=yes
+ fi
+
+ else
+
+ if test -x "$with_ssh"; then
+ HAVE_SSH=yes
+ SAGA_SSH=$with_ssh
+ else
+ HAVE_SSH=no
+ fi
+
+ fi
+
+
+ AC_SUBST(HAVE_SSH)
+ AC_SUBST(SAGA_SSH)
+])
+
+
+AC_DEFUN([AX_SAGA_CHECK_SSHFS],
+[
+ AC_ARG_WITH([sshfs],
+ [AS_HELP_STRING([--with-sshfs],
+ [path to sshfs binary @<:@default=check@:>@])],
+ [],
+ [with_sshfs=check])
+
+ if test "x$with_sshfs" = "xcheck"; then
+
+ AC_PATH_PROG(SAGA_SSHFS, sshfs)
+
+ HAVE_SSHFS=no
+
+ if ! test "x$SAGA_SSHFS" = "x"; then
+ HAVE_SSHFS=yes
+ fi
+
+ else
+
+ if test -x "$with_sshfs"; then
+ HAVE_SSHFS=yes
+ SAGA_SSHFS=$with_sshfs
+ else
+ HAVE_SSHFS=no
+ fi
+
+ fi
+
+
+ AC_SUBST(HAVE_SSHFS)
+ AC_SUBST(SAGA_SSHFS)
+])
+
Directory: /trunk/adaptors/ssh/
===============================
File [added]: .env
Delta lines: +3 -0
===================================================================
--- trunk/adaptors/ssh/.env 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/.env 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,3 @@
+
+alias myconf './configure --with-sshfs=`pwd`/external/sshfs/macos/bin/sshfs'
+
File [added]: Makefile
Delta lines: +24 -0
===================================================================
--- trunk/adaptors/ssh/Makefile 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/Makefile 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,24 @@
+# Copyright (c) 2005-2006 Andre Merzky (andre at merzky.net)
+#
+# Use, modification and distribution is subject to the Boost Software
+# License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+SAGA_SUBDIRS = config ssh_context
+
+-include config/make.cfg
+
+ifeq "x$(SAGA_BUILD_ADAPTOR_FILE)" "xyes"
+ SAGA_SUBDIRS += ssh_file
+endif
+
+ifeq "x$(SAGA_BUILD_ADAPTOR_JOB)" "xyes"
+ SAGA_SUBDIRS += ssh_job
+endif
+
+ifdef SAGA_IS_CLEANING
+ SAGA_SUBDIRS += ssh_file ssh_job
+endif
+
+-include $(SAGA_MAKE_INCLUDE_ROOT)/saga.mk
+
File [added]: configure
Delta lines: +3096 -0
===================================================================
--- trunk/adaptors/ssh/configure 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/configure 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,3096 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+ if (eval ":") 2>/dev/null; then
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+
+ if test $as_have_required = yes && (eval ":
+(as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=\$LINENO
+ as_lineno_2=\$LINENO
+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+ :
+else
+ as_candidate_shells=
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ case $as_dir in
+ /*)
+ for as_base in sh bash ksh sh5; do
+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ done;;
+ esac
+done
+IFS=$as_save_IFS
+
+
+ for as_shell in $as_candidate_shells $SHELL; do
+ # Try only shells that exist, to save several forks.
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+ CONFIG_SHELL=$as_shell
+ as_have_required=yes
+ if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+ (exit $1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+ break
+fi
+
+fi
+
+ done
+
+ if test "x$CONFIG_SHELL" != x; then
+ for as_var in BASH_ENV ENV
+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ done
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+ if test $as_have_required = no; then
+ echo This script requires a shell more modern than all the
+ echo shells that I found on your system. Please install a
+ echo modern shell, or manually run the script under such a
+ echo shell if you do have one.
+ { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+ echo No shell found that supports shell functions.
+ echo Please tell autoconf at gnu.org about your system,
+ echo including any error possibly output before this
+ echo message
+}
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+CONFPWD
+CONFDIR
+SAGA_ROOT
+SAGA_LOCATION
+SAGA_CONFIG
+TMP_SAGA_LOCATION
+TMP_SAGA_INSTTYPE
+SAGA_SSH
+HAVE_SSH
+SAGA_SSHFS
+HAVE_SSHFS
+CPP_HAVE_SSH
+CPP_HAVE_SSHFS
+BUILD_ADAPTOR_CONTEXT
+BUILD_ADAPTOR_FILE
+BUILD_ADAPTOR_JOB
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+SAGA_ROOT
+SAGA_LOCATION'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+ eval enable_$ac_feature=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+ eval enable_$ac_feature=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+ eval with_$ac_package=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+ eval with_$ac_package=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ { echo "$as_me: error: Working directory cannot be determined" >&2
+ { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ { echo "$as_me: error: pwd does not report name of working directory" >&2
+ { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+ { (exit 1); exit 1; }; }
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+ cat <<\_ACEOF
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-ssh path to ssh binary [default=check]
+ --with-sshfs path to sshfs binary [default=check]
+
+Some influential environment variables:
+ SAGA_ROOT SAGA source tree root
+ SAGA_LOCATION
+ SAGA installation root
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" || continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+configure
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.61. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args '$ac_arg'"
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+ set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+ set x "$ac_default_prefix/share/config.site" \
+ "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ CONFPWD=`pwd`
+ CONFDIR=`pwd`/config/
+
+
+
+
+
+
+ TMP_SAGA_LOCATION=""
+ TMP_SAGA_INSTTYPE=""
+
+ # check saga-config
+ # Extract the first word of "saga-config", so it can be a program name with args.
+set dummy saga-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_SAGA_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $SAGA_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SAGA_CONFIG="$SAGA_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SAGA_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+SAGA_CONFIG=$ac_cv_path_SAGA_CONFIG
+if test -n "$SAGA_CONFIG"; then
+ { echo "$as_me:$LINENO: result: $SAGA_CONFIG" >&5
+echo "${ECHO_T}$SAGA_CONFIG" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+ { echo "$as_me:$LINENO: checking SAGA installation/sources" >&5
+echo $ECHO_N "checking SAGA installation/sources... $ECHO_C" >&6; }
+
+ if test "x$SAGA_CONFIG" != "x"; then
+ TMP_SAGA_LOCATION=`$SAGA_CONFIG --prefix`
+ TMP_SAGA_INSTTYPE="install"
+ fi
+
+
+ # check SAGA_LOCATION - prefer over saga-config
+ if test "x$SAGA_LOCATION" != "x"; then
+ TMP_SAGA_LOCATION=$SAGA_LOCATION
+ TMP_SAGA_INSTTYPE="install"
+ fi
+
+
+ # check SAGA_ROOT - prefer over SAGA_LOCATION and saga-config
+ if test "x$SAGA_ROOT" = "x"; then
+
+ # try ./, ../ and ../../ as SAGA_ROOT
+
+ if test -e ./make/saga.mk; then
+ SAGA_ROOT=`pwd`
+ fi
+
+ if test -e ../make/saga.mk; then
+ SAGA_ROOT=`pwd`/..
+ fi
+
+ if test -e ../../make/saga.mk; then
+ SAGA_ROOT=`pwd`/../../
+ fi
+
+ if test -e ../../../make/saga.mk; then
+ SAGA_ROOT=`pwd`/../../../
+ fi
+ fi
+
+ if test "x$SAGA_ROOT" != "x"; then
+ TMP_SAGA_LOCATION=$SAGA_ROOT
+ TMP_SAGA_INSTTYPE="source"
+ fi
+
+
+ # found anything?
+ if test "x$TMP_SAGA_LOCATION" = "x"; then
+ { { echo "$as_me:$LINENO: error: Could find neither SAGA source tree nor installation." >&5
+echo "$as_me: error: Could find neither SAGA source tree nor installation." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ { echo "$as_me:$LINENO: result: $TMP_SAGA_LOCATION ($TMP_SAGA_INSTTYPE)" >&5
+echo "${ECHO_T}$TMP_SAGA_LOCATION ($TMP_SAGA_INSTTYPE)" >&6; }
+
+
+
+
+
+ # now, the adaptor and binding config files depend on the earlier findings of
+ # the saga main configure. If those configures get run from within the main
+ # configure, everything is known in the environment. If not, we have to pull
+ # it.
+ if test "x$TMP_SAGA_INSTTYPE" = "xsource"; then
+ SAGA_CONFIG_DIR="$TMP_SAGA_LOCATION/config"
+ else
+ SAGA_CONFIG_DIR="$TMP_SAGA_LOCATION/share/saga/config"
+ fi
+
+ source "$SAGA_CONFIG_DIR/saga-config.cache"
+
+
+
+if test "x$TMP_SAGA_INSTTYPE" == "source"; then
+ ac_aux_dir=
+for ac_dir in $TMP_SAGA_LOCATION/share/saga/config/ "$srcdir"/$TMP_SAGA_LOCATION/share/saga/config/; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $TMP_SAGA_LOCATION/share/saga/config/ \"$srcdir\"/$TMP_SAGA_LOCATION/share/saga/config/" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $TMP_SAGA_LOCATION/share/saga/config/ \"$srcdir\"/$TMP_SAGA_LOCATION/share/saga/config/" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+else
+ ac_aux_dir=
+for ac_dir in $TMP_SAGA_LOCATION/config/ "$srcdir"/$TMP_SAGA_LOCATION/config/; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $TMP_SAGA_LOCATION/config/ \"$srcdir\"/$TMP_SAGA_LOCATION/config/" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $TMP_SAGA_LOCATION/config/ \"$srcdir\"/$TMP_SAGA_LOCATION/config/" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+fi
+
+
+
+
+# Check whether --with-ssh was given.
+if test "${with_ssh+set}" = set; then
+ withval=$with_ssh;
+else
+ with_ssh=check
+fi
+
+
+ if test "x$with_ssh" = "xcheck"; then
+
+ # Extract the first word of "ssh", so it can be a program name with args.
+set dummy ssh; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_SAGA_SSH+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $SAGA_SSH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SAGA_SSH="$SAGA_SSH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SAGA_SSH="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+SAGA_SSH=$ac_cv_path_SAGA_SSH
+if test -n "$SAGA_SSH"; then
+ { echo "$as_me:$LINENO: result: $SAGA_SSH" >&5
+echo "${ECHO_T}$SAGA_SSH" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+ HAVE_SSH=no
+
+ if ! test "x$SAGA_SSH" = "x"; then
+ HAVE_SSH=yes
+ fi
+
+ else
+
+ if test -x "$with_ssh"; then
+ HAVE_SSH=yes
+ SAGA_SSH=$with_ssh
+ else
+ HAVE_SSH=no
+ fi
+
+ fi
+
+
+
+
+
+
+if test "$HAVE_SSH" = "yes"; then
+
+
+# Check whether --with-sshfs was given.
+if test "${with_sshfs+set}" = set; then
+ withval=$with_sshfs;
+else
+ with_sshfs=check
+fi
+
+
+ if test "x$with_sshfs" = "xcheck"; then
+
+ # Extract the first word of "sshfs", so it can be a program name with args.
+set dummy sshfs; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_SAGA_SSHFS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $SAGA_SSHFS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SAGA_SSHFS="$SAGA_SSHFS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SAGA_SSHFS="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+SAGA_SSHFS=$ac_cv_path_SAGA_SSHFS
+if test -n "$SAGA_SSHFS"; then
+ { echo "$as_me:$LINENO: result: $SAGA_SSHFS" >&5
+echo "${ECHO_T}$SAGA_SSHFS" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+ HAVE_SSHFS=no
+
+ if ! test "x$SAGA_SSHFS" = "x"; then
+ HAVE_SSHFS=yes
+ fi
+
+ else
+
+ if test -x "$with_sshfs"; then
+ HAVE_SSHFS=yes
+ SAGA_SSHFS=$with_sshfs
+ else
+ HAVE_SSHFS=no
+ fi
+
+ fi
+
+
+
+
+
+fi
+
+ac_config_files="$ac_config_files config/saga.config.ssh.c.mk"
+
+ac_config_files="$ac_config_files ssh_context/ssh_context_adaptor.ini"
+
+
+# translate defines into integers
+CPP_HAVE_SSH=0
+
+if test "$HAVE_SSH" = "yes"; then
+ CPP_HAVE_SSH=1
+fi
+
+if test "$HAVE_SSHFS" = "yes"; then
+ CPP_HAVE_SSH=1
+fi
+
+
+
+
+BUILD_ADAPTOR_CONTEXT=no
+BUILD_ADAPTOR_FILE=no
+BUILD_ADAPTOR_JOB=no
+
+if test "x$HAVE_SSH" = "xyes"; then
+
+ if test "x$SAGA_HAVE_ADAPTOR_CONTEXT" = "xyes"; then
+ BUILD_ADAPTOR_CONTEXT="yes"
+ fi
+
+ if test "x$SAGA_HAVE_ADAPTOR_JOB" = "xyes"; then
+ BUILD_ADAPTOR_JOB="yes"
+ fi
+
+ if test "x$HAVE_SSHFS" = "xyes"; then
+ if test "x$SAGA_HAVE_ADAPTOR_FILE" = "xyes"; then
+ BUILD_ADAPTOR_FILE="yes"
+ fi
+ fi
+
+fi
+
+if test "x$HAVE_SSH" = "xyes"; then
+ SAGA_SSH_S="($SAGA_SSH)"
+fi
+
+if test "x$HAVE_SSHFS" = "xyes"; then
+ SAGA_SSHFS_S="($SAGA_SSHFS)"
+fi
+
+
+
+
+
+
+# create output files
+ac_config_files="$ac_config_files config/make.cfg"
+
+ac_config_files="$ac_config_files config/config.hpp"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.61. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf at gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.61,
+ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ echo "$ac_cs_version"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ CONFIG_SHELL=$SHELL
+ export CONFIG_SHELL
+ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config/saga.config.ssh.c.mk") CONFIG_FILES="$CONFIG_FILES config/saga.config.ssh.c.mk" ;;
+ "ssh_context/ssh_context_adaptor.ini") CONFIG_FILES="$CONFIG_FILES ssh_context/ssh_context_adaptor.ini" ;;
+ "config/make.cfg") CONFIG_FILES="$CONFIG_FILES config/make.cfg" ;;
+ "config/config.hpp") CONFIG_FILES="$CONFIG_FILES config/config.hpp" ;;
+
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+CONFPWD!$CONFPWD$ac_delim
+CONFDIR!$CONFDIR$ac_delim
+SAGA_ROOT!$SAGA_ROOT$ac_delim
+SAGA_LOCATION!$SAGA_LOCATION$ac_delim
+SAGA_CONFIG!$SAGA_CONFIG$ac_delim
+TMP_SAGA_LOCATION!$TMP_SAGA_LOCATION$ac_delim
+TMP_SAGA_INSTTYPE!$TMP_SAGA_INSTTYPE$ac_delim
+SAGA_SSH!$SAGA_SSH$ac_delim
+HAVE_SSH!$HAVE_SSH$ac_delim
+SAGA_SSHFS!$SAGA_SSHFS$ac_delim
+HAVE_SSHFS!$HAVE_SSHFS$ac_delim
+CPP_HAVE_SSH!$CPP_HAVE_SSH$ac_delim
+CPP_HAVE_SSHFS!$CPP_HAVE_SSHFS$ac_delim
+BUILD_ADAPTOR_CONTEXT!$BUILD_ADAPTOR_CONTEXT$ac_delim
+BUILD_ADAPTOR_FILE!$BUILD_ADAPTOR_FILE$ac_delim
+BUILD_ADAPTOR_JOB!$BUILD_ADAPTOR_JOB$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 55; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+ ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in :F $CONFIG_FILES
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+ { (exit 1); exit 1; }; };;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ ac_file_inputs="$ac_file_inputs $ac_f"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input="Generated from "`IFS=:
+ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ fi
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin";;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir="$ac_dir"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ { (exit 1); exit 1; }; }; }
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out"; rm -f "$tmp/out";;
+ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+ esac
+ ;;
+
+
+
+ esac
+
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+OUT=config.summary
+rm -f $OUT
+TEE="tee -a"
+
+echo " " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " SAGA SSH ADAPTORS - Required Externals " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " Using SAGA from : $TMP_SAGA_LOCATION ($TMP_SAGA_INSTTYPE) " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " SSH found : $HAVE_SSH $SAGA_SSH_S " | $TEE $OUT
+echo " SSHFS found : $HAVE_SSHFS $SAGA_SSHFS_S " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " SAGA SSH - Configured Adaptors " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " Context : $BUILD_ADAPTOR_CONTEXT " | $TEE $OUT
+echo " File : $BUILD_ADAPTOR_FILE " | $TEE $OUT
+echo " Job : $BUILD_ADAPTOR_JOB " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " " | $TEE $OUT
+
+
+if test "$SAGA_RECURSIVE_CONFIG" = "yes" ; then
+ cat $OUT >> $SAGA_ROOT/$OUT
+fi
+
Property changes on: trunk/adaptors/ssh/configure
___________________________________________________________________
Name: svn:executable
+ *
File [added]: configure.in
Delta lines: +115 -0
===================================================================
--- trunk/adaptors/ssh/configure.in 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/configure.in 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,115 @@
+# Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+# Copyright (c) 2008 Ole Weidner (oweidner at cct.lsu.ed)
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying Afile LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+m4_include([saga.m4])
+m4_include([config/saga_ssh.m4])
+
+AC_INIT()
+
+AX_SAGA_CONFIG()
+
+if test "x$TMP_SAGA_INSTTYPE" == "source"; then
+ AC_CONFIG_AUX_DIR([$TMP_SAGA_LOCATION/share/saga/config/])
+else
+ AC_CONFIG_AUX_DIR([$TMP_SAGA_LOCATION/config/])
+fi
+
+
+AX_SAGA_CHECK_SSH()
+
+if test "$HAVE_SSH" = "yes"; then
+ AX_SAGA_CHECK_SSHFS()
+fi
+
+AC_CONFIG_FILES([config/saga.config.ssh.c.mk])
+AC_CONFIG_FILES([ssh_context/ssh_context_adaptor.ini])
+
+# translate defines into integers
+CPP_HAVE_SSH=0
+
+if test "$HAVE_SSH" = "yes"; then
+ CPP_HAVE_SSH=1
+fi
+
+if test "$HAVE_SSHFS" = "yes"; then
+ CPP_HAVE_SSH=1
+fi
+
+AC_SUBST(CPP_HAVE_SSH)
+AC_SUBST(CPP_HAVE_SSHFS)
+
+BUILD_ADAPTOR_CONTEXT=no
+BUILD_ADAPTOR_FILE=no
+BUILD_ADAPTOR_JOB=no
+
+if test "x$HAVE_SSH" = "xyes"; then
+
+ if test "x$SAGA_HAVE_ADAPTOR_CONTEXT" = "xyes"; then
+ BUILD_ADAPTOR_CONTEXT="yes"
+ fi
+
+ if test "x$SAGA_HAVE_ADAPTOR_JOB" = "xyes"; then
+ BUILD_ADAPTOR_JOB="yes"
+ fi
+
+ if test "x$HAVE_SSHFS" = "xyes"; then
+ if test "x$SAGA_HAVE_ADAPTOR_FILE" = "xyes"; then
+ BUILD_ADAPTOR_FILE="yes"
+ fi
+ fi
+
+fi
+
+if test "x$HAVE_SSH" = "xyes"; then
+ SAGA_SSH_S="($SAGA_SSH)"
+fi
+
+if test "x$HAVE_SSHFS" = "xyes"; then
+ SAGA_SSHFS_S="($SAGA_SSHFS)"
+fi
+
+AC_SUBST([BUILD_ADAPTOR_CONTEXT])
+AC_SUBST([BUILD_ADAPTOR_FILE])
+AC_SUBST([BUILD_ADAPTOR_JOB])
+
+
+# create output files
+AC_CONFIG_FILES([config/make.cfg])
+AC_CONFIG_FILES([config/config.hpp])
+
+AC_OUTPUT()
+
+OUT=config.summary
+rm -f $OUT
+TEE="tee -a"
+
+echo " " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " SAGA SSH ADAPTORS - Required Externals " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " Using SAGA from : $TMP_SAGA_LOCATION ($TMP_SAGA_INSTTYPE) " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " SSH found : $HAVE_SSH $SAGA_SSH_S " | $TEE $OUT
+echo " SSHFS found : $HAVE_SSHFS $SAGA_SSHFS_S " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " SAGA SSH - Configured Adaptors " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " Context : $BUILD_ADAPTOR_CONTEXT " | $TEE $OUT
+echo " File : $BUILD_ADAPTOR_FILE " | $TEE $OUT
+echo " Job : $BUILD_ADAPTOR_JOB " | $TEE $OUT
+echo " " | $TEE $OUT
+echo " ======================================================== " | $TEE $OUT
+echo " " | $TEE $OUT
+
+
+if test "$SAGA_RECURSIVE_CONFIG" = "yes" ; then
+ cat $OUT >> $SAGA_ROOT/$OUT
+fi
+
Directory: /trunk/adaptors/ssh/ssh_context/
===========================================
File [added]: Makefile
Delta lines: +21 -0
===================================================================
--- trunk/adaptors/ssh/ssh_context/Makefile 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_context/Makefile 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+-include ../config/make.cfg
+
+SAGA_SRC = $(wildcard *.cpp)
+SAGA_OBJ = $(SAGA_SRC:%.cpp=%.o)
+
+SAGA_ADAPTOR_TYPE = context
+SAGA_ADAPTOR_NAME = ssh_context
+SAGA_ADAPTOR_INI = ssh_context_adaptor.ini
+SAGA_ADAPTOR_OBJ = $(SAGA_OBJ)
+
+-include $(SAGA_MAKE_INCLUDE_ROOT)/saga.adaptor.mk
+
+distclean::
+ @$(RM) $(SAGA_ADAPTOR_INI)
+
File [added]: ssh_context_adaptor.cpp
Delta lines: +218 -0
===================================================================
--- trunk/adaptors/ssh/ssh_context/ssh_context_adaptor.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_context/ssh_context_adaptor.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,218 @@
+// Copyright (c) 2006-2007 Ole Weidner (oweidner at cct.lsu.edu)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include "ssh_context_adaptor.hpp"
+
+#include <saga/saga/adaptors/config.hpp>
+#include <saga/saga/adaptors/adaptor.hpp>
+#include <saga/saga/adaptors/attribute.hpp>
+
+#include <sys/stat.h>
+#include <pwd.h>
+
+
+
+using namespace ssh_context_adaptor;
+
+#define ADAPTORS_SSH_CONTEXT_TYPE "ssh"
+
+struct cert_info_t {
+ bool success;
+ std::string errormessage;
+ std::string private_key;
+ std::string public_key;
+ std::string userid;
+};
+
+cert_info_t get_cert_info (std::string proxy_path = "");
+
+SAGA_ADAPTOR_REGISTER (context_adaptor);
+
+///////////////////////////////////////////////////////////////////////////////
+// constructor
+context_cpi_impl::context_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ TR1::shared_ptr <saga::adaptor> adaptor)
+ : base_cpi (p, info, adaptor, cpi::Noflags)
+{
+ saga::adaptors::attribute attr (this);
+
+ if ( attr.attribute_exists (saga::attributes::context_type) )
+ {
+ if ( ADAPTORS_SSH_CONTEXT_TYPE !=
+ attr.get_attribute (saga::attributes::context_type) )
+ {
+ SAGA_ADAPTOR_THROW ("Can't handle context types others than 'ssh'",
+ saga::BadParameter);
+ }
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// destructor
+context_cpi_impl::~context_cpi_impl (void)
+{
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+void context_cpi_impl::sync_set_defaults (saga::impl::void_t &)
+{
+ saga::adaptors::attribute attr (this);
+
+ if ( attr.attribute_exists (saga::attributes::context_type) )
+ {
+ if ( ADAPTORS_SSH_CONTEXT_TYPE !=
+ attr.get_attribute (saga::attributes::context_type) )
+ {
+ SAGA_ADAPTOR_THROW ("Can't handle context types others than 'ssh'",
+ saga::BadParameter);
+ }
+
+ if ( "" == attr.get_attribute (saga::attributes::context_type) )
+ {
+ SAGA_ADAPTOR_THROW ("Context Type cannot have an empty value",
+ saga::IncorrectState);
+ }
+
+ cert_info_t ci;
+
+ std::cerr << " === key : " << saga::attributes::context_userkey << std::endl;
+
+ if ( attr.attribute_exists (saga::attributes::context_userkey) )
+ {
+ // this call looks for a valid proxy file in the location described by
+ // saga::attributes::context_userkey
+ ci = get_cert_info (attr.get_attribute (saga::attributes::context_userkey));
+ }
+ else
+ {
+ // this call looks for a valid cert in a default location
+ ci = get_cert_info ();
+ }
+
+ if ( true == ci.success )
+ {
+ // found a valid cert, copy information over, if not set previously
+ if ( ! attr.attribute_exists (saga::attributes::context_userkey) ||
+ "" == attr.get_attribute (saga::attributes::context_userkey) )
+ {
+ attr.set_attribute (saga::attributes::context_userkey, ci.private_key);
+ }
+
+ if ( ! attr.attribute_exists (saga::attributes::context_usercert) ||
+ "" == attr.get_attribute (saga::attributes::context_usercert) )
+ {
+ attr.set_attribute (saga::attributes::context_usercert, ci.public_key);
+ }
+
+ if ( ! attr.attribute_exists (saga::attributes::context_userid) ||
+ "" == attr.get_attribute (saga::attributes::context_userid) )
+ {
+ attr.set_attribute (saga::attributes::context_userid, ci.userid );
+ }
+ }
+ else
+ {
+ std::cerr << " === " << ci.errormessage << std::endl;
+ SAGA_ADAPTOR_THROW (ci.errormessage, saga::NoSuccess);
+ }
+ }
+}
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+saga::impl::adaptor_selector::adaptor_info_list_type
+context_adaptor::adaptor_register (saga::impl::session * s)
+{
+ // list of implemented cpi's
+ saga::impl::adaptor_selector::adaptor_info_list_type infos;
+ preference_type prefs;
+
+ context_cpi_impl::register_cpi (infos, prefs, adaptor_uuid_);
+
+ // create a default security context if this is a default session
+ if ( s->is_default_session () )
+ {
+ std::vector <std::pair <std::string, std::string> > entries;
+
+ std::pair <std::string, std::string> entry (saga::attributes::context_type,
+ "ssh");
+
+ entries.push_back (entry);
+
+ s->add_proto_context (entries);
+
+ }
+
+ return infos;
+}
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// init a cert, either from a given path, or from a default location
+//
+cert_info_t get_cert_info (std::string path)
+{
+ cert_info_t ci;
+
+ ci.success = true;
+
+ std::cerr << " === path: " << path << std::endl;
+
+ // fall back to default if needed
+ if ( path == "" )
+ {
+ const char * home = ::getenv ("HOME");
+ if ( home == NULL )
+ {
+ ci.errormessage = "Cannot determine home directory, i.e. default ssh key location";
+ ci.success = false;
+ return ci;
+ }
+
+ path = home;
+ path += "/.ssh/id_dsa";
+
+ // FIXME: look for id_rsa as fallback, and also look in ~/.ssh2/
+ }
+
+
+
+ // check if given [private key, and related public-key, exist
+ struct stat buf;
+
+ ci.private_key = path;
+ ci.public_key = path + ".pub";
+ ci.userid = ::getpwuid (::getuid ())->pw_name;
+
+ if ( 0 != ::stat (ci.private_key.c_str (), &buf) )
+ {
+ ci.errormessage = "Cannot access private ssh key";
+ ci.success = false;
+ return ci;
+ }
+
+ if ( 0 != ::stat (ci.public_key.c_str (), &buf) )
+ {
+ // FIXME: this should be a warning, not an error
+ ci.errormessage = "Cannot access public ssh key";
+ ci.success = false;
+ return ci;
+ }
+
+ return ci;
+}
+//
+///////////////////////////////////////////////////////////////////////////////
+
File [added]: ssh_context_adaptor.hpp
Delta lines: +80 -0
===================================================================
--- trunk/adaptors/ssh/ssh_context/ssh_context_adaptor.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_context/ssh_context_adaptor.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,80 @@
+// Copyright (c) 2006-2007 Ole Weidner (oweidner at cct.lsu.edu)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ADAPTORS_SSH_CONTEXT_ADAPTOR_HPP
+#define ADAPTORS_SSH_CONTEXT_ADAPTOR_HPP
+
+#include <map>
+#include <vector>
+
+#include <saga/saga/util.hpp>
+#include <saga/saga/types.hpp>
+#include <saga/saga/adaptors/task.hpp>
+#include <saga/saga/adaptors/adaptor.hpp>
+#include <saga/saga/adaptors/context_cpi_instance_data.hpp>
+
+#include <saga/impl/engine/proxy.hpp>
+#include <saga/impl/context_cpi.hpp>
+
+namespace ssh_context_adaptor
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ struct context_adaptor : public saga::adaptor
+ {
+ typedef saga::impl::v1_0::op_info op_info;
+ typedef saga::impl::v1_0::cpi_info cpi_info;
+ typedef saga::impl::v1_0::preference_type preference_type;
+
+ context_adaptor (void)
+ {
+ }
+
+ ~context_adaptor (void)
+ {
+ }
+
+ std::string get_name (void) const
+ {
+ return BOOST_PP_STRINGIZE (SAGA_ADAPTOR_NAME);
+ }
+
+ saga::impl::adaptor_selector::adaptor_info_list_type
+ adaptor_register (saga::impl::session * s);
+ };
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ class context_cpi_impl
+ : public saga::adaptors::v1_0::context_cpi <context_cpi_impl>
+ {
+ private:
+ typedef saga::adaptors::v1_0::context_cpi <context_cpi_impl> base_cpi;
+
+ public:
+ typedef base_cpi::mutex_type mutex_type;
+
+ // constructor of the context CPI
+ context_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ TR1::shared_ptr <saga::adaptor> adaptor);
+
+ // destructor of the file adaptor
+ ~context_cpi_impl (void);
+
+ // context functions
+ void sync_set_defaults (saga::impl::void_t &);
+ };
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+}
+
+#endif // ADAPTORS_SSH_CONTEXT_ADAPTOR_HPP
+
File [added]: ssh_context_adaptor.ini.in
Delta lines: +18 -0
===================================================================
--- trunk/adaptors/ssh/ssh_context/ssh_context_adaptor.ini.in 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_context/ssh_context_adaptor.ini.in 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,18 @@
+
+[saga.adaptors.ssh_context]
+ name = ssh_context
+# path = $[saga.location]/lib
+# enabled = true
+ preferences = saga.adaptor_suite.ssh.preferences
+
+[saga.adaptors.ssh_context.preferences]
+ # adaptor configuration
+
+[saga.adaptor_suite.ssh.preferences]
+ # configurations specific to all sh based adaptors
+ ssh_bin = @SAGA_SSH@
+ ssh_opt = -o StrictHostKeyChecking=no
+
+ sshfs_bin = @SAGA_SSHFS@
+ sshfs_opt = -o workaround=nonodelay
+
Directory: /trunk/adaptors/ssh/ssh_file/
========================================
File [added]: Makefile
Delta lines: +21 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/Makefile 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/Makefile 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+#
+# Distributed under the Boost Software License,
+# Version 1.0. (See accompanying LICENSE file
+# or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+-include ../config/make.cfg
+
+SAGA_SRC = $(wildcard *.cpp)
+SAGA_OBJ = $(SAGA_SRC:%.cpp=%.o)
+
+SAGA_ADAPTOR_TYPE = file
+SAGA_ADAPTOR_NAME = ssh_file
+SAGA_ADAPTOR_INI = ssh_file_adaptor.ini
+SAGA_ADAPTOR_OBJ = $(SAGA_OBJ)
+
+SAGA_ADAPTOR_PACKAGES = file namespace
+
+-include $(SAGA_MAKE_INCLUDE_ROOT)/saga.adaptor.mk
+
+
File [added]: README
Delta lines: +26 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/README 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/README 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,26 @@
+
+This ssh file adaptor relies on sshfs/fuse. It mounts a remote file system, and
+then translates all URLs into local URLs, in that mounted name space, and
+operates via the local adaptor.
+
+MacOS:
+ FUSE: http://code.google.com/p/macfuse/
+ SSHFS: http://code.google.com/p/macfuse/wiki/MACFUSE_FS_SSHFS
+
+Linux:
+ FUSE: http://fuse.sourceforge.net/
+ SSHFS: http://fuse.sourceforge.net/sshfs.html
+
+The adaptor mounts the remote file systems into
+
+ ~/.saga/adaptors/ssh/ssh_file/mnt/<saga_object_id>
+
+Obviously, multiple directory objects accessing the same remote file system will
+thus mount that file system multiple times. At the moment is unclear if that is
+a problem (beyond the object initialization latency).
+
+The 'sshfs_keepalive' option determines if the filesystem is umounted when the
+respective SAGA object gets destroyed.
+
+TODO: Security and context management needs documentation.
+
File [added]: ssh_file_adaptor.cpp
Delta lines: +102 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,102 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/adaptors/adaptor.hpp>
+
+#include "ssh_file_adaptor.hpp"
+#include "ssh_file_adaptor_dir.hpp"
+#include "ssh_file_adaptor_file.hpp"
+
+namespace ssh_file_adaptor
+{
+ SAGA_ADAPTOR_REGISTER (file_adaptor);
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ saga::impl::adaptor_selector::adaptor_info_list_type
+ file_adaptor::adaptor_register (saga::impl::session * s)
+ {
+ std::cout << " === ctor" << std::endl;
+
+ // list of implemented cpi's
+ saga::impl::adaptor_selector::adaptor_info_list_type infos;
+ preference_type prefs;
+
+ file_cpi_impl::register_cpi (infos, prefs, adaptor_uuid_);
+ dir_cpi_impl::register_cpi (infos, prefs, adaptor_uuid_);
+
+ return infos;
+ }
+
+ // on destruction, umount all sshfs file systems - if keepalive is not set
+ file_adaptor::~file_adaptor (void)
+ {
+ std::cout << " === dtor" << std::endl;
+ // for ( unsigned int i = 0; i < mounted_.size (); i++ )
+ // {
+ // // release the sshfs shared_ptr. On sshfs destruction, the file system
+ // // is umounted
+ // // FIXME: do
+ // }
+ }
+
+
+ TR1::shared_ptr <sshfs> file_adaptor::get_sshfs (const ini_t & i,
+ const saga::session & s,
+ const saga::url & u)
+ {
+ std::cout << " === get_sshfs " << u << "\n";
+
+ // get the id for the (potential) mount point.
+ // id is host:port
+ std::string host = u.get_host ();
+ int port = u.get_port ();
+ std::string path = u.get_path ();
+
+ if ( port == -1 )
+ {
+ port = 22;
+ }
+
+ std::stringstream ss;
+ ss << host << ":" << port;
+
+ std::string id = ss.str ();
+
+
+ // check if we have that mounted already
+ if ( mounted_[id] )
+ {
+ SAGA_LOG_ALWAYS("sshfs already mounted");
+ SAGA_LOG_ALWAYS(id.c_str ());
+
+ // is already mounted - return the shared pointer
+ return mounted_[id];
+ }
+
+ SAGA_LOG_ALWAYS("need to mount new sshfs");
+ SAGA_LOG_ALWAYS(id.c_str ());
+
+ // is not mounted, yet - try to mount it, store a new shared pointer, and
+ // return it.
+ TR1::shared_ptr <sshfs> ptr (new sshfs (i, s, u));
+
+ if ( ! ptr )
+ {
+ // cannot mount the fs for some reason - throw a BadParameter
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("Cannot handle URL schema", saga::BadParameter);
+ }
+
+ // got the fs mounted - register it, and return the ptr
+ mounted_[id] = ptr;
+ SAGA_LOG_ALWAYS("register mounted sshfs");
+ SAGA_LOG_ALWAYS(id.c_str ());
+
+ return ptr;
+ }
+
+} // namespace
+
File [added]: ssh_file_adaptor.hpp
Delta lines: +58 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,58 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ADAPTORS_SSH_FILE_ADAPTOR_HPP
+#define ADAPTORS_SSH_FILE_ADAPTOR_HPP
+
+#include <saga/saga/url.hpp>
+#include <saga/saga/adaptors/adaptor.hpp>
+
+#include "ssh_file_adaptor_sshfs.hpp"
+
+namespace ssh_file_adaptor
+{
+ class file_adaptor : public saga::adaptor
+ {
+ private:
+ // list of mounted sshfs file system
+ std::map <std::string, TR1::shared_ptr <sshfs> > mounted_;
+
+ public:
+ typedef saga::impl::v1_0::op_info op_info;
+ typedef saga::impl::v1_0::cpi_info cpi_info;
+ typedef saga::impl::v1_0::preference_type preference_type;
+
+ file_adaptor (void)
+ {
+ }
+
+ ~file_adaptor (void);
+
+ std::string get_name (void) const
+ {
+ return BOOST_PP_STRINGIZE (SAGA_ADAPTOR_NAME);
+ }
+
+ /**
+ * This functions registers the adaptor with the factory
+ *
+ * @param factory the factory where the adaptor registers
+ * its maker function and description table
+ */
+ saga::impl::adaptor_selector::adaptor_info_list_type
+ adaptor_register (saga::impl::session * s);
+
+
+ // obtain an sshfs mount point for some URL
+ TR1::shared_ptr <sshfs> get_sshfs (const ini_t & i,
+ const saga::session & s,
+ const saga::url & u);
+ };
+
+} // namespace
+
+#endif // ADAPTORS_SSH_FILE_ADAPTOR_HPP
+
File [added]: ssh_file_adaptor.ini
Delta lines: +18 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor.ini 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor.ini 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,18 @@
+# Copyright (c) 2005-2008 Andre Merzky (andre at merzky.net)
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+[saga.adaptors.ssh_file]
+ name = ssh_file
+# path = $[saga.location]/lib
+# enabled = true
+ preferences = saga.adaptor_suite.ssh.preferences
+
+[saga.adaptors.ssh_file.preferences]
+ # ssh file adaptor specific configuration
+ sshfs_mnt = ${HOME}/.saga/adaptors/ssh/ssh_file/mnt/
+ sshfs_keepalive = yes
+ sshfs_ondemand = yes
+
File [added]: ssh_file_adaptor_dir.hpp
Delta lines: +220 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,220 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ADAPTORS_SSH_FILE_ADAPTOR_DIR_HPP
+#define ADAPTORS_SSH_FILE_ADAPTOR_DIR_HPP
+
+
+#include <saga/saga/adaptors/adaptor.hpp>
+#include <saga/impl/packages/file/directory_cpi.hpp>
+
+#include "ssh_file_adaptor.hpp"
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+namespace ssh_file_adaptor
+{
+
+ /**
+ * This adaptor class implements the functionality of the Saga API "file".
+ * It defines the functions declared in its base class, file_cpi.
+ *
+ * @note some notes
+ *
+ * @see The documentation of the Saga API at GridLab
+ */
+ class dir_cpi_impl : public saga::adaptors::v1_0::directory_cpi<dir_cpi_impl>
+ {
+ private:
+
+ typedef saga::adaptors::v1_0::directory_cpi<dir_cpi_impl> directory_cpi;
+
+
+ /* instance data */
+ typedef saga::adaptors::v1_0::directory_cpi_instance_data instance_data_type;
+
+ friend class saga::adaptors::instance_data <instance_data_type>;
+ typedef saga::adaptors::instance_data <instance_data_type> directory_instance_data_t;
+
+
+ /* adaptor data */
+ typedef saga::adaptors::adaptor_data <file_adaptor> adaptor_data_t;
+
+
+ boost::shared_ptr<dir_cpi_impl> shared_from_this (void)
+ {
+ return boost::shared_ptr <dir_cpi_impl> (this->base_type::shared_from_this (),
+ boost::detail::static_cast_tag ());
+ }
+
+ void sync_init (void);
+
+
+ // shared pointer to the mounted sshfs file system where this directory
+ // lives on. This pointer is freed on destruction, thus enables the
+ // automatic umount of the file system
+ boost::shared_ptr <sshfs> sshfs_;
+
+ // state
+ ini_t i_; // preferences
+ saga::session s_; // session
+ int m_; // original mode
+ saga::url u_; // original url
+ saga::url t_; // translated url
+ saga::filesystem::directory d_; // local representation
+
+
+ public:
+ dir_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ boost::shared_ptr <saga::adaptor> adaptor);
+
+ ~dir_cpi_impl (void);
+
+ ///////////////////////////////////////////////////////////////////////////
+ ///////////////////////// NAMESPACE::ENTRY METHODS ////////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ void sync_get_url (saga::url & url);
+ void sync_get_cwd (saga::url & url);
+ void sync_get_name (saga::url & url);
+
+ void sync_is_dir (bool & is_dir);
+ void sync_is_entry (bool & is_file);
+ void sync_is_link (bool & is_link);
+ void sync_read_link (saga::url & path);
+
+ void sync_copy (saga::impl::void_t & ret,
+ saga::url target,
+ int flags = saga::filesystem::None);
+ void sync_link (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags = saga::filesystem::None);
+ void sync_move (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags = saga::filesystem::None);
+ void sync_remove (saga::impl::void_t & ret,
+ int flags = saga::filesystem::None);
+
+ void sync_close (saga::impl::void_t & ret,
+ double timeout = 0.0);
+
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ /////////////////////// NAMESPACE::DIRECTORY METHODS //////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ void sync_change_dir (saga::impl::void_t & ret,
+ saga::url new_dir);
+ void sync_list (std::vector <saga::url> & list,
+ std::string pattern,
+ int flags);
+ void sync_find (std::vector <saga::url> & list,
+ std::string entry,
+ int flags);
+
+ void sync_exists (bool & exists,
+ saga::url url);
+ void sync_is_dir (bool & is_dir,
+ saga::url url);
+ void sync_is_entry (bool & is_file,
+ saga::url url);
+ void sync_is_link (bool & is_link,
+ saga::url url);
+ void sync_read_link (saga::url & ret,
+ saga::url source);
+
+ void sync_get_num_entries (std::size_t & num);
+ void sync_get_entry (saga::url & ret,
+ std::size_t entry );
+
+ void sync_copy (saga::impl::void_t & ret,
+ saga::url source,
+ saga::url destination,
+ int flags);
+ void sync_link (saga::impl::void_t & ret,
+ saga::url source,
+ saga::url url,
+ int flags);
+ void sync_move (saga::impl::void_t & ret,
+ saga::url source,
+ saga::url destination,
+ int flags);
+ void sync_remove (saga::impl::void_t & ret,
+ saga::url url,
+ int flags);
+
+ void sync_copy_wildcard (saga::impl::void_t & ret,
+ std::string source,
+ saga::url destination,
+ int flags);
+ void sync_link_wildcard (saga::impl::void_t & ret,
+ std::string source,
+ saga::url url,
+ int flags);
+ void sync_move_wildcard (saga::impl::void_t & ret,
+ std::string source,
+ saga::url destination,
+ int flags);
+ void sync_remove_wildcard (saga::impl::void_t & ret,
+ std::string url,
+ int flags);
+
+ void sync_make_dir (saga::impl::void_t & ret,
+ saga::url url,
+ int flags);
+
+ // void sync_open (...); // overloaded in FILESYSTEM::DIRECTORY
+ // void sync_open_dir (...); // overloaded in FILESYSTEM::DIRECTORY
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ ////////////////////// FILESYSTEM::DIRECTORY METHODS //////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ void sync_get_size (saga::off_t & ret,
+ saga::url name);
+ void sync_open (saga::filesystem::file & entry,
+ saga::url name,
+ int openmode);
+ void sync_open_dir (saga::filesystem::directory & entry,
+ saga::url name,
+ int openmode);
+ void sync_is_file (bool & is_file,
+ saga::url name);
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ /////////////////////// PERMISSION INTERFACE METHODS //////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ void sync_permissions_allow (saga::impl::void_t & ret,
+ saga::url tgt,
+ std::string id,
+ int perm,
+ int flags);
+ void sync_permissions_deny (saga::impl::void_t & ret,
+ saga::url tgt,
+ std::string id,
+ int perm,
+ int flags);
+ void sync_permissions_check (bool & ret,
+ std::string id,
+ int perm);
+ void sync_get_owner (std::string & out);
+ void sync_get_group (std::string & out);
+
+
+ }; // class dir_cpi_impl
+
+} // namespace ssh_file_adaptor
+
+#endif // ADAPTORS_SSH_FILE_ADAPTOR_DIR_HPP
+
File [added]: ssh_file_adaptor_dir_impl.cpp
Delta lines: +121 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir_impl.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir_impl.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,121 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/exception.hpp>
+
+#include "ssh_file_adaptor_dir.hpp"
+#include "ssh_file_adaptor_file.hpp"
+
+namespace ssh_file_adaptor
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ dir_cpi_impl::dir_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ boost::shared_ptr<saga::adaptor> adaptor)
+ : directory_cpi (p, info, adaptor, cpi::Noflags)
+ {
+ adaptor_data_t adata (this);
+ directory_instance_data_t idata (this);
+
+ m_ = idata->mode_;
+ u_ = idata->location_;
+ s_ = p->get_session ();
+ i_ = adap_ini.get_section ("preferences").get_entries ();
+
+
+ // try to mount the ssh file system
+ sshfs_ = adata->get_sshfs (i_, s_, u_);
+
+ // translate URL into local namespace
+ t_ = sshfs_->translate (u_);
+
+ if ( t_.get_scheme () != "file" )
+ {
+ SAGA_ADAPTOR_THROW ("Cannot handle URL", saga::BadParameter);
+ }
+
+ // create local dir instance
+ d_ = saga::filesystem::directory (t_, m_);
+
+ SAGA_LOG_ALWAYS(t_.get_string ().c_str ());
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ dir_cpi_impl::~dir_cpi_impl (void)
+ {
+ // nothing to do - sshfs_ is freed automatically
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_get_size (saga::off_t & size_out,
+ saga::url name)
+ {
+ size_out = d_.get_size (sshfs_->translate (name));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_open (saga::filesystem::file & ret,
+ saga::url name,
+ int openmode)
+ {
+ saga::url tmp (name);
+
+ if ( name.get_scheme () == "" &&
+ name.get_host () == "" &&
+ name.get_path ()[0] != '/' )
+ {
+ // this is a relative URL, and should be translated into a absolute one,
+ // relative to 'pwd'.
+ tmp = u_;
+ tmp.set_path (u_.get_path () + "/" + name.get_path ());
+ }
+
+ SAGA_LOG_ALWAYS(tmp.get_string ().c_str ());
+
+ ret = saga::filesystem::file (s_, tmp, openmode);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_open_dir (saga::filesystem::directory & ret,
+ saga::url name,
+ int openmode)
+ {
+ saga::url tmp (name);
+
+ if ( name.get_scheme () == "" &&
+ name.get_host () == "" &&
+ name.get_path ()[0] != '/' )
+ {
+ // this is a relative URL, and should be translated into a absolute one,
+ // relative to 'pwd'.
+ tmp = u_;
+ tmp.set_path (u_.get_path () + "/" + name.get_path ());
+ }
+
+ SAGA_LOG_ALWAYS(tmp.get_string ().c_str ());
+
+ ret = saga::filesystem::directory (s_, tmp, openmode);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_is_file (bool & is_file,
+ saga::url name)
+ {
+ is_file = d_.is_file (sshfs_->translate (name));
+ }
+
+
+} // namespace
+
File [added]: ssh_file_adaptor_dir_nsdir_impl.cpp
Delta lines: +215 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir_nsdir_impl.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir_nsdir_impl.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,215 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/url.hpp>
+#include <saga/saga/exception.hpp>
+
+#include "ssh_file_adaptor_dir.hpp"
+
+namespace ssh_file_adaptor
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_change_dir (saga::impl::void_t & ret,
+ saga::url name)
+ {
+ try {
+ d_.change_dir (sshfs_->translate (name));
+ u_ = sshfs_->translate_back (d_.get_url ());
+ }
+ catch ( const saga::exception & e )
+ {
+ // revert cd
+ d_.change_dir (u_);
+ throw;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_list (std::vector <saga::url> & list,
+ std::string pattern,
+ int flags)
+ {
+ list = d_.list (pattern, flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_find (std::vector <saga::url> & list,
+ std::string entry,
+ int flags)
+ {
+ list = d_.find (entry, flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_exists (bool & exists,
+ saga::url url)
+ {
+ exists = d_.exists (sshfs_->translate (url));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_is_dir (bool & is_dir,
+ saga::url url)
+ {
+ is_dir = d_.is_dir (sshfs_->translate (url));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_is_entry (bool & is_entry,
+ saga::url url)
+ {
+ is_entry = d_.is_entry (sshfs_->translate (url));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_is_link (bool & is_link,
+ saga::url url)
+ {
+ is_link = d_.is_link (sshfs_->translate (url));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_read_link (saga::url & ret,
+ saga::url source)
+ {
+ try
+ {
+ // if possible, translate back
+ ret = sshfs_->translate_back (d_.read_link (sshfs_->translate (source)));
+ }
+ catch (...)
+ {
+ // ok, ok - non translated is ok
+ ret = d_.read_link (sshfs_->translate (source));
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_get_num_entries (std::size_t & num)
+ {
+ num = d_.get_num_entries ();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_get_entry (saga::url & ret,
+ std::size_t entry )
+ {
+ ret = sshfs_->translate_back (d_.get_entry (entry));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_link (saga::impl::void_t & ret,
+ saga::url source,
+ saga::url url,
+ int flags)
+ {
+ d_.link (sshfs_->translate (source),
+ sshfs_->translate (url),
+ flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_copy (saga::impl::void_t & ret,
+ saga::url src,
+ saga::url dst,
+ int flags)
+ {
+ d_.copy (sshfs_->translate (src),
+ sshfs_->translate (dst),
+ flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_move (saga::impl::void_t & ret,
+ saga::url src,
+ saga::url dst,
+ int flags)
+ {
+ d_.move (sshfs_->translate (src),
+ sshfs_->translate (dst),
+ flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_remove (saga::impl::void_t & ret,
+ saga::url url,
+ int flags)
+ {
+ d_.remove (sshfs_->translate (url),
+ flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_copy_wildcard (saga::impl::void_t & ret,
+ std::string source,
+ saga::url dest,
+ int flags)
+ {
+ d_.copy (source,
+ sshfs_->translate (dest),
+ flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_link_wildcard (saga::impl::void_t & ret,
+ std::string source,
+ saga::url dest,
+ int flags)
+ {
+ d_.link (source,
+ sshfs_->translate (dest),
+ flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_move_wildcard (saga::impl::void_t & ret,
+ std::string source,
+ saga::url dest,
+ int flags)
+ {
+ d_.move (source,
+ sshfs_->translate (dest),
+ flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_remove_wildcard (saga::impl::void_t & ret,
+ std::string url,
+ int flags)
+ {
+ d_.remove (url, flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_make_dir (saga::impl::void_t & ret,
+ saga::url url,
+ int flags)
+ {
+ d_.make_dir (sshfs_->translate (url), flags);
+ }
+
+} // namespace
+
File [added]: ssh_file_adaptor_dir_nsentry_impl.cpp
Delta lines: +116 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir_nsentry_impl.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir_nsentry_impl.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,116 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/url.hpp>
+#include <saga/saga/exception.hpp>
+
+#include "ssh_file_adaptor_dir.hpp"
+
+namespace ssh_file_adaptor
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_get_url (saga::url & url)
+ {
+ url = sshfs_->translate_back (d_.get_url ());
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_get_cwd (saga::url & cwd)
+ {
+ cwd = sshfs_->translate_back (d_.get_cwd ());
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_get_name (saga::url & name)
+ {
+ name = d_.get_name ();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_is_dir (bool & is_dir)
+ {
+ is_dir = d_.is_dir ();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_is_entry (bool & is_entry)
+ {
+ is_entry = d_.is_entry ();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_is_link (bool & is_link)
+ {
+ is_link = d_.is_link ();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_read_link (saga::url & target)
+ {
+ try
+ {
+ // if possible, translate back
+ target = sshfs_->translate_back (d_.read_link ());
+ }
+ catch ( ...)
+ {
+ // ok, ok - non translated is ok
+ target = d_.read_link ();
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_link (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags)
+ {
+ d_.link (sshfs_->translate (dest), flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_copy (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags)
+ {
+ d_.copy (sshfs_->translate (dest), flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_move (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags)
+ {
+ d_.move (sshfs_->translate (dest), flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_remove (saga::impl::void_t & ret,
+ int flags)
+ {
+ d_.remove (flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_close (saga::impl::void_t & ret,
+ double timeout)
+ {
+ d_.close (timeout);
+ }
+
+} // namespace
+
File [added]: ssh_file_adaptor_dir_perm_impl.cpp
Delta lines: +60 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir_perm_impl.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_dir_perm_impl.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,60 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/url.hpp>
+#include <saga/saga/exception.hpp>
+
+#include "ssh_file_adaptor_dir.hpp"
+
+namespace ssh_file_adaptor
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_permissions_allow (saga::impl::void_t & ret,
+ saga::url tgt,
+ std::string id,
+ int perm,
+ int flags)
+ {
+ d_.permissions_allow (sshfs_->translate (tgt), id, perm, flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_permissions_deny (saga::impl::void_t & ret,
+ saga::url tgt,
+ std::string id,
+ int perm,
+ int flags)
+ {
+ d_.permissions_deny (sshfs_->translate (tgt), id, perm, flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_permissions_check (bool & ret,
+ std::string id,
+ int perm)
+ {
+ ret = d_.permissions_check (id, perm);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_get_owner (std::string & out)
+ {
+ out = d_.get_owner ();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void dir_cpi_impl::sync_get_group (std::string & out)
+ {
+ out = d_.get_group ();
+ }
+
+} // namespace
+
File [added]: ssh_file_adaptor_file.hpp
Delta lines: +131 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_file.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_file.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,131 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ADAPTORS_SSH_FILE_ADAPTOR_FILE_HPP
+#define ADAPTORS_SSH_FILE_ADAPTOR_FILE_HPP
+
+#include <saga/saga/adaptors/adaptor.hpp>
+#include <saga/impl/packages/file/file_cpi.hpp>
+
+#include "ssh_file_adaptor.hpp"
+
+////////////////////////////////////////////////////////////////////////////////
+//
+namespace ssh_file_adaptor
+{
+ class file_cpi_impl : public saga::adaptors::v1_0::file_cpi<file_cpi_impl>
+ {
+ private:
+
+ typedef saga::adaptors::v1_0::file_cpi<file_cpi_impl> file_cpi;
+
+
+ /* instance data */
+ typedef saga::adaptors::v1_0::file_cpi_instance_data instance_data_type;
+
+ friend class saga::adaptors::instance_data<instance_data_type>;
+ typedef saga::adaptors::instance_data<instance_data_type> file_instance_data_t;
+
+
+ /* adaptor data */
+ typedef saga::adaptors::adaptor_data <file_adaptor> adaptor_data_t;
+
+
+ // shared pointer to the mounted sshfs file system where this directory
+ // lives on. This pointer is freed on destruction, thus enables the
+ // automatic umount of the file system
+ boost::shared_ptr <sshfs> sshfs_;
+
+ // state
+ ini_t i_; // preferences
+ saga::session s_; // session
+ int m_; // original mode
+ saga::url u_; // original url
+ saga::url t_; // translated url
+ saga::filesystem::file f_; // local representation
+
+
+
+ public:
+ /*! constructor for a file */
+ file_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ boost::shared_ptr <saga::adaptor> adaptor);
+
+ /*! destructor of the file adaptor */
+ ~file_cpi_impl (void);
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ ///////////////////////// NAMESPACE::ENTRY METHODS ////////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ void sync_get_url (saga::url & url);
+ void sync_get_cwd (saga::url & cwd);
+ void sync_get_name (saga::url & name);
+
+ void sync_is_dir (bool & is_dir);
+ void sync_is_entry (bool & is_file);
+ void sync_is_link (bool & is_link);
+ void sync_read_link (saga::url & target);
+
+ void sync_copy (saga::impl::void_t & ret,
+ saga::url target,
+ int flags = saga::filesystem::None);
+ void sync_link (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags = saga::filesystem::None);
+ void sync_move (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags = saga::filesystem::None);
+ void sync_remove (saga::impl::void_t & ret,
+ int flags = saga::filesystem::None);
+
+ void sync_close (saga::impl::void_t & ret,
+ double timeout = 0.0);
+
+ ///////////////////////////////////////////////////////////////////////////
+ ////////////////////////// FILESYSTEM::FILE METHODS ///////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ void sync_get_size (saga::off_t & size_out);
+ void sync_read (saga::ssize_t & len_out,
+ saga::mutable_buffer data,
+ saga::ssize_t len_in);
+ void sync_write (saga::ssize_t & len_out,
+ saga::const_buffer data,
+ saga::ssize_t len_in);
+ void sync_seek (saga::off_t & out,
+ saga::off_t offset,
+ saga::filesystem::seek_mode whence);
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ /////////////////////// PERMISSION INTERFACE METHODS //////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ void sync_permissions_allow (saga::impl::void_t & ret,
+ std::string id,
+ int perm,
+ int flags);
+ void sync_permissions_deny (saga::impl::void_t & ret,
+ std::string id,
+ int perm,
+ int flags);
+ void sync_permissions_check (bool & ret,
+ std::string id,
+ int perm);
+ void sync_get_owner (std::string & out);
+ void sync_get_group (std::string & out);
+
+ }; // class file_cpi_impl
+
+} // namespace ssh_file_adaptor
+
+#endif // ADAPTORS_SSH_FILE_ADAPTOR_FILE_HPP
+
File [added]: ssh_file_adaptor_file_impl.cpp
Delta lines: +92 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_file_impl.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_file_impl.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,92 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/url.hpp>
+#include <saga/saga/exception.hpp>
+
+#include "ssh_file_adaptor_file.hpp"
+
+namespace ssh_file_adaptor
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ file_cpi_impl::file_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ boost::shared_ptr <saga::adaptor> adaptor)
+
+ : file_cpi (p, info, adaptor, cpi::Noflags)
+ {
+ adaptor_data_t adata (this);
+ file_instance_data_t idata (this);
+
+ m_ = idata->mode_;
+ u_ = idata->location_;
+ s_ = p->get_session ();
+ i_ = adap_ini.get_section ("preferences").get_entries ();
+
+ // try to mount the ssh file system
+ sshfs_ = adata->get_sshfs (i_, s_, u_);
+
+ // translate URL into local namespace
+ t_ = sshfs_->translate (u_);
+
+ if ( t_.get_scheme () != "file" )
+ {
+ SAGA_ADAPTOR_THROW ("Cannot handle URL", saga::BadParameter);
+ }
+
+ // create local file instance
+ f_ = saga::filesystem::file (t_, m_);
+
+ SAGA_LOG_ALWAYS(t_.get_string ().c_str ());
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ file_cpi_impl::~file_cpi_impl (void)
+ {
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_get_size (saga::off_t & size_out)
+ {
+ size_out = f_.get_size ();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_read (saga::ssize_t & len_out,
+ saga::mutable_buffer data,
+ saga::ssize_t len_in)
+ {
+ len_out = f_.read (data, len_in);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_write (saga::ssize_t & len_out,
+ saga::const_buffer data,
+ saga::ssize_t len_in)
+ {
+ len_out = f_.write (data, len_in);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_seek (saga::off_t & out,
+ saga::off_t offset,
+ saga::filesystem::seek_mode whence)
+ {
+ out = f_.seek (offset, whence);
+ }
+
+} // namespace
+
File [added]: ssh_file_adaptor_file_nsentry_impl.cpp
Delta lines: +95 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_file_nsentry_impl.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_file_nsentry_impl.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,95 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/url.hpp>
+#include <saga/saga/exception.hpp>
+
+#include "ssh_file_adaptor_file.hpp"
+
+namespace ssh_file_adaptor
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_get_url (saga::url & url)
+ {
+ url = sshfs_->translate_back (f_.get_url ());
+ }
+
+ void file_cpi_impl::sync_get_cwd (saga::url & cwd)
+ {
+ cwd = sshfs_->translate_back (f_.get_cwd ());
+ }
+
+ void file_cpi_impl::sync_get_name (saga::url & name)
+ {
+ name = f_.get_name ();
+ }
+
+ void file_cpi_impl::sync_is_dir (bool & is_dir)
+ {
+ is_dir = f_.is_dir ();
+ }
+
+ void file_cpi_impl::sync_is_entry (bool & is_entry)
+ {
+ is_entry = f_.is_entry ();
+ }
+
+ void file_cpi_impl::sync_is_link (bool & is_link)
+ {
+ is_link = f_.is_link ();
+ }
+
+ void file_cpi_impl::sync_read_link (saga::url & target)
+ {
+ try
+ {
+ // if possible, translate back
+ target = sshfs_->translate_back (f_.read_link ());
+ }
+ catch ( ...)
+ {
+ // ok, ok - non translated is ok
+ target = f_.read_link ();
+ }
+ }
+
+ void file_cpi_impl::sync_copy (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags)
+ {
+ f_.copy (sshfs_->translate (dest), flags);
+ }
+
+ void file_cpi_impl::sync_link (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags)
+ {
+ f_.link (sshfs_->translate (dest), flags);
+ }
+
+ void file_cpi_impl::sync_move (saga::impl::void_t & ret,
+ saga::url dest,
+ int flags)
+ {
+ f_.move (sshfs_->translate (dest), flags);
+ }
+
+ void file_cpi_impl::sync_remove (saga::impl::void_t & ret,
+ int flags)
+ {
+ f_.remove (flags);
+ }
+
+
+ void file_cpi_impl::sync_close (saga::impl::void_t & ret,
+ double timeout)
+ {
+ f_.close (timeout);
+ }
+
+} // namespace
+
File [added]: ssh_file_adaptor_file_perm_impl.cpp
Delta lines: +58 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_file_perm_impl.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_file_perm_impl.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,58 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/url.hpp>
+#include <saga/saga/exception.hpp>
+
+#include "ssh_file_adaptor_file.hpp"
+
+namespace ssh_file_adaptor
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_permissions_allow (saga::impl::void_t & ret,
+ std::string id,
+ int perm,
+ int flags)
+ {
+ f_.permissions_allow (id, perm, flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_permissions_deny (saga::impl::void_t & ret,
+ std::string id,
+ int perm,
+ int flags)
+ {
+ f_.permissions_deny (id, perm, flags);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_permissions_check (bool & ret,
+ std::string id,
+ int perm)
+ {
+ f_.permissions_check (id, perm);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_get_owner (std::string & out)
+ {
+ out = f_.get_owner ();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ void file_cpi_impl::sync_get_group (std::string & out)
+ {
+ out = f_.get_group ();
+ }
+
+} // namespace
+
File [added]: ssh_file_adaptor_sshfs.cpp
Delta lines: +383 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_sshfs.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_sshfs.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,383 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <saga/saga/adaptors/utils/utils.hpp>
+#include <saga/impl/exception.hpp>
+
+#include "ssh_file_adaptor_sshfs.hpp"
+
+namespace ssh_file_adaptor
+{
+ sshfs::sshfs (const ini_t & i,
+ const saga::session & s,
+ const saga::url & u)
+ : ini_ (i)
+ , s_ (s)
+ , url_ (u)
+ {
+ SAGA_LOG_ALWAYS("=============================================");
+ SAGA_LOG_ALWAYS(u.get_string ().c_str ());
+ SAGA_LOG_ALWAYS("=============================================");
+
+ // can we handle that URL?
+ if ( url_.get_scheme () != "any" &&
+ url_.get_scheme () != "ssh" &&
+ url_.get_scheme () != "" )
+ {
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("Cannot handle URL schema", saga::BadParameter);
+ }
+
+ host_ = url_.get_host ();
+ port_ = url_.get_port ();
+
+ // default host/port
+ if ( host_ == "" ) { host_ = "localhost"; }
+ if ( port_ == -1 ) { port_ = 22; }
+
+ std::stringstream ss;
+ ss << port_;
+ port_s_ = ss.str ();
+
+ // check if ini has mandatory entries
+ // FIXME: this should be done _once_ in the adaptor
+ check_ini_ ();
+
+
+ // get an ssh context from the session which allows to access the host of
+ // the given URL
+ std::vector <saga::context> contexts = s_.list_contexts ();
+
+ for ( int i = 0; i < contexts.size (); i++ )
+ {
+ std::cout << " == matching ctype? "
+ << contexts[i].get_attribute (saga::attributes::context_type)
+ << std::endl;
+
+ if ( contexts[i].get_attribute (saga::attributes::context_type) == "ssh" )
+ {
+ std::cout << " == matching ctype! \n";
+ ctx_ = contexts[i];
+ user_ = ctx_.get_attribute ("UserID");
+
+ // default user
+ if ( user_ == "" ) { user_ = "root"; }
+
+ // get id
+ id_ = user_ + "@" + host_ + ":" + port_s_;
+
+ //try to mount with that context
+ mount ();
+
+ if ( mounted_ )
+ {
+ return;
+ }
+ }
+ }
+
+ // no mount - flag error
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("Cannot mount file system with sshfs", saga::BadParameter);
+ }
+
+
+ sshfs::~sshfs (void)
+ {
+ if ( ini_.find ("keepalive") != ini_.end () &&
+ ( ini_["keepalive"] == "yes" ||
+ ini_["keepalive"] == "true" ) )
+ {
+ SAGA_LOG_WARN ("keeping SSHFS filesystem mounted at ");
+ SAGA_LOG_WARN (mount_.c_str ());
+ }
+ else
+ {
+ umount ();
+ }
+ }
+
+
+ // mount a sshfs file system, and register it
+ void sshfs::mount (void)
+ {
+ // get local mounty point (no '//' allowed)
+ mount_ = sshfs_mnt_ + "/" + id_;
+
+ while ( mount_.find ("//") != std::string::npos )
+ {
+ int n = mount_.find ("//");
+ mount_.replace (n, 2, "/");
+ }
+
+
+ // // find out what the default pwd is for the remote FS
+ // {
+ // saga::adaptors::utils::process proc (ssh_bin_);
+ //
+ // proc.set_args (ssh_opt_); // default options
+ // proc.add_args ("-p", port_s_); // ssh port to use
+ // proc.add_arg (user_ + "@" + host_); // remote mount point
+ // proc.add_arg ("pwd"); // pwd command
+ // proc.add_arg ("-P"); // resolve symbolic links
+ //
+ // proc.run_sync ();
+ //
+ // if ( proc.done () )
+ // {
+ // pwd_ = proc.get_out_s ();
+ //
+ // // remove newline
+ // if ( pwd_[pwd_.size () - 1] == '\n' )
+ // {
+ // pwd_.erase (pwd_.end () - 1);
+ // }
+ // }
+ // else
+ // {
+ // // pwd defaults to the root dir
+ // pwd_ = "/";
+ // }
+ //
+ // SAGA_LOG_INFO ("pwd: ");
+ // SAGA_LOG_INFO (pwd_.c_str ());
+ // }
+
+ // check if the fs is already mounted
+ {
+ saga::adaptors::utils::process proc ("mount");
+
+ proc.run_sync ();
+
+ if ( proc.fail () )
+ {
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("cannot check if fs is mounted", saga::NoSuccess);
+ }
+
+ std::vector <std::string> lines = saga::adaptors::utils::grep (mount_,
+ proc.get_out_v ());
+
+ // should find zero or one matching line
+ switch ( lines.size () )
+ {
+ case 0:
+ mounted_ = false;
+ break;
+ case 1:
+ mounted_ = true;
+ break;
+ default:
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("cannot check if fs is mounted", saga::NoSuccess);
+ break;
+ }
+
+ if ( mounted_ )
+ {
+ SAGA_LOG_INFO ("SSHFS already mounted");
+ return;
+ }
+ }
+
+
+#define TICKET_319_IS_CLOSED 1
+#if TICKET_319_IS_CLOSED
+ // create local mount point
+ try
+ {
+ saga::url u ("file://localhost/");
+ u.set_path (mount_);
+
+ std::cout << " ======= trying to create " << u << "\n";
+
+ saga::filesystem::directory d (s_, u,
+ saga::filesystem::Create |
+ saga::filesystem::CreateParents);
+ }
+ catch ( const saga::exception & e )
+ {
+ SAGA_LOG_ERROR (e.what ());
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("cannot create local mount point", saga::NoSuccess);
+ }
+#else
+ SAGA_LOG_ALWAYS("you need to create the mount point manually!");
+ SAGA_LOG_ALWAYS(mount_.c_str ());
+#endif
+
+
+ // run mount process
+ {
+ saga::adaptors::utils::process proc (sshfs_bin_);
+
+ proc.set_args (sshfs_opt_); // default options
+ proc.add_args ("-p", port_s_); // ssh port to use
+ proc.add_arg (user_ + "@" + host_ + ":/"); // remote mount point
+ proc.add_arg (mount_); // local mount point
+ proc.run_sync ();
+
+ if ( proc.fail () )
+ {
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("mount failed", saga::NoSuccess);
+ }
+
+ mounted_ = true;
+
+ SAGA_LOG_DEBUG("new sshfs mounted");
+ }
+ }
+
+ void sshfs::umount (void)
+ {
+ saga::adaptors::utils::process proc ("umount");
+
+ proc.add_arg (mount_);
+ proc.run_sync ();
+
+ if ( proc.fail () )
+ {
+ // we can't really do much about that error.
+ // Lets at least warn the user!
+ SAGA_LOG_CRITICAL ("Could not umount SSHFS filesystem at ");
+ SAGA_LOG_CRITICAL (mount_.c_str ());
+ }
+ }
+
+
+ saga::url sshfs::translate (const saga::url & u)
+ {
+ saga::url ret;
+
+ // relative URLs are returned as is
+ if ( ( u.get_host () == "localhost" ||
+ u.get_host () == "" ) &&
+
+ ( u.get_port () == -1 ) &&
+
+ ( u.get_scheme () == "file" ||
+ u.get_scheme () == "any" ||
+ u.get_scheme () == "" ) &&
+
+ ( u.get_path ()[0] != '/' ) )
+ {
+ return u;
+ }
+
+ // others need to point to our remote system - otherwose error!
+ if ( ( u.get_host () != host_ &&
+ u.get_host () != "" ) ||
+
+ ( u.get_port () != port_ &&
+ u.get_port () != -1 ) ||
+
+ ( u.get_scheme () != "ssh" &&
+ u.get_scheme () != "any" &&
+ u.get_scheme () != "" ) )
+ {
+ // nothing to do here
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("cannot translate URL",
+ saga::NoSuccess);
+ }
+
+ SAGA_LOG_ALWAYS (u.get_path ().c_str ());
+
+ ret = "file://localhost/" + mount_ + u.get_path ();
+
+ return ret;
+ }
+
+
+ saga::url sshfs::translate_back (const saga::url & u)
+ {
+ saga::url ret;
+
+ // only local names have any chance of getting translated
+ if ( ( u.get_host () != "localhost" &&
+ u.get_host () != "" ) ||
+
+ ( u.get_port () != -1 ) ||
+
+ ( u.get_scheme () != "file" &&
+ u.get_scheme () != "any" &&
+ u.get_scheme () != "" ) )
+ {
+ // nothing to do here
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("cannot translate URL back",
+ saga::NoSuccess);
+ }
+
+ std::string path = u.get_path ();
+
+ // check if path points into the mounted name space
+ if ( path.find (mount_) != 0 )
+ {
+ // nop - nothing to do
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("cannot translate URL back",
+ saga::NoSuccess);
+ }
+
+ path.erase (0, mount_.size ());
+
+ ret = url_; // original name space
+ ret.set_path (path); // backtranslated path component
+
+ return ret;
+ }
+
+
+ std::string sshfs::get_id (void)
+ {
+ return (id_);
+ }
+
+ // std::string sshfs::get_pwd (void)
+ // {
+ // return (pwd_);
+ // }
+
+ void sshfs::check_ini_ (void)
+ {
+ // check if ini has required entries
+ if ( ini_.find ("ssh_bin") == ini_.end () ||
+ ini_["ssh_bin"] == "" )
+ {
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("need path to sshfs specified in the SAGA ini",
+ saga::NoSuccess);
+ }
+
+ if ( ini_.find ("sshfs_bin") == ini_.end () ||
+ ini_["sshfs_bin"] == "" )
+ {
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("need path to sshfs specified in the SAGA ini",
+ saga::NoSuccess);
+ }
+
+ // check if ini has required entries
+ if ( ini_.find ("sshfs_mnt") == ini_.end () ||
+ ini_["sshfs_mnt"] == "" )
+ {
+ SAGA_ADAPTOR_THROW_NO_CONTEXT ("need sshfs_mnt specified in the SAGA ini",
+ saga::NoSuccess);
+ }
+
+ // set default opts (none)
+ if ( ini_.find ("ssh_opt") == ini_.end () )
+ {
+ ini_["ssh_opt"] = "";
+ }
+
+ if ( ini_.find ("sshfs_opt") == ini_.end () )
+ {
+ // set default opts (none)
+ ini_["sshfs_opt"] = "";
+ }
+
+
+ ssh_bin_ = ini_["ssh_bin"];
+ ssh_opt_ = saga::adaptors::utils::split (ini_["ssh_opt"], ' ');
+ sshfs_bin_ = ini_["sshfs_bin"];
+ sshfs_opt_ = saga::adaptors::utils::split (ini_["sshfs_opt"], ' ');
+ sshfs_mnt_ = ini_["sshfs_mnt"];
+ }
+
+} // namespace
+
File [added]: ssh_file_adaptor_sshfs.hpp
Delta lines: +69 -0
===================================================================
--- trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_sshfs.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_file/ssh_file_adaptor_sshfs.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,69 @@
+// Copyright (c) 2008 Andre Merzky <andre at merzky.net>
+//
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying LICENSE file
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ADAPTORS_SSH_FILE_ADAPTOR_SSHFS_HPP
+#define ADAPTORS_SSH_FILE_ADAPTOR_SSHFS_HPP
+
+#include <map>
+
+#include <saga/saga.hpp>
+
+namespace ssh_file_adaptor
+{
+ typedef std::map <std::string, std::string> ini_t;
+
+ // a structure pointing to an sshfs mounted file systems. Shared_ptr's to
+ // this class are used for life time management of these mounts: each file or
+ // directory which is open and points into that file system should keep such
+ // a shared_ptr.
+ class sshfs
+ {
+ private:
+ saga::session s_; // session used for mount
+ saga::context ctx_; // context used for mount
+ saga::url url_; // URL which triggered the mount
+
+ std::string user_; // remote user id
+ std::string host_; // remote host
+ int port_; // ssh port on remote host
+ std::string port_s_; // ssh port on remote host (string)
+
+ std::string mount_; // local mountpoint
+ // std::string pwd_; // remote pwd
+
+ std::string id_; // unique id identifying the mount
+
+ bool mounted_; // flag success
+
+ ini_t ini_; // preferences
+
+ std::string ssh_bin_; // path to ssh
+ std::vector <std::string> ssh_opt_; // options to ssh
+ std::string sshfs_bin_; // path to sshfs
+ std::vector <std::string> sshfs_opt_; // options to sshfs
+ std::string sshfs_mnt_; // mountpoint base
+
+ // helper functions
+ void check_ini_ (void);
+
+ public:
+ sshfs (const ini_t & i,
+ const saga::session & s,
+ const saga::url & u);
+ ~sshfs (void);
+
+ void mount (void);
+ void umount (void);
+
+ // std::string get_pwd (void);
+ std::string get_id (void);
+ saga::url translate (const saga::url & u);
+ saga::url translate_back (const saga::url & u);
+ };
+}
+
+#endif // ADAPTORS_SSH_FILE_ADAPTOR_SSHFS_HPP
+
Directory: /trunk/adaptors/ssh/ssh_job/
=======================================
File [added]: Makefile
Delta lines: +22 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/Makefile 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/Makefile 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,22 @@
+# Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+ifndef SAGA_LOCATION
+ $(error "SAGA_LOCATION must be set for this Makefile to work")
+endif
+
+SAGA_SRC = $(wildcard *.cpp)
+SAGA_OBJ = $(SAGA_SRC:%.cpp=%.o)
+
+SAGA_ADAPTOR_TYPE = job
+SAGA_ADAPTOR_NAME = ssh_job
+SAGA_ADAPTOR_INI = ssh_job_adaptor.ini
+SAGA_ADAPTOR_OBJ = $(SAGA_OBJ)
+
+SAGA_ADAPTOR_PACKAGES = job
+
+include $(SAGA_LOCATION)/share/saga/make/saga.adaptor.mk
+
File [added]: ssh_job.cpp
Delta lines: +138 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,138 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga adaptor icnludes
+#include <saga/saga/adaptors/task.hpp>
+#include <saga/saga/adaptors/attribute.hpp>
+#include <saga/saga/adaptors/file_transfer_spec.hpp>
+
+// saga engine includes
+#include <saga/impl/config.hpp>
+#include <saga/impl/exception_list.hpp>
+
+// saga package includes
+#include <saga/saga/packages/job/adaptors/job_self.hpp>
+#include <saga/saga/packages/job/job_description.hpp>
+
+// adaptor includes
+#include "ssh_job.hpp"
+#include "ssh_job_istream.hpp"
+#include "ssh_job_ostream.hpp"
+
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+
+ // constructor
+ job_cpi_impl::job_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ TR1::shared_ptr <saga::adaptor> adaptor)
+ : base_cpi (p, info, adaptor, cpi::Noflags)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+
+ // destructor
+ job_cpi_impl::~job_cpi_impl (void)
+ {
+ }
+
+
+ // SAGA API functions
+ void job_cpi_impl::sync_get_state (saga::job::state & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_cpi_impl::sync_get_description (saga::job::description & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_cpi_impl::sync_get_job_id (std::string & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ // access streams for communication with the child
+ void job_cpi_impl::sync_get_stdin (saga::job::ostream & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_cpi_impl::sync_get_stdout (saga::job::istream & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_cpi_impl::sync_get_stderr (saga::job::istream & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_cpi_impl::sync_checkpoint (saga::impl::void_t & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_cpi_impl::sync_migrate (saga::impl::void_t & ret,
+ saga::job::description jd)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_cpi_impl::sync_signal (saga::impl::void_t & ret,
+ int signal)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+
+ // suspend the child process
+ void job_cpi_impl::sync_suspend (saga::impl::void_t & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ // suspend the child process
+ void job_cpi_impl::sync_resume (saga::impl::void_t & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+
+ //////////////////////////////////////////////////////////////////////
+ // inherited from the task interface
+ void job_cpi_impl::sync_run (saga::impl::void_t & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_cpi_impl::sync_cancel (saga::impl::void_t & ret,
+ double timeout)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ // wait for the child process to terminate
+ void job_cpi_impl::sync_wait (bool & ret,
+ double timeout)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
File [added]: ssh_job.hpp
Delta lines: +107 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,107 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ADAPTORS_SSH_JOB_HPP
+#define ADAPTORS_SSH_JOB_HPP
+
+// stl includes
+#include <string>
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga engine includes
+#include <saga/impl/engine/proxy.hpp>
+
+// saga adaptor includes
+#include <saga/saga/adaptors/adaptor.hpp>
+#include <saga/saga/adaptors/task.hpp>
+#include <saga/saga/adaptors/adaptor_data.hpp>
+
+// job package includes
+#include <saga/impl/packages/job/job_cpi.hpp>
+
+// adaptor includes
+#include "ssh_job_adaptor.hpp"
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+ class job_cpi_impl
+ : public saga::adaptors::v1_0::job_cpi <job_cpi_impl>
+ {
+ private:
+ typedef saga::adaptors::v1_0::job_cpi <job_cpi_impl> base_cpi;
+
+ // adaptor data
+ typedef saga::adaptors::adaptor_data <adaptor> adaptor_data_type;
+
+
+ public:
+ // constructor of the job adaptor
+ job_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ TR1::shared_ptr <saga::adaptor> adaptor);
+
+ // destructor of the job adaptor
+ ~job_cpi_impl (void);
+
+ // job functions
+ void sync_get_state (saga::job::state & ret);
+ void sync_get_description (saga::job::description & ret);
+ void sync_get_job_id (std::string & ret);
+
+ void sync_get_stdin (saga::job::ostream & ret);
+ void sync_get_stdout (saga::job::istream & ret);
+ void sync_get_stderr (saga::job::istream & ret);
+
+ void sync_checkpoint (saga::impl::void_t & ret);
+ void sync_migrate (saga::impl::void_t & ret,
+ saga::job::description jd);
+ void sync_signal (saga::impl::void_t & ret,
+ int signal);
+
+ // inherited from saga::task
+ void sync_run (saga::impl::void_t & ret);
+ void sync_cancel (saga::impl::void_t & ret,
+ double timeout);
+ void sync_suspend (saga::impl::void_t & ret);
+ void sync_resume (saga::impl::void_t & ret);
+
+ void sync_wait (bool & ret,
+ double timeout);
+
+ // This adaptor implements the async functions
+ // based on its own synchronous functions.
+ saga::task async_get_state (void);
+ saga::task async_get_description (void);
+ saga::task async_get_job_id (void);
+
+ saga::task async_get_stdin (void);
+ saga::task async_get_stdout (void);
+ saga::task async_get_stderr (void);
+
+ saga::task async_checkpoint (void);
+ saga::task async_migrate (saga::job::description jd);
+ saga::task async_signal (int signal);
+
+ // inherited from the task interface
+ saga::task async_run (void);
+ saga::task async_cancel (double timeout);
+ saga::task async_suspend (void);
+ saga::task async_resume (void);
+ saga::task async_wait (double timeout);
+ }; // class job_cpi_impl
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
+#endif // ADAPTORS_SSH_JOB_HPP
+
File [added]: ssh_job_adaptor.cpp
Delta lines: +54 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_adaptor.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_adaptor.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,54 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga adaptor includes
+#include <saga/saga/adaptors/config.hpp>
+#include <saga/saga/adaptors/adaptor.hpp>
+
+// adaptor includes
+#include "ssh_job_adaptor.hpp"
+#include "ssh_job_service.hpp"
+#include "ssh_job.hpp"
+
+SAGA_ADAPTOR_REGISTER (ssh_job::adaptor);
+
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+ // register function for the SAGA engine
+ saga::impl::adaptor_selector::adaptor_info_list_type
+ adaptor::adaptor_register (saga::impl::session * s)
+ {
+ // list of implemented cpi's
+ saga::impl::adaptor_selector::adaptor_info_list_type list;
+
+ // create empty preference list
+ // these list should be filled with properties of the adaptor,
+ // which can be used to select adaptors with specific preferences.
+ // Example:
+ // 'security' -> 'gsi'
+ // 'logging' -> 'yes'
+ // 'auditing' -> 'no'
+ preference_type prefs;
+
+ // create file adaptor infos (each adaptor instance gets its own uuid)
+ // and add cpi_infos to list
+ job_service_cpi_impl::register_cpi (list, prefs, adaptor_uuid_);
+ job_cpi_impl::register_cpi (list, prefs, adaptor_uuid_);
+
+ // and return list
+ return (list);
+ }
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
File [added]: ssh_job_adaptor.hpp
Delta lines: +39 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_adaptor.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_adaptor.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,39 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ADAPTORS_SSH_JOB_ADAPTOR_HPP
+#define ADAPTORS_SSH_JOB_ADAPTOR_HPP
+
+// saga adaptor includes
+#include <saga/saga/adaptors/adaptor.hpp>
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+ struct adaptor : public saga::adaptor
+ {
+ typedef saga::impl::v1_0::op_info op_info;
+ typedef saga::impl::v1_0::cpi_info cpi_info;
+ typedef saga::impl::v1_0::preference_type preference_type;
+
+ // This function registers the adaptor with the factory
+ // @param factory the factory where the adaptor registers
+ // its maker function and description table
+ saga::impl::adaptor_selector::adaptor_info_list_type
+ adaptor_register (saga::impl::session * s);
+
+ std::string get_name (void) const
+ {
+ return BOOST_PP_STRINGIZE (SAGA_ADAPTOR_NAME);
+ }
+ };
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
+#endif // ADAPTORS_SSH_JOB_ADAPTOR_HPP
+
File [added]: ssh_job_adaptor.ini
Delta lines: +14 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_adaptor.ini 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_adaptor.ini 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,14 @@
+# Copyright (c) 2005-2008 Andre Merzky (andre at merzky.net)
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+[saga.adaptors.ssh_job]
+ name = ssh_job
+# path = $[saga.location]/lib
+# enabled = true
+
+[saga.adaptors.ssh_job.preferences]
+ # adaptor specific configuration
+
File [added]: ssh_job_async.cpp
Delta lines: +157 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_async.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_async.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,157 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga adaptor icnludes
+#include <saga/saga/adaptors/task.hpp>
+#include <saga/saga/adaptors/attribute.hpp>
+#include <saga/saga/adaptors/file_transfer_spec.hpp>
+
+// saga engine includes
+#include <saga/impl/config.hpp>
+#include <saga/impl/exception_list.hpp>
+
+// saga package includes
+#include <saga/saga/packages/job/adaptors/job_self.hpp>
+#include <saga/saga/packages/job/job_description.hpp>
+
+// adaptor includes
+#include "ssh_job.hpp"
+#include "ssh_job_istream.hpp"
+#include "ssh_job_ostream.hpp"
+
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+
+ //////////////////////////////////////////////////////////////////////
+ // This adaptor implements the async functions
+ // based on its own synchronous functions.
+
+ saga::task
+ job_cpi_impl::async_get_state (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_get_state",
+ shared_from_this (),
+ &job_cpi_impl::sync_get_state);
+ }
+
+ saga::task
+ job_cpi_impl::async_get_description (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_get_description",
+ shared_from_this (),
+ &job_cpi_impl::sync_get_description);
+ }
+
+ saga::task
+ job_cpi_impl::async_get_job_id (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_get_job_id",
+ shared_from_this (),
+ &job_cpi_impl::sync_get_job_id);
+ }
+
+ saga::task
+ job_cpi_impl::async_run (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_run",
+ shared_from_this (),
+ &job_cpi_impl::sync_run);
+ }
+
+ saga::task
+ job_cpi_impl::async_wait (double timeout)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_wait",
+ shared_from_this (),
+ &job_cpi_impl::sync_wait,
+ timeout);
+ }
+
+ saga::task
+ job_cpi_impl::async_cancel (double timeout)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_cancel",
+ shared_from_this (),
+ &job_cpi_impl::sync_cancel,
+ timeout);
+ }
+
+ saga::task
+ job_cpi_impl::async_suspend (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_suspend",
+ shared_from_this (),
+ &job_cpi_impl::sync_suspend);
+ }
+
+ saga::task
+ job_cpi_impl::async_resume (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_resume",
+ shared_from_this (),
+ &job_cpi_impl::sync_resume);
+ }
+
+ saga::task
+ job_cpi_impl::async_get_stdin (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_get_stdin",
+ shared_from_this (),
+ &job_cpi_impl::sync_get_stdin);
+ }
+
+ saga::task
+ job_cpi_impl::async_get_stdout (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_get_stdout",
+ shared_from_this (),
+ &job_cpi_impl::sync_get_stdout);
+ }
+
+ saga::task
+ job_cpi_impl::async_get_stderr (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_get_stderr",
+ shared_from_this (),
+ &job_cpi_impl::sync_get_stderr);
+ }
+
+ saga::task
+ job_cpi_impl::async_checkpoint (void)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_checkpoint",
+ shared_from_this (),
+ &job_cpi_impl::sync_checkpoint);
+ }
+
+ saga::task
+ job_cpi_impl::async_migrate (saga::job::description jd)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_migrate",
+ shared_from_this (),
+ &job_cpi_impl::sync_migrate,
+ jd);
+ }
+
+ saga::task
+ job_cpi_impl::async_signal (int signal)
+ {
+ return saga::adaptors::task ("job_cpi_impl::async_signal",
+ shared_from_this (),
+ &job_cpi_impl::sync_signal,
+ signal);
+ }
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
File [added]: ssh_job_istream.hpp
Delta lines: +44 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_istream.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_istream.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,44 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(ADAPTORS_SSH_JOB_ISTREAM_HPP)
+#define ADAPTORS_SSH_JOB_ISTREAM_HPP
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga engine includes
+#include <saga/impl/job.hpp>
+
+// adaptor includes
+#include "ssh_job_stream.hpp"
+
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+ class istream : public saga::job::istream
+ {
+ private:
+ typedef impl::ssh_job::stream <saga::adaptors::istream_ptr>
+ impl_type;
+
+ public:
+ template <typename Stream>
+ istream (saga::impl::v1_0::job_cpi * cpi,
+ Stream & child_istream)
+ : saga::job::istream (new impl_type (cpi, child_istream.rdbuf ()))
+ {
+ }
+ };
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
+#endif // !defined(ADAPTORS_SSH_JOB_ISTREAM_HPP)
+
File [added]: ssh_job_ostream.hpp
Delta lines: +45 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_ostream.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_ostream.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,45 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef ADAPTORS_SSH_JOB_OSTREAM_HPP
+#define ADAPTORS_SSH_JOB_OSTREAM_HPP
+
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga engine includes
+#include <saga/impl/job.hpp>
+
+// adaptor includes
+#include "ssh_job_stream.hpp"
+
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+ class ostream : public saga::job::ostream
+ {
+ private:
+ typedef impl::ssh_job_stream <saga::adaptors::ostream_ptr>
+ impl_type;
+
+ public:
+ template <typename Stream>
+ ostream (saga::impl::v1_0::job_cpi * cpi,
+ Stream & child_ostream)
+ : saga::job::ostream (new impl_type (cpi, child_ostream.rdbuf ()))
+ {
+ }
+ };
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
+#endif // ADAPTORS_SSH_JOB_OSTREAM_HPP
+
File [added]: ssh_job_service.cpp
Delta lines: +89 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_service.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_service.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,89 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// stl includes
+#include <vector>
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga engine includes
+#include <saga/impl/config.hpp>
+
+// saga adaptor includes
+#include <saga/saga/adaptors/task.hpp>
+#include <saga/saga/adaptors/attribute.hpp>
+
+// saga package includes
+#include <saga/saga/packages/job/adaptors/job.hpp>
+#include <saga/saga/packages/job/adaptors/job_self.hpp>
+
+// adaptor includes
+#include "ssh_job_service.hpp"
+
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+ // constructor
+ job_service_cpi_impl::job_service_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ TR1::shared_ptr <saga::adaptor> adaptor)
+ : base_cpi (p, info, adaptor, cpi::Noflags)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ // destructor
+ job_service_cpi_impl::~job_service_cpi_impl (void)
+ {
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // SAGA API functions
+ void
+ job_service_cpi_impl::sync_create_job (saga::job::job & ret,
+ saga::job::description jd)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void
+ job_service_cpi_impl::sync_run_job (saga::job::job & ret,
+ std::string cmd,
+ std::string host,
+ saga::job::ostream & in,
+ saga::job::istream & out,
+ saga::job::istream & err)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void
+ job_service_cpi_impl::sync_list (std::vector <std::string> & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void
+ job_service_cpi_impl::sync_get_job (saga::job::job & ret,
+ std::string jobid)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+ void job_service_cpi_impl::sync_get_self (saga::job::self & ret)
+ {
+ SAGA_ADAPTOR_THROW ("Not Implemented", saga::NotImplemented);
+ }
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
File [added]: ssh_job_service.hpp
Delta lines: +90 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_service.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_service.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,90 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ADAPTORS_SSH_JOB_SERVICE_HPP
+#define ADAPTORS_SSH_JOB_SERVICE_HPP
+
+// stl includes
+#include <string>
+#include <iosfwd>
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga engine includes
+#include <saga/impl/engine/proxy.hpp>
+
+// saga adaptor includes
+#include <saga/saga/adaptors/task.hpp>
+#include <saga/saga/adaptors/adaptor.hpp>
+#include <saga/saga/adaptors/adaptor_data.hpp>
+
+// saga package includes
+#include <saga/impl/packages/job/job_service_cpi.hpp>
+
+// adaptor includes
+#include "ssh_job_adaptor.hpp"
+
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+ class job_service_cpi_impl
+ : public saga::adaptors::v1_0::job_service_cpi <job_service_cpi_impl>
+ {
+ private:
+ typedef saga::adaptors::v1_0::job_service_cpi <job_service_cpi_impl>
+ base_cpi;
+
+ // adaptor data
+ typedef saga::adaptors::adaptor_data <adaptor> adaptor_data_type;
+
+ public:
+ // constructor of the job_service cpi
+ job_service_cpi_impl (proxy * p,
+ cpi_info const & info,
+ saga::ini::ini const & glob_ini,
+ saga::ini::ini const & adap_ini,
+ TR1::shared_ptr <saga::adaptor> adaptor);
+
+ // destructor of the job_service cpi
+ ~job_service_cpi_impl (void);
+
+ // CPI functions
+ void sync_create_job (saga::job::job & ret,
+ saga::job::description jd);
+ void sync_run_job (saga::job::job & ret,
+ std::string cmd,
+ std::string host,
+ saga::job::ostream & in,
+ saga::job::istream & out,
+ saga::job::istream & err);
+ void sync_list (std::vector <std::string> & ret);
+ void sync_get_job (saga::job::job & ret,
+ std::string jobid);
+ void sync_get_self (saga::job::self & ret);
+
+ // This adaptor implements the async functions
+ // based on its own synchronous functions.
+ saga::task async_create_job (saga::job::description jd);
+ saga::task async_run_job (std::string cmd,
+ std::string host,
+ saga::job::ostream & in,
+ saga::job::istream & out,
+ saga::job::istream & err);
+ saga::task async_list (void);
+ saga::task async_get_job (std::string jobid);
+ saga::task async_get_self (void);
+
+ }; // class job_service_cpi_impl
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
+#endif // ADAPTORS_SSH_JOB_SERVICE_HPP
+
File [added]: ssh_job_service_async.cpp
Delta lines: +91 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_service_async.cpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_service_async.cpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,91 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// stl includes
+#include <vector>
+
+// saga includes
+#include <saga/saga.hpp>
+#include <saga/saga/adaptors/task.hpp>
+
+// saga engine includes
+#include <saga/impl/config.hpp>
+
+// saga adaptor includes
+#include <saga/saga/adaptors/task.hpp>
+#include <saga/saga/adaptors/attribute.hpp>
+
+// saga package includes
+#include <saga/saga/packages/job/adaptors/job.hpp>
+#include <saga/saga/packages/job/adaptors/job_self.hpp>
+
+// adaptor includes
+#include "ssh_job_service.hpp"
+
+
+////////////////////////////////////////////////////////////////////////
+namespace ssh_job
+{
+
+ //////////////////////////////////////////////////////////////////////
+ // This adaptor implements the async functions
+ // based on its own synchronous functions.
+
+ saga::task
+ job_service_cpi_impl::async_create_job (saga::job::description jd)
+ {
+ return saga::adaptors::task ("job_service_cpi_impl::async_create_job",
+ shared_from_this (),
+ &job_service_cpi_impl::sync_create_job,
+ jd);
+ }
+
+ saga::task
+ job_service_cpi_impl::async_run_job (std::string cmd,
+ std::string host,
+ saga::job::ostream & in,
+ saga::job::istream & out,
+ saga::job::istream & err)
+ {
+ return saga::adaptors::task ("job_service_cpi_impl::async_run_job",
+ shared_from_this (),
+ &job_service_cpi_impl::sync_run_job,
+ cmd,
+ host,
+ TR1::ref (in),
+ TR1::ref (out),
+ TR1::ref (err));
+ }
+
+ saga::task
+ job_service_cpi_impl::async_list (void)
+ {
+ return saga::adaptors::task ("job_service_cpi_impl::async_list",
+ shared_from_this (),
+ &job_service_cpi_impl::sync_list);
+ }
+
+ saga::task
+ job_service_cpi_impl::async_get_job (std::string jobid)
+ {
+ return saga::adaptors::task ("job_service_cpi_impl::async_get_job",
+ shared_from_this (),
+ &job_service_cpi_impl::sync_get_job,
+ jobid);
+ }
+
+ saga::task
+ job_service_cpi_impl::async_get_self (void)
+ {
+ return saga::adaptors::task ("job_service_cpi_impl::async_get_self",
+ shared_from_this (),
+ &job_service_cpi_impl::sync_get_self);
+ }
+
+} // namespace ssh_job
+////////////////////////////////////////////////////////////////////////
+
File [added]: ssh_job_stream.hpp
Delta lines: +52 -0
===================================================================
--- trunk/adaptors/ssh/ssh_job/ssh_job_stream.hpp 2009-01-06 09:52:00 UTC (rev 3242)
+++ trunk/adaptors/ssh/ssh_job/ssh_job_stream.hpp 2009-01-06 18:08:19 UTC (rev 3243)
@@ -0,0 +1,52 @@
+// Copyright (c) 2005-2007 Hartmut Kaiser
+// Copyright (c) 2005-2007 Andre Merzky (andre at merzky.net)
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(ADAPTORS_SSH_JOB_STREAM_HPP)
+#define ADAPTORS_SSH_JOB_STREAM_HPP
+
+// stl includes
+#include <iosfwd>
+
+// saga engine includes
+#include <saga/impl/engine/cpi.hpp>
+
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl
+{
+ namespace ssh_job
+ {
+ template <typename Base>
+ class stream
+ : public Base
+ {
+ private:
+ typedef Base base_type;
+
+ // a saga stream has to keep alive the proxy and the cpi instance
+ TR1::shared_ptr <saga::impl::v1_0::cpi> cpi_;
+ TR1::shared_ptr <saga::impl::proxy> proxy_;
+
+
+ public:
+ stream (saga::impl::v1_0::job_cpi * cpi,
+ std::streambuf * buf)
+ : base_type (buf),
+ cpi_ (cpi->shared_from_this ()),
+ proxy_ (cpi->get_proxy ()->shared_from_this ())
+ {
+ }
+ };
+
+ } // namespace ssh_job
+ //////////////////////////////////////////////////////////////////////
+
+} // namespace impl
+////////////////////////////////////////////////////////////////////////
+
+#endif // !defined(ADAPTORS_SSH_JOB_STREAM_HPP)
+
More information about the saga-devel
mailing list