./PaxHeaders.31186/globus_gram_job_manager-15.80000644000000000000000000000013214243170565017362 xustar000000000000000030 mtime=1653404021.490744648 30 atime=1653404023.058729694 30 ctime=1653404021.490744648 globus_gram_job_manager-15.8/0000775000175000017500000000000014243170565017443 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/PaxHeaders.31186/build-aux0000644000000000000000000000013214243170565021117 xustar000000000000000030 mtime=1653404021.570743885 30 atime=1653404023.058729694 30 ctime=1653404021.570743885 globus_gram_job_manager-15.8/build-aux/0000775000175000017500000000000014243170565021335 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/build-aux/PaxHeaders.31186/depcomp0000644000000000000000000000013114243162453022542 xustar000000000000000029 mtime=1653400875.11664201 30 atime=1653401363.038814279 30 ctime=1653404021.211747308 globus_gram_job_manager-15.8/build-aux/depcomp0000755000175000017500000005601614243162453022715 0ustar00johndoejohndoe00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: globus_gram_job_manager-15.8/build-aux/PaxHeaders.31186/config.guess0000644000000000000000000000013214243162453023506 xustar000000000000000030 mtime=1653400875.070642465 30 atime=1653401362.582818791 30 ctime=1653404021.213747289 globus_gram_job_manager-15.8/build-aux/config.guess0000755000175000017500000013036114243162453023654 0ustar00johndoejohndoe00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp 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` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: globus_gram_job_manager-15.8/build-aux/PaxHeaders.31186/config.sub0000644000000000000000000000013114243162453023150 xustar000000000000000030 mtime=1653400875.072642445 30 atime=1653401362.567818939 29 ctime=1653404021.21574727 globus_gram_job_manager-15.8/build-aux/config.sub0000755000175000017500000010531514243162453023320 0ustar00johndoejohndoe00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-04-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: globus_gram_job_manager-15.8/build-aux/PaxHeaders.31186/install-sh0000644000000000000000000000013214243162453023172 xustar000000000000000030 mtime=1653400875.075642416 30 atime=1653400875.074642426 30 ctime=1653404021.216747261 globus_gram_job_manager-15.8/build-aux/install-sh0000755000175000017500000003325514243162453023344 0ustar00johndoejohndoe00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: globus_gram_job_manager-15.8/build-aux/PaxHeaders.31186/missing0000644000000000000000000000013214243162453022565 xustar000000000000000030 mtime=1653400875.077642396 30 atime=1653401362.519819414 30 ctime=1653404021.218747242 globus_gram_job_manager-15.8/build-aux/missing0000755000175000017500000001533114243162453022732 0ustar00johndoejohndoe00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'automa4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: globus_gram_job_manager-15.8/build-aux/PaxHeaders.31186/ltmain.sh0000644000000000000000000000013214243162446023013 xustar000000000000000030 mtime=1653400870.468687999 30 atime=1653401385.775589311 30 ctime=1653404021.222747203 globus_gram_job_manager-15.8/build-aux/ltmain.sh0000644000175000017500000105152214243162446023160 0ustar00johndoejohndoe00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible 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 BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible 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 BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 globus_gram_job_manager-15.8/build-aux/PaxHeaders.31186/ylwrap0000644000000000000000000000013214243162453022432 xustar000000000000000030 mtime=1653400875.206641119 30 atime=1653400875.206641119 30 ctime=1653404021.351745973 globus_gram_job_manager-15.8/build-aux/ylwrap0000755000175000017500000001553614243162453022606 0ustar00johndoejohndoe00000000000000#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2012-12-21.17; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . get_dirname () { case $1 in */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; # Otherwise, we want the empty string (not "."). esac } # guard FILE # ---------- # The CPP macro used to guard inclusion of FILE. guard() { printf '%s\n' "$1" \ | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ -e 's/__*/_/g' } # quote_for_sed [STRING] # ---------------------- # Return STRING (or stdin) quoted to be used as a sed pattern. quote_for_sed () { case $# in 0) cat;; 1) printf '%s\n' "$1";; esac \ | sed -e 's|[][\\.*]|\\&|g' } case "$1" in '') echo "$0: No files given. Try '$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input="$1" shift # We'll later need for a correct munging of "#line" directives. input_sub_rx=`get_dirname "$input" | quote_for_sed` case "$input" in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input="`pwd`/$input" ;; esac input_rx=`get_dirname "$input" | quote_for_sed` # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot=false if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot=true fi # The parser itself, the first file, is the destination of the .y.c # rule in the Makefile. parser=$1 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for # instance, we rename #include "y.tab.h" into #include "parse.h" # during the conversion from y.tab.c to parse.c. sed_fix_filenames= # Also rename header guards, as Bison 2.7 for instance uses its header # guard in its implementation file. sed_fix_header_guards= while test "$#" -ne 0; do if test "$1" = "--"; then shift break fi from=$1 # Handle y_tab.c and y_tab.h output by DOS if $y_tab_nodot; then case $from in "y.tab.c") from=y_tab.c;; "y.tab.h") from=y_tab.h;; esac fi shift to=$1 shift sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" done # The program to run. prog="$1" shift # Make any relative path in $prog absolute. case "$prog" in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog="`pwd`/$prog" ;; esac # FIXME: add hostname here for parallel makes that run commands on # other machines. But that might take us over the 14-char limit. dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then for from in * do to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend '../'. case $to in [\\/]* | ?:[\\/]*) target=$to;; *) target="../$to";; esac # Do not overwrite unchanged header files to avoid useless # recompilations. Always update the parser itself: it is the # destination of the .y.c rule in the Makefile. Divert the # output of all other files to a temporary file so we can # compare them to existing versions. if test $from != $parser; then realtarget="$target" target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` fi # Munge "#line" or "#" directives. Don't let the resulting # debug information point at an absolute srcdir. Use the real # output file name, not yy.lex.c for instance. Adjust the # include guards too. sed -e "/^#/!b" \ -e "s|$input_rx|$input_sub_rx|" \ -e "$sed_fix_filenames" \ -e "$sed_fix_header_guards" \ "$from" >"$target" || ret=$? # Check whether files must be updated. if test "$from" != "$parser"; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$to is unchanged" rm -f "$target" else echo "updating $to" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the parser. This is a # blatant hack to let us support using "yacc -d". If -d is not # specified, don't fail when the header file is "missing". if test "$from" = "$parser"; then ret=1 fi fi done fi # Remove the directory. cd .. rm -rf $dirname exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: globus_gram_job_manager-15.8/build-aux/PaxHeaders.31186/test-driver0000644000000000000000000000013214243162453023364 xustar000000000000000030 mtime=1653400875.440638804 30 atime=1653400875.440638804 30 ctime=1653404021.570743885 globus_gram_job_manager-15.8/build-aux/test-driver0000755000175000017500000000761114243162453023533 0ustar00johndoejohndoe00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2012-06-27.10; # UTC # Copyright (C) 2011-2013 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then estatus=1 fi case $estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: globus_gram_job_manager-15.8/PaxHeaders.31186/m40000644000000000000000000000013214243170565017545 xustar000000000000000030 mtime=1653404021.196747451 30 atime=1653404023.058729694 30 ctime=1653404021.196747451 globus_gram_job_manager-15.8/m4/0000775000175000017500000000000014243170565017763 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/m4/PaxHeaders.31186/libtool.m40000644000000000000000000000013214243162446021527 xustar000000000000000030 mtime=1653400870.529687395 30 atime=1653400870.908683645 30 ctime=1653404021.189747518 globus_gram_job_manager-15.8/m4/libtool.m40000644000175000017500000105743214243162446021702 0ustar00johndoejohndoe00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS globus_gram_job_manager-15.8/m4/PaxHeaders.31186/libxml.m40000644000000000000000000000013214243161125021343 xustar000000000000000030 mtime=1653400149.360970101 30 atime=1653400867.216720175 30 ctime=1653404021.191747499 globus_gram_job_manager-15.8/m4/libxml.m40000664000175000017500000001731014243161125021506 0ustar00johndoejohndoe00000000000000# Configure paths for LIBXML2 # Mike Hommey 2004-06-19 # use CPPFLAGS instead of CFLAGS # Toshio Kuratomi 2001-04-21 # Adapted from: # Configure paths for GLIB # Owen Taylor 97-11-3 dnl AM_PATH_XML2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for XML, and define XML_CPPFLAGS and XML_LIBS dnl AC_DEFUN([AM_PATH_XML2],[ AC_ARG_WITH(xml-prefix, [ --with-xml-prefix=PFX Prefix where libxml is installed (optional)], xml_config_prefix="$withval", xml_config_prefix="") AC_ARG_WITH(xml-exec-prefix, [ --with-xml-exec-prefix=PFX Exec prefix where libxml is installed (optional)], xml_config_exec_prefix="$withval", xml_config_exec_prefix="") AC_ARG_ENABLE(xmltest, [ --disable-xmltest Do not try to compile and run a test LIBXML program],, enable_xmltest=yes) if test x$xml_config_exec_prefix != x ; then xml_config_args="$xml_config_args" if test x${XML2_CONFIG+set} != xset ; then XML2_CONFIG=$xml_config_exec_prefix/bin/xml2-config fi fi if test x$xml_config_prefix != x ; then xml_config_args="$xml_config_args --prefix=$xml_config_prefix" if test x${XML2_CONFIG+set} != xset ; then XML2_CONFIG=$xml_config_prefix/bin/xml2-config fi fi AC_PATH_PROG(XML2_CONFIG, xml2-config, no) min_xml_version=ifelse([$1], ,2.0.0,[$1]) AC_MSG_CHECKING(for libxml - version >= $min_xml_version) no_xml="" if test "$XML2_CONFIG" = "no" ; then no_xml=yes else XML_CPPFLAGS=`$XML2_CONFIG $xml_config_args --cflags` XML_LIBS=`$XML2_CONFIG $xml_config_args --libs` xml_config_major_version=`$XML2_CONFIG $xml_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` xml_config_minor_version=`$XML2_CONFIG $xml_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` xml_config_micro_version=`$XML2_CONFIG $xml_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_xmltest" = "xyes" ; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $XML_CPPFLAGS" LIBS="$XML_LIBS $LIBS" dnl dnl Now check if the installed libxml is sufficiently new. dnl (Also sanity checks the results of xml2-config to some extent) dnl rm -f conf.xmltest AC_TRY_RUN([ #include #include #include #include int main() { int xml_major_version, xml_minor_version, xml_micro_version; int major, minor, micro; char *tmp_version; system("touch conf.xmltest"); /* Capture xml2-config output via autoconf/configure variables */ /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = (char *)strdup("$min_xml_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string from xml2-config\n", "$min_xml_version"); exit(1); } free(tmp_version); /* Capture the version information from the header files */ tmp_version = (char *)strdup(LIBXML_DOTTED_VERSION); if (sscanf(tmp_version, "%d.%d.%d", &xml_major_version, &xml_minor_version, &xml_micro_version) != 3) { printf("%s, bad version string from libxml includes\n", "LIBXML_DOTTED_VERSION"); exit(1); } free(tmp_version); /* Compare xml2-config output to the libxml headers */ if ((xml_major_version != $xml_config_major_version) || (xml_minor_version != $xml_config_minor_version) || (xml_micro_version != $xml_config_micro_version)) { printf("*** libxml header files (version %d.%d.%d) do not match\n", xml_major_version, xml_minor_version, xml_micro_version); printf("*** xml2-config (version %d.%d.%d)\n", $xml_config_major_version, $xml_config_minor_version, $xml_config_micro_version); return 1; } /* Compare the headers to the library to make sure we match */ /* Less than ideal -- doesn't provide us with return value feedback, * only exits if there's a serious mismatch between header and library. */ LIBXML_TEST_VERSION; /* Test that the library is greater than our minimum version */ if ((xml_major_version > major) || ((xml_major_version == major) && (xml_minor_version > minor)) || ((xml_major_version == major) && (xml_minor_version == minor) && (xml_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of libxml (%d.%d.%d) was found.\n", xml_major_version, xml_minor_version, xml_micro_version); printf("*** You need a version of libxml newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** libxml is always available from ftp://ftp.xmlsoft.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the xml2-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of LIBXML, but you can also set the XML2_CONFIG environment to point to the\n"); printf("*** correct copy of xml2-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } return 1; } ],, no_xml=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_xml" = x ; then AC_MSG_RESULT(yes (version $xml_config_major_version.$xml_config_minor_version.$xml_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$XML2_CONFIG" = "no" ; then echo "*** The xml2-config script installed by LIBXML could not be found" echo "*** If libxml was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the XML2_CONFIG environment variable to the" echo "*** full path to xml2-config." else if test -f conf.xmltest ; then : else echo "*** Could not run libxml test program, checking why..." CPPFLAGS="$CPPFLAGS $XML_CPPFLAGS" LIBS="$LIBS $XML_LIBS" AC_TRY_LINK([ #include #include ], [ LIBXML_TEST_VERSION; return 0;], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding LIBXML or finding the wrong" echo "*** version of LIBXML. If it is not finding LIBXML, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means LIBXML was incorrectly installed" echo "*** or that you have moved LIBXML since it was installed. In the latter case, you" echo "*** may want to edit the xml2-config script: $XML2_CONFIG" ]) CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" fi fi XML_CPPFLAGS="" XML_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(XML_CPPFLAGS) AC_SUBST(XML_LIBS) rm -f conf.xmltest ]) globus_gram_job_manager-15.8/m4/PaxHeaders.31186/ltoptions.m40000644000000000000000000000013114243162446022115 xustar000000000000000030 mtime=1653400870.592686772 30 atime=1653400870.904683685 29 ctime=1653404021.19274749 globus_gram_job_manager-15.8/m4/ltoptions.m40000644000175000017500000003007314243162446022260 0ustar00johndoejohndoe00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) globus_gram_job_manager-15.8/m4/PaxHeaders.31186/ltsugar.m40000644000000000000000000000013114243162446021543 xustar000000000000000030 mtime=1653400870.656686139 30 atime=1653400870.903683695 29 ctime=1653404021.19374748 globus_gram_job_manager-15.8/m4/ltsugar.m40000644000175000017500000001042414243162446021704 0ustar00johndoejohndoe00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) globus_gram_job_manager-15.8/m4/PaxHeaders.31186/ltversion.m40000644000000000000000000000013214243162446022110 xustar000000000000000030 mtime=1653400870.721685496 30 atime=1653400870.903683695 30 ctime=1653404021.194747471 globus_gram_job_manager-15.8/m4/ltversion.m40000644000175000017500000000126214243162446022250 0ustar00johndoejohndoe00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) globus_gram_job_manager-15.8/m4/PaxHeaders.31186/lt~obsolete.m40000644000000000000000000000013214243162446022435 xustar000000000000000030 mtime=1653400870.784684872 30 atime=1653400870.901683715 30 ctime=1653404021.196747451 globus_gram_job_manager-15.8/m4/lt~obsolete.m40000644000175000017500000001375614243162446022610 0ustar00johndoejohndoe00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) globus_gram_job_manager-15.8/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453021344 xustar000000000000000030 mtime=1653400875.173641446 30 atime=1653401385.262594387 30 ctime=1653404021.184747566 globus_gram_job_manager-15.8/Makefile.in0000664000175000017500000014477714243162453021531 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ sbin_PROGRAMS = globus-job-manager$(EXEEXT) \ globus-gram-streamer$(EXEEXT) \ globus-job-manager-lock-test$(EXEEXT) subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/globus-gram-job-manager-uninstalled.pc.in \ $(srcdir)/globus-gram-job-manager.pc.in \ $(srcdir)/globus-gram-job-manager.conf.in \ $(srcdir)/gram.logrotate.in $(srcdir)/version.h.in \ $(srcdir)/globus-personal-gatekeeper.in \ $(top_srcdir)/build-aux/depcomp build-aux/config.guess \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/missing build-aux/ltmain.sh \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/ltmain.sh \ $(top_srcdir)/build-aux/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = globus-gram-job-manager-uninstalled.pc \ globus-gram-job-manager.pc globus-gram-job-manager.conf \ gram.logrotate version.h globus-personal-gatekeeper CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = libglobus_gram_job_manager_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libglobus_gram_job_manager_la_OBJECTS = \ globus_gram_job_manager_config.lo globus_gram_job_manager.lo \ globus_gram_job_manager_auditing.lo \ globus_gram_job_manager_contact.lo \ globus_gram_job_manager_gsi.lo \ globus_gram_job_manager_history_file.lo \ globus_gram_job_manager_query.lo \ globus_gram_job_manager_request.lo \ globus_gram_job_manager_rsl.lo \ globus_gram_job_manager_script.lo \ globus_gram_job_manager_seg.lo \ globus_gram_job_manager_staging.lo \ globus_gram_job_manager_state.lo \ globus_gram_job_manager_state_file.lo \ globus_gram_job_manager_validate.lo logging.lo \ startup_socket.lo tg_gateway.lo nodist_libglobus_gram_job_manager_la_OBJECTS = default_rvf.lo libglobus_gram_job_manager_la_OBJECTS = \ $(am_libglobus_gram_job_manager_la_OBJECTS) \ $(nodist_libglobus_gram_job_manager_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \ "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(globusconfigdir)" "$(DESTDIR)$(validationdir)" PROGRAMS = $(sbin_PROGRAMS) am_globus_gram_streamer_OBJECTS = globus_gram_streamer.$(OBJEXT) globus_gram_streamer_OBJECTS = $(am_globus_gram_streamer_OBJECTS) globus_gram_streamer_DEPENDENCIES = ./libglobus_gram_job_manager.la \ ./rvf/libglobus_rvf.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_globus_job_manager_OBJECTS = main.$(OBJEXT) globus_job_manager_OBJECTS = $(am_globus_job_manager_OBJECTS) globus_job_manager_DEPENDENCIES = ./libglobus_gram_job_manager.la \ ./rvf/libglobus_rvf.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_globus_job_manager_lock_test_OBJECTS = lock_test.$(OBJEXT) globus_job_manager_lock_test_OBJECTS = \ $(am_globus_job_manager_lock_test_OBJECTS) globus_job_manager_lock_test_LDADD = $(LDADD) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libglobus_gram_job_manager_la_SOURCES) \ $(nodist_libglobus_gram_job_manager_la_SOURCES) \ $(globus_gram_streamer_SOURCES) $(globus_job_manager_SOURCES) \ $(globus_job_manager_lock_test_SOURCES) DIST_SOURCES = $(libglobus_gram_job_manager_la_SOURCES) \ $(globus_gram_streamer_SOURCES) $(globus_job_manager_SOURCES) \ $(globus_job_manager_lock_test_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man1dir = $(mandir)/man1 man5dir = $(mandir)/man5 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(doc_DATA) $(globusconfig_DATA) $(validation_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = rvf scripts seg . test validationdir = $(datadir)/globus/$(PACKAGE) globusconfigdir = ${sysconfdir}/globus logrotatedir = ${sysconfdir}/logrotate.d globusconfig_DATA = globus-gram-job-manager.conf noinst_LTLIBRARIES = libglobus_gram_job_manager.la bin_SCRIPTS = globus-personal-gatekeeper validation_DATA = globus-gram-job-manager.rvf man_MANS = globus-personal-gatekeeper.1 rsl.5 globus-job-manager.8 doc_DATA = GLOBUS_LICENSE libglobus_gram_job_manager_la_LIBADD = \ $(PACKAGE_DEP_LIBS) $(OPENSSL_LIBS) libglobus_gram_job_manager_la_SOURCES = \ globus_gram_job_manager.h \ globus_gram_job_manager_config.c \ globus_gram_job_manager.c \ globus_gram_job_manager_auditing.c \ globus_gram_job_manager_contact.c \ globus_gram_job_manager_gsi.c \ globus_gram_job_manager_history_file.c \ globus_gram_job_manager_query.c \ globus_gram_job_manager_request.c \ globus_gram_job_manager_rsl.c \ globus_gram_job_manager_script.c \ globus_gram_job_manager_seg.c \ globus_gram_job_manager_staging.c \ globus_gram_job_manager_state.c \ globus_gram_job_manager_state_file.c \ globus_gram_job_manager_validate.c \ logging.c \ startup_socket.c \ tg_gateway.c nodist_libglobus_gram_job_manager_la_SOURCES = \ default_rvf.c globus_job_manager_SOURCES = main.c globus_job_manager_lock_test_SOURCES = lock_test.c # Compiler flags AM_CPPFLAGS = $(PACKAGE_DEP_CFLAGS) \ $(OPENSSL_CFLAGS) \ -I$(top_srcdir) \ -I$(top_builddir) \ -I$(srcdir)/rvf \ $(XML_CPPFLAGS) globus_job_manager_LDADD = \ ./libglobus_gram_job_manager.la \ ./rvf/libglobus_rvf.la \ $(PACKAGE_DEP_LIBS) $(OPENSSL_LIBS) $(XML_LIBS) globus_gram_streamer_SOURCES = globus_gram_streamer.c globus_gram_streamer_LDADD = \ ./libglobus_gram_job_manager.la \ ./rvf/libglobus_rvf.la \ $(PACKAGE_DEP_LIBS) $(OPENSSL_LIBS) $(XML_LIBS) MANUAL_SOURCE = globus-personal-gatekeeper.txt \ globus-job-manager.txt \ rsl.txt # Files which we want to put in the source package EXTRA_DIST = dirt.sh \ $(validation_DATA) \ $(MANUAL_SOURCE) \ $(man_MANS) \ $(doc_DATA) \ dirt.sh CLEANFILES = default_rvf.c @BUILD_MANPAGES_TRUE@SUFFIXES = .txt .1 .5 .8 @BUILD_MANPAGES_TRUE@MAINTAINERCLEANFILES = $(man_MANS) rsl.txt all: all-recursive .SUFFIXES: .SUFFIXES: .txt .1 .5 .8 .c .lo .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): globus-gram-job-manager-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/globus-gram-job-manager-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ globus-gram-job-manager.pc: $(top_builddir)/config.status $(srcdir)/globus-gram-job-manager.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ globus-gram-job-manager.conf: $(top_builddir)/config.status $(srcdir)/globus-gram-job-manager.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ gram.logrotate: $(top_builddir)/config.status $(srcdir)/gram.logrotate.in cd $(top_builddir) && $(SHELL) ./config.status $@ version.h: $(top_builddir)/config.status $(srcdir)/version.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ globus-personal-gatekeeper: $(top_builddir)/config.status $(srcdir)/globus-personal-gatekeeper.in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libglobus_gram_job_manager.la: $(libglobus_gram_job_manager_la_OBJECTS) $(libglobus_gram_job_manager_la_DEPENDENCIES) $(EXTRA_libglobus_gram_job_manager_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libglobus_gram_job_manager_la_OBJECTS) $(libglobus_gram_job_manager_la_LIBADD) $(LIBS) install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sbindir)" && rm -f $$files clean-sbinPROGRAMS: @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list globus-gram-streamer$(EXEEXT): $(globus_gram_streamer_OBJECTS) $(globus_gram_streamer_DEPENDENCIES) $(EXTRA_globus_gram_streamer_DEPENDENCIES) @rm -f globus-gram-streamer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(globus_gram_streamer_OBJECTS) $(globus_gram_streamer_LDADD) $(LIBS) globus-job-manager$(EXEEXT): $(globus_job_manager_OBJECTS) $(globus_job_manager_DEPENDENCIES) $(EXTRA_globus_job_manager_DEPENDENCIES) @rm -f globus-job-manager$(EXEEXT) $(AM_V_CCLD)$(LINK) $(globus_job_manager_OBJECTS) $(globus_job_manager_LDADD) $(LIBS) globus-job-manager-lock-test$(EXEEXT): $(globus_job_manager_lock_test_OBJECTS) $(globus_job_manager_lock_test_DEPENDENCIES) $(EXTRA_globus_job_manager_lock_test_DEPENDENCIES) @rm -f globus-job-manager-lock-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(globus_job_manager_lock_test_OBJECTS) $(globus_job_manager_lock_test_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/default_rvf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_auditing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_config.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_contact.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_gsi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_history_file.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_query.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_request.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_rsl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_script.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_seg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_staging.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_state.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_state_file.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_job_manager_validate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_gram_streamer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lock_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logging.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/startup_socket.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tg_gateway.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man5: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) install-man8: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man8dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.8[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-globusconfigDATA: $(globusconfig_DATA) @$(NORMAL_INSTALL) @list='$(globusconfig_DATA)'; test -n "$(globusconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(globusconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(globusconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(globusconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(globusconfigdir)" || exit $$?; \ done uninstall-globusconfigDATA: @$(NORMAL_UNINSTALL) @list='$(globusconfig_DATA)'; test -n "$(globusconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(globusconfigdir)'; $(am__uninstall_files_from_dir) install-validationDATA: $(validation_DATA) @$(NORMAL_INSTALL) @list='$(validation_DATA)'; test -n "$(validationdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(validationdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(validationdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(validationdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(validationdir)" || exit $$?; \ done uninstall-validationDATA: @$(NORMAL_UNINSTALL) @list='$(validation_DATA)'; test -n "$(validationdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(validationdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(globusconfigdir)" "$(DESTDIR)$(validationdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-sbinPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-globusconfigDATA install-man \ install-validationDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binSCRIPTS install-sbinPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-man5 install-man8 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-docDATA \ uninstall-globusconfigDATA uninstall-man \ uninstall-sbinPROGRAMS uninstall-validationDATA uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8 .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-sbinPROGRAMS \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binSCRIPTS install-data \ install-data-am install-data-hook install-docDATA install-dvi \ install-dvi-am install-exec install-exec-am \ install-globusconfigDATA install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-man5 install-man8 install-pdf install-pdf-am \ install-ps install-ps-am install-sbinPROGRAMS install-strip \ install-validationDATA installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binSCRIPTS \ uninstall-docDATA uninstall-globusconfigDATA uninstall-man \ uninstall-man1 uninstall-man5 uninstall-man8 \ uninstall-sbinPROGRAMS uninstall-validationDATA default_rvf.c: $(srcdir)/globus-gram-job-manager.rvf (echo "char globus_i_gram_default_rvf[] = \"\\"; \ sed -e 's/\\/\\\\/g' \ -e 's/"/\\"/g' \ -e 's/$$/\\n\\/' \ < $(srcdir)/globus-gram-job-manager.rvf; \ echo "\";") > default_rvf.c rsl.txt: globus-gram-job-manager.rvf perl $(top_srcdir)/scripts/create_rsl_documentation.pl -a < $< > $@ install-data-hook: mkdir -p $(DESTDIR)$(localstatedir)/lib/globus/gram_job_state chmod 1777 $(DESTDIR)$(localstatedir)/lib/globus/gram_job_state mkdir -p $(DESTDIR)$(logrotatedir) cp $(builddir)/gram.logrotate $(DESTDIR)$(logrotatedir)/globus-job-manager mkdir -p $(DESTDIR)@LOGDIR@ chmod 1777 $(DESTDIR)@LOGDIR@ mkdir -p $(DESTDIR)$(sysconfdir)/globus/gram @BUILD_MANPAGES_TRUE@.txt.1 .txt.5 .txt.8: @BUILD_MANPAGES_TRUE@ $(A2X) -d manpage -f manpage $< distuninstallcheck: @: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/PaxHeaders.31186/Makefile.am0000644000000000000000000000013214243161125021326 xustar000000000000000030 mtime=1653400149.353970172 30 atime=1653400866.144730782 30 ctime=1653404021.185747556 globus_gram_job_manager-15.8/Makefile.am0000664000175000017500000000641714243161125021477 0ustar00johndoejohndoe00000000000000ACLOCAL_AMFLAGS = -I m4 SUBDIRS = rvf scripts seg . test validationdir = $(datadir)/globus/$(PACKAGE) globusconfigdir = ${sysconfdir}/globus logrotatedir = ${sysconfdir}/logrotate.d globusconfig_DATA = globus-gram-job-manager.conf noinst_LTLIBRARIES = libglobus_gram_job_manager.la sbin_PROGRAMS = \ globus-job-manager \ globus-gram-streamer \ globus-job-manager-lock-test bin_SCRIPTS = globus-personal-gatekeeper validation_DATA = globus-gram-job-manager.rvf man_MANS = globus-personal-gatekeeper.1 rsl.5 globus-job-manager.8 doc_DATA = GLOBUS_LICENSE libglobus_gram_job_manager_la_LIBADD = \ $(PACKAGE_DEP_LIBS) $(OPENSSL_LIBS) libglobus_gram_job_manager_la_SOURCES = \ globus_gram_job_manager.h \ globus_gram_job_manager_config.c \ globus_gram_job_manager.c \ globus_gram_job_manager_auditing.c \ globus_gram_job_manager_contact.c \ globus_gram_job_manager_gsi.c \ globus_gram_job_manager_history_file.c \ globus_gram_job_manager_query.c \ globus_gram_job_manager_request.c \ globus_gram_job_manager_rsl.c \ globus_gram_job_manager_script.c \ globus_gram_job_manager_seg.c \ globus_gram_job_manager_staging.c \ globus_gram_job_manager_state.c \ globus_gram_job_manager_state_file.c \ globus_gram_job_manager_validate.c \ logging.c \ startup_socket.c \ tg_gateway.c nodist_libglobus_gram_job_manager_la_SOURCES = \ default_rvf.c globus_job_manager_SOURCES = main.c globus_job_manager_lock_test_SOURCES = lock_test.c default_rvf.c: $(srcdir)/globus-gram-job-manager.rvf (echo "char globus_i_gram_default_rvf[] = \"\\"; \ sed -e 's/\\/\\\\/g' \ -e 's/"/\\"/g' \ -e 's/$$/\\n\\/' \ < $(srcdir)/globus-gram-job-manager.rvf; \ echo "\";") > default_rvf.c # Compiler flags AM_CPPFLAGS = $(PACKAGE_DEP_CFLAGS) \ $(OPENSSL_CFLAGS) \ -I$(top_srcdir) \ -I$(top_builddir) \ -I$(srcdir)/rvf \ $(XML_CPPFLAGS) globus_job_manager_LDADD = \ ./libglobus_gram_job_manager.la \ ./rvf/libglobus_rvf.la \ $(PACKAGE_DEP_LIBS) $(OPENSSL_LIBS) $(XML_LIBS) globus_gram_streamer_SOURCES = globus_gram_streamer.c globus_gram_streamer_LDADD = \ ./libglobus_gram_job_manager.la \ ./rvf/libglobus_rvf.la \ $(PACKAGE_DEP_LIBS) $(OPENSSL_LIBS) $(XML_LIBS) MANUAL_SOURCE = globus-personal-gatekeeper.txt \ globus-job-manager.txt \ rsl.txt # Files which we want to put in the source package EXTRA_DIST = dirt.sh \ $(validation_DATA) \ $(MANUAL_SOURCE) \ $(man_MANS) \ $(doc_DATA) \ dirt.sh rsl.txt: globus-gram-job-manager.rvf perl $(top_srcdir)/scripts/create_rsl_documentation.pl -a < $< > $@ install-data-hook: mkdir -p $(DESTDIR)$(localstatedir)/lib/globus/gram_job_state chmod 1777 $(DESTDIR)$(localstatedir)/lib/globus/gram_job_state mkdir -p $(DESTDIR)$(logrotatedir) cp $(builddir)/gram.logrotate $(DESTDIR)$(logrotatedir)/globus-job-manager mkdir -p $(DESTDIR)@LOGDIR@ chmod 1777 $(DESTDIR)@LOGDIR@ mkdir -p $(DESTDIR)$(sysconfdir)/globus/gram CLEANFILES = default_rvf.c if BUILD_MANPAGES SUFFIXES = .txt .1 .5 .8 .txt.1 .txt.5 .txt.8: $(A2X) -d manpage -f manpage $< MAINTAINERCLEANFILES = $(man_MANS) rsl.txt endif distuninstallcheck: @: globus_gram_job_manager-15.8/PaxHeaders.31186/configure0000644000000000000000000000013214243162452021202 xustar000000000000000030 mtime=1653400874.298650104 30 atime=1653401362.357821017 30 ctime=1653404021.187747537 globus_gram_job_manager-15.8/configure0000775000175000017500000157472514243162452021373 0ustar00johndoejohndoe00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for globus_gram_job_manager 15.8. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 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=: # Pre-4.2 versions of Zsh do 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_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } 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.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= 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 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: https://github.com/gridcf/gct/issues about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_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 || $as_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" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # 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 as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # 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" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac 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 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # 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'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/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= # Identity of this package. PACKAGE_NAME='globus_gram_job_manager' PACKAGE_TARNAME='globus_gram_job_manager' PACKAGE_VERSION='15.8' PACKAGE_STRING='globus_gram_job_manager 15.8' PACKAGE_BUGREPORT='https://github.com/gridcf/gct/issues' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS BUILD_MANPAGES_FALSE BUILD_MANPAGES_TRUE A2X YFLAGS YACC LEXLIB LEX_OUTPUT_ROOT LEX AUDITDIR LOGDIR XML_LIBS XML_CPPFLAGS XML2_CONFIG GLOBUS_VERSION ENABLE_TESTS_FALSE ENABLE_TESTS_TRUE OPENSSL USE_CYGPATH_W_FALSE USE_CYGPATH_W_TRUE PREOPEN_FORCE GLOBUS_XIO_POPEN_DRIVER_DLOPEN GLOBUS_XIO_GSI_DRIVER_DLOPEN GSI_CERT_UTILS_PATH GSI_PROXY_UTILS_PATH COMMON_PERL5LIB GRAM_PROTOCOL_PERL5LIB GRAM_JOB_MANAGER_FORK_PERL5LIB GRAM_JOB_MANAGER_SCRIPT_PERL5LIB GRAM_JOB_MANAGER_SCRIPT_PATH GASS_CACHE_PATH GASS_COPY_PATH GRAM_CLIENT_TOOLS_PATH GATEKEEPER_PATH JOBMANAGER_PATH CLIENT_TEST_PACKAGE_DEP_LIBS CLIENT_TEST_PACKAGE_DEP_CFLAGS PACKAGE_DEP_LIBS PACKAGE_DEP_CFLAGS OPENSSL_PKGCONFIG OPENSSL_LIBS OPENSSL_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG DIRT_BRANCH_ID DIRT_TIMESTAMP CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL OBJDUMP DLLTOOL AS AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CLIENT_TEST_PACKAGE_DEPS PACKAGE_DEPS AGE_VERSION MINOR_VERSION MAJOR_VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_shared enable_static with_pic enable_fast_install enable_dependency_tracking with_gnu_ld with_sysroot enable_libtool_lock with_xml_prefix with_xml_exec_prefix enable_xmltest ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR OPENSSL_CFLAGS OPENSSL_LIBS PACKAGE_DEP_CFLAGS PACKAGE_DEP_LIBS CLIENT_TEST_PACKAGE_DEP_CFLAGS CLIENT_TEST_PACKAGE_DEP_LIBS YACC YFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # 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_TARNAME}' 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= ;; *) 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=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_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=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 ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_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'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. 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 # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" 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 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 .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # 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 -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | 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 .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" 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 globus_gram_job_manager 15.8 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/globus_gram_job_manager] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of globus_gram_job_manager 15.8:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-libtool-lock avoid locking (might break parallel builds) --disable-xmltest Do not try to compile and run a test LIBXML program Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-xml-prefix=PFX Prefix where libxml is installed (optional) --with-xml-exec-prefix=PFX Exec prefix where libxml is installed (optional) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path OPENSSL_CFLAGS C compiler flags for OPENSSL, overriding pkg-config OPENSSL_LIBS linker flags for OPENSSL, overriding pkg-config PACKAGE_DEP_CFLAGS C compiler flags for PACKAGE_DEP, overriding pkg-config PACKAGE_DEP_LIBS linker flags for PACKAGE_DEP, overriding pkg-config CLIENT_TEST_PACKAGE_DEP_CFLAGS C compiler flags for CLIENT_TEST_PACKAGE_DEP, overriding pkg-config CLIENT_TEST_PACKAGE_DEP_LIBS linker flags for CLIENT_TEST_PACKAGE_DEP, overriding pkg-config YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _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" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && 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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_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 $as_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 globus_gram_job_manager configure 15.8 generated by GNU Autoconf 2.69 Copyright (C) 2012 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 ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func 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 globus_gram_job_manager $as_me 15.8, which was generated by GNU Autoconf 2.69. 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=. $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append 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 as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset 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 $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" 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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; 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 $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_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'; as_fn_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 $as_echo "/* confdefs.h */" > 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 cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } 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. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_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,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_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 # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_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. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## 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 MAJOR_VERSION=${PACKAGE_VERSION%%.*} MINOR_VERSION=${PACKAGE_VERSION##*.} AGE_VERSION=2 PACKAGE_DEPS="globus-common >= 15, globus-gsi-credential >= 5, globus-gass-cache >= 8, globus-gass-transfer >= 7, globus-gram-protocol >= 11, globus-gssapi-gsi >= 10, globus-gss-assist >= 8, globus-gsi-sysconfig >= 5, globus-callout >= 2, globus-xio >= 3, globus-xio-popen-driver >= 2, globus-rsl >= 9, globus-gram-job-manager-callout-error >= 2, globus-scheduler-event-generator >= 4" CLIENT_TEST_PACKAGE_DEPS="globus-common >= 14, globus-gram-protocol >= 11, globus-io >= 9, globus-rsl >= 9, globus-gss-assist >= 8, globus-gram-client >= 3, globus-gass-server-ez >= 2, globus-gass-transfer >= 7, globus-gssapi-gsi >= 10" ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; 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 as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 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. am__api_version='1.13' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='globus_gram_job_manager' VERSION='15.8' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5 $as_echo_n "checking how to create a pax tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_pax-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=posix -chf - "'"$$tardir"' am__tar_="$_am_tar --format=posix -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x pax -w "$$tardir"' am__tar_='pax -L -x pax -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H pax -L' am__tar_='find "$tardir" -print | cpio -o -H pax -L' am__untar='cpio -i -H pax -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_pax}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if ${am_cv_prog_tar_pax+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_prog_tar_pax=$_am_tool fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5 $as_echo "$am_cv_prog_tar_pax" >&6; } case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : 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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST 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_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=yes enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" 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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } 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 CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: DIRT_TIMESTAMP=1653033972 DIRT_BRANCH_ID=1 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL" >&5 $as_echo_n "checking for OPENSSL... " >&6; } if test -n "$OPENSSL_CFLAGS"; then pkg_cv_OPENSSL_CFLAGS="$OPENSSL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_OPENSSL_CFLAGS=`$PKG_CONFIG --cflags "openssl >= 1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$OPENSSL_LIBS"; then pkg_cv_OPENSSL_LIBS="$OPENSSL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_OPENSSL_LIBS=`$PKG_CONFIG --libs "openssl >= 1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then OPENSSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "openssl >= 1.0" 2>&1` else OPENSSL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "openssl >= 1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$OPENSSL_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (openssl >= 1.0) were not met: $OPENSSL_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables OPENSSL_CFLAGS and OPENSSL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables OPENSSL_CFLAGS and OPENSSL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else OPENSSL_CFLAGS=$pkg_cv_OPENSSL_CFLAGS OPENSSL_LIBS=$pkg_cv_OPENSSL_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } OPENSSL_PKGCONFIG="openssl >= 1.0" fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PACKAGE_DEP" >&5 $as_echo_n "checking for PACKAGE_DEP... " >&6; } if test -n "$PACKAGE_DEP_CFLAGS"; then pkg_cv_PACKAGE_DEP_CFLAGS="$PACKAGE_DEP_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$PACKAGE_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$PACKAGE_DEPS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PACKAGE_DEP_CFLAGS=`$PKG_CONFIG --cflags "$PACKAGE_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PACKAGE_DEP_LIBS"; then pkg_cv_PACKAGE_DEP_LIBS="$PACKAGE_DEP_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$PACKAGE_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$PACKAGE_DEPS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PACKAGE_DEP_LIBS=`$PKG_CONFIG --libs "$PACKAGE_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PACKAGE_DEP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$PACKAGE_DEPS" 2>&1` else PACKAGE_DEP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$PACKAGE_DEPS" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PACKAGE_DEP_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($PACKAGE_DEPS) were not met: $PACKAGE_DEP_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PACKAGE_DEP_CFLAGS and PACKAGE_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PACKAGE_DEP_CFLAGS and PACKAGE_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PACKAGE_DEP_CFLAGS=$pkg_cv_PACKAGE_DEP_CFLAGS PACKAGE_DEP_LIBS=$pkg_cv_PACKAGE_DEP_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CLIENT_TEST_PACKAGE_DEP" >&5 $as_echo_n "checking for CLIENT_TEST_PACKAGE_DEP... " >&6; } if test -n "$CLIENT_TEST_PACKAGE_DEP_CFLAGS"; then pkg_cv_CLIENT_TEST_PACKAGE_DEP_CFLAGS="$CLIENT_TEST_PACKAGE_DEP_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$CLIENT_TEST_PACKAGE_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$CLIENT_TEST_PACKAGE_DEPS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CLIENT_TEST_PACKAGE_DEP_CFLAGS=`$PKG_CONFIG --cflags "$CLIENT_TEST_PACKAGE_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CLIENT_TEST_PACKAGE_DEP_LIBS"; then pkg_cv_CLIENT_TEST_PACKAGE_DEP_LIBS="$CLIENT_TEST_PACKAGE_DEP_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$CLIENT_TEST_PACKAGE_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$CLIENT_TEST_PACKAGE_DEPS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CLIENT_TEST_PACKAGE_DEP_LIBS=`$PKG_CONFIG --libs "$CLIENT_TEST_PACKAGE_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CLIENT_TEST_PACKAGE_DEP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$CLIENT_TEST_PACKAGE_DEPS" 2>&1` else CLIENT_TEST_PACKAGE_DEP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$CLIENT_TEST_PACKAGE_DEPS" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CLIENT_TEST_PACKAGE_DEP_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($CLIENT_TEST_PACKAGE_DEPS) were not met: $CLIENT_TEST_PACKAGE_DEP_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables CLIENT_TEST_PACKAGE_DEP_CFLAGS and CLIENT_TEST_PACKAGE_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables CLIENT_TEST_PACKAGE_DEP_CFLAGS and CLIENT_TEST_PACKAGE_DEP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else CLIENT_TEST_PACKAGE_DEP_CFLAGS=$pkg_cv_CLIENT_TEST_PACKAGE_DEP_CFLAGS CLIENT_TEST_PACKAGE_DEP_LIBS=$pkg_cv_CLIENT_TEST_PACKAGE_DEP_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi JOBMANAGER_PATH="$PWD" if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-gatekeeper\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-gatekeeper") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GATEKEEPER_PATH="$($PKG_CONFIG --variable=path globus-gatekeeper)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-gram-client-tools\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-gram-client-tools") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GRAM_CLIENT_TOOLS_PATH="$($PKG_CONFIG --variable=path globus-gram-client-tools)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-gass-copy\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-gass-copy") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GASS_COPY_PATH="$($PKG_CONFIG --variable=path globus-gass-copy)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-gass-cache-program\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-gass-cache-program") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GASS_CACHE_PATH="$($PKG_CONFIG --variable=path globus-gass-cache-program)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-gram-job-manager-scripts\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-gram-job-manager-scripts") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GRAM_JOB_MANAGER_SCRIPT_PATH="$($PKG_CONFIG --variable=path globus-gram-job-manager-scripts)" GRAM_JOB_MANAGER_SCRIPT_PERL5LIB="$($PKG_CONFIG --variable=perl5lib globus-gram-job-manager-scripts)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-gram-job-manager-fork\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-gram-job-manager-fork") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GRAM_JOB_MANAGER_FORK_PERL5LIB="$($PKG_CONFIG --variable=perl5lib globus-gram-job-manager-fork)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-gram-protocol\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-gram-protocol") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GRAM_PROTOCOL_PERL5LIB="$($PKG_CONFIG --variable=perl5lib globus-gram-protocol)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-common\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-common") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then COMMON_PERL5LIB="$($PKG_CONFIG --variable=perl5lib globus-common)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-proxy-utils\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-proxy-utils") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GSI_PROXY_UTILS_PATH="$($PKG_CONFIG --variable=path globus-proxy-utils)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-gsi-cert-utils\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-gsi-cert-utils") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GSI_CERT_UTILS_PATH="$($PKG_CONFIG --variable=path globus-gsi-cert-utils)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-xio-gsi-driver\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-xio-gsi-driver") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GLOBUS_XIO_GSI_DRIVER_DLOPEN="$($PKG_CONFIG --variable=dlopen globus-xio-gsi-driver)" fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"globus-xio-popen-driver\""; } >&5 ($PKG_CONFIG --exists --print-errors "globus-xio-popen-driver") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GLOBUS_XIO_POPEN_DRIVER_DLOPEN="$($PKG_CONFIG --variable=dlopen globus-xio-popen-driver)" fi if test -z "$GLOBUS_XIO_GSI_DRIVER_DLOPEN"; then PREOPEN_FORCE="-dlpreopen force" fi case $build:$host in *cygwin*:*mingw*) use_cygpath_w=true ;; *) use_cygpath_w=false ;; esac if test "$use_cygpath_w" = "true"; then USE_CYGPATH_W_TRUE= USE_CYGPATH_W_FALSE='#' else USE_CYGPATH_W_TRUE='#' USE_CYGPATH_W_FALSE= fi for ac_prog in openssl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_OPENSSL+:} false; then : $as_echo_n "(cached) " >&6 else case $OPENSSL in [\\/]* | ?:[\\/]*) ac_cv_path_OPENSSL="$OPENSSL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OPENSSL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi OPENSSL=$ac_cv_path_OPENSSL if test -n "$OPENSSL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPENSSL" >&5 $as_echo "$OPENSSL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$OPENSSL" && break done if test "x$OPENSSL" != "x"; then ENABLE_TESTS_TRUE= ENABLE_TESTS_FALSE='#' else ENABLE_TESTS_TRUE='#' ENABLE_TESTS_FALSE= fi if test "X$GLOBUS_VERSION" = "X"; then if test -x ${GLOBUS_LOCATION-/usr}/bin/globus-version; then GLOBUS_VERSION="`${GLOBUS_LOCATION-/usr}/bin/globus-version`" else GLOBUS_VERSION="unknown" fi fi # Check whether --with-xml-prefix was given. if test "${with_xml_prefix+set}" = set; then : withval=$with_xml_prefix; xml_config_prefix="$withval" else xml_config_prefix="" fi # Check whether --with-xml-exec-prefix was given. if test "${with_xml_exec_prefix+set}" = set; then : withval=$with_xml_exec_prefix; xml_config_exec_prefix="$withval" else xml_config_exec_prefix="" fi # Check whether --enable-xmltest was given. if test "${enable_xmltest+set}" = set; then : enableval=$enable_xmltest; else enable_xmltest=yes fi if test x$xml_config_exec_prefix != x ; then xml_config_args="$xml_config_args" if test x${XML2_CONFIG+set} != xset ; then XML2_CONFIG=$xml_config_exec_prefix/bin/xml2-config fi fi if test x$xml_config_prefix != x ; then xml_config_args="$xml_config_args --prefix=$xml_config_prefix" if test x${XML2_CONFIG+set} != xset ; then XML2_CONFIG=$xml_config_prefix/bin/xml2-config fi fi # Extract the first word of "xml2-config", so it can be a program name with args. set dummy xml2-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XML2_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $XML2_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_XML2_CONFIG="$XML2_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XML2_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_XML2_CONFIG" && ac_cv_path_XML2_CONFIG="no" ;; esac fi XML2_CONFIG=$ac_cv_path_XML2_CONFIG if test -n "$XML2_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XML2_CONFIG" >&5 $as_echo "$XML2_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi min_xml_version=2.0.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml - version >= $min_xml_version" >&5 $as_echo_n "checking for libxml - version >= $min_xml_version... " >&6; } no_xml="" if test "$XML2_CONFIG" = "no" ; then no_xml=yes else XML_CPPFLAGS=`$XML2_CONFIG $xml_config_args --cflags` XML_LIBS=`$XML2_CONFIG $xml_config_args --libs` xml_config_major_version=`$XML2_CONFIG $xml_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` xml_config_minor_version=`$XML2_CONFIG $xml_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` xml_config_micro_version=`$XML2_CONFIG $xml_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_xmltest" = "xyes" ; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $XML_CPPFLAGS" LIBS="$XML_LIBS $LIBS" rm -f conf.xmltest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main() { int xml_major_version, xml_minor_version, xml_micro_version; int major, minor, micro; char *tmp_version; system("touch conf.xmltest"); /* Capture xml2-config output via autoconf/configure variables */ /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = (char *)strdup("$min_xml_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string from xml2-config\n", "$min_xml_version"); exit(1); } free(tmp_version); /* Capture the version information from the header files */ tmp_version = (char *)strdup(LIBXML_DOTTED_VERSION); if (sscanf(tmp_version, "%d.%d.%d", &xml_major_version, &xml_minor_version, &xml_micro_version) != 3) { printf("%s, bad version string from libxml includes\n", "LIBXML_DOTTED_VERSION"); exit(1); } free(tmp_version); /* Compare xml2-config output to the libxml headers */ if ((xml_major_version != $xml_config_major_version) || (xml_minor_version != $xml_config_minor_version) || (xml_micro_version != $xml_config_micro_version)) { printf("*** libxml header files (version %d.%d.%d) do not match\n", xml_major_version, xml_minor_version, xml_micro_version); printf("*** xml2-config (version %d.%d.%d)\n", $xml_config_major_version, $xml_config_minor_version, $xml_config_micro_version); return 1; } /* Compare the headers to the library to make sure we match */ /* Less than ideal -- doesn't provide us with return value feedback, * only exits if there's a serious mismatch between header and library. */ LIBXML_TEST_VERSION; /* Test that the library is greater than our minimum version */ if ((xml_major_version > major) || ((xml_major_version == major) && (xml_minor_version > minor)) || ((xml_major_version == major) && (xml_minor_version == minor) && (xml_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of libxml (%d.%d.%d) was found.\n", xml_major_version, xml_minor_version, xml_micro_version); printf("*** You need a version of libxml newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** libxml is always available from ftp://ftp.xmlsoft.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the xml2-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of LIBXML, but you can also set the XML2_CONFIG environment to point to the\n"); printf("*** correct copy of xml2-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_xml=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_xml" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $xml_config_major_version.$xml_config_minor_version.$xml_config_micro_version)" >&5 $as_echo "yes (version $xml_config_major_version.$xml_config_minor_version.$xml_config_micro_version)" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$XML2_CONFIG" = "no" ; then echo "*** The xml2-config script installed by LIBXML could not be found" echo "*** If libxml was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the XML2_CONFIG environment variable to the" echo "*** full path to xml2-config." else if test -f conf.xmltest ; then : else echo "*** Could not run libxml test program, checking why..." CPPFLAGS="$CPPFLAGS $XML_CPPFLAGS" LIBS="$LIBS $XML_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { LIBXML_TEST_VERSION; return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding LIBXML or finding the wrong" echo "*** version of LIBXML. If it is not finding LIBXML, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means LIBXML was incorrectly installed" echo "*** or that you have moved LIBXML since it was installed. In the latter case, you" echo "*** may want to edit the xml2-config script: $XML2_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" fi fi XML_CPPFLAGS="" XML_LIBS="" : fi rm -f conf.xmltest if test "$ac_cv_have_libxml2" = "yes"; then $as_echo "#define HAVE_LIBXML2 1" >>confdefs.h fi case $host in *solaris*) $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _XOPEN_SOURCE 1" >>confdefs.h $as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h ;; esac eval "LOGDIR=$localstatedir/log/globus" eval AUDITDIR="$localstatedir/lib/globus/gram-audit" for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" for ac_prog in a2x a2x.py do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_A2X+:} false; then : $as_echo_n "(cached) " >&6 else case $A2X in [\\/]* | ?:[\\/]*) ac_cv_path_A2X="$A2X" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_A2X="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi A2X=$ac_cv_path_A2X if test -n "$A2X"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $A2X" >&5 $as_echo "$A2X" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$A2X" && break done if test x"$A2X" != x; then BUILD_MANPAGES_TRUE= BUILD_MANPAGES_FALSE='#' else BUILD_MANPAGES_TRUE='#' BUILD_MANPAGES_FALSE= fi ac_config_files="$ac_config_files globus-gram-job-manager-uninstalled.pc globus-gram-job-manager.pc scripts/Makefile rvf/globus-rvf-edit rvf/Makefile seg/Makefile test/Makefile test/testcred.cnf test/client/Makefile test/jobmanager/failure_test/Makefile test/jobmanager/Makefile test/jobmanager/rsl_size_test/Makefile test/jobmanager/stdio_test/Makefile test/jobmanager/submit_test/Makefile test/jobmanager/user_test/Makefile globus-gram-job-manager.conf gram.logrotate Makefile version.h" ac_config_files="$ac_config_files globus-personal-gatekeeper" ac_config_files="$ac_config_files test/jobmanager/job-manager-script-test.pl" ac_config_files="$ac_config_files test/jobmanager/submit_test/globus-gram-job-manager-submit-test.pl" ac_config_files="$ac_config_files test/jobmanager/failure_test/globus-gram-job-manager-failure-test.pl" ac_config_files="$ac_config_files test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl" ac_config_files="$ac_config_files test/gram-test-wrapper" 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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; 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 if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_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=' :mline /\\$/{ N s,\\\n,, b mline } 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= U= 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=`$as_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. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_CYGPATH_W_TRUE}" && test -z "${USE_CYGPATH_W_FALSE}"; then as_fn_error $? "conditional \"USE_CYGPATH_W\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_TESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_MANPAGES_TRUE}" && test -z "${BUILD_MANPAGES_FALSE}"; then as_fn_error $? "conditional \"BUILD_MANPAGES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $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} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## 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=: # Pre-4.2 versions of Zsh do 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_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } 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.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= 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 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # 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 ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac 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 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_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 || $as_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" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=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 globus_gram_job_manager $as_me 15.8, which was generated by GNU Autoconf 2.69. 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 case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent 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 Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ globus_gram_job_manager config.status 15.8 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 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' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. 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=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= 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 ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_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. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append 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 || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "globus-gram-job-manager-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES globus-gram-job-manager-uninstalled.pc" ;; "globus-gram-job-manager.pc") CONFIG_FILES="$CONFIG_FILES globus-gram-job-manager.pc" ;; "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; "rvf/globus-rvf-edit") CONFIG_FILES="$CONFIG_FILES rvf/globus-rvf-edit" ;; "rvf/Makefile") CONFIG_FILES="$CONFIG_FILES rvf/Makefile" ;; "seg/Makefile") CONFIG_FILES="$CONFIG_FILES seg/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "test/testcred.cnf") CONFIG_FILES="$CONFIG_FILES test/testcred.cnf" ;; "test/client/Makefile") CONFIG_FILES="$CONFIG_FILES test/client/Makefile" ;; "test/jobmanager/failure_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/jobmanager/failure_test/Makefile" ;; "test/jobmanager/Makefile") CONFIG_FILES="$CONFIG_FILES test/jobmanager/Makefile" ;; "test/jobmanager/rsl_size_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/jobmanager/rsl_size_test/Makefile" ;; "test/jobmanager/stdio_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/jobmanager/stdio_test/Makefile" ;; "test/jobmanager/submit_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/jobmanager/submit_test/Makefile" ;; "test/jobmanager/user_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/jobmanager/user_test/Makefile" ;; "globus-gram-job-manager.conf") CONFIG_FILES="$CONFIG_FILES globus-gram-job-manager.conf" ;; "gram.logrotate") CONFIG_FILES="$CONFIG_FILES gram.logrotate" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "version.h") CONFIG_FILES="$CONFIG_FILES version.h" ;; "globus-personal-gatekeeper") CONFIG_FILES="$CONFIG_FILES globus-personal-gatekeeper" ;; "test/jobmanager/job-manager-script-test.pl") CONFIG_FILES="$CONFIG_FILES test/jobmanager/job-manager-script-test.pl" ;; "test/jobmanager/submit_test/globus-gram-job-manager-submit-test.pl") CONFIG_FILES="$CONFIG_FILES test/jobmanager/submit_test/globus-gram-job-manager-submit-test.pl" ;; "test/jobmanager/failure_test/globus-gram-job-manager-failure-test.pl") CONFIG_FILES="$CONFIG_FILES test/jobmanager/failure_test/globus-gram-job-manager-failure-test.pl" ;; "test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl") CONFIG_FILES="$CONFIG_FILES test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl" ;; "test/gram-test-wrapper") CONFIG_FILES="$CONFIG_FILES test/gram-test-wrapper" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; 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 test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands 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= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[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="$ac_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 || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append 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 '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; 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 || $as_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"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_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 # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # 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= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 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 || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;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 s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_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 "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "globus-personal-gatekeeper":F) chmod a+x globus-personal-gatekeeper ;; "test/jobmanager/job-manager-script-test.pl":F) chmod a+x test/jobmanager/job-manager-script-test.pl ;; "test/jobmanager/submit_test/globus-gram-job-manager-submit-test.pl":F) chmod a+x test/jobmanager/submit_test/globus-gram-job-manager-submit-test.pl ;; "test/jobmanager/failure_test/globus-gram-job-manager-failure-test.pl":F) chmod a+x test/jobmanager/failure_test/globus-gram-job-manager-failure-test.pl ;; "test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl":F) chmod a+x test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl ;; "test/gram-test-wrapper":F) chmod a+x test/gram-test-wrapper ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # 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 || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi globus_gram_job_manager-15.8/PaxHeaders.31186/dirt.sh0000644000000000000000000000013214243161455020576 xustar000000000000000030 mtime=1653400365.168783343 30 atime=1653400368.342751182 30 ctime=1653404021.197747442 globus_gram_job_manager-15.8/dirt.sh0000664000175000017500000000005314243161455020735 0ustar00johndoejohndoe00000000000000DIRT_TIMESTAMP=1653033972 DIRT_BRANCH_ID=1 globus_gram_job_manager-15.8/PaxHeaders.31186/configure.ac0000644000000000000000000000013214243161125021560 xustar000000000000000030 mtime=1653400149.353970172 30 atime=1653400366.646768367 30 ctime=1653404021.199747423 globus_gram_job_manager-15.8/configure.ac0000664000175000017500000001423714243161125021730 0ustar00johndoejohndoe00000000000000AC_PREREQ([2.60]) AC_INIT([globus_gram_job_manager],[15.8],[https://github.com/gridcf/gct/issues]) AC_CONFIG_MACRO_DIR([m4]) AC_SUBST([MAJOR_VERSION], [${PACKAGE_VERSION%%.*}]) AC_SUBST([MINOR_VERSION], [${PACKAGE_VERSION##*.}]) AC_SUBST([AGE_VERSION], [2]) AC_SUBST([PACKAGE_DEPS], ["globus-common >= 15, globus-gsi-credential >= 5, globus-gass-cache >= 8, globus-gass-transfer >= 7, globus-gram-protocol >= 11, globus-gssapi-gsi >= 10, globus-gss-assist >= 8, globus-gsi-sysconfig >= 5, globus-callout >= 2, globus-xio >= 3, globus-xio-popen-driver >= 2, globus-rsl >= 9, globus-gram-job-manager-callout-error >= 2, globus-scheduler-event-generator >= 4"]) AC_SUBST([CLIENT_TEST_PACKAGE_DEPS], ["globus-common >= 14, globus-gram-protocol >= 11, globus-io >= 9, globus-rsl >= 9, globus-gss-assist >= 8, globus-gram-client >= 3, globus-gass-server-ez >= 2, globus-gass-transfer >= 7, globus-gssapi-gsi >= 10"]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([1.11 foreign parallel-tests tar-pax]) LT_INIT([dlopen win32-dll]) m4_include([dirt.sh]) AC_SUBST(DIRT_TIMESTAMP) AC_SUBST(DIRT_BRANCH_ID) PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0], [OPENSSL_PKGCONFIG="openssl >= 1.0"]) AC_SUBST([OPENSSL_PKGCONFIG]) PKG_CHECK_MODULES([PACKAGE_DEP], $PACKAGE_DEPS) PKG_CHECK_MODULES([CLIENT_TEST_PACKAGE_DEP], $CLIENT_TEST_PACKAGE_DEPS) AC_SUBST([JOBMANAGER_PATH], ["$PWD"]) PKG_CHECK_EXISTS([globus-gatekeeper], [ GATEKEEPER_PATH="$($PKG_CONFIG --variable=path globus-gatekeeper)"]) AC_SUBST([GATEKEEPER_PATH]) PKG_CHECK_EXISTS([globus-gram-client-tools], [ GRAM_CLIENT_TOOLS_PATH="$($PKG_CONFIG --variable=path globus-gram-client-tools)"]) AC_SUBST([GRAM_CLIENT_TOOLS_PATH]) PKG_CHECK_EXISTS([globus-gass-copy], [ GASS_COPY_PATH="$($PKG_CONFIG --variable=path globus-gass-copy)"]) AC_SUBST([GASS_COPY_PATH]) PKG_CHECK_EXISTS([globus-gass-cache-program], [ GASS_CACHE_PATH="$($PKG_CONFIG --variable=path globus-gass-cache-program)"]) AC_SUBST([GASS_CACHE_PATH]) PKG_CHECK_EXISTS([globus-gram-job-manager-scripts], [ GRAM_JOB_MANAGER_SCRIPT_PATH="$($PKG_CONFIG --variable=path globus-gram-job-manager-scripts)" GRAM_JOB_MANAGER_SCRIPT_PERL5LIB="$($PKG_CONFIG --variable=perl5lib globus-gram-job-manager-scripts)"]) AC_SUBST([GRAM_JOB_MANAGER_SCRIPT_PATH]) AC_SUBST([GRAM_JOB_MANAGER_SCRIPT_PERL5LIB]) PKG_CHECK_EXISTS([globus-gram-job-manager-fork], [ GRAM_JOB_MANAGER_FORK_PERL5LIB="$($PKG_CONFIG --variable=perl5lib globus-gram-job-manager-fork)"]) AC_SUBST([GRAM_JOB_MANAGER_FORK_PERL5LIB]) PKG_CHECK_EXISTS([globus-gram-protocol], [ GRAM_PROTOCOL_PERL5LIB="$($PKG_CONFIG --variable=perl5lib globus-gram-protocol)"]) AC_SUBST([GRAM_PROTOCOL_PERL5LIB]) PKG_CHECK_EXISTS([globus-common], [ COMMON_PERL5LIB="$($PKG_CONFIG --variable=perl5lib globus-common)"]) AC_SUBST([COMMON_PERL5LIB]) PKG_CHECK_EXISTS([globus-proxy-utils], [ GSI_PROXY_UTILS_PATH="$($PKG_CONFIG --variable=path globus-proxy-utils)"]) AC_SUBST([GSI_PROXY_UTILS_PATH]) PKG_CHECK_EXISTS([globus-gsi-cert-utils], [ GSI_CERT_UTILS_PATH="$($PKG_CONFIG --variable=path globus-gsi-cert-utils)"]) AC_SUBST([GSI_CERT_UTILS_PATH]) PKG_CHECK_EXISTS([globus-xio-gsi-driver], [ GLOBUS_XIO_GSI_DRIVER_DLOPEN="$($PKG_CONFIG --variable=dlopen globus-xio-gsi-driver)"]) AC_SUBST([GLOBUS_XIO_GSI_DRIVER_DLOPEN]) PKG_CHECK_EXISTS([globus-xio-popen-driver], [ GLOBUS_XIO_POPEN_DRIVER_DLOPEN="$($PKG_CONFIG --variable=dlopen globus-xio-popen-driver)"]) AC_SUBST([GLOBUS_XIO_POPEN_DRIVER_DLOPEN]) if test -z "$GLOBUS_XIO_GSI_DRIVER_DLOPEN"; then PREOPEN_FORCE="-dlpreopen force" fi AC_SUBST([PREOPEN_FORCE]) AC_CANONICAL_BUILD AC_CANONICAL_HOST case $build:$host in *cygwin*:*mingw*) use_cygpath_w=true ;; *) use_cygpath_w=false ;; esac AM_CONDITIONAL([USE_CYGPATH_W], [test "$use_cygpath_w" = "true"]) AC_PATH_PROGS([OPENSSL], [openssl]) AM_CONDITIONAL([ENABLE_TESTS], [test "x$OPENSSL" != "x"]) if test "X$GLOBUS_VERSION" = "X"; then if test -x ${GLOBUS_LOCATION-/usr}/bin/globus-version; then GLOBUS_VERSION="`${GLOBUS_LOCATION-/usr}/bin/globus-version`" else GLOBUS_VERSION="unknown" fi fi AC_SUBST(GLOBUS_VERSION) AM_PATH_XML2 if test "$ac_cv_have_libxml2" = "yes"; then AC_DEFINE(HAVE_LIBXML2, [1], [Define to 1 if you have libxml2]) fi dnl Some preprocessor tricks to get CMSG_SPACE and co. defined in case $host in *solaris*) AC_DEFINE(__EXTENSIONS__) AC_DEFINE(_XOPEN_SOURCE) AC_DEFINE(_XOPEN_SOURCE_EXTENDED) ;; esac eval "LOGDIR=$localstatedir/log/globus" AC_SUBST(LOGDIR) eval AUDITDIR="$localstatedir/lib/globus/gram-audit" AC_SUBST(AUDITDIR) AC_PROG_LEX AC_PROG_YACC AC_PATH_PROGS([A2X], [a2x a2x.py]) AM_CONDITIONAL(BUILD_MANPAGES, [test x"$A2X" != x]) AC_CONFIG_FILES([ globus-gram-job-manager-uninstalled.pc globus-gram-job-manager.pc scripts/Makefile rvf/globus-rvf-edit rvf/Makefile seg/Makefile test/Makefile test/testcred.cnf test/client/Makefile test/jobmanager/failure_test/Makefile test/jobmanager/Makefile test/jobmanager/rsl_size_test/Makefile test/jobmanager/stdio_test/Makefile test/jobmanager/submit_test/Makefile test/jobmanager/user_test/Makefile globus-gram-job-manager.conf gram.logrotate Makefile version.h ]) AC_CONFIG_FILES([globus-personal-gatekeeper], [chmod a+x globus-personal-gatekeeper]) AC_CONFIG_FILES( [test/jobmanager/job-manager-script-test.pl], [chmod a+x test/jobmanager/job-manager-script-test.pl]) AC_CONFIG_FILES( [test/jobmanager/submit_test/globus-gram-job-manager-submit-test.pl], [chmod a+x test/jobmanager/submit_test/globus-gram-job-manager-submit-test.pl]) AC_CONFIG_FILES( [test/jobmanager/failure_test/globus-gram-job-manager-failure-test.pl], [chmod a+x test/jobmanager/failure_test/globus-gram-job-manager-failure-test.pl]) AC_CONFIG_FILES( [test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl], [chmod a+x test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl]) AC_CONFIG_FILES( [test/gram-test-wrapper], [chmod a+x test/gram-test-wrapper]) AC_OUTPUT globus_gram_job_manager-15.8/PaxHeaders.31186/aclocal.m40000644000000000000000000000013214243162451021135 xustar000000000000000030 mtime=1653400873.563657376 30 atime=1653400873.735655674 30 ctime=1653404021.201747404 globus_gram_job_manager-15.8/aclocal.m40000664000175000017500000013155514243162451021310 0ustar00johndoejohndoe00000000000000# generated automatically by aclocal 1.13.4 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_INSTALLDIR # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_NOARCH_INSTALLDIR # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.13' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.13.4], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.13.4])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/libxml.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) globus_gram_job_manager-15.8/PaxHeaders.31186/globus-gram-job-manager-uninstalled.pc.in0000644000000000000000000000013214243161125027142 xustar000000000000000030 mtime=1653400149.353970172 30 atime=1653401384.920597771 30 ctime=1653404021.202747394 globus_gram_job_manager-15.8/globus-gram-job-manager-uninstalled.pc.in0000664000175000017500000000046314243161125027306 0ustar00johndoejohndoe00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ abs_top_srcdir=@abs_top_srcdir@ abs_top_builddir=@abs_top_builddir@ path=@abs_builddir@ Name: globus-gram-job-manager Description: Grid Community Toolkit - GRAM Jobmanager Version: @VERSION@ Requires.private: @PACKAGE_DEPS@ globus_gram_job_manager-15.8/PaxHeaders.31186/globus-gram-job-manager.pc.in0000644000000000000000000000013214243161125024622 xustar000000000000000030 mtime=1653400149.353970172 30 atime=1653401384.936597612 30 ctime=1653404021.204747375 globus_gram_job_manager-15.8/globus-gram-job-manager.pc.in0000664000175000017500000000036314243161125024765 0ustar00johndoejohndoe00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ path=@sbindir@:@bindir@ Name: globus-gram-job-manager Description: Grid Community Toolkit - GRAM Jobmanager Version: @VERSION@ Requires.private: @PACKAGE_DEPS@ globus_gram_job_manager-15.8/PaxHeaders.31186/globus-gram-job-manager.conf.in0000644000000000000000000000013214243161125025145 xustar000000000000000030 mtime=1653400149.353970172 30 atime=1653401385.233594674 30 ctime=1653404021.205747366 globus_gram_job_manager-15.8/globus-gram-job-manager.conf.in0000664000175000017500000000015714243161125025311 0ustar00johndoejohndoe00000000000000-globus-toolkit-version @GLOBUS_VERSION@ -log-pattern @LOGDIR@/gram_$(LOGNAME).log -audit-directory @AUDITDIR@ globus_gram_job_manager-15.8/PaxHeaders.31186/gram.logrotate.in0000644000000000000000000000013214243161125022547 xustar000000000000000030 mtime=1653400149.360970101 30 atime=1653401385.248594525 30 ctime=1653404021.207747347 globus_gram_job_manager-15.8/gram.logrotate.in0000664000175000017500000000024614243161125022712 0ustar00johndoejohndoe00000000000000@LOGDIR@/gram_*.log { daily dateext compress missingok notifempty nocreate rotate 4 sharedscripts copytruncate su root root } globus_gram_job_manager-15.8/PaxHeaders.31186/version.h.in0000644000000000000000000000013214243161125021535 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653401385.279594218 30 ctime=1653404021.208747337 globus_gram_job_manager-15.8/version.h.in0000664000175000017500000000020414243161125021672 0ustar00johndoejohndoe00000000000000static globus_version_t local_version = { @MAJOR_VERSION@, @MINOR_VERSION@, @DIRT_TIMESTAMP@, @DIRT_BRANCH_ID@ }; globus_gram_job_manager-15.8/PaxHeaders.31186/globus-personal-gatekeeper.in0000644000000000000000000000013114243161125025047 xustar000000000000000030 mtime=1653400149.354970162 29 atime=1653401385.29559406 30 ctime=1653404021.210747318 globus_gram_job_manager-15.8/globus-personal-gatekeeper.in0000664000175000017500000003662714243161125025227 0ustar00johndoejohndoe00000000000000#!/bin/sh # # Copyright 1999-2006 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # PACKAGE=@PACKAGE@ VERSION=@VERSION@ DIRT_TIMESTAMP=@DIRT_TIMESTAMP@ DIRT_BRANCH_ID=@DIRT_BRANCH_ID@ prefix="${GLOBUS_LOCATION-@prefix@}" exec_prefix="@exec_prefix@" sbindir="@sbindir@" bindir="@bindir@" libdir="@libdir@" includedir="@includedir@" datarootdir="@datarootdir@" datadir="@datadir@" libexecdir="@libexecdir@" sysconfdir="@sysconfdir@" sharedstatedir="@sharedstatedir@" localstatedir="@localstatedir@" PATH=${sbindir}:${bindir}:${PATH} short_usage="globus-personal-gatekeeper [-help] [-start] [-list] [-killall] ..." long_usage () { cat >&2 <] [-auditdir ] [-port ] [-log[=DIRECTORY]] [-seg] [-acctfile file] Starts a new gatekeeper, mapping default service to a jobmanager. By default, the jobmanager is configured with jmtype=fork. The option -port can be used to restrict the gatekeeper to use a particular port. The default is to let the system choose a port. The -log switch causes the job manager to write log messages to files in DIRECTORY. If -seg is used, then the Scheduler Event Generator will be used to poll job state. The -auditdir switch tells the jobmanager where to store the audit-records. The -acctfile switch tells the gatekeeper where to log accounting records. -list Scans for active personal gatekeepers. If found, an authentication test is made to determine if the gatekeeper is still functioning. If the authentictation test succeeds, the contact to that gatekeeper is printed out. -directory Returns the temporary directory used by the personal gatekeeper associated with . The directory contains grid-mapfile, log file, etc. -kill Finds and kills the personal gatekeeper associated with . -killall Finds all personal gatekeepers running on the local host and kills them. EOF } globus_args_short_usage() { cat 1>&2 <&2 <&2 # exit 1 #fi ${debug} "done." } get_jm_arg_value() { desired="$1" shift while [ "$#" -gt 0 ]; do if [ "$1" = "$desired" ]; then echo "$2" break fi shift; done } killem () { found=false foundit=false user=${LOGNAME} user=${user:-$USER} user=${user:-`whoami`} for dir in `ls -1d ${file_location}/${file_prefix}* 2> /dev/null` do if [ -n "${dir}" ]; then found=true contact= if [ -r ${dir}/gatekeeper.log ]; then contact="`grep 'GRAM contact' ${dir}/gatekeeper.log | tail -1 | sed 's/^.*GRAM contact: //'`" ${debug} "found contact= [${contact}]" fi dokill=false if [ -z "$1" ]; then dokill=true else if [ "$1" = "$contact" ]; then dokill=true foundit=true fi fi if [ $dokill = true ]; then echo "killing gatekeeper: \"${contact}\"" if [ -r ${dir}/gatekeeper.pid ]; then pid=`cat ${dir}/gatekeeper.pid` kill -9 $pid & fi cd statedir="${TMPDIR:-/tmp}/${user}/`echo \"${dir}\" | sed -e 's|.*/||'`" if [ -r ${dir}/jobmanager.conf ]; then host=`globus_hostname` args=`cat "${dir}/jobmanager.conf"` service_tag="`eval get_jm_arg_value -service-tag $args`" if [ "$service_tag" = "" ]; then service_tag=untagged fi lrm="`eval get_jm_arg_value -type $args`" tagged="$HOME/.globus/job/$host/$lrm.$service_tag" pidfile="$tagged.pid" sockfile="$tagged.sock" lockfile="$tagged.lock" credfile="$tagged.cred" jmpid="" if [ -r "$pidfile" ]; then read jmpid < "$pidfile" fi if [ "$jmpid" != "" ]; then kill $jmpid fi [ -e "$pidfile" ] && rm "$pidfile" [ -e "$sockfile" ] && rm "$sockfile" [ -e "$lockfile" ] && rm "$lockfile" [ -e "$credfile" ] && rm "$credfile" fi rm -rf ${dir} & rm -rf "${statedir}" & fi fi done if [ $found = false ]; then echo "No personal gatekeepers found on this host." fi if [ -n "$1" -a ${foundit} = false ]; then echo "Could not find the personal gatekeeper you specified." fi } findit () { foundit=false for dir in `ls -1d ${file_location}/${file_prefix}* 2>/dev/null` do if [ -n "${dir}" ]; then found=true contact= if [ -r ${dir}/gatekeeper.log ]; then contact="`grep 'GRAM contact' ${dir}/gatekeeper.log | tail -1 | sed 's/^.*GRAM contact: //'`" if [ "$1" = "$contact" ]; then foundit=true echo "${dir}" fi fi fi done if [ ${foundit} = false ]; then echo "Could not find the personal gatekeeper you specified." fi } listem () { found=false foundold=false for dir in `ls -1d ${file_location}/${file_prefix}* 2> /dev/null` do if [ -n "${dir}" ]; then found=true contact= if [ -r ${dir}/gatekeeper.log ]; then contact="`grep 'GRAM contact' ${dir}/gatekeeper.log | tail -1 | sed 's/^.*GRAM contact: //'`" ${debug} "found contact= [${contact}]" globusrun -a -r "${contact}" 1>/dev/null 2>/dev/null if [ $? -eq 0 ]; then echo "${contact}" else ${debug} "could not authenticate to the contact -- old" foundold=true fi fi fi done if [ $found = false ]; then echo "" echo "no personal gatekeepers found on this host" fi if [ $foundold = true ]; then echo "" echo "Found old non-functioning personal gatekeeper(s). Please use" echo "this command with the -killall option to clean them up." fi } cleanup () { if [ ${docleanup} = true ]; then rm -rf ${scratch} rm -rf ${statefiledir} docleanup=false fi } jmtype=fork port=0 docleanup=false startnew=false globus_hostname() { if command -v globus-hostname > /dev/null 2>&1; then globus-hostname | cut -d. -f1 elif command -v hostname > /dev/null 2>&1; then hostname | cut -d. -f1 elif command -v uname > /dev/null 2>&1; then uname -n | cut -d. -f1 fi } host=`globus_hostname` file_location="$HOME/.globus" file_prefix="gram.$host" log=never seg=0 startargs='' single='' logdir="" valgrind=0 while [ -n "$1" ]; do case "$1" in -help | -h | --help | -usage | --usage) long_usage exit 0 ;; -version|--version) if [ "X${PROGRAM_NAME}" != "X" -a \ "X${PROGRAM_VERSION}" != "X" ]; then echo "${PROGRAM_NAME}: ${PROGRAM_VERSION}" elif [ "X${PACKAGE}" != "X" -a \ "X${VERSION}" != "X" ]; then echo "${PACKAGE}: ${VERSION}" else echo "No version information available." fi exit 0 ;; -versions|--versions) __AT__=@ if [ -n "${PACKAGE}" -a -n "${VERSION}" -a \ -n "${DIRT_TIMESTAMP}" -a -n "${DIRT_BRANCH_ID}" -a \ "X${DIRT_TIMESTAMP}" != "X${__AT__}DIRT_TIMESTAMP${__AT__}" -a \ "X${DIRT_BRANCH_ID}" != "X${__AT__}DIRT_BRANCH_ID${__AT__}" ]; then echo "${PACKAGE}: ${VERSION} (${DIRT_TIMESTAMP}-${DIRT_BRANCH_ID})" else echo "No DiRT information available." fi exit 0; ;; -kill) if test -z "$2" ; then echo "ERROR: -kill option requires a contact string" >&2 exit 1 fi verify_setup kill killem "$2" exit 0 ;; -killall) verify_setup kill killem "" exit 0 ;; -list) listem exit 0 ;; -directory) findit "$2" exit 0 ;; -start) startnew=true shift while [ -n "$1" ]; do case $1 in -jmtype) jmtype="$2" shift ;; -log) logdir="$HOME" ;; -log=*) logdir=`expr "$1" : "-log=\(.*\)"` if [ "$logdir" = "" ]; then logdir="$HOME" fi ;; -single) single="$1" ;; -valgrind) valgrind=1 ;; -port) port="$2" shift ;; -seg) seg=1 ;; -auditdir) auditdir="$2" shift ;; -acctfile) acctfile="$2" shift; ;; *) if [ $(expr index "$1" " ") = 0 ]; then startargs="$startargs $1" else startargs="$startargs '$1'" fi ;; esac shift done break ;; -debug) debug=echo ;; *) globus_args_unrecognized_option "$1" ;; esac shift done if [ $startnew != true ]; then globus_args_short_usage exit 1 fi user=${LOGNAME:-$USER} user=${user:-`id -un`} if test -z "${user}"; then echo "ERROR: globus-personal-gatekeeper: can not determine user name" >&2 exit 1 fi verify_setup scratch="${file_location}/${file_prefix}.$$" statefiledir="${TMPDIR:-/tmp}/${user}/${file_prefix}.$$" trap cleanup 0 1 2 3 6 9 12 15 docleanup=true mkdir -p "${scratch}" mkdir -p "${statefiledir}" if test $? != 0; then echo "Error making state file dir (${statefiledir})." 1>&2 exit 1 fi for file in gridmap services.conf gatekeeper.conf jobmanager.conf gatekeeper.log ; do rm -f ${scratch}/${file} done subject=`grid-proxy-info -identity 2> /dev/null` if [ $? != 0 ] || [ x"$subject" = x ]; then subject=`grid-cert-info -subject 2> /dev/null` fi if [ x"$subject" = x ]; then echo "Unable to determine security identity" exit 1 fi cat > ${scratch}/gridmap <&2 exit 1 fi cat > ${scratch}/jobmanager < ${scratch}/jobmanager < ${scratch}/gatekeeper.conf <> ${scratch}/gatekeeper.conf fi if [ ! -z "${acctfile}" ]; then echo "-acctfile $acctfile" >> ${scratch}/gatekeeper.conf fi if [ -x ${libexecdir}/config.guess ]; then host_info=`${libexecdir}/config.guess` host_cputype=`echo $host_info | awk -F'-' '{print $1}'` host_manufacturer=`echo $host_info | awk -F'-' '{print $2}'` else host_cputype=`uname -m` host_manufacturer=unknown fi host_osname=`uname -s` host_osversion=`uname -r` if [ "$logdir" != "" ]; then log_line=`echo "-stdio-log \"$logdir\""` log_levels="-log-levels 'FATAL|ERROR'" fi if [ -x "${bindir}/globus-version" ]; then globus_toolkit_version="`${bindir}/globus-version`" else globus_toolkit_version="Unknown" fi cat > ${scratch}/jobmanager.conf <> ${scratch}/jobmanager.conf <> ${scratch}/jobmanager.conf fi echo "-globus-job-dir ${TMPDIR:-/tmp}" >> ${scratch}/jobmanager.conf docleanup=false globus-gatekeeper -c ${scratch}/gatekeeper.conf -test \ 1>/dev/null 2>/dev/null x=$? if [ $x -ne 0 ]; then echo "ERROR: gatekeeper was not properly configured" >&2 docleanup=true exit 1 fi globus-gatekeeper -c ${scratch}/gatekeeper.conf < /dev/null > /dev/null 2>/dev/null & x=$? pid=$! if [ $x -ne 0 ]; then echo "ERROR: gatekeeper did not start up properly" >&2 docleanup=true exit 1 fi echo "$pid" > ${scratch}/gatekeeper.pid contact= shallexit= count=0 while [ ${count} -lt 10 -a -z "${contact}" -a -z "${shallexit}" ]; do sleep 1 contact="`grep 'GRAM contact' ${scratch}/gatekeeper.log`" shallexit="`grep FAILED_PLEASE_EXIT ${scratch}/gatekeeper.log`" count=$((${count} + 1)) done if [ ${count} -ge 10 -o -n "${shallexit}" ]; then echo "ERROR: gatekeeper did not start up properly" >&2 docleanup=true exit 1 else host=`echo "$contact" | cut -d: -f5` port=`echo "$contact" | cut -d: -f6` cat >> ${scratch}/jobmanager.conf <job_contact_path to request */ globus_hashtable_t request_hash; /** Hashtable mapping job id->job_contact_path */ globus_hashtable_t job_id_hash; /** Lock for thread-safety */ globus_mutex_t mutex; /** Condition for noting when all jobs are done */ globus_cond_t cond; /** Unix domain socket for receiving new job requests for other * job managers */ int socket_fd; /** XIO Handle for socket_fd so we can use XIO's select loop */ globus_xio_handle_t active_job_manager_handle; /** Lock file related to the socket_fd */ int lock_fd; /** Socket file path */ char * socket_path; /** Lock file path */ char * lock_path; /** Pid file path */ char * pid_path; /** OSG wants to have different clients connecting to the same job manager * to have separate script queues fto have scalability with nonresponsive * clients. We hash on client's address and have separate script queue and * available slots. */ globus_list_t * scripts_per_client; /** Fifo of job state callback contexts to run */ globus_fifo_t state_callback_fifo; /** Number of job state contact slots available */ int state_callback_slots; /** Path of job manager credential */ char * cred_path; /** Grace period oneshot */ globus_callback_handle_t grace_period_timer; /** All jobs are done and grace period is complete */ globus_bool_t done; globus_fifo_t seg_event_queue; int seg_pause_count; /** All jobs are being stopped. Don't allow new ones in */ globus_bool_t stop; /** List of jobs that still need to be restarted, but haven't yet */ globus_list_t * pending_restarts; /** Periodic callback handle to process jobs in the pending_restarts list */ globus_callback_handle_t pending_restart_handle; /** Usage stats tracking data */ globus_i_gram_usage_tracker_t * usagetracker; /** * Error message extension for early misconfiguration-type errors that * occur before a request is read. */ char * gt3_failure_message; globus_xio_attr_t script_attr; /** * Periodic callback handle to expire jobs which completed or failed * but didn't have two-phase end happen. */ globus_callback_handle_t expiration_handle; /** * Periodic callback handle to abort if something removes the lock file. */ globus_callback_handle_t lockcheck_handle; /** * Periodic callback handle to clse idle perl script xio handles */ globus_callback_handle_t idle_script_handle; } globus_gram_job_manager_t; /** * Job Manager Request */ typedef struct globus_gram_job_manager_request_s { /** Link to LRM-specific configuration */ globus_gram_job_manager_config_t * config; /** Link to LRM-specific runtime state */ globus_gram_job_manager_t * manager; /** * Job State * * The state of the job. This corresponds to the job state machine * described in the GRAM documentation. * * Use globus_gram_job_manager_request_set_status() to change. * */ globus_gram_protocol_job_state_t status; /** * Terminal state * * The projected terminal state of the job. In the case of multiple * ids returned from the submit script, this will be set to failed if * any subjobs failed, or done otherwise. */ globus_gram_protocol_job_state_t expected_terminal_state; /** * Last time status was changed * * The time that the status member was last changed. * Automatically set by globus_gram_job_manager_request_set_status(). */ time_t status_update_time; /** * Job Failure Reason * * If the state is GLOBUS_GRAM_STATE_FAILED, then this * is an integer code that defines the failure. It is one of * GLOBUS_GRAM_PROTOCOL_ERROR_*. */ int failure_code; /** * Extended error message */ char * gt3_failure_message; /** * Extended error type */ char * gt3_failure_type; /** * Extended error information for staging errors (source url) */ char * gt3_failure_source; /** * Extended error information for staging errors (destination url) */ char * gt3_failure_destination; /** * Job Exit Code * * If the state is GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, then this * is an integer exit code from the job's executable. */ int exit_code; /** Stop Reason * * If the job request is stopped either by an explicit signal or a proxy * timeout, this will be set to something besides 0, and that will be * sent as part of a fail message to satisfy condor */ int stop_reason; /** * Job identifier string * * String representation of the LRM job id. May be a comma-separated * string of separately-pollable ID values. This value is filled in when the * request is submitted. This version is modified as the subjobs complete. */ char * job_id_string; /** * Job identifier string * * String representation of the LRM job id. May be a comma-separated string * of separately-pollable ID values. This value is filled in when the * request is submitted. */ char * original_job_id_string; /** * Poll Frequency * * How often should a check of the job status and output files be done. */ unsigned int poll_frequency; /** * Dry Run * * If this is GLOBUS_TRUE, do not actually submit the job to the scheduler, * just verify the job parameters. */ globus_bool_t dry_run; /** * * Two-phase commit. * * Non-zero if request should be confirmed via another signal. * * The value is how many seconds to wait before timing out. */ int two_phase_commit; /** * Value to extend the two-phase commit wait time by if a commit extend * signal arrives. */ int commit_extend; /** Time when job manager process is first begun */ time_t creation_time; /** Time when job manager gets jobid from scheduler */ time_t queued_time; /** Job-specific GASS cache tag. */ char * cache_tag; /** RSL substitution symbol table */ globus_symboltable_t symbol_table; /** Parsed RSL values */ globus_rsl_t * rsl; /** Canonical RSL document */ char * rsl_spec; /** * Previous Job Manager Contact * * If we're restarting from a terminated Job Manager, this will specify * the old job contact so we can locate the Job Manager state file. */ char * jm_restart; /** * Unique job identifier * * Unique id for this job that will be consistent * across jobmanager restarts/recoveries. */ char * uniq_id; /** Job contact string */ char * job_contact; /** Unique job contact suffix */ char * job_contact_path; /** Job-specific persistence file */ char * job_state_file; /** Job-specific scratch directory after RSL evaluation */ char * scratch_dir_base; /** * Job scratch directory. * * Scratch subdirectory created for this job. It will be removed * when the job completes. This is a subdirectory of scratch_dir_base. */ char * scratchdir; /** remote_io_url value */ char * remote_io_url; /** file to write remote_io_url to */ char * remote_io_url_file; /** Job-specific proxy file */ char * x509_user_proxy; /** Thread safety */ globus_mutex_t mutex; /** Thread safety */ globus_cond_t cond; /** Clients registered for job state changes */ globus_list_t * client_contacts; /** List of file_stage_in values which haven't yet been processed */ globus_list_t * stage_in_todo; /** List of file_stage_in_shared values which haven't yet been processed */ globus_list_t * stage_in_shared_todo; /** List of file_stage_out values which haven't yet been processed */ globus_list_t * stage_out_todo; /** List of file_stream_out values which haven't yet been processed */ globus_list_t * stage_stream_todo; /** Current state machine state */ globus_gram_jobmanager_state_t jobmanager_state; /** State to resume from in the case of a restart */ globus_gram_jobmanager_state_t restart_state; /** * True if a job state change hasn't been sent to the callbacks registered * with it */ globus_bool_t unsent_status_change; /** Timer tracking until the next job poll */ globus_callback_handle_t poll_timer; /** * Queue of job-specific operations (signals, cancel, etc) sent via the job * interface. */ globus_fifo_t pending_queries; /** Directory for temporary job-specific files. */ char * job_dir; /** * streaming_requested is set to true if there's at least one remote * destination for stdout or stderr. Otherwise, it's false. */ globus_bool_t streaming_requested; /** Job-specific cache path after RSL evaluation */ char * cache_location; /** Handle to add/remove files from the GASS cache */ globus_gass_cache_t cache_handle; /** Path to job history file */ char * job_history_file; /** Last job state stored in the job history file */ int job_history_status; /** * Value of the GLOBUS_CACHED_STDOUT RSL substitution */ char * cached_stdout; /** * Value of the GLOBUS_CACHED_STDERR RSL substitution */ char * cached_stderr; /** Security context used to submit job */ gss_ctx_id_t response_context; /** Job Contact of this job when being handled by another process */ char * old_job_contact; /** * Queue of pending SEG events */ globus_fifo_t seg_event_queue; /** * Timestamp of the last SEG event we've completely processed. Initially * set to the time of the job submission. */ time_t seg_last_timestamp; /** * TG Gateway user for auditing (from SAML assertion) */ char * gateway_user; /** * Information to be tracked for usagestats */ globus_i_gram_usage_job_tracker_t job_stats; /** * Per-job log configuration, a bitwise or of values from the * globus_gram_job_manager_log_level_t enumeration. */ int job_log_level; /** * Per-job log filename pattern. If not set, the global log path will be used */ char * log_pattern; } globus_gram_jobmanager_request_t; typedef struct globus_gram_job_manager_ref_s { /* Local copy of the unique hashtable key */ char * key; /* Pointer to manager */ globus_gram_job_manager_t * manager; /* Pointer to the request, may be NULL if the request is swapped out of * memory because there is no active reference to it */ globus_gram_jobmanager_request_t * request; /* Count of callbacks, queries, etc that refer to this job. * When 0, the request is eligible for removal from memory. */ int reference_count; /* Timer to delay cleaning up unreferenced requests */ globus_callback_handle_t cleanup_timer; /* Current job state, for status updates without having to reload */ globus_gram_protocol_job_state_t job_state; /* Current job failure code, for status updates without having to reload */ int failure_code; /* Job exit code */ int exit_code; /* Number of times status query was processed while the job is swapped * out */ int status_count; /* * True if the job has been loaded from the state file at recovery * time, but hasn't yet had its state machine started. In that case, * we have to go to the TWO_PHASE_COMMITTED state unless the job has * completed execution. */ globus_bool_t loaded_only; /** * Timestamp of when to auto-destroy this job. Thsi will be 0 unless * the job has completed and failed to have it's two-phase commit end. * A periodic event will poll through the refs that have this attribute * set, and will reload them with a fake commit to get them cleaned up. */ time_t expiration_time; /* The following are used for the internal fakeseg stuff for condor*/ /** * Timestamp of the last SEG event we've completely processed. Initially * set to the time of the job submission. */ time_t seg_last_timestamp; /** * Size of the Condor log file last time we polled. */ globus_off_t seg_last_size; } globus_gram_job_manager_ref_t; /* globus_gram_job_manager_config.c */ int globus_gram_job_manager_config_init( globus_gram_job_manager_config_t * config, int argc, char ** argv); void globus_gram_job_manager_config_destroy( globus_gram_job_manager_config_t * config); int globus_i_gram_parse_log_levels( const char * unparsed_string, int * log_levels, char ** error_string); /* globus_gram_job_manager_request.c */ #ifdef DEBUG_THREADS #define GlobusGramJobManagerRequestLock(request) \ do { \ globus_gram_job_manager_request_log( \ request, \ "JM: [tid=%ld] Locking request (%s:%d) %p\n", \ (long) globus_thread_self(), \ __FILE__, \ __LINE__, \ (request)); \ globus_mutex_lock(&(request)->mutex); \ } while (0) #define GlobusGramJobManagerRequestUnlock(request) \ do { \ globus_gram_job_manager_request_log( \ request, \ "JM: [tid=%ld] Unlocking request (%s:%d) %p\n", \ (long) globus_thread_self() \ __FILE__, \ __LINE__, \ (request)); \ globus_mutex_unlock(&(request)->mutex); \ } while (0) #else #define GlobusGramJobManagerRequestLock(request) \ globus_mutex_lock(&(request)->mutex) #define GlobusGramJobManagerRequestUnlock(request) \ globus_mutex_unlock(&(request)->mutex) #endif int globus_gram_job_manager_request_init( globus_gram_jobmanager_request_t ** request, globus_gram_job_manager_t * manager, char * rsl, gss_cred_id_t delegated_credential, gss_ctx_id_t response_ctx, const char * peer_address, globus_gsi_cred_handle_t peer_cred, globus_bool_t reinit, char ** old_job_contact, globus_gram_jobmanager_request_t ** old_job_request, char ** gt3_failure_message); void globus_gram_job_manager_request_destroy( globus_gram_jobmanager_request_t * request); void globus_gram_job_manager_request_free( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_request_set_status( globus_gram_jobmanager_request_t * request, globus_gram_protocol_job_state_t status); int globus_gram_job_manager_request_set_status_time( globus_gram_jobmanager_request_t * request, globus_gram_protocol_job_state_t status, time_t valid_time); void globus_gram_job_manager_request_log( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_log_level_t level, const char * format, ...); int globus_gram_job_manager_request_acct( globus_gram_jobmanager_request_t * request, const char * format, ...); int globus_gram_job_manager_symbol_table_populate( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_history_file_set( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_history_file_create( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_request_load( globus_gram_job_manager_t * manager, int http_body_fd, int context_fd, gss_cred_id_t credential, const char * peer_address, globus_gsi_cred_handle_t peer_cred_handle, size_t content_length, globus_gram_jobmanager_request_t ** request, gss_ctx_id_t * context, char ** contact, int * job_state_mask, char ** old_job_contact, globus_gram_jobmanager_request_t ** old_job_request, globus_bool_t * version_only, char ** gt3_failure_message); int globus_gram_job_manager_request_start( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, int response_fd, const char * client_contact, int job_state_mask); void globus_gram_job_manager_destroy_directory( globus_gram_jobmanager_request_t * request, const char * directory); int globus_gram_job_manager_request_load_all( globus_gram_job_manager_t * manager); int globus_i_gram_request_stdio_update( globus_gram_jobmanager_request_t * request, globus_rsl_t * update_rsl); int globus_i_gram_symbol_table_populate( globus_gram_job_manager_config_t * config, globus_symboltable_t * symbol_table); /* globus_gram_job_manager_validate.c */ /** * Select when an RSL parameter is valid or required. * @ingroup globus_gram_job_manager_rsl_validation */ typedef enum { GLOBUS_GRAM_VALIDATE_JOB_SUBMIT = 1, GLOBUS_GRAM_VALIDATE_JOB_MANAGER_RESTART = 2, GLOBUS_GRAM_VALIDATE_STDIO_UPDATE = 4 } globus_gram_job_manager_validation_when_t; extern int globus_gram_job_manager_validation_destroy( globus_list_t * validation_records); extern int globus_gram_job_manager_validate_rsl( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, globus_gram_job_manager_validation_when_t when); /* globus_gram_job_manager_contact.c */ int globus_gram_job_manager_contact_add( globus_gram_jobmanager_request_t * request, const char * contact, int job_state_mask); int globus_gram_job_manager_contact_remove( globus_gram_jobmanager_request_t * request, const char * contact); int globus_gram_job_manager_contact_list_free( globus_gram_jobmanager_request_t * request); void globus_gram_job_manager_contact_state_callback( globus_gram_jobmanager_request_t * request, globus_bool_t restart_state_machine); int globus_gram_job_manager_write_callback_contacts( globus_gram_jobmanager_request_t * request, FILE * fp); int globus_gram_job_manager_read_callback_contacts( globus_gram_jobmanager_request_t * request, FILE * fp); /* globus_gram_job_manager_state.c */ extern const char * globus_i_gram_job_manager_state_strings[]; int globus_gram_job_manager_read_request( globus_gram_job_manager_t * manager, int fd, size_t content_length, char ** rsl, char ** client_contact, int * job_state_mask, globus_bool_t * version_only); int globus_gram_job_manager_reply( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_t * manager, int response_code, const char * job_contact, int response_fd, gss_ctx_id_t response_context, const char * gt3_failure_message); int globus_gram_job_manager_validate_username( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_state_machine_register( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, globus_reltime_t * delay); int globus_i_gram_remote_io_url_update( globus_gram_jobmanager_request_t * request); void globus_gram_job_manager_state_machine_callback( void * user_arg); /* globus_gram_job_manager_gsi.c */ int globus_gram_job_manager_import_sec_context( globus_gram_job_manager_t * manager, int context_fd, gss_ctx_id_t * response_contextp); globus_bool_t globus_gram_job_manager_gsi_used( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_gsi_register_proxy_timeout( globus_gram_job_manager_t * manager, gss_cred_id_t cred, int timeout, globus_callback_handle_t * callback_handle); int globus_gram_job_manager_gsi_get_subject( char ** subject_name); int globus_gram_job_manager_gsi_update_credential( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, gss_cred_id_t credential); int globus_gram_job_manager_gsi_write_credential( globus_gram_jobmanager_request_t * request, gss_cred_id_t credential, const char * path); int globus_gram_job_manager_gsi_update_proxy_timeout( globus_gram_job_manager_t * manager, gss_cred_id_t cred, int timeout, globus_callback_handle_t * callback_handle); int globus_gram_job_manager_gsi_relocate_proxy( globus_gram_jobmanager_request_t * request, const char * new_proxy); int globus_gram_job_manager_call_authz_callout( globus_gram_job_manager_config_t * config, gss_ctx_id_t request_context, gss_ctx_id_t authz_context, const char * uniq_id, const globus_rsl_t * rsl, const char * auth_type); int globus_gram_job_manager_authz_query( globus_gram_job_manager_t * manager, globus_gram_protocol_handle_t handle, const char * uri, const char * auth_type); int globus_gram_gsi_get_dn_hash( gss_cred_id_t cred, unsigned long * hash); /* globus_gram_job_manager_query.c */ void globus_gram_job_manager_query_callback( void * arg, globus_gram_protocol_handle_t handle, globus_byte_t * buf, globus_size_t nbytes, int errorcode, char * uri); void globus_gram_job_manager_query_reply( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_query_t * query); /* globus_gram_job_manager_staging.c */ int globus_gram_job_manager_staging_create_list( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_streaming_list_replace( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_staging_remove( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_staging_type_t type, char * from, char * to); int globus_gram_job_manager_staging_write_state( globus_gram_jobmanager_request_t * request, FILE * fp); int globus_gram_job_manager_staging_read_state( globus_gram_jobmanager_request_t * request, FILE * fp); void globus_gram_job_manager_staging_free_all( globus_gram_jobmanager_request_t * request); /* globus_gram_job_manager_rsl.c */ globus_rsl_t * globus_gram_job_manager_rsl_merge( globus_rsl_t * base_rsl, globus_rsl_t * override_rsl); globus_bool_t globus_gram_job_manager_rsl_attribute_exists( globus_rsl_t * rsl, const char * attribute); globus_bool_t globus_gram_job_manager_rsl_need_stage_in( globus_gram_jobmanager_request_t * request); globus_bool_t globus_gram_job_manager_rsl_need_stage_out( globus_gram_jobmanager_request_t * request); globus_bool_t globus_gram_job_manager_rsl_need_file_cleanup( globus_gram_jobmanager_request_t * request); globus_bool_t globus_gram_job_manager_rsl_need_scratchdir( globus_gram_jobmanager_request_t * request); globus_bool_t globus_gram_job_manager_rsl_need_restart( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_rsl_env_add( globus_rsl_t * ast_node, const char * var, const char * value); int globus_gram_job_manager_rsl_eval_one_attribute( globus_gram_jobmanager_request_t * request, char * attribute, char ** value); int globus_gram_job_manager_rsl_remove_attribute( globus_rsl_t * rsl, char * attribute); globus_rsl_t * globus_gram_job_manager_rsl_extract_relation( globus_rsl_t * rsl, const char * attribute); int globus_gram_job_manager_rsl_add_relation( globus_rsl_t * rsl, globus_rsl_t * relation); int globus_gram_job_manager_rsl_parse_value( char * value_string, globus_rsl_value_t ** rsl_value); int globus_gram_job_manager_rsl_evaluate_value( globus_symboltable_t * symbol_table, globus_rsl_value_t * value, char ** value_string); int globus_gram_job_manager_rsl_eval_string( globus_symboltable_t * symbol_table, const char * string, char ** value_string); int globus_gram_job_manager_rsl_attribute_get_string_value( globus_rsl_t * rsl, const char * attribute, const char ** value_ptr); int globus_gram_job_manager_rsl_attribute_get_boolean_value( globus_rsl_t * rsl, const char * attribute, globus_bool_t * value_ptr); int globus_gram_job_manager_rsl_attribute_get_int_value( globus_rsl_t * rsl, const char * attribute, int * value_ptr); int globus_gram_rsl_add_output( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, const char * attribute, const char * value); int globus_gram_rsl_add_stream_out( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, const char * source, const char * destination); /* globus_gram_job_manager_state_file.c */ int globus_gram_job_manager_state_file_set( globus_gram_jobmanager_request_t * request, char ** state_file); int globus_gram_job_manager_file_lock( int fd); int globus_gram_job_manager_state_file_read( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_state_file_write( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_state_file_register_update( globus_gram_jobmanager_request_t * request); /* globus_gram_job_manager_script.c */ int globus_gram_job_manager_script_stage_in( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_script_stage_out( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_script_submit( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_script_poll( globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_script_signal( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_query_t * query); int globus_gram_job_manager_script_cancel( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_query_t * query); globus_bool_t globus_i_gram_job_manager_script_valid_state_change( globus_gram_jobmanager_request_t * request, globus_gram_protocol_job_state_t new_state); void globus_gram_job_manager_script_close_all( globus_gram_job_manager_t * manager); void globus_gram_script_close_idle( void * arg); extern globus_xio_driver_t globus_i_gram_job_manager_popen_driver; extern globus_xio_stack_t globus_i_gram_job_manager_popen_stack; /* globus_gram_job_manager_seg.c */ globus_result_t globus_gram_job_manager_init_seg( globus_gram_job_manager_t * request); globus_result_t globus_gram_job_manager_shutdown_seg( globus_gram_job_manager_t * manager); void globus_gram_job_manager_seg_handle_event( globus_gram_jobmanager_request_t * request); void globus_gram_job_manager_seg_pause( globus_gram_job_manager_t * manager); void globus_gram_job_manager_seg_resume( globus_gram_job_manager_t * manager); int globus_gram_job_manager_seg_parse_condor_id( globus_gram_jobmanager_request_t * request, char ** condor_id); /* globus_gram_job_manager_auditing.c */ int globus_gram_job_manager_auditing_file_write( globus_gram_jobmanager_request_t * request); /* globus_gram_job_manager.c */ #ifdef DEBUG_THREADS #define GlobusGramJobManagerLock(manager) \ do { \ globus_gram_job_manager_log( \ manager, \ "JM: [tid=%ld] Locking manager (%s:%d) %p\n", \ (long) globus_thread_self() \ __FILE__, \ __LINE__, \ (manager)); \ globus_mutex_lock(&(manager)->mutex); \ } while (0) #define GlobusGramJobManagerUnlock(manager) \ do { \ globus_gram_job_manager_log( \ manager, \ "JM: [tid=%d] Unlocking manager (%s:%d) %p\n", \ (long) globus_thread_self() \ __FILE__, \ __LINE__, \ (manager)); \ globus_mutex_unlock(&(manager)->mutex); \ } while (0) #define GlobusGramJobManagerWait(manager) \ do { \ globus_gram_job_manager_log( \ manager, \ GLOBUS_GRAM_LOG_TRACE, \ "JM: [tid=%ld] Condition Wait: Unlocking manager (%s:%d) %p\n", \ (long) globus_thread_self() \ __FILE__, \ __LINE__, \ (manager)); \ globus_cond_wait(&(manager)->cond, &(manager)->mutex); \ globus_gram_job_manager_log( \ manager, \ GLOBUS_GRAM_LOG_TRACE, \ "JM: [tid=%ld] Condition Wait Returns: Locking manager (%s:%d) %p\n", \ (long) globus_thread_self() \ __FILE__, \ __LINE__, \ (manager)); \ } while (0) #else #define GlobusGramJobManagerLock(manager) \ globus_mutex_lock(&(manager)->mutex) #define GlobusGramJobManagerUnlock(manager) \ globus_mutex_unlock(&(manager)->mutex) #define GlobusGramJobManagerWait(manager) \ globus_cond_wait(&(manager)->cond, &(manager)->mutex); #endif int globus_gram_job_manager_init( globus_gram_job_manager_t * manager, gss_cred_id_t cred, globus_gram_job_manager_config_t * config); void globus_gram_job_manager_destroy( globus_gram_job_manager_t * manager); void globus_gram_job_manager_log( globus_gram_job_manager_t * manager, globus_gram_job_manager_log_level_t level, const char * format, ...); int globus_gram_job_manager_add_request( globus_gram_job_manager_t * manager, const char * key, globus_gram_jobmanager_request_t * request); int globus_gram_job_manager_add_reference( globus_gram_job_manager_t * manager, const char * key, const char * reason, globus_gram_jobmanager_request_t ** request); int globus_gram_job_manager_remove_reference( globus_gram_job_manager_t * manager, const char * reason, const char * key); int globus_gram_job_manager_register_job_id( globus_gram_job_manager_t * manager, char * job_id, globus_gram_jobmanager_request_t * request, globus_bool_t prelocked); int globus_gram_job_manager_unregister_job_id( globus_gram_job_manager_t * manager, char * job_id); int globus_gram_job_manager_add_reference_by_jobid( globus_gram_job_manager_t * manager, const char * jobid, const char * reason, globus_gram_jobmanager_request_t ** request); int globus_gram_job_manager_get_job_id_list( globus_gram_job_manager_t * manager, globus_list_t ** job_id_list); globus_bool_t globus_gram_job_manager_request_exists( globus_gram_job_manager_t * manager, const char * key); void globus_gram_job_manager_set_grace_period_timer( globus_gram_job_manager_t * manager); void globus_gram_job_manager_expire_old_jobs( void * arg); int globus_gram_job_manager_set_status( globus_gram_job_manager_t * manager, const char * key, globus_gram_protocol_job_state_t state, int failure_code, int exit_code); int globus_gram_job_manager_get_status( globus_gram_job_manager_t * manager, const char * key, globus_gram_protocol_job_state_t * state, int * failure_code, int * exit_code); void globus_gram_job_manager_stop_all_jobs( globus_gram_job_manager_t * manager); int globus_gram_split_subjobs( const char * job_id, globus_list_t ** subjobs); int globus_i_gram_mkdir( char * path); /* startup_socket.c */ int globus_gram_job_manager_startup_lock( globus_gram_job_manager_t * manager, int * lock_fd); int globus_gram_job_manager_startup_socket_init( globus_gram_job_manager_t * manager, globus_xio_handle_t * handle, int * socket_fd); int globus_gram_job_manager_starter_send( globus_gram_job_manager_t * manager, int http_body_fd, int context_fd, int response_fd, gss_cred_id_t cred); int globus_gram_job_manager_starter_send_v2( globus_gram_job_manager_t * manager, gss_cred_id_t cred); extern globus_xio_driver_t globus_i_gram_job_manager_file_driver; extern globus_xio_stack_t globus_i_gram_job_manager_file_stack; /* tg_gateway.c */ int globus_i_gram_get_tg_gateway_user( gss_ctx_id_t context, globus_gsi_cred_handle_t peer_cred, char ** gateway_user); /* logging.c */ extern globus_logging_handle_t globus_i_gram_job_manager_log_stdio; extern globus_logging_handle_t globus_i_gram_job_manager_log_sys; extern void globus_i_job_manager_log_rotate(int sig); extern int globus_gram_job_manager_logging_init( globus_gram_job_manager_config_t * config); extern void globus_gram_job_manager_logging_destroy(void); extern char * globus_gram_prepare_log_string( const char * instr); extern char globus_i_gram_default_rvf[]; #ifdef __cplusplus } #endif #endif /* GLOBUS_GRAM_JOB_MANAGER_INCLUDE */ #endif /* ! GLOBUS_DONT_DOCUMENT_INTERNAL */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_config.c0000644000000000000000000000013214243161125025610 xustar000000000000000030 mtime=1653400149.355970151 30 atime=1653401831.297127383 30 ctime=1653404021.227747156 globus_gram_job_manager-15.8/globus_gram_job_manager_config.c0000664000175000017500000007263014243161125025761 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file globus_gram_job_manager_config.c * @brief Resource Allocation Job Manager Configuration */ #include "globus_gram_job_manager.h" #include "globus_common.h" #include static int globus_l_gram_tokenize( char * command, char ** args, int * n); static int globus_l_env_present( void * datum, void * arg); #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ /** * Initialize configuration based on command-line arguments * * @param config * LRMA-specific configuration state * @param argc * Count of command-line arguments to the job manager. * @param argv * Array of command-line arguments to the job manager. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED * Command-line includes -help */ int globus_gram_job_manager_config_init( globus_gram_job_manager_config_t * config, int argc, char ** argv) { int i; int rc = 0; char hostname[MAXHOSTNAMELEN]; struct utsname utsname; char * conf_path = NULL; char * dot; char * gatekeeper_contact; memset(config, 0, sizeof(globus_gram_job_manager_config_t)); /* if -conf is passed then get the arguments from the file * specified */ if (argc > 2 && !strcmp(argv[1],"-conf")) { char ** newargv; char * newbuf; int newargc = 52; int length; FILE *fp; newargv = malloc(newargc * sizeof(char *)); /* not freed */ newargv[0] = argv[0]; /* get file length via fseek & ftell */ if ((fp = fopen(argv[2], "r")) == NULL) { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_FATAL, "event=gram.config.end level=FATAL path=\"%s\" " "status=-1 msg=\"%s\" errno=%d reason=\"%s\"\n", argv[2], "Error opening configuration file", errno, strerror(errno)); exit(1); } conf_path = argv[2]; fseek(fp, 0, SEEK_END); length = ftell(fp); if (length <=0) { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_FATAL, "event=gram.config.end level=FATAL path=\"%s\" " "status=-1 msg=\"%s\" errno=%d reason=\"%s\"\n", conf_path, "Error determining config file length", errno, strerror(errno)); exit(1); } rewind(fp); newbuf = malloc(length+1); /* don't free */ i = fread(newbuf, 1, length, fp); if (i < 0) { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_FATAL, "event=gram.config.end level=FATAL path=\"%s\" " "status=-1 msg=\"%s\" errno=%d reason=\"%s\"\n", conf_path, "Error reading configuration file", errno, strerror(errno)); exit(1); } newbuf[i] = '\0'; fclose(fp); newargv[0] = argv[0]; newargc--; globus_l_gram_tokenize(newbuf, &newargv[1], &newargc); for (i=3; ilog_levels = -1; /* * Parse the command line arguments */ for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-k") == 0) { config->kerberos = GLOBUS_TRUE; } else if ((strcmp(argv[i], "-home") == 0) && (i + 1 < argc)) { config->globus_location = strdup(argv[++i]); } else if ((strcmp(argv[i], "-target-globus-location") == 0) && (i + 1 < argc)) { config->target_globus_location = strdup(argv[++i]); } else if ((strcmp(argv[i], "-type") == 0) && (i + 1 < argc)) { config->jobmanager_type = strdup(argv[++i]); } else if((strcmp(argv[i], "-history") == 0) && (i + 1 < argc)) { config->job_history_dir = strdup(argv[++i]); } else if (strcmp(argv[i], "-cache-location") == 0) { config->cache_location = strdup(argv[++i]); } else if (strcmp(argv[i], "-scratch-dir-base") == 0) { config->scratch_dir_base = strdup(argv[++i]); } else if ((strcmp(argv[i], "-condor-arch") == 0) && (i + 1 < argc)) { config->condor_arch = strdup(argv[++i]); } else if ((strcmp(argv[i], "-condor-os") == 0) && (i + 1 < argc)) { config->condor_os = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-gatekeeper-host") == 0) && (i + 1 < argc)) { config->globus_gatekeeper_host = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-gatekeeper-port") == 0) && (i + 1 < argc)) { config->globus_gatekeeper_port = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-gatekeeper-subject") == 0) && (i + 1 < argc)) { config->globus_gatekeeper_subject = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-host-manufacturer") == 0) && (i + 1 < argc)) { config->globus_host_manufacturer = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-host-cputype") == 0) && (i + 1 < argc)) { config->globus_host_cputype = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-host-osname") == 0) && (i + 1 < argc)) { config->globus_host_osname = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-host-osversion") == 0) && (i + 1 < argc)) { config->globus_host_osversion = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-tcp-port-range") == 0) && (i + 1 < argc)) { config->tcp_port_range = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-tcp-source-range") == 0) && (i + 1 < argc)) { config->tcp_source_range = strdup(argv[++i]); } else if ((strcmp(argv[i], "-state-file-dir") == 0) && (i + 1 < argc)) { config->job_state_file_dir = strdup(argv[++i]); } else if ((strcmp(argv[i], "-x509-cert-dir") == 0) && (i + 1 < argc)) { config->x509_cert_dir = strdup(argv[++i]); } else if ((strcmp(argv[i], "-extra-envvars") == 0) && (i + 1 < argc)) { char * extra_envvars = strdup(argv[++i]); char *p, *q; p = extra_envvars; while (p && *p) { q = strchr(p, ','); if (q) { *q = 0; } globus_list_insert( &config->extra_envvars, strdup(p)); if (q) { p = q+1; } else { p = q; } } free(extra_envvars); } else if ((strcasecmp(argv[i], "-seg-module" ) == 0) && (i + 1 < argc)) { config->seg_module = strdup(argv[++i]); } else if ((strcmp(argv[i], "-audit-directory") == 0) && (i+1 < argc)) { globus_eval_path(argv[++i], &config->auditing_dir); } else if ((strcmp(argv[i], "-globus-toolkit-version") == 0) && (i+1 < argc)) { config->globus_version = strdup(argv[++i]); } else if (strcmp(argv[i], "-disable-streaming") == 0) { /* Ignore this request, as we don't do streaming any more */ config->streaming_disabled = GLOBUS_FALSE; } else if (strcmp(argv[i], "-service-tag") == 0 && (i+1 < argc)) { config->service_tag = strdup(argv[++i]); } else if (strcmp(argv[i], "-enable-syslog") == 0) { config->syslog_enabled = GLOBUS_TRUE; } else if (strcmp(argv[i], "-stdio-log") == 0 && (i+1 < argc)) { /* Backward-compatible definition of -stdio-log based on * -log-pattern implementation */ config->log_pattern = globus_common_create_string( "%s/gram_$(DATE).log", argv[++i]); } else if (strcmp(argv[i], "-log-pattern") == 0 && (i+1 < argc)) { config->log_pattern = strdup(argv[++i]); } else if ((strcmp(argv[i], "-globus-job-dir") == 0) && (i + 1 < argc)) { char * tmp_user_name = getenv("LOGNAME"); config->job_dir_home = globus_common_create_string( "%s/%s", argv[++i], tmp_user_name ? tmp_user_name : "USER"); if (config->job_dir_home == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.config.info " "level=TRACE " "option=\"-globus-job-dir\" " "path=\"%s\" " "\n", config->job_dir_home); } else if (strcmp(argv[i], "-log-levels") == 0 && (i+1 < argc)) { rc = globus_i_gram_parse_log_levels( argv[++i], &config->log_levels, NULL); } else if ((strcmp(argv[i], "-disable-usagestats") == 0) || (strcmp(argv[i], "-no-disable-usagestats") == 0)) { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.config level=WARN path=\"%s\" " "argument=%s reason=\"Usage statistics collection is no longer supported. Argument will be ignored.\"\n", conf_path ? conf_path : "ARGV", argv[i]); } else if (strcmp(argv[i], "-usagestats-targets") == 0 && (i+1 < argc)) { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.config level=WARN path=\"%s\" " "argument=%s reason=\"Usage statistics collection is no longer supported. Argument will be ignored.\"\n", conf_path ? conf_path : "ARGV", argv[i++]); } else if (strcmp(argv[i], "-enable-callout") == 0) { config->enable_callout = GLOBUS_TRUE; } else if ((strcasecmp(argv[i], "-help" ) == 0) || (strcasecmp(argv[i], "--help") == 0)) { fprintf(stderr, "Usage: globus-gram-jobmanager\n" "\n" "Required Arguments:\n" "\t-type jobmanager type, i.e. fork, lsf ...\n" "\t-globus-host-manufacturer manufacturer\n" "\t-globus-host-cputype cputype\n" "\t-globus-host-osname osname\n" "\t-globus-host-osversion osversion\n" "\t-globus-gatekeeper-host host\n" "\t-globus-gatekeeper-port port\n" "\t-globus-gatekeeper-subject subject\n" "\n" "Options:\n" "\t-home globus_location\n" "\t-target-globus-location globus_location\n" "\t-condor-arch arch, i.e. SUN4x\n" "\t-condor-os os, i.e. SOLARIS26\n" "\t-history job-history-directory\n" "\t-scratch-dir-base scratch-directory\n" "\t-enable-syslog\n" "\t-stdio-log DIRECTORY\n" "\t-log-levels TRACE|INFO|DEBUG|WARN|ERROR|FATAL\n" "\t-state-file-dir state-directory\n" "\t-globus-tcp-port-range ,\n" "\t-globus-tcp-source-range ,\n" "\t-x509-cert-dir DIRECTORY\n" "\t-cache-location PATH\n" "\t-k\n" "\t-extra-envvars VAR1,VAR2,...\n" "\t-seg-module SEG-MODULE\n" "\t-audit-directory DIRECTORY\n" "\t-globus-toolkit-version VERSION\n" "\t-enable-callout\n" "\t-globus-job-dir DIRECTORY\n" "\n" "Note: if type=condor then\n" " -condor-os & -condor-arch are required.\n" "\n"); rc = GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED; goto out; } else { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.config level=ERROR path=\"%s\" " "argument=%s reason=\"Invalid command-line option\"\n", conf_path ? conf_path : "ARGV", argv[i] ? argv[i] : ""); } } /* If log levels were not specified on the command-line or configuration, set the * service default */ if (config->log_levels == -1) { config->log_levels = 0; } /* Always have these at a minimum */ config->log_levels |= GLOBUS_GRAM_JOB_MANAGER_LOG_FATAL | GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR; /* Verify that required values are present */ if(config->jobmanager_type == NULL) { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.config level=ERROR path=\"%s\" argument=\"-type\" reason=\"Missing -type command-line option\"\n", conf_path ? conf_path : "ARGV"); rc = GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED; goto out; } if(config->home == NULL) { config->home = strdup(getenv("HOME")); if (config->home == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } } if (config->service_tag == NULL) { config->service_tag = strdup("untagged"); } if (config->tcp_port_range == NULL) { char * ev = getenv("GLOBUS_TCP_PORT_RANGE"); if (ev != NULL) { config->tcp_port_range = strdup(ev); } } if (config->tcp_source_range == NULL) { char * ev = getenv("GLOBUS_TCP_SOURCE_RANGE"); if (ev != NULL) { config->tcp_source_range = strdup(ev); } } if (! globus_list_search_pred( config->extra_envvars, globus_l_env_present, "PATH")) { char * path = strdup("PATH"); if (!path) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } globus_list_insert(&config->extra_envvars, path); } /* Now initialize values from our environment */ config->logname = strdup(getenv("LOGNAME")); if (config->logname == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } if (config->globus_location == NULL) { rc = globus_location(&config->globus_location); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } } if (config->target_globus_location == NULL) { config->target_globus_location = strdup(config->globus_location); if (config->target_globus_location == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } } if (config->job_state_file_dir == NULL) { rc = globus_eval_path("${localstatedir}/lib/globus/gram_job_state", &config->job_state_file_dir); if (rc != 0 || config->job_state_file_dir == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } } if (config->job_dir_home == NULL) { config->job_dir_home = globus_common_create_string("%s/%s", config->job_state_file_dir, config->logname); if (config->job_dir_home == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } } if (config->scratch_dir_base == NULL) { config->scratch_dir_base = strdup( config->home); if (config->scratch_dir_base == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } } rc = globus_libc_gethostname(hostname, sizeof(hostname)); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } config->hostname = strdup(hostname); if (config->hostname == GLOBUS_NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } config->short_hostname = strdup(hostname); dot = strchr(config->short_hostname, '.'); if (dot != NULL) { *dot = 0; } rc = uname(&utsname); if (rc >= 0) { if (config->globus_host_osname == NULL) { config->globus_host_osname = strdup(utsname.sysname); } if (config->globus_host_osversion == NULL) { if (strcmp(utsname.sysname, "AIX") == 0) { config->globus_host_osversion = globus_common_create_string( "%s.%s", utsname.version, utsname.release); } else { config->globus_host_osversion = globus_common_create_string( "%s", utsname.release); } } } gatekeeper_contact = getenv("GLOBUS_GATEKEEPER_CONTACT_STRING"); if (gatekeeper_contact) { char *colon; char *save = strdup(gatekeeper_contact); gatekeeper_contact = save; if (gatekeeper_contact) { colon = strchr(gatekeeper_contact, ':'); if (colon) { if (!config->globus_gatekeeper_host) { *colon = '\0'; config->globus_gatekeeper_host = strdup(gatekeeper_contact); } gatekeeper_contact = colon + 1; colon = strchr(gatekeeper_contact, ':'); if (colon) { if (!config->globus_gatekeeper_port) { *colon = '\0'; config->globus_gatekeeper_port = strdup(gatekeeper_contact); } gatekeeper_contact = colon + 1; if (!config->globus_gatekeeper_subject) { config->globus_gatekeeper_subject = strdup(gatekeeper_contact); } } } } free(save); } rc = globus_module_activate(GLOBUS_GSI_GSSAPI_MODULE); if (rc != GLOBUS_SUCCESS) { goto out; } rc = globus_gram_job_manager_gsi_get_subject(&config->subject); if (rc != GLOBUS_SUCCESS) { goto out; } config->proxy_timeout = 10*60; out: return rc; } /* globus_gram_job_manager_config_init() */ /** * Free all memory allocated when the globus_gram_job_manager_config_init() was called. * * @param config * Configuration structure destroy. */ void globus_gram_job_manager_config_destroy( globus_gram_job_manager_config_t * config) { if (config->globus_location) { free(config->globus_location); } if (config->target_globus_location) { free(config->target_globus_location); } if (config->jobmanager_type) { free(config->jobmanager_type); } if (config->job_history_dir) { free(config->job_history_dir); } if (config->cache_location) { free(config->cache_location); } if (config->scratch_dir_base) { free(config->scratch_dir_base); } if (config->condor_arch) { free(config->condor_arch); } if (config->condor_os) { free(config->condor_os); } if (config->globus_gatekeeper_host) { free(config->globus_gatekeeper_host); } if (config->globus_gatekeeper_port) { free(config->globus_gatekeeper_port); } if (config->globus_gatekeeper_subject) { free(config->globus_gatekeeper_subject); } if (config->globus_host_manufacturer) { free(config->globus_host_manufacturer); } if (config->globus_host_cputype) { free(config->globus_host_cputype); } if (config->globus_host_osname) { free(config->globus_host_osname); } if (config->globus_host_osversion) { free(config->globus_host_osversion); } if (config->tcp_port_range) { free(config->tcp_port_range); } if (config->tcp_source_range) { free(config->tcp_source_range); } if (config->job_state_file_dir) { free(config->job_state_file_dir); } if (config->x509_cert_dir) { free(config->x509_cert_dir); } if (config->extra_envvars) { globus_list_destroy_all(config->extra_envvars, free); } if (config->seg_module) { free(config->seg_module); } if (config->auditing_dir) { free(config->auditing_dir); } if (config->globus_version) { free(config->globus_version); } /* if (config->log_pattern) { free(config->log_pattern); } */ if (config->subject) { free(config->subject); } if (config->home) { free(config->home); } if (config->logname) { free(config->logname); } if (config->hostname) { free(config->hostname); } if (config->short_hostname) { free(config->short_hostname); } if (config->service_tag) { free(config->service_tag); } if (config->job_dir_home) { free(config->job_dir_home); } } /* globus_gram_job_manager_config_destroy() */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * Split string into command-line arguments * * The @a command string is split into whitespace-delimited strings and adds * them to the @a args array. If the string begins with single quote or double * quote it will be combined with following strings until the closing quote is * found. At most *n-1 arguments can be parsed from the @a command string. *n * will be modified to contain the number of tokens in the @a args array when * this function returns. * * @param command * String to tokenize * @param args * Pointer to array of strings of at most *n elements. * @param n * In: maximum number of lements in @a args. Out: actual number of * elements in @a args. * * @retval 0 * Success * @retval -1 * Too many arguments */ static int globus_l_gram_tokenize(char * command, char ** args, int * n) { int i, x; char * cp; char * cp2; char ** arg; char * tmp_str = NULL; arg = args; i = *n - 1; for (cp = strtok(command, " \t\n"); cp != 0; ) { if ( cp[0] == '\'' && cp[strlen(cp) - 1] != '\'' ) { cp2 = strtok(NULL, "'\n"); tmp_str = malloc((strlen(cp) + strlen(cp2) + 2)); sprintf(tmp_str, "%s %s", &cp[1], cp2); } else if ( cp[0] == '"' && cp[strlen(cp) - 1] != '"' ) { cp2 = strtok(NULL, "\"\n"); tmp_str = malloc((strlen(cp) + strlen(cp2) + 2)); sprintf(tmp_str, "%s %s", &cp[1], cp2); } else { if (( cp[0] == '"' && cp[strlen(cp) - 1] == '"' ) || ( cp[0] == '\'' && cp[strlen(cp) - 1] == '\'' )) { tmp_str = malloc(strlen(cp)); x = strlen(cp)-2; strncpy(tmp_str, &cp[1], x); tmp_str[x] = '\0'; } else { tmp_str = cp; } } *arg = tmp_str; i--; if (i == 0) return(-1); /* too many args */ arg++; cp = strtok(NULL, " \t\n"); } *arg = (char *) 0; *n = *n - i - 1; return(0); } /* globus_l_gram_tokenize() */ /** * @brief Parse log level specification * * @details * The globus_i_gram_parse_log_levels() function parses the log level string passed * in its first argument to the mask pointed to by the second argument. * The log level string contains one or more level names combined by the * "|" delimiter. The set of valid level names is: * - FATAL * - ERROR * - WARN * - INFO * - DEBUG * - TRACE * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED * Server misconfigured */ int globus_i_gram_parse_log_levels( const char * unparsed_string, int * log_levels, char ** error_string) { char * log_level_string = strdup(unparsed_string); char * level_string = NULL; char * last_string = NULL; int rc = GLOBUS_SUCCESS; if (log_level_string == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto error_exit; } if (error_string != NULL) { *error_string = NULL; } *log_levels = 0; for (level_string = strtok_r(log_level_string, "|", &last_string); level_string != NULL; level_string = strtok_r(NULL, "|", &last_string)) { if (strcmp(level_string, "FATAL") == 0) { *log_levels |= GLOBUS_GRAM_JOB_MANAGER_LOG_FATAL; } else if (strcmp(level_string, "ERROR") == 0) { *log_levels |= GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR; } else if (strcmp(level_string, "WARN") == 0) { *log_levels |= GLOBUS_GRAM_JOB_MANAGER_LOG_WARN; } else if (strcmp(level_string, "INFO") == 0) { *log_levels |= GLOBUS_GRAM_JOB_MANAGER_LOG_INFO; } else if (strcmp(level_string, "DEBUG") == 0) { *log_levels |= GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG; } else if (strcmp(level_string, "TRACE") == 0) { *log_levels |= GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE; } else { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.config.info " "level=ERROR " "status=-1 " "msg=\"%s\" " "string=\"%s\" " "error_at=\"%s\" " "\n", "Error parsing log level string", unparsed_string, level_string); rc = GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED; if (error_string != NULL) { *error_string = globus_common_create_string( "Error parsing log level string '%s' at '%s'\n", unparsed_string, level_string); } break; } } free(log_level_string); error_exit: return rc; } /* globus_i_gram_parse_log_levels() */ static int globus_l_env_present( void * datum, void * arg) { char *datum_str = datum, *arg_str = arg; char *equal; size_t arglen; if (datum != arg && ((!datum) || (!arg))) { return 0; } arglen = strlen(arg_str); equal = strchr(datum_str, '='); if (equal && arglen > 0) { if ((equal - datum_str) == arglen) { return (strncmp(datum_str, arg_str, equal-datum_str) == 0); } } else { return (strcmp(datum_str, arg_str) == 0); } return 0; } /* globus_l_env_present() */ #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager.c0000644000000000000000000000013214243161125024263 xustar000000000000000030 mtime=1653400149.355970151 30 atime=1653401831.194128353 30 ctime=1653404021.229747137 globus_gram_job_manager-15.8/globus_gram_job_manager.c0000664000175000017500000032304014243161125024426 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file globus_gram_job_manager.c * @brief LRM-Specific state */ #include "globus_common.h" #include "globus_gram_job_manager.h" #include "globus_xio_popen_driver.h" #include /* This value (in seconds) is the length of time after a job hits a waiting * for SEG state before freeing its memory */ static int globus_l_gram_swap_out_delay = 10; /* * This value (in seconds) is the length of time after all jobs have been * completed that the job manager will terminate */ static int globus_l_gram_grace_period_delay = 60; typedef struct globus_gram_job_id_ref_s { /* Local copy of the unique job id used as the key to the job_id_hash */ char * job_id; /* Local copy of the request job_contact_path */ char * job_contact_path; } globus_gram_job_id_ref_t; static void globus_l_gram_job_manager_grace_period_expired( void * arg); static void globus_l_gram_ref_swap_out( void * arg); static int globus_l_gram_add_reference_locked( globus_gram_job_manager_t * manager, const char * key, const char * reason, globus_gram_jobmanager_request_t ** request); static int globus_l_gram_restart_job( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t ** request, const char * job_contact_path); static int globus_l_gram_read_job_manager_cred( globus_gram_job_manager_t * manager, const char * cred_path, gss_cred_id_t * cred); static int globus_l_gram_job_manager_add_ref_stub( globus_gram_job_manager_t * manager, const char * key, globus_gram_jobmanager_request_t * request, globus_gram_job_manager_ref_t ** ref); static int globus_l_gram_job_manager_remove_reference_locked( globus_gram_job_manager_t * manager, const char * key, const char * reason); static int globus_l_gram_script_attr_init( globus_gram_job_manager_t * manager); static int globus_l_gram_job_manager_request_load_all_from_dir( globus_gram_job_manager_t * manager, const char * state_file_dir, const char * state_file_pattern); #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ /** * Initialize runtime state associated with a LRM instance * * @param manager * Job manager structure to initialize * @param cred * Credential to use for this job manager. * @param config * Configuration parameters defining this service instance * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_REQUEST * Invalid request. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES * No resources. */ int globus_gram_job_manager_init( globus_gram_job_manager_t * manager, gss_cred_id_t cred, globus_gram_job_manager_config_t * config) { int rc; char * dir_prefix = NULL; struct sockaddr_un s; if (manager == NULL || config == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NULL_PARAMETER; goto out; } manager->gt3_failure_message = NULL; manager->usagetracker = NULL; manager->config = config; manager->stop = GLOBUS_FALSE; manager->pending_restarts = NULL; manager->expiration_handle = GLOBUS_NULL_HANDLE; manager->lockcheck_handle = GLOBUS_NULL_HANDLE; manager->idle_script_handle = GLOBUS_NULL_HANDLE; rc = globus_mutex_init(&manager->mutex, NULL); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto mutex_init_failed; } rc = globus_cond_init(&manager->cond, NULL); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto cond_init_failed; } /* Lock this, as we might have callbacks happen in the allow attach and * proxy timeout code before we finish initializing everything */ GlobusGramJobManagerLock(manager); manager->seg_last_timestamp = 0; manager->seg_started = GLOBUS_FALSE; /* After addition of site specific rvf files, reload validation * files when changed */ manager->validation_record_timestamp = (time_t) 0; manager->validation_records = NULL; manager->validation_file_exists[0] = 0; manager->validation_file_exists[1] = 0; manager->validation_file_exists[2] = 0; manager->validation_file_exists[3] = 0; rc = globus_hashtable_init( &manager->request_hash, 89, globus_hashtable_string_hash, globus_hashtable_string_keyeq); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto request_hashtable_init_failed; } rc = globus_hashtable_init( &manager->job_id_hash, 89, globus_hashtable_string_hash, globus_hashtable_string_keyeq); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto job_id_hashtable_init_failed; } dir_prefix = globus_common_create_string( "%s/%s", manager->config->job_dir_home, manager->config->short_hostname); if (dir_prefix == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_dir_prefix_failed; } rc = globus_i_gram_mkdir(dir_prefix); if (rc != GLOBUS_SUCCESS) { goto mkdir_failed; } manager->cred_path = globus_common_create_string( "%s/%s.%s.cred", dir_prefix, manager->config->jobmanager_type, manager->config->service_tag); if (manager->cred_path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_cred_path_failed; } if (cred == GSS_C_NO_CREDENTIAL) { rc = globus_l_gram_read_job_manager_cred( manager, manager->cred_path, &cred); if (rc != GLOBUS_SUCCESS) { goto read_credentials_failed; } } setenv("X509_USER_PROXY", manager->cred_path, 1); rc = globus_gram_protocol_set_credentials(cred); if (rc != GLOBUS_SUCCESS) { goto set_credentials_failed; } rc = globus_gram_protocol_allow_attach( &manager->url_base, globus_gram_job_manager_query_callback, manager); if (rc != GLOBUS_SUCCESS) { goto allow_attach_failed; } if (cred != GSS_C_NO_CREDENTIAL) { manager->cred_expiration_time = 1; rc = globus_gram_job_manager_gsi_register_proxy_timeout( manager, cred, manager->config->proxy_timeout, &manager->proxy_expiration_timer); if (rc != GLOBUS_SUCCESS) { goto proxy_timeout_init_failed; } } else { manager->proxy_expiration_timer = GLOBUS_NULL_HANDLE; } manager->active_job_manager_handle = NULL; manager->lock_fd = -1; manager->lock_path = globus_common_create_string( "%s/%s.%s.lock", dir_prefix, manager->config->jobmanager_type, manager->config->service_tag); if (manager->lock_path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_lock_path_failed; } manager->socket_fd = -1; manager->socket_path = globus_common_create_string( "%s/%s.%s.sock", dir_prefix, manager->config->jobmanager_type, manager->config->service_tag); if (manager->socket_path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_socket_path_failed; } else if (strlen(manager->socket_path) > sizeof(s.sun_path)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED; if (manager->gt3_failure_message == NULL) { manager->gt3_failure_message = globus_common_create_string( "the job manager wants to use %s as a socket path, but the path is too long (use the -globus-job-dir option in etc/globus/globus-gram-job-manager.conf)", manager->socket_path); } goto malloc_socket_path_failed; } manager->pid_path = globus_common_create_string( "%s/%s.%s.pid", dir_prefix, manager->config->jobmanager_type, manager->config->service_tag); if (manager->pid_path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_pid_path_failed; } manager->scripts_per_client = NULL; rc = globus_fifo_init(&manager->state_callback_fifo); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto state_callback_fifo_init_failed; } rc = globus_l_gram_script_attr_init(manager); if (rc != GLOBUS_SUCCESS) { goto script_attr_init_failed; } /* Default number of job state callback notifications that can * occur simultaneously */ manager->state_callback_slots = 5; GlobusGramJobManagerUnlock(manager); free(dir_prefix); dir_prefix=NULL; manager->done = GLOBUS_FALSE; manager->grace_period_timer = GLOBUS_NULL_HANDLE; manager->seg_pause_count = 0; rc = globus_fifo_init(&manager->seg_event_queue); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto event_queue_init_failed; } manager->usagetracker = calloc(1, sizeof(globus_i_gram_usage_tracker_t)); if (manager->usagetracker == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto usage_tracker_calloc_fail; } if (rc != GLOBUS_SUCCESS) { usage_tracker_calloc_fail: globus_fifo_destroy(&manager->seg_event_queue); event_queue_init_failed: script_attr_init_failed: state_callback_fifo_init_failed: free(manager->pid_path); manager->pid_path = NULL; malloc_pid_path_failed: free(manager->socket_path); manager->socket_path = NULL; malloc_socket_path_failed: free(manager->lock_path); manager->lock_path = NULL; malloc_lock_path_failed: proxy_timeout_init_failed: globus_gram_protocol_callback_disallow(manager->url_base); free(manager->url_base); allow_attach_failed: set_credentials_failed: read_credentials_failed: free(manager->cred_path); manager->cred_path = NULL; malloc_cred_path_failed: mkdir_failed: free(dir_prefix); dir_prefix = NULL; malloc_dir_prefix_failed: globus_hashtable_destroy(&manager->job_id_hash); job_id_hashtable_init_failed: globus_hashtable_destroy(&manager->request_hash); request_hashtable_init_failed: globus_gram_job_manager_validation_destroy( manager->validation_records); manager->validation_records = NULL; globus_cond_destroy(&manager->cond); cond_init_failed: GlobusGramJobManagerUnlock(manager); globus_mutex_destroy(&manager->mutex); mutex_init_failed: ; } out: return rc; } /* globus_gram_job_manager_init() */ /** * Destroy job manager state * * Memory used for runtime processing is freed, the GRAM listener and the SEG * are shut down. * * @param manager * Manager to destroy */ void globus_gram_job_manager_destroy( globus_gram_job_manager_t * manager) { if (!manager) { return; } globus_gram_job_manager_shutdown_seg(manager); globus_gram_protocol_callback_disallow(manager->url_base); free(manager->url_base); manager->url_base = NULL; globus_gram_job_manager_validation_destroy( manager->validation_records); manager->validation_records = NULL; globus_hashtable_destroy(&manager->request_hash); globus_hashtable_destroy(&manager->job_id_hash); globus_fifo_destroy(&manager->state_callback_fifo); while (!globus_list_empty(manager->scripts_per_client)) { globus_gram_job_manager_scripts_t *scripts; scripts = globus_list_remove( &manager->scripts_per_client, manager->scripts_per_client); globus_priority_q_destroy(&scripts->script_queue); globus_fifo_destroy(&scripts->script_handles); free(scripts->client_addr); free(scripts); } if(manager->usagetracker) { free(manager->usagetracker); } return; } /* globus_gram_job_manager_destroy() */ void globus_gram_job_manager_log( globus_gram_job_manager_t * manager, globus_gram_job_manager_log_level_t level, const char * format, ...) { va_list ap; time_t now; struct tm * nowtm; globus_bool_t logged = GLOBUS_FALSE; if (globus_i_gram_job_manager_log_sys != NULL) { va_start(ap, format); globus_logging_vwrite( globus_i_gram_job_manager_log_sys, level, format, ap); va_end(ap); logged = GLOBUS_TRUE; } if (globus_i_gram_job_manager_log_stdio != NULL) { va_start(ap, format); globus_logging_vwrite( globus_i_gram_job_manager_log_stdio, level, format, ap); va_end(ap); logged = GLOBUS_TRUE; } if ((!logged) && (manager && !manager->done)) { /* Hack to write to stderr in the case the error happens before we * have parsed command-line options to figure out where log messages * ought to go */ now = time(NULL); nowtm = gmtime(&now); fprintf(stderr, "ts=%04d-%02d-%02dT%02d:%02d:%02dZ id=%lu ", nowtm->tm_year + 1900, nowtm->tm_mon + 1, nowtm->tm_mday, nowtm->tm_hour, nowtm->tm_min, nowtm->tm_sec, (unsigned long) getpid()); va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); } } /* globus_gram_job_manager_log() */ /** * Add a job request to a reference-counting hashtable * * Adds the job request to the reference-counting hashtable with an initial * reference count of 0. Calls to globus_gram_job_manager_add_reference() and * globus_gram_job_manager_remove_reference() will increase and decrease the * reference count. Callbacks and job status queries, etc should call those * to dereference the job's unique key to a pointer to a * globus_gram_jobmanager_request_t structure and then release that reference * when the callback has been completely processed. * If at any time the reference count equals 0, it becomes a candidate to be * swapped out of memory. This can happen when the job is being processed, * after a submit to LRM but while waiting for the SEG to change * state. When the job is completed and the reference count equals 0, the * job reference stub is removed. * * @param manager * Job manager state * @param key * String key that uniquely identifies the job request * @param request * Request to add to manager's set of requests * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. * */ int globus_gram_job_manager_add_request( globus_gram_job_manager_t * manager, const char * key, globus_gram_jobmanager_request_t * request) { int rc = GLOBUS_SUCCESS; globus_gram_job_manager_ref_t * ref; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.add_request.start " "level=TRACE " "gramid=%s " "\n", key); GlobusGramJobManagerLock(manager); if (manager->stop) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.add_request.end " "level=WARN " "gramid=%s " "status=%d " "reason=\"%s\" " "\n", key, -rc, globus_gram_protocol_error_string(rc)); goto stop; } rc = globus_l_gram_job_manager_add_ref_stub( manager, key, request, &ref); if(rc == GLOBUS_SUCCESS) { manager->usagetracker->count_current_jobs++; if(manager->usagetracker->count_peak_jobs < manager->usagetracker->count_current_jobs) { manager->usagetracker->count_peak_jobs = manager->usagetracker->count_current_jobs; } } if (rc != GLOBUS_SUCCESS) { if (globus_hashtable_lookup( &manager->request_hash, (void *) key) == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.add_request.end " "level=ERROR " "gramid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", key, -rc, "Error inserting request into hashtable", globus_gram_protocol_error_string(rc)); goto insert_failed; } if (manager->grace_period_timer != GLOBUS_NULL_HANDLE) { globus_callback_unregister( manager->grace_period_timer, NULL, NULL, NULL); if (manager->done) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.add_request.end " "level=WARN " "gramid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", key, -rc, "Manager is exiting", globus_gram_protocol_error_string(rc)); goto grace_period_expired; } manager->grace_period_timer = GLOBUS_NULL_HANDLE; } if (rc != GLOBUS_SUCCESS) { insert_failed: grace_period_expired: free(ref->key); free(ref); stop: ; } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.add_request.end " "level=TRACE " "gramid=%s " "status=%d " "\n", key, 0); } GlobusGramJobManagerUnlock(manager); return rc; } /* globus_gram_job_manager_add_request() */ /** * Add a reference struct to the request_hash in the manager struct * based on the values from the request. The new reference is returned * in the pointer passed as the @a ref parameter. The caller must not free its * value unless it also removes the reference from the request_hash table. * * @param manager * GRAM job manager state. * @param key * Request-specific unique hashtable key. * @param request * Pointer to the request to add to the hash table. * @param ref * Pointer to the reference counter structure that is allocated by * this function. * * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE * Old job manager alive * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed */ static int globus_l_gram_job_manager_add_ref_stub( globus_gram_job_manager_t * manager, const char * key, globus_gram_jobmanager_request_t * request, globus_gram_job_manager_ref_t ** ref) { int rc = GLOBUS_SUCCESS; *ref = NULL; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.add_ref_stub.start " "level=TRACE " "gramid=%s " "\n", key); *ref = globus_hashtable_lookup(&manager->request_hash, (void *) key); if (*ref != NULL) { if ((*ref)->request != NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; goto ref_already_exists; } else { (*ref)->request = request; goto ref_already_exists; } } (*ref) = malloc(sizeof(globus_gram_job_manager_ref_t)); if (*ref == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto ref_malloc_failed; } (*ref)->manager = manager; (*ref)->cleanup_timer = GLOBUS_NULL_HANDLE; (*ref)->job_state = request->status; (*ref)->failure_code = request->failure_code; (*ref)->exit_code = request->exit_code; (*ref)->status_count = 0; (*ref)->loaded_only = GLOBUS_FALSE; (*ref)->seg_last_timestamp = request ? request->seg_last_timestamp : 0; (*ref)->seg_last_size = 0; (*ref)->expiration_time = 0; (*ref)->key = strdup(key); if ((*ref)->key == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto key_malloc_failed; } (*ref)->request = request; (*ref)->reference_count = 0; rc = globus_hashtable_insert( &manager->request_hash, (*ref)->key, (*ref)); key_malloc_failed: if (rc != GLOBUS_SUCCESS) { free(*ref); *ref = NULL; } ref_malloc_failed: ref_already_exists: globus_gram_job_manager_log( manager, (rc != GLOBUS_SUCCESS) ? GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR : GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.add_ref_stub.end " "level=%s " "gramid=%s " "status=%d " "%s%s%s" "\n", (rc != GLOBUS_SUCCESS) ? "ERROR" : "TRACE", key, -rc, (rc != GLOBUS_SUCCESS) ? "reason=\"" : "", (rc != GLOBUS_SUCCESS) ? globus_gram_protocol_error_string(rc) : "", (rc != GLOBUS_SUCCESS) ? "\" " : "" ); return rc; } /* globus_gram_job_manager_add_ref_stub() */ /** * Add a reference to a job request based on its unique key identifier * * Looks up a job request in the manager's request table and returns it in * the value pointed to by @a request. The caller must make a corresponding * call to globus_gram_job_manager_remove_reference() for each time this * or globus_gram_job_manager_add_request() is called for a particular job * request. * * @param manager * Job manager state * @param key * String key that uniquely identifies the job request * @param reason * String describing why the reference is being added for logging * @param request * Pointer to be set to the corresponding job request if found in the * table. May be NULL if the caller already has a reference and wants to * add one. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND * Job contact not found. */ int globus_gram_job_manager_add_reference( globus_gram_job_manager_t * manager, const char * key, const char * reason, globus_gram_jobmanager_request_t ** requestp) { int rc = GLOBUS_SUCCESS; globus_result_t result; globus_list_t * pending_restart_ref = NULL; globus_gram_jobmanager_request_t * request = NULL; GlobusGramJobManagerLock(manager); rc = globus_l_gram_add_reference_locked( manager, key, reason, &request); /* GRAM-128: Scalable reloading of requests at job manager restart. * * This code handles the case where a job in the pending_restart list * is being reloaded by a query or by the restart_jobs_callback. In this * case, we'll do the following: * - Remove the contact from the pending_restarts list * - If it is a waiting-for-job-change state, pause the seg * - Add another reference to the job for the state machine and register * the state machine callback */ if (request != NULL && (pending_restart_ref = globus_list_search_pred(manager->pending_restarts, globus_hashtable_string_keyeq, request->job_contact_path)) != NULL) { char * pending_restarts_key = globus_list_remove( &manager->pending_restarts, pending_restart_ref); free(pending_restarts_key); pending_restarts_key = NULL; rc = globus_l_gram_add_reference_locked( manager, key, "state machine", NULL); if (rc != GLOBUS_SUCCESS) { goto remove_reference; } if (request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1 || request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2 || request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1 || request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2) { globus_gram_job_manager_seg_pause(manager); } result = globus_callback_register_oneshot( &request->poll_timer, NULL, globus_gram_job_manager_state_machine_callback, request); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_l_gram_job_manager_remove_reference_locked( manager, key, "state machine"); } if (rc != GLOBUS_SUCCESS) { remove_reference: globus_l_gram_job_manager_remove_reference_locked( manager, key, reason); request = NULL; } } GlobusGramJobManagerUnlock(manager); if (requestp) { *requestp = request; } return rc; } /* globus_gram_job_manager_add_reference() */ /** * Remove a reference to a job request based on its unique key identifier * * Looks up a job request in the manager's request table and dereferences its * reference count. When the reference count reaches 0, also removes * the request from the request table destroys it. * * @param manager * Job manager state * @param key * String key that uniquely identifies the job request * @param reason * String describing why the reference is being removed. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND * Job contact not found. */ int globus_gram_job_manager_remove_reference( globus_gram_job_manager_t * manager, const char * key, const char * reason) { int rc; char gramid[64]; strncpy(gramid, key, sizeof(gramid)); gramid[sizeof(gramid)-1] = 0; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.remove_reference.start " "level=TRACE " "gramid=%s " "reason=\"%s\" " "\n", key, reason); GlobusGramJobManagerLock(manager); rc = globus_l_gram_job_manager_remove_reference_locked( manager, key, reason); GlobusGramJobManagerUnlock(manager); globus_gram_job_manager_log( manager, rc == GLOBUS_SUCCESS ? GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE : GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.remove_reference.end " "level=%s " "gramid=%s " "status=%d " "%s%s%s " "\n", (rc == GLOBUS_SUCCESS) ? "TRACE" : "WARN", gramid, -rc, rc == GLOBUS_SUCCESS ? "" : "reason=\"", rc == GLOBUS_SUCCESS ? "" : globus_gram_protocol_error_string(rc), rc == GLOBUS_SUCCESS ? "" : "\" "); return rc; } /* globus_gram_job_manager_remove_reference() */ static int globus_l_gram_job_manager_remove_reference_locked( globus_gram_job_manager_t * manager, const char * key, const char * reason) { char gramid[64]; globus_gram_jobmanager_request_t * request = NULL; globus_gram_job_manager_ref_t * ref; int rc = GLOBUS_SUCCESS; strncpy(gramid, key, sizeof(gramid)); gramid[sizeof(gramid) - 1] = '\0'; ref = globus_hashtable_lookup(&manager->request_hash, (void *) key); if (ref) { ref->reference_count--; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.remove_reference.info " "level=TRACE " "gramid=%s " "refcount=%d " "reason=\"%s\" " "\n", key, ref->reference_count, reason); if (ref->reference_count == 0) { /* Don't need to lock the request here---nothing else * refers to it */ request = ref->request; /* If the request is complete, or we are shutting down due to * a proxy expire, we can destroy it */ if ((request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_DONE || request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE) || (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP && (manager->stop == GLOBUS_TRUE))) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.remove_reference.info " "level=TRACE " "gramid=%s " "refcount=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", key, ref->reference_count, "Freeing state for unreferenced, completed job", reason); globus_hashtable_remove( &manager->request_hash, (void *) key); if (globus_hashtable_empty(&manager->request_hash)) { if (manager->stop) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.remove_reference.info " "level=TRACE " "msg=\"%s\" " "\n", "No jobs remain, stopping job manager", reason); manager->done = GLOBUS_TRUE; globus_cond_signal(&manager->cond); } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.remove_reference.info " "level=TRACE " "msg=\"%s\" " "\n", "No jobs remain, setting job manager termination timer"); globus_gram_job_manager_set_grace_period_timer(manager); } } if (ref->request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) { globus_gram_job_manager_request_free(ref->request); } else { globus_gram_job_manager_request_destroy(ref->request); } free(ref->request); free(ref->key); free(ref); } /* If we're waiting for a SEG event or stopped in a way that we * know the job is completed, we can swap the job out */ else if ((request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2 && request->config->seg_module && request->manager->seg_started && request->jobmanager_state != GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) || (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP && (manager->stop == GLOBUS_TRUE || manager->seg_started == GLOBUS_FALSE || request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END || request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE))) { globus_reltime_t delay; globus_result_t result; /* We can swap out if we waiting for SEG events */ GlobusTimeReltimeSet(delay, globus_l_gram_swap_out_delay, 0); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.remove_reference.info " "level=TRACE " "gramid=%s " "refcount=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", key, ref->reference_count, "Setting idle timeout for unreferenced job", reason); result = globus_callback_register_oneshot( &ref->cleanup_timer, &delay, globus_l_gram_ref_swap_out, ref); if (result != GLOBUS_SUCCESS) { char * errstr; char * errstr_escaped; errstr = globus_error_print_friendly( globus_error_peek(result)); errstr_escaped = globus_gram_prepare_log_string(errstr); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.remove_reference.info " "level=WARN " "gramid=%s " "refcount=%d " "msg=\"%s\" " "\n", key, ref->reference_count, "Unable to set idle timeout, leak possible", errstr_escaped ? errstr_escaped : ""); if (errstr) { free(errstr); } if (errstr_escaped) { free(errstr_escaped); } } } } } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; } return rc; } /** * Register a mapping between a LRM job ID and job request's unique job_contact_path * * @param manager * Job manager state * @param job_id * Job identifier * @param request * Request to associate with this job id. * @param prelocked * True if this is called from globus_gram_job_manager_request_load_all() * with the job manager mutex locked * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. */ int globus_gram_job_manager_register_job_id( globus_gram_job_manager_t * manager, char * job_id, globus_gram_jobmanager_request_t * request, globus_bool_t prelocked) { int rc = GLOBUS_SUCCESS; globus_gram_job_id_ref_t * ref = NULL; globus_gram_job_id_ref_t * old_ref; globus_list_t *subjobs = NULL, *tmp_list; char * subjob_id; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.job_id_register.start " "level=TRACE " "gramid=%s " "jobid=\"%s\" " "\n", request->job_contact_path, job_id); if (manager->config->seg_module != NULL || strcmp(manager->config->jobmanager_type, "condor") == 0) { /* If we're using the SEG, split on /,/ so that seg events can be * matched to the relevant job requests */ rc = globus_gram_split_subjobs(job_id, &subjobs); if (rc != GLOBUS_SUCCESS) { goto split_job_id_failed; } } else { char * tmp; tmp = strdup(job_id); if (tmp == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto dup_job_id_failed; } rc = globus_list_insert(&subjobs, tmp); if (tmp == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; free(tmp); goto insert_dup_failed; } } if (!prelocked) { GlobusGramJobManagerLock(manager); } for (tmp_list = subjobs; tmp_list != NULL; tmp_list = globus_list_rest(tmp_list)) { subjob_id = globus_list_first(tmp_list); old_ref = globus_hashtable_lookup( &manager->job_id_hash, subjob_id); if (old_ref != NULL) { if (strcmp(old_ref->job_contact_path, request->job_contact_path) != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.job_id_register.end " "level=ERROR " "gramid=%s " "jobid=\"%s\" " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, job_id, "Job ID references another job", -rc, globus_gram_protocol_error_string(rc)); goto old_ref_exists; } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.job_id.register.end " "level=TRACE " "gramid=%s " "jobid=%s " "status=%d " "msg=\"%s\" " "\n", request->job_contact_path, job_id, 0, "Job already registered, ignoring reregistration"); goto old_ref_exists; } } ref = malloc(sizeof(globus_gram_job_id_ref_t)); if (ref == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.job_id.register.end " "level=ERROR " "gramid=%s " "jobid=%s " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", job_id, request->job_contact_path, -rc, "Malloc failed", errno, strerror(errno)); goto ref_malloc_failed; } ref->job_id = strdup(subjob_id); if (ref->job_id == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.job_id.register.end " "level=ERROR " "gramid=%s " "jobid=%s " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", job_id, request->job_contact_path, -rc, "Malloc failed", errno, strerror(errno)); goto job_id_strdup_failed; } ref->job_contact_path = strdup(request->job_contact_path); if (ref->job_contact_path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.job_id.register.end " "level=ERROR " "gramid=%s " "jobid=%s " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", job_id, request->job_contact_path, -rc, "Malloc failed", errno, strerror(errno)); goto job_contact_path_strdup_failed; } rc = globus_hashtable_insert( &manager->job_id_hash, ref->job_id, ref); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.job_id.register.end " "level=ERROR " "gramid=%s " "jobid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", job_id, request->job_contact_path, -rc, "Hashtable insert failed", globus_gram_protocol_error_string(rc)); goto hash_insert_failed; } } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.job_id.register.end " "level=TRACE " "gramid=%s " "jobid=%s " "status=%d " "\n", job_id, request->job_contact_path, 0); if (ref && rc != GLOBUS_SUCCESS) { hash_insert_failed: free(ref->job_contact_path); job_contact_path_strdup_failed: free(ref->job_id); job_id_strdup_failed: free(ref); } ref_malloc_failed: old_ref_exists: if (!prelocked) { GlobusGramJobManagerUnlock(manager); } globus_list_destroy_all(subjobs, free); insert_dup_failed: dup_job_id_failed: split_job_id_failed: return rc; } /* globus_gram_job_manager_register_job_id() */ /** * Unregister a mapping between a LRM job ID and job request's unique job_contact_path * * @param manager * Job manager state * @param job_id * Job identifier * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. */ int globus_gram_job_manager_unregister_job_id( globus_gram_job_manager_t * manager, char * job_id) { int rc = GLOBUS_SUCCESS; globus_gram_job_id_ref_t * ref; if (job_id == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; goto null_job_id; } GlobusGramJobManagerLock(manager); ref = globus_hashtable_remove(&manager->job_id_hash, (void *) job_id); if (!ref) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; goto no_such_job; } free(ref->job_contact_path); free(ref->job_id); free(ref); no_such_job: GlobusGramJobManagerUnlock(manager); null_job_id: return rc; } /* globus_gram_job_manager_unregister_job_id() */ /** * Resolve a local job id to a request, adding a reference to it. This * is called with the manager locked. * * @param manager * Job manager state. Must have its mutex locked. * @param jobid * individual lrm job id string. * @param request * pointer to be set to the corresponding job request if found in the * table. may be null if the caller already has a reference and wants to * add one. * * @retval globus_success * success. * @retval globus_gram_protocol_error_job_contact_not_found * job contact not found. */ int globus_gram_job_manager_add_reference_by_jobid( globus_gram_job_manager_t * manager, const char * jobid, const char * reason, globus_gram_jobmanager_request_t ** request) { int rc = GLOBUS_SUCCESS; globus_result_t result; globus_gram_job_id_ref_t * jobref; globus_list_t * pending_restart_ref; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.add_reference_by_jobid.start " "level=TRACE " "jobid=\"%s\" " "reason=\"%s\" " "\n", jobid, reason); if (request) { *request = NULL; } if (manager->stop) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.add_reference_by_jobid.end " "level=WARN " "jobid=\"%s\" " "status=%d " "reason=\"%s\" " "\n", jobid, -rc, globus_gram_protocol_error_string(rc)); goto stop; } jobref = globus_hashtable_lookup(&manager->job_id_hash, (void *) jobid); if (!jobref) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.add_reference_by_jobid.end " "level=DEBUG " "jobid=\"%s\" " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", jobid, -rc, "Unknown job ID", globus_gram_protocol_error_string(rc)); goto no_such_job; } rc = globus_l_gram_add_reference_locked( manager, jobref->job_contact_path, reason, request); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.add_reference_by_jobid.end " "level=ERROR " "jobid=\"%s\" " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", jobid, -rc, "Adding reference failed", globus_gram_protocol_error_string(rc)); goto failed_add; } /* GRAM-128: Scalable reloading of requests at job manager restart. * * This code handles the case where a job in the pending_restart list * is being reloaded by a SEG event. In this case, we'll do the following: * - Remove the contact from the pending_restarts list * - If it is a waiting-for-job-change state, pause the seg * - Add another reference to the job for the state machine and register * the state machine callback */ if ((*request) != NULL && (pending_restart_ref = globus_list_search_pred(manager->pending_restarts, globus_hashtable_string_keyeq, (*request)->job_contact_path)) != NULL) { globus_list_remove(&manager->pending_restarts, pending_restart_ref); rc = globus_l_gram_add_reference_locked( manager, jobref->job_contact_path, "state machine", request); if (rc != GLOBUS_SUCCESS) { goto remove_reference; } if ((*request)->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1 || (*request)->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2 || (*request)->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1 || (*request)->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2) { globus_gram_job_manager_seg_pause(manager); } result = globus_callback_register_oneshot( &(*request)->poll_timer, NULL, globus_gram_job_manager_state_machine_callback, *request); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_l_gram_job_manager_remove_reference_locked( manager, jobref->job_contact_path, "state machine"); } } remove_reference: if (rc != GLOBUS_SUCCESS) { globus_l_gram_job_manager_remove_reference_locked( manager, jobref->job_contact_path, reason); } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.add_reference_by_jobid.end " "level=TRACE " "jobid=\"%s\" " "status=%d " "\n", jobid, 0); } failed_add: no_such_job: stop: return rc; } /* globus_gram_job_manager_add_reference_by_jobid() */ /** * Store the job state in the manager so that the request can be swapped out * * @param manager * Job manager state * @param key * Job request key * @param state * Job state * @param failure_code * Job failure code * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND * Job contact not found */ int globus_gram_job_manager_set_status( globus_gram_job_manager_t * manager, const char * key, globus_gram_protocol_job_state_t state, int failure_code, int exit_code) { globus_gram_job_manager_ref_t * ref; int rc = GLOBUS_SUCCESS; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.set_job_status.start " "level=TRACE " "gramid=%s " "state=%d " "failure_code=%d " "\n", key, state, failure_code); GlobusGramJobManagerLock(manager); ref = globus_hashtable_lookup( &manager->request_hash, (void *) key); if (ref == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; goto not_found; } ref->job_state = state; ref->failure_code = failure_code; ref->exit_code = exit_code; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.set_job_status.end " "level=TRACE " "gramid=%s " "state=%d " "failure_code=%d " "status=%d " "\n", key, state, failure_code, 0); not_found: GlobusGramJobManagerUnlock(manager); return rc; } /* globus_gram_job_manager_set_status() */ /** * Look up the job state for a request without reloading the request * * @param manager * Job manager state * @param key * Job request key * @param state * Pointer to set to the value of the job state * @param failure_code * Pointer to set to the value of the failure code * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND * Job contact not found */ int globus_gram_job_manager_get_status( globus_gram_job_manager_t * manager, const char * key, globus_gram_protocol_job_state_t * state, int * failure_code, int * exit_code) { int rc = GLOBUS_SUCCESS; globus_gram_job_manager_ref_t * ref; GlobusGramJobManagerLock(manager); ref = globus_hashtable_lookup( &manager->request_hash, (void *) key); if (ref == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; goto not_found; } ref->status_count++; *state = ref->job_state; *failure_code = ref->failure_code; *exit_code = ref->exit_code; not_found: GlobusGramJobManagerUnlock(manager); return rc; } /* globus_gram_job_manager_get_status() */ int globus_gram_job_manager_get_job_id_list( globus_gram_job_manager_t * manager, globus_list_t ** job_id_list) { char * job_id; globus_gram_job_id_ref_t * ref; int rc = GLOBUS_SUCCESS; *job_id_list = NULL; GlobusGramJobManagerLock(manager); for (ref = globus_hashtable_first(&manager->job_id_hash); ref != NULL; ref = globus_hashtable_next(&manager->job_id_hash)) { job_id = strdup(ref->job_id); if (job_id == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto job_id_strdup_failed; } rc = globus_list_insert(job_id_list, job_id); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto job_id_insert_failed; } } if (rc != GLOBUS_SUCCESS) { job_id_insert_failed: free(job_id); job_id_strdup_failed: globus_list_destroy_all(*job_id_list, free); *job_id_list = NULL; } GlobusGramJobManagerUnlock(manager); return rc; } /* globus_gram_job_manager_get_job_id_list() */ globus_bool_t globus_gram_job_manager_request_exists( globus_gram_job_manager_t * manager, const char * key) { globus_bool_t result; globus_gram_job_manager_ref_t * ref; GlobusGramJobManagerLock(manager); ref = globus_hashtable_lookup(&manager->request_hash, (void *) key); result = (ref != NULL && ref->request != NULL); GlobusGramJobManagerUnlock(manager); return result; } /* globus_gram_job_manager_request_exists() */ void globus_gram_job_manager_set_grace_period_timer( globus_gram_job_manager_t * manager) { if (globus_hashtable_empty(&manager->request_hash)) { globus_reltime_t delay; globus_result_t result; GlobusTimeReltimeSet(delay, globus_l_gram_grace_period_delay, 0); result = globus_callback_register_oneshot( &manager->grace_period_timer, &delay, globus_l_gram_job_manager_grace_period_expired, manager); if (result != GLOBUS_SUCCESS) { manager->done = GLOBUS_TRUE; globus_cond_signal(&manager->cond); } } } /* globus_gram_job_manager_set_grace_period_timer() */ /** * Fake a two-phase commit for jobs that are in a done state, but are older * than their expiration time. * * @param arg * Pointer to the job manager structure for this job. * @return void */ void globus_gram_job_manager_expire_old_jobs( void * arg) { globus_gram_job_manager_t * manager = arg; globus_gram_job_manager_ref_t * ref; globus_gram_jobmanager_request_t * request; int rc; time_t now; int expired = 0; now = time(NULL); GlobusGramJobManagerLock(manager); for (ref = globus_hashtable_first(&manager->request_hash); ref != NULL; ref = globus_hashtable_next(&manager->request_hash)) { if (ref->reference_count == 0 && ref->expiration_time != 0 && now > ref->expiration_time) { rc = globus_l_gram_add_reference_locked( manager, ref->key, "expire", &request); if (rc != GLOBUS_SUCCESS) { continue; } ref->expiration_time = 0; if (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END || request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE) { /* Fake the commit */ globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.expire_jobs.info " "level=DEBUG " "gramid=%s " "\n", ref->key); request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED; rc = globus_l_gram_add_reference_locked( manager, ref->key, "state machine", NULL); if (request->poll_timer == GLOBUS_NULL_HANDLE) { globus_result_t result; result = globus_callback_register_oneshot( &request->poll_timer, &globus_i_reltime_zero, globus_gram_job_manager_state_machine_callback, request); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto oneshot_failed; } } expired++; } oneshot_failed: rc = globus_l_gram_job_manager_remove_reference_locked( manager, ref->key, "expire"); if (rc != GLOBUS_SUCCESS) { } } } GlobusGramJobManagerUnlock(manager); if (expired > 0) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.expire_jobs.end " "expired_count=%d " "\n", expired); } } /* globus_gram_job_manager_expire_old_jobs() */ void globus_gram_job_manager_stop_all_jobs( globus_gram_job_manager_t * manager) { globus_list_t * job_refs = NULL; globus_list_t * tmp = NULL; globus_gram_job_manager_ref_t * ref; globus_gram_jobmanager_request_t * request; int rc; GlobusGramJobManagerLock(manager); manager->stop = GLOBUS_TRUE; rc = globus_hashtable_to_list( &manager->request_hash, &job_refs); if (rc != GLOBUS_SUCCESS) { GlobusGramJobManagerUnlock(manager); return; } tmp = job_refs; while (!globus_list_empty(tmp)) { ref = globus_list_first(tmp); tmp = globus_list_rest(tmp); /* Force request into memory if it isn't yet. */ rc = globus_l_gram_add_reference_locked( manager, ref->key, "stop all jobs", NULL); assert(rc == GLOBUS_SUCCESS); } GlobusGramJobManagerUnlock(manager); tmp = job_refs; while (!globus_list_empty(tmp)) { ref = globus_list_first(tmp); tmp = globus_list_rest(tmp); request = ref->request; GlobusGramJobManagerRequestLock(request); request->stop_reason = GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_EXPIRED; request->restart_state = request->jobmanager_state; switch (request->jobmanager_state) { case GLOBUS_GRAM_JOB_MANAGER_STATE_START: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; request->unsent_status_change = GLOBUS_TRUE; globus_gram_job_manager_state_machine_register( request->manager, request, NULL); break; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN: case GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; request->unsent_status_change = GLOBUS_TRUE; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_FILE_CLEAN_UP: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_SCRATCH_CLEAN_UP: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_CACHE_CLEAN_UP: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_DONE: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_FILE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CACHE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE: case GLOBUS_GRAM_JOB_MANAGER_STATE_STOP: break; } if (request->poll_timer) { globus_reltime_t delay; GlobusTimeReltimeSet(delay, 0, 0); globus_callback_adjust_oneshot( request->poll_timer, &delay); } GlobusGramJobManagerRequestUnlock(request); globus_gram_job_manager_remove_reference( manager, ref->key, "stop all jobs"); } globus_list_free(job_refs); } /* globus_gram_job_manager_stop_all_jobs() */ /** * Scan the job state directory for jobs to restart * * The globus_gram_job_manager_request_load_all() function scans the * job state directory named in the job manager configuration and then * attempts to reload each job found in that directory. If the job is in * a state where it will be immediately swapped out (waiting for SEG events) * then the job is registered for processing * * @param manager * Job Manager */ int globus_gram_job_manager_request_load_all( globus_gram_job_manager_t * manager) { int rc = GLOBUS_SUCCESS; char * state_file_pattern = NULL; GlobusGramJobManagerLock(manager); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.reload_requests.start " "level=DEBUG " "\n"); state_file_pattern = globus_common_create_string( "job.%s.%%"PRIu64".%%"PRIu64"%%n", manager->config->hostname); if (state_file_pattern == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.reload_requests.end " "level=ERROR " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", -rc, "Malloc failed", errno, strerror(errno)); goto state_file_pattern_alloc_failed; } globus_l_gram_job_manager_request_load_all_from_dir( manager, manager->config->job_state_file_dir, state_file_pattern); free(state_file_pattern); state_file_pattern = NULL; { char * hashed_job_dir; state_file_pattern = globus_common_create_string( "job.%%"PRIu64".%%"PRIu64"%%n"); if (state_file_pattern == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto state_file_pattern_alloc_failed; } hashed_job_dir = globus_common_create_string( "%s/%s/%s/%s", manager->config->job_state_file_dir, manager->config->logname, manager->config->service_tag, manager->config->jobmanager_type); if (hashed_job_dir == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto hashed_job_dir_alloc_failed; } globus_l_gram_job_manager_request_load_all_from_dir( manager, hashed_job_dir, state_file_pattern); free(hashed_job_dir); } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.reload_requests.end " "level=DEBUG " "statedir=\"%s\" " "status=%d " "requests=%d " "\n", manager->config->job_state_file_dir, 0, (int) globus_list_size(manager->pending_restarts)); hashed_job_dir_alloc_failed: if (state_file_pattern) { free(state_file_pattern); } state_file_pattern_alloc_failed: GlobusGramJobManagerUnlock(manager); return rc; } /* globus_gram_job_manager_request_load_all() */ static int globus_l_gram_job_manager_request_load_all_from_dir( globus_gram_job_manager_t * manager, const char * state_file_dir, const char * state_file_pattern) { int rc; DIR * dir; int lock; struct dirent * entry; uint64_t uniq1, uniq2; globus_gram_jobmanager_request_t * request; globus_gram_job_manager_ref_t * ref; struct stat st; char * full_path; uid_t uid = getuid(); dir = globus_libc_opendir(state_file_dir); if (dir == NULL && strcmp(state_file_dir, manager->config->job_state_file_dir) == 0) { int save_errno = errno; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.reload_requests.end " "level=ERROR " "statedir=\"%s\" " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", state_file_dir, "opendir failed", errno, strerror(errno)); rc = GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED; if (manager->gt3_failure_message == NULL) { manager->gt3_failure_message = globus_common_create_string( "the job manager failed to open the job state file directory \"%s\": %s", state_file_dir, strerror(save_errno)); } goto opendir_failed; } else if (dir == NULL) { rc = GLOBUS_SUCCESS; goto opendir_failed; } while ((rc = globus_libc_readdir_r(dir, &entry)) == 0 && entry != NULL) { if ((sscanf( entry->d_name, state_file_pattern, &uniq1, &uniq2, &lock) == 2) && (strlen(entry->d_name + lock) == 0)) { /* Found candidate job state file. */ char * key = globus_common_create_string( "/%"PRIu64"/%"PRIu64"/", uniq1, uniq2); if (key == NULL) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.reload_requests.info " "level=WARN " "statedir=\"%s\" " "file=\"%s\" " "msg=\"%s\" " "gramid=/%"PRIu64"/%"PRIu64"/ " "errno=%d " "reason=\"%s\"\n", state_file_dir, entry->d_name, "Error constructing filename, ignoring state file", uniq1, uniq2, errno, strerror(errno)); free(entry); continue; } full_path = globus_common_create_string("%s/%s", state_file_dir, entry->d_name); if (full_path == NULL) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.reload_requests.info " "level=WARN " "statedir=\"%s\" " "file=\"%s\" " "msg=\"%s\" " "gramid=/%"PRIu64"/%"PRIu64"/ " "errno=%d " "reason=\"%s\"\n", state_file_dir, entry->d_name, "Error constructing filename, ignoring state file", uniq1, uniq2, errno, strerror(errno)); free(key); key = NULL; free(entry); entry = NULL; continue; } rc = stat(full_path, &st); free(full_path); full_path = NULL; if (rc < 0) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.reload_requests.info " "level=TRACE " "statedir=\"%s\" " "file=\"%s\" " "msg=\"%s\" " "gramid=/%"PRIu64"/%"PRIu64"/ " "errno=%d " "reason=\"%s\"\n", state_file_dir, entry->d_name, "Error checking state file ownership, ignoring state file", uniq1, uniq2, errno, strerror(errno)); free(key); key = NULL; free(entry); entry = NULL; continue; } if (st.st_uid != uid) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.reload_requests.info " "level=TRACE " "statedir=\"%s\" " "statefile=\"%s\" " "msg=\"Ignoring state file\" " "reason=\"File UID is %d, my UID is %d\"\n", state_file_dir, entry->d_name, (int) st.st_uid, (int) uid); free(key); key = NULL; free(entry); entry = NULL; continue; } rc = globus_l_gram_restart_job( manager, &request, key+1); free(entry); if (rc != GLOBUS_SUCCESS) { if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.reload_requests.info " "level=WARN " "statedir=\"%s\" " "msg=\"%s\" " "gramid=/%"PRIu64"/%"PRIu64"/ " "status=%d " "reason=\"%s\"\n", state_file_dir, "Error restarting job", uniq1, uniq2, -rc, globus_gram_protocol_error_string(rc)); } free(key); continue; } /* Set the SEG timestamp to be the earliest value in any of the * jobs we will manage. */ if (manager->seg_last_timestamp == 0 || manager->seg_last_timestamp > request->seg_last_timestamp) { manager->seg_last_timestamp = request->seg_last_timestamp; } /* Optimize the (hopefully) common case. The job is pending * or active in the queue and we will want to wait for * job state changes. In this case, we add the reference to * the job's LRM job id */ if ((request->config->seg_module != NULL || strcmp(request->config->jobmanager_type, "fork") == 0 || strcmp(request->config->jobmanager_type, "condor") == 0) && (request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1 || request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2 || request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1 || request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2)) { rc = globus_gram_job_manager_register_job_id( request->manager, request->job_id_string, request, GLOBUS_TRUE); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.reload_requests.info " "level=WARN " "statedir=\"%s\" " "msg=\"%s\" " "gramid=/%"PRIu64"/%"PRIu64"/ " "status=%d " "reason=\"%s\" " "\n", state_file_dir, "Error registering job id", uniq1, uniq2, -rc, globus_gram_protocol_error_string(rc)); } request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2; } /* Add a stub in the job manager's request_hash for this job. The * Reference count will be left at 0, and we will null out the * ref->request pointer below. This allows queries, SEG events, and * the restart code to look up the job ID without the entire * request remaining in memory. */ rc = globus_l_gram_job_manager_add_ref_stub( request->manager, request->job_contact_path, request, &ref); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.reload_requests.info " "level=WARN " "statedir=\"%s\" " "msg=\"%s\" " "gramid=%"PRIu64"/%"PRIu64" " "status=%d " "reason=\"%s\" " "\n", state_file_dir, "Error registering job id", uniq1, uniq2, -rc, globus_gram_protocol_error_string(rc)); } if (ref != NULL) { /* We don't want to keep this reference active. We want it * to look like the job was swapped out */ ref->request = NULL; } if (request && request->jobmanager_state != GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2) { rc = globus_list_insert( &manager->pending_restarts, key); key = NULL; } /* Indicate that it will need some special handling when its * first reference is added */ ref->loaded_only = GLOBUS_TRUE; if (request) { globus_gram_job_manager_request_free(request); free(request); request = NULL; } if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.reload_requests.info " "level=WARN " "statedir=\"%s\" " "msg=\"%s\" " "gramid=%"PRIu64"/%"PRIu64" " "errno=%d " "reason=\"%s\"\n", state_file_dir, "Error inserting job into request list", uniq1, uniq2, globus_gram_protocol_error_string(rc)); } if (key) { free(key); key = NULL; } } else { free(entry); } } rc = 0; globus_libc_closedir(dir); opendir_failed: return rc; } /* globus_l_gram_job_manager_request_load_all_from_dir() */ int globus_i_gram_mkdir( char * path) { char * tmp; int rc; struct stat statbuf; if ((rc = stat(path, &statbuf)) < 0) { tmp = path; while (tmp != NULL) { tmp = strchr(tmp+1, '/'); if (tmp != path) { if (tmp != NULL) { *tmp = '\0'; } if ((rc = stat(path, &statbuf)) < 0) { mkdir(path, S_IRWXU); } if ((rc = stat(path, &statbuf)) < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_ARG_FILE_CREATION_FAILED; goto error_exit; } if (tmp != NULL) { *tmp = '/'; } } } } rc = GLOBUS_SUCCESS; error_exit: if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_ARG_FILE_CREATION_FAILED; } return rc; } /* globus_i_gram_mkdir() */ static void globus_l_gram_job_manager_grace_period_expired( void * arg) { globus_gram_job_manager_t * manager; manager = arg; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.grace_period_expired.start " "level=TRACE " "\n"); GlobusGramJobManagerLock(manager); if (manager->grace_period_timer != GLOBUS_NULL_HANDLE) { (void) globus_callback_unregister( manager->grace_period_timer, NULL, NULL, NULL); if (globus_hashtable_empty(&manager->request_hash)) { manager->done = GLOBUS_TRUE; globus_cond_signal(&manager->cond); } manager->grace_period_timer = GLOBUS_NULL_HANDLE; } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.grace_period_expired.end " "level=TRACE " "status=%d " "terminating=%s " "\n", 0, manager->done ? "true" : "false"); GlobusGramJobManagerUnlock(manager); } /* globus_l_gram_job_manager_grace_period_expired() */ static void globus_l_gram_ref_swap_out( void * arg) { globus_result_t result; globus_gram_job_manager_ref_t * ref = arg; globus_gram_jobmanager_request_t * request; int rc; globus_gram_job_manager_log( ref->manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.job_ref_swap_out.start " "level=TRACE " "gramid=%s\n", ref->key); GlobusGramJobManagerLock(ref->manager); if (ref->cleanup_timer != GLOBUS_NULL_HANDLE) { result = globus_callback_unregister( ref->cleanup_timer, NULL, NULL, NULL); ref->cleanup_timer = GLOBUS_NULL_HANDLE; if (result != GLOBUS_SUCCESS) { char * errstr; char * errstr_escaped; errstr = globus_error_print_friendly( globus_error_peek(result)); errstr_escaped = globus_gram_prepare_log_string(errstr); globus_gram_job_manager_log( ref->manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.job_ref_swap_out.info " "level=WARN " "gramid=%s " "msg=\"%s\" " "reason=\"%s\" " "\n", ref->key, "Error cancelling callback", errstr_escaped ? errstr_escaped : ""); if (errstr) { free(errstr); } if (errstr_escaped) { free(errstr_escaped); } } } else { globus_gram_job_manager_log( ref->manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.job_ref_swap_out.end " "level=TRACE " "gramid=%s " "msg=\"%s\" " "\n", ref->key, "This job was reactivated before the callback, not freeing"); goto unregistered; } if (ref->reference_count == 0) { request = ref->request; request->manager->usagetracker->count_current_jobs--; if (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP && request->stop_reason == GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT) { int expire = -1; globus_gram_job_manager_rsl_attribute_get_int_value( request->rsl, GLOBUS_GRAM_JOB_MANAGER_EXPIRATION_ATTR, &expire); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.job_ref_swap_out.info " "level=DEBUG " "gramid=%s " "expire=%d " "\n", ref->key, expire); if (expire != -1) { ref->expiration_time = time(NULL) + (time_t) expire; } } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.job_ref_swap_out.info " "level=WARN " "gramid=%s " "msg=\"%s\" " "\n", ref->key, "No new references to job, writing state and freeing data"); /* Is this needed? */ rc = globus_gram_job_manager_state_file_write(ref->request); globus_gram_job_manager_request_free(ref->request); free(ref->request); ref->request = NULL; } else { globus_gram_job_manager_log( ref->manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.job_ref_swap_out.info " "level=TRACE " "gramid=%s " "msg=\"%s\" " "\n", ref->key, "New references to job, not freeing"); } unregistered: GlobusGramJobManagerUnlock(ref->manager); } /* globus_l_gram_ref_swap_out() */ static int globus_l_gram_add_reference_locked( globus_gram_job_manager_t * manager, const char * key, const char * reason, globus_gram_jobmanager_request_t ** request) { int rc = GLOBUS_SUCCESS; globus_result_t result; globus_gram_job_manager_ref_t * ref; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.add_reference.start " "level=TRACE " "gramid=%s " "ref_reason=\"%s\"\n", key, reason); ref = globus_hashtable_lookup(&manager->request_hash, (void *) key); if (ref) { ref->reference_count++; if (ref->cleanup_timer != GLOBUS_NULL_HANDLE) { result = globus_callback_unregister( ref->cleanup_timer, NULL, NULL, NULL); ref->cleanup_timer = GLOBUS_NULL_HANDLE; } if (ref->request == NULL) { rc = globus_l_gram_restart_job( manager, &ref->request, key+1); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; ref->reference_count--; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.add_reference.end " "level=WARN " "gramid=%s " "ref_reason=\"%s\" " "status=%d " "reason=\"%s\" " "\n", key, reason, -rc, globus_gram_protocol_error_string(rc)); goto request_init_failed; } if (ref->request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1 || ref->request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2 || ref->request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1 || ref->request->restart_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2) { ref->request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2; } else if (!ref->loaded_only) { ref->request->jobmanager_state = ref->request->restart_state; } ref->loaded_only = GLOBUS_FALSE; ref->request->job_stats.status_count += ref->status_count; ref->status_count = 0; } if (request) { *request = ref->request; } } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; if (request) { *request = NULL; } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.add_reference.end " "level=WARN " "gramid=%s " "status=%d " "reason=\"%s\" " "ref_reason=\"%s\"\n", key, -rc, globus_gram_protocol_error_string(rc), reason); goto not_found; } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.add_reference.end " "level=TRACE " "gramid=%s " "status=%d " "ref_reason=\"%s\"\n", key, 0, reason); not_found: request_init_failed: return rc; } /* globus_l_gram_add_reference_locked() */ static int globus_l_gram_restart_job( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t ** request, const char * job_contact_path) { char * restart_rsl; int rc; /* Reload request state */ restart_rsl = globus_common_create_string( "&(restart = '%s%s')(restartcontacts = yes)", manager->url_base, job_contact_path); if (restart_rsl == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_restart_rsl_failed; } rc = globus_gram_job_manager_request_init( request, manager, restart_rsl, GSS_C_NO_CREDENTIAL, GSS_C_NO_CONTEXT, NULL, NULL, GLOBUS_TRUE, NULL, NULL, NULL); free(restart_rsl); malloc_restart_rsl_failed: return rc; } /* globus_l_gram_restart_job() */ static int globus_l_gram_read_job_manager_cred( globus_gram_job_manager_t * manager, const char * cred_path, gss_cred_id_t * cred) { int rc; FILE * fp; struct stat stat; gss_buffer_desc buffer; OM_uint32 major_status; OM_uint32 minor_status; fp = fopen(manager->cred_path, "r"); if (fp == NULL) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.read_cred.end cred=%s errno=%d reason=\"%s\"\n", manager->cred_path, errno, strerror(errno)); rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; goto fopen_failed; } if (fstat(fileno(fp), &stat) != 0) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.read_cred.end level=ERROR cred=%s errno=%d " "reason=\"%s\"\n", manager->cred_path, errno, strerror(errno)); rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; goto fstat_failed; } if (stat.st_uid != getuid() || (stat.st_mode & (S_IRWXG|S_IRWXO))) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.read_cred.end level=ERROR cred=%s error=%d " "reason=\"%s\"\n", manager->cred_path, GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY, "Invalid file ownership or permissions"); rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; goto perm_check_failed; } buffer.length = (size_t) stat.st_size; buffer.value = malloc(buffer.length+1); if (buffer.value == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto buffer_malloc_failed; } rc = fread(buffer.value, 1, buffer.length, fp); ((char *)buffer.value)[buffer.length] = 0; if (rc != buffer.length) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; goto fread_failed; } major_status = gss_import_cred( &minor_status, cred, GSS_C_NO_OID, 0, &buffer, 0, NULL); if (GSS_ERROR(major_status)) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.read_cred.end level=ERROR cred=%s major_status=%d " "reason=\"%s\"\n", manager->cred_path, major_status, "import cred failed"); goto import_failed; } rc = GLOBUS_SUCCESS; import_failed: free(buffer.value); fread_failed: buffer_malloc_failed: perm_check_failed: fstat_failed: fclose(fp); fopen_failed: return rc; } /* globus_l_gram_read_job_manager_cred() */ static int globus_l_gram_script_attr_init( globus_gram_job_manager_t * manager) { globus_result_t result; int rc = GLOBUS_SUCCESS; char * pipe_cmd[8]; char * env[11]; int i; result = globus_eval_path( "${libexecdir}/globus-job-manager-script.pl", &pipe_cmd[0]); if (result != GLOBUS_SUCCESS || pipe_cmd[0] == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto script_path_malloc_failed; } if (access(pipe_cmd[0], X_OK) != 0) { const char *path; char *p, *pcopy, *tok; path = getenv("PATH"); if (path == NULL) { goto skip_path_lookup; } p = malloc(strlen(path) + strlen("/globus-job-manager-script.pl")); if (p == NULL) { goto skip_path_lookup; } pcopy = strdup(path); if (pcopy == NULL) { free(p); goto skip_path_lookup; } for (tok = strtok(pcopy, ":"); tok != NULL; tok = strtok(NULL, ":")) { sprintf(p, "%s/globus-job-manager-script.pl", tok); if (access(p, X_OK) == 0) { free(pipe_cmd[0]); pipe_cmd[0] = p; p = NULL; break; } } if (p != NULL) { free(p); } free(pcopy); } skip_path_lookup: globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.script.start " "level=DEBUG\n"); pipe_cmd[1] = "-m"; pipe_cmd[2] = manager->config->jobmanager_type; pipe_cmd[3] = "-c"; pipe_cmd[4] = "interactive"; pipe_cmd[5] = "-l"; result = globus_eval_path( "${libdir}", &pipe_cmd[6]); if (result != GLOBUS_SUCCESS || pipe_cmd[6] == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto libdir_malloc_failed; } pipe_cmd[7] = NULL; memset(env, 0, sizeof(env)); i = 0; if (manager->config->globus_location) { env[i++] = globus_common_create_string( "GLOBUS_LOCATION=%s", manager->config->globus_location); } env[i++] = globus_common_create_string( "GLOBUS_SPOOL_DIR=%s", manager->config->job_state_file_dir); env[i++] = globus_common_create_string( "HOME=%s", manager->config->home); env[i++] = globus_common_create_string( "LOGNAME=%s", manager->config->logname); /* PATH is set in main, so we know it'll be non-null */ env[i++] = globus_common_create_string( "PATH=%s", getenv("PATH")); if (getenv("PERL5LIB")) { env[i++] = globus_common_create_string( "PERL5LIB=%s", getenv("PERL5LIB")); } #if (TARGET_ARCH_LINUX) { char * tmp_env = getenv("LD_LIBRARY_PATH"); if (tmp_env) { env[i++] = globus_common_create_string("LD_LIBRARY_PATH=%s", tmp_env); } } #elif (TARGET_ARCH_HPUX) { char * tmp_env = getenv("SHLIB_PATH"); if (tmp_env) { env[i++] = globus_common_create_string("SHLIB_PATH=%s", tmp_env); } tmp_env = getenv("LD_LIBRARY_PATH"); if (tmp_env) { env[i++] = globus_common_create_string("LD_LIBRARY_PATH=%s", tmp_env); } } #elif (TARGET_ARCH_SOLARIS) { char * tmp_env = getenv("LD_LIBRARY_PATH"); if (tmp_env) { env[i++] = globus_common_create_string("LD_LIBRARY_PATH=%s", tmp_env); } tmp_env = getenv("LD_LIBRARY_PATH_64"); if (tmp_env) { env[i++] = globus_common_create_string("LD_LIBRARY_PATH_64=%s", tmp_env); } } #elif (TARGET_ARCH_AIX) { char * tmp_env = getenv("LIBPATH"); if (tmp_env) { env[i++] = globus_common_create_string("LIBPATH=%s", tmp_env); } } #elif (TARGET_ARCH_DARWIN) { char * tmp_env = getenv("DYLD_LIBRARY_PATH"); if (tmp_env) { env[i++] = globus_common_create_string("DYLD_LIBRARY_PATH=%s", tmp_env); } } #elif (TARGET_ARCH_FREEBSD || TARGET_ARCH_OPENBSD) { char * tmp_env = getenv("LD_LIBRARY_PATH"); if (tmp_env) { env[i++] = globus_common_create_string("LD_LIBRARY_PATH=%s", tmp_env); } } #endif if (manager->config->x509_cert_dir) { env[i++] = globus_common_create_string( "X509_CERT_DIR=%s", manager->config->x509_cert_dir); } if (manager->config->tcp_port_range) { env[i++] = globus_common_create_string( "GLOBUS_TCP_PORT_RANGE=%s", manager->config->tcp_port_range); } env[i] = NULL; for (--i; i >= 0; i--) { if (!env[i]) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto env_strings_failed; } } result = globus_xio_attr_init(&manager->script_attr); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_JOBMANAGER_SCRIPT; goto attr_init_failed; } result = globus_xio_attr_cntl( manager->script_attr, globus_i_gram_job_manager_popen_driver, GLOBUS_XIO_POPEN_SET_PROGRAM, pipe_cmd); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_JOBMANAGER_SCRIPT; goto attr_cntl_program_failed; } result = globus_xio_attr_cntl( manager->script_attr, globus_i_gram_job_manager_popen_driver, GLOBUS_XIO_POPEN_SET_CHILD_ENV, env); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_JOBMANAGER_SCRIPT; goto attr_cntl_env_failed; } result = globus_xio_attr_cntl( manager->script_attr, globus_i_gram_job_manager_popen_driver, GLOBUS_XIO_POPEN_SET_BLOCKING_IO, 1); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_JOBMANAGER_SCRIPT; attr_cntl_env_failed: attr_cntl_program_failed: globus_xio_attr_destroy(manager->script_attr); } attr_init_failed: env_strings_failed: for (i = 0; i < 8; i++) { if (env[i] != NULL) { free(env[i]); } } free(pipe_cmd[6]); libdir_malloc_failed: free(pipe_cmd[0]); script_path_malloc_failed: return rc; } /* globus_l_gram_script_attr_init() */ int globus_gram_split_subjobs( const char * job_id, globus_list_t ** subjobs) { char * tok_end = NULL; char * job_id_string; char * job_id_string_copy; int rc = GLOBUS_SUCCESS; job_id_string_copy = strdup(job_id); if (job_id_string_copy == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto job_id_copy_failed; } for (tok_end = NULL, job_id_string = strtok_r(job_id_string_copy, ",", &tok_end); job_id_string != NULL; job_id_string = strtok_r(NULL, ",", &tok_end)) { char * subjob_id = NULL; subjob_id = strdup(job_id_string); if (subjob_id == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto strdup_failed; } rc = globus_list_insert(subjobs, subjob_id); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; free(subjob_id); goto insert_failed; } } if (rc != GLOBUS_SUCCESS) { insert_failed: strdup_failed: globus_list_destroy_all(*subjobs, free); *subjobs = NULL; } free(job_id_string_copy); job_id_copy_failed: return rc; } /* globus_gram_split_subjobs() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_auditing.c0000644000000000000000000000013214243161125026147 xustar000000000000000030 mtime=1653400149.355970151 30 atime=1653401831.256127769 30 ctime=1653404021.231747118 globus_gram_job_manager-15.8/globus_gram_job_manager_auditing.c0000664000175000017500000002262214243161125026314 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_job_manager.h" #ifdef BUILD_LITE #define asctime_r(a, b) asctime(a) #endif static int globus_l_gram_audit_get_username( char ** username); static int globus_l_gram_audit_write_timestamp( FILE * f, time_t when, const char * delim); static int globus_l_gram_audit_write_string( FILE * f, const char * s, const char * delim); int globus_gram_job_manager_auditing_file_write( globus_gram_jobmanager_request_t * request) { char * filename; FILE * auditing_file; time_t now; struct tm tmv; struct tm * tmp; char * name; int rc; const char * auditing_dir; if(request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { request->manager->usagetracker->count_total_done++; } else { request->manager->usagetracker->count_total_failed++; if(request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED) { request->manager->usagetracker->count_total_canceled++; } } auditing_dir = request->config->auditing_dir; if (auditing_dir == NULL) { rc = GLOBUS_SUCCESS; goto out; } rc = globus_l_gram_audit_get_username(&name); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto out; } now = time(NULL); if (now <= 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto free_name_out; } tmp = globus_libc_gmtime_r(&now, &tmv); filename = globus_common_create_string( "%s/%04d%02d%02dT%02d:%02d:%02d-%s-%s.gramaudit", auditing_dir, tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday, tmp->tm_hour, tmp->tm_min, tmp->tm_sec, name, request->uniq_id); if (filename == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto free_name_out; } auditing_file = fopen(filename, "w"); if (auditing_file == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto free_filename_out; } rc = chmod(filename, 0750); if (rc != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto close_filename_out; } /* job_grid_id */ rc = globus_l_gram_audit_write_string(auditing_file, request->job_contact, ","); if (rc != 0) { goto close_filename_out; } /* local_job_id */ rc = globus_l_gram_audit_write_string(auditing_file, request->original_job_id_string, ","); if (rc != 0) { goto close_filename_out; } /* subject name */ rc = globus_l_gram_audit_write_string( auditing_file, request->config->subject, ","); if (rc != 0) { goto close_filename_out; } /* username */ rc = globus_l_gram_audit_write_string(auditing_file, name, ","); if (rc != 0) { goto close_filename_out; } /* idempotent id */ rc = globus_l_gram_audit_write_string(auditing_file, NULL, ","); if (rc != 0) { goto close_filename_out; } /* creation_time */ rc = globus_l_gram_audit_write_timestamp(auditing_file, request->creation_time, ","); if (rc != 0) { goto close_filename_out; } /* queued_time */ rc = globus_l_gram_audit_write_timestamp(auditing_file, request->queued_time, ","); if (rc != 0) { goto close_filename_out; } /* stage_in_gid (WS-GRAM only) */ rc = globus_l_gram_audit_write_string(auditing_file, NULL, ","); if (rc != 0) { goto close_filename_out; } /* stage_out_grid_id (WS-GRAM only) */ rc = globus_l_gram_audit_write_string(auditing_file, NULL, ","); if (rc != 0) { goto close_filename_out; } /* clean_up_grid_id (WS-GRAM only) */ rc = globus_l_gram_audit_write_string(auditing_file, NULL, ","); if (rc != 0) { goto close_filename_out; } /* globus_toolkit_version */ rc = globus_l_gram_audit_write_string( auditing_file, request->config->globus_version, ","); if (rc != 0) { goto close_filename_out; } /* resource_manager_type */ rc = globus_l_gram_audit_write_string( auditing_file, request->config->jobmanager_type, ","); if (rc != 0) { goto close_filename_out; } /* job_description */ rc = globus_l_gram_audit_write_string(auditing_file, request->rsl_spec, ","); if (rc != 0) { goto close_filename_out; } /* success_flag */ rc = globus_l_gram_audit_write_string(auditing_file, request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE ? "true" : "false", ","); if (rc != 0) { goto close_filename_out; } /* finished_flag */ rc = globus_l_gram_audit_write_string(auditing_file,"true",","); if (rc != 0) { goto close_filename_out; } rc = globus_l_gram_audit_write_string( auditing_file, request->gateway_user, "\n"); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto close_filename_out; } close_filename_out: fclose(auditing_file); if (rc != 0) { remove(filename); } free_filename_out: free(filename); free_name_out: free(name); out: return rc; } /* globus_gram_job_manager_auditing_file_write() */ static int globus_l_gram_audit_get_username( char ** username) { struct passwd pwd; struct passwd * res; int rc; char buffer[128]; rc = globus_libc_getpwuid_r( getuid(), &pwd, buffer, sizeof(buffer), &res); if (rc != 0 || res == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto out; } *username = strdup(pwd.pw_name); if (*username == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } out: return rc; } /* globus_l_gram_audit_get_username() */ static int globus_l_gram_audit_write_string( FILE * f, const char * s, const char * delim) { int rc; if (s == NULL) { rc = fprintf(f, "\"NULL\"%s", delim); return rc >= 0 ? GLOBUS_SUCCESS : GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } rc = fputc('"', f); if (rc == EOF) { return GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } while (*s != '\0') { if (*s == '"') { rc = fprintf(f, """); } else { rc = fputc(*s, f); } if (rc < 0) { return GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } s++; } rc = fputc('"', f); if (rc == EOF) { return GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } rc = fprintf(f, "%s", delim); return rc >= 0 ? GLOBUS_SUCCESS : GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } /* globus_l_gram_audit_write_string() */ static int globus_l_gram_audit_write_timestamp( FILE * f, time_t when, const char * delim) { int rc; char * t; char * tmp; struct tm tmv; struct tm * tm_p; #ifndef BUILD_LITE char tbuf[26]; #endif if (when == 0) { rc = fprintf(f, "\"NULL\"%s", delim); return rc >= 0 ? GLOBUS_SUCCESS : GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } tm_p = globus_libc_gmtime_r(&when, &tmv); if (tm_p == NULL) { return GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } t = asctime_r(tm_p, tbuf); if (t == NULL) { return GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } tmp = strchr(t, '\n'); if (tmp) { *tmp = '\0'; } tmp = strrchr(t, ' '); *tmp = '\0'; rc = fprintf(f, "\"%s UTC %s\"%s", t, tmp+1, delim); return rc >= 0 ? GLOBUS_SUCCESS : GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } /* globus_l_gram_audit_write_timestamp() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_contact.c0000644000000000000000000000013214243161125025776 xustar000000000000000030 mtime=1653400149.356970141 30 atime=1653401831.313127232 30 ctime=1653404021.233747099 globus_gram_job_manager-15.8/globus_gram_job_manager_contact.c0000664000175000017500000014060114243161125026141 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_job_manager.h" #include "version.h" #include typedef struct globus_gram_job_manager_contact_s { char * contact; int job_state_mask; int failed_count; } globus_gram_job_manager_contact_t; typedef struct globus_gram_job_callback_context_s { globus_gram_jobmanager_request_t * request; globus_list_t * contacts; unsigned char * message; globus_size_t message_length; int active; globus_bool_t restart_state_when_done; } globus_gram_job_callback_context_t; static int globus_l_gram_callback_queue( globus_gram_job_manager_t * manager, globus_gram_job_callback_context_t *context); static void globus_l_gram_callback_reply( void * arg, globus_gram_protocol_handle_t handle, globus_byte_t * message, globus_size_t msgsize, int errorcode, char * uri); /** * Add a callback contact to the request's list. * * @param request * The request to modify * @param contact * The callback contact URL string. * @param job_state_mask * The job state mask for this callback contact. * * @retval GLOBUS_SUCCESS * The callback contact was successfully added to the * request. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INSERTING_CONTACT * The callback contact failed to be inserted into the * request. */ int globus_gram_job_manager_contact_add( globus_gram_jobmanager_request_t * request, const char * contact, int job_state_mask) { globus_gram_job_manager_contact_t * callback; int rc = GLOBUS_SUCCESS; globus_list_t * tmp_list; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.callback_register.start " "level=TRACE " "gramid=%s " "contact=%s " "mask=%d " "\n", request->job_contact_path, contact, job_state_mask); /* * If the contact is already registered, update the job_state_mask * to be the set of states in the old or new job state masks. * This means that if a contact is registered multiple times, it will * receive only one callback for each job state change that it is * registered for. */ tmp_list = request->client_contacts; while(!globus_list_empty(tmp_list)) { callback = globus_list_first(tmp_list); if(strcmp(contact, callback->contact) == 0) { callback->job_state_mask |= job_state_mask; goto done; } tmp_list = globus_list_rest(tmp_list); } callback = malloc(sizeof(globus_gram_job_manager_contact_t)); if(callback == NULL) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback_register.end " "level=ERROR " "gramid=%s " "contact=%s " "mask=%d " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, contact, job_state_mask, "Malloc failed", -GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED, errno, strerror(errno)); goto error_exit; } callback->contact = strdup(contact); if(callback->contact == NULL) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback_register.end " "level=ERROR " "gramid=%s " "contact=%s " "mask=%d " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, contact, job_state_mask, "Malloc failed", -GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED, errno, strerror(errno)); goto strdup_contact_failed; } callback->job_state_mask = job_state_mask; callback->failed_count = 0; rc = globus_list_insert(&request->client_contacts, (void *) callback); if(rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback_register.end " "level=ERROR " "gramid=%s " "contact=%s " "mask=%d " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, contact, job_state_mask, "List insert failed", strerror(errno), -GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED); goto list_insert_failed; } done: globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.callback_register.end " "level=TRACE " "gramid=%s " "contact=%s " "mask=%d " "status=%d\n", request->job_contact_path, contact, job_state_mask, 0); return rc; list_insert_failed: free(callback->contact); strdup_contact_failed: free(callback); error_exit: return GLOBUS_GRAM_PROTOCOL_ERROR_INSERTING_CLIENT_CONTACT; } /* globus_gram_job_manager_contact_add() */ int globus_gram_job_manager_contact_remove( globus_gram_jobmanager_request_t * request, const char * contact) { globus_list_t * tmp_list; int rc; globus_gram_job_manager_contact_t * client_contact_node; rc = GLOBUS_GRAM_PROTOCOL_ERROR_CLIENT_CONTACT_NOT_FOUND; tmp_list = request->client_contacts; while(!globus_list_empty(tmp_list)) { client_contact_node = globus_list_first(tmp_list); if(strcmp(contact, client_contact_node->contact) == 0) { globus_list_remove(&request->client_contacts, tmp_list); free(client_contact_node->contact); free(client_contact_node); rc = GLOBUS_SUCCESS; break; } tmp_list = globus_list_rest(tmp_list); } return rc; } /* globus_gram_job_manager_contact_remove() */ int globus_gram_job_manager_contact_list_free( globus_gram_jobmanager_request_t * request) { globus_gram_job_manager_contact_t * client_contact_node; while(!globus_list_empty(request->client_contacts)) { client_contact_node = globus_list_remove( &request->client_contacts, request->client_contacts); free (client_contact_node->contact); free (client_contact_node); } return GLOBUS_SUCCESS; } /* globus_gram_job_manager_contact_list_free() */ /** * @brief Send a job state callback to registered clients * @details * Start processing a job state callback for the given request, sending * its current job state to all clients which are registered with a * mask that includes the current state. If the * @a restart_state_machine_when_done parameter is GLOBUS_TRUE, then * the state machine will be reregistered after the callback has been * sent and its reply parsed. Otherwise, the state machine is assumed * to not care about when this completes. * * @param request * Job request to send state changes about * @param restart_state_machine_when_done * Flag indicating whether to restart the state machine when complete */ void globus_gram_job_manager_contact_state_callback( globus_gram_jobmanager_request_t * request, globus_bool_t restart_state_machine_when_done) { int rc; globus_list_t * tmp_list; globus_gram_job_manager_contact_t * client_contact_node; globus_hashtable_t extensions = NULL; globus_gram_protocol_extension_t * entry = NULL; globus_gram_protocol_job_state_t state; state = (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) ? GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED : request->status; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.callback.start " "level=DEBUG " "gramid=%s " "state=%d " "restart_when_done=%s " "\n", request->job_contact_path, state, restart_state_machine_when_done ? "true" : "false"); globus_gram_job_callback_context_t *context = NULL; tmp_list = request->client_contacts; if (globus_list_empty(tmp_list)) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.callback.end " "level=DEBUG " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "\n", request->job_contact_path, state, 0, "Empty callback contact list"); if (restart_state_machine_when_done) { globus_reltime_t delay; GlobusTimeReltimeSet(delay, request->two_phase_commit, 0); rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay); } return; } context = malloc(sizeof(globus_gram_job_callback_context_t)); if (context == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Malloc failed", errno, strerror(errno)); goto context_malloc_failed; } rc = globus_gram_job_manager_add_reference( request->manager, request->job_contact_path, "Job state callbacks", &context->request); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, state, -rc, "Add reference failed", globus_gram_protocol_error_string(rc)); goto add_reference_failed; } context->contacts = NULL; context->message = NULL; context->message_length = 0; context->active = 0; context->restart_state_when_done = restart_state_machine_when_done; rc = globus_hashtable_init( &extensions, 7, globus_hashtable_string_hash, globus_hashtable_string_keyeq); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, state, -rc, "Hashtable init failed", globus_gram_protocol_error_string(rc)); goto fail_extensions_init; } /* Create message extensions to send exit code if known */ if (request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && (request->config->seg_module != NULL || strcmp(request->config->jobmanager_type, "condor") == 0)) { entry = globus_gram_protocol_create_extension( "exit-code", "%d", request->exit_code); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, state, -rc, "Message extension initialization failed", globus_gram_protocol_error_string(rc)); goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, state, -rc, "Message extension hashtable insert failed", globus_gram_protocol_error_string(rc)); goto fail_entry_insert; } } else if (request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { if (request->gt3_failure_type != NULL) { entry = globus_gram_protocol_create_extension( "gt3-failure-type", "%s", request->gt3_failure_type); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension initialization failed", globus_gram_protocol_error_string(rc)); goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension hashtable insert failed", globus_gram_protocol_error_string(rc)); goto fail_entry_insert; } } if (request->gt3_failure_message != NULL) { entry = globus_gram_protocol_create_extension( "gt3-failure-message", "%s", request->gt3_failure_message); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension initialization failed", globus_gram_protocol_error_string(rc)); goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension hashtable insert failed", globus_gram_protocol_error_string(rc)); goto fail_entry_insert; } } if (request->gt3_failure_source != NULL) { entry = globus_gram_protocol_create_extension( "gt3-failure-source", "%s", request->gt3_failure_source); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension hashtable insert failed", globus_gram_protocol_error_string(rc)); goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension hashtable insert failed", globus_gram_protocol_error_string(rc)); goto fail_entry_insert; } } if (request->gt3_failure_destination != NULL) { entry = globus_gram_protocol_create_extension( "gt3-failure-destination", "%s", request->gt3_failure_destination); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension initialization failed", globus_gram_protocol_error_string(rc)); goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension hashtable insert failed", globus_gram_protocol_error_string(rc)); goto fail_entry_insert; } } } /* Add extensions for version numbers */ entry = globus_gram_protocol_create_extension( "toolkit-version", "%s", request->config->globus_version); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension initialization failed", globus_gram_protocol_error_string(rc)); goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension hashtable insert failed", globus_gram_protocol_error_string(rc)); goto fail_entry_insert; } entry = globus_gram_protocol_create_extension( "version", "%d.%d (%d-%d)", local_version.major, local_version.minor, local_version.timestamp, local_version.branch_id); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension initialization failed", globus_gram_protocol_error_string(rc)); goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Message extension hashtable insert failed", globus_gram_protocol_error_string(rc)); goto fail_entry_insert; } entry = NULL; if (extensions != NULL) { rc = globus_gram_protocol_pack_status_update_message_with_extensions( request->job_contact, (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) ? GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED : request->status, (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) ? request->stop_reason : request->failure_code, &extensions, &context->message, &context->message_length); } else { rc = globus_gram_protocol_pack_status_update_message( request->job_contact, (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) ? GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED : request->status, (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) ? request->stop_reason : request->failure_code, &context->message, &context->message_length); } if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Error packing message", globus_gram_protocol_error_string(rc)); goto pack_message_failed; } while(!globus_list_empty(tmp_list)) { client_contact_node = globus_list_first(tmp_list); tmp_list = globus_list_rest(tmp_list); if ((request->status & client_contact_node->job_state_mask) && client_contact_node->failed_count < 4) { char * contact = strdup(client_contact_node->contact); if (contact == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d" "contact=%s " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", request->job_contact_path, state, -rc, client_contact_node->contact, "Copy of contact string failed", errno, strerror(errno)); continue; } rc = globus_list_insert(&context->contacts, contact); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.end " "level=ERROR " "gramid=%s " "state=%d " "status=%d" "contact=%s " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, client_contact_node->contact, "Error inserting contact string into list", globus_gram_protocol_error_string(rc)); free(contact); continue; } } } if (globus_list_empty(context->contacts)) { /* Nothing to send... free context */ rc = GLOBUS_FAILURE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.callback.end " "level=WARN " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Unexpectedly empty contact list", globus_gram_protocol_error_string(rc)); goto nothing_to_send; } rc = globus_l_gram_callback_queue(request->manager, context); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.callback.end " "level=WARN " "gramid=%s " "state=%d " "status=%d" "msg=\"%s\" " "reason=\"%s\"\n", request->job_contact_path, state, -rc, "Error queuing callback messages", globus_gram_protocol_error_string(rc)); goto queue_failed; } if (extensions != NULL) { globus_gram_protocol_hash_destroy(&extensions); } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.callback.end " "level=DEBUG " "gramid=%s " "state=%d " "status=%d " "msg=\"%s\"\n", request->job_contact_path, state, rc, "Done queuing callback messages"); if (rc != GLOBUS_SUCCESS) { queue_failed: tmp_list = context->contacts; while (!globus_list_empty(tmp_list)) { char * tmp = globus_list_first(tmp_list); tmp_list = globus_list_rest(tmp_list); free(tmp); } nothing_to_send: if (restart_state_machine_when_done) { globus_reltime_t delay; GlobusTimeReltimeSet(delay, request->two_phase_commit, 0); rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay); } free(context->message); globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "Job state callbacks"); if (entry != NULL) { fail_entry_insert: free(entry->value); free(entry->attribute); free(entry); } extension_create_failed: if (extensions) { globus_gram_protocol_hash_destroy(&extensions); } fail_extensions_init: add_reference_failed: pack_message_failed: free(context); context_malloc_failed: ; } } /* globus_gram_job_manager_state_callback() */ /** * Write list of callback contacts to the given file * * @param request * Job request which should have its callback contacts written * @param fp * File to write to * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_STATE_FILE * Error writing state file * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed */ int globus_gram_job_manager_write_callback_contacts( globus_gram_jobmanager_request_t * request, FILE * fp) { globus_gram_job_manager_contact_t * contact; globus_list_t * tmp; int rc; tmp = request->client_contacts; rc = fprintf(fp, "%d\n", globus_list_size(tmp)); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_STATE_FILE; goto failed_write_count; } while (! globus_list_empty(tmp)) { contact = globus_list_first(tmp); tmp = globus_list_rest(tmp); rc = fprintf(fp, "%d %s\n", contact->job_state_mask, contact->contact); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_STATE_FILE; goto failed_write_contact; } } rc = GLOBUS_SUCCESS; failed_write_contact: failed_write_count: return rc; } /* globus_gram_job_manager_write_callback_contacts() */ /** * Read list of callback contacts from the given file * * @param request * Job request which should have its callback contacts read * @param fp * File to read from * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE * Error reading state file * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed */ int globus_gram_job_manager_read_callback_contacts( globus_gram_jobmanager_request_t * request, FILE * fp) { globus_gram_job_manager_contact_t * contact; globus_list_t ** tmp; int count; int rc; long off1, off2; int i; request->client_contacts = NULL; tmp = &request->client_contacts; rc = fscanf(fp, "%d%*[\n]", &count); if (rc != 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto failed_read_count; } for (i = 0; i < count; i++) { contact = malloc(sizeof(globus_gram_job_manager_contact_t)); if (contact == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_malloc_contact; } off1 = ftell(fp); if (off1 < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto failed_ftell; } rc = fscanf(fp, "%d %*s%*[\n]", &contact->job_state_mask); if (rc < 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto failed_read_mask; } off2 = ftell(fp); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto failed_ftell2; } rc = fseek(fp, off1, SEEK_SET); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto failed_fseek; } contact->contact = malloc(off2-off1+1); if (contact->contact == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_malloc_contact_string_failed; } rc = fscanf(fp, "%*d %s%*[\n]", contact->contact); if (rc < 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto failed_scan_contact; } contact->failed_count = 0; rc = globus_list_insert(tmp, contact); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_list_insert; } tmp = globus_list_rest_ref(*tmp); } rc = GLOBUS_SUCCESS; if (rc != GLOBUS_SUCCESS) { failed_list_insert: failed_scan_contact: free(contact->contact); failed_malloc_contact_string_failed: failed_fseek: failed_ftell2: failed_read_mask: failed_ftell: free(contact); failed_malloc_contact: globus_gram_job_manager_contact_list_free(request); failed_read_count: ; } return rc; } /* globus_gram_job_manager_read_callback_contacts() */ static int globus_l_gram_callback_queue( globus_gram_job_manager_t * manager, globus_gram_job_callback_context_t *context) { int rc = GLOBUS_SUCCESS; globus_list_t * references = NULL; globus_gram_jobmanager_request_t * request; if (manager->config->log_levels & GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE) { char * message; message = globus_gram_prepare_log_string((char *) context->message); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.callback.queue.start " "level=TRACE " "gramid=%s " "msg=\"%s\" " "status_message=\"%s\"" "\n", context->request->job_contact_path, "Queuing status update message", message ? message : ""); if (message) { free(message); } } GlobusGramJobManagerLock(manager); rc = globus_fifo_enqueue(&manager->state_callback_fifo, context); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_FAILURE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.callback.queue.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\"" "\n", context->request->job_contact_path, "Error enqueuing context in callback fifo", -rc, globus_gram_protocol_error_string(rc)); goto failed_enqueue; } while (manager->state_callback_slots > 0 && !globus_fifo_empty(&manager->state_callback_fifo)) { context = globus_fifo_peek(&manager->state_callback_fifo); request = context->request; while (manager->state_callback_slots > 0 && !globus_list_empty(context->contacts)) { char * contact; contact = globus_list_remove(&context->contacts, context->contacts); if (manager->config->log_levels & GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE) { char * message; message = globus_gram_prepare_log_string( (char *) context->message); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.callback.queue.process.start " "level=TRACE " "gramid=%s " "msg=\"%s\" " "contact=%s " "status_message=\"%s\"" "\n", context->request->job_contact_path, "Sending status update message", contact, message ? message : ""); if (message) { free(message); } } rc = globus_gram_protocol_post( contact, NULL, NULL, context->message, context->message_length, globus_l_gram_callback_reply, context); if (rc == GLOBUS_SUCCESS) { request->job_stats.callback_count++; manager->state_callback_slots--; context->active++; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.callback.queue.process.end " "level=TRACE " "gramid=%s " "contact=%s " "msg=\"%s\" " "status=%d " "\n", context->request->job_contact_path, contact, "Message posted", rc); } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.callback.queue.process.end " "level=WARN " "gramid=%s " "contact=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", context->request->job_contact_path, contact, "Message posted", -rc, globus_gram_protocol_error_string(rc)); rc = GLOBUS_SUCCESS; } free(contact); } if (globus_list_empty(context->contacts)) { (void) globus_fifo_dequeue(&manager->state_callback_fifo); } if (context->active == 0 && globus_list_empty(context->contacts)) { free(context->message); free(context); context = NULL; globus_list_insert(&references, request->job_contact_path); } } failed_enqueue: GlobusGramJobManagerUnlock(manager); while (!globus_list_empty(references)) { char * key = globus_list_remove(&references, references); globus_gram_job_manager_remove_reference( manager, key, "Job state callbacks"); } if (rc == GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.callback.queue.end " "level=TRACE " "%s%s%s" "status=%d\n", context ? "gramid=" : "", context ? context->request->job_contact_path : "", context ? " " : "", -rc); } return rc; } /* globus_l_gram_callback_queue() */ static void globus_l_gram_callback_reply( void * arg, globus_gram_protocol_handle_t handle, globus_byte_t * message, globus_size_t msgsize, int errorcode, char * uri) { globus_gram_job_callback_context_t *context; globus_gram_jobmanager_request_t * request; globus_gram_job_manager_t * manager; globus_list_t * references = NULL; globus_list_t * references_to_restart = NULL; int rc = GLOBUS_SUCCESS; context = arg; request = context->request; manager = request->manager; GlobusGramJobManagerLock(manager); context->active--; manager->state_callback_slots++; if (context->active == 0 && globus_list_empty(context->contacts)) { if (context->restart_state_when_done) { globus_list_insert(&references_to_restart, request); } else { globus_list_insert(&references, request); } free(context->message); free(context); } while (manager->state_callback_slots > 0 && !globus_fifo_empty(&manager->state_callback_fifo)) { context = globus_fifo_peek(&manager->state_callback_fifo); request = context->request; while (manager->state_callback_slots > 0 && !globus_list_empty(context->contacts)) { char * contact; contact = globus_list_remove(&context->contacts, context->contacts); rc = globus_gram_protocol_post( contact, NULL, NULL, context->message, context->message_length, globus_l_gram_callback_reply, context); if (rc == GLOBUS_SUCCESS) { manager->state_callback_slots--; context->active++; } free(contact); } if (globus_list_empty(context->contacts)) { (void) globus_fifo_dequeue(&manager->state_callback_fifo); } if (context->active == 0 && globus_list_empty(context->contacts)) { if (context->restart_state_when_done) { globus_list_insert(&references_to_restart, request); } else { globus_list_insert(&references, request); } free(context->message); free(context); } } GlobusGramJobManagerUnlock(manager); while (!globus_list_empty(references)) { request = globus_list_remove(&references, references); globus_gram_job_manager_remove_reference( manager, request->job_contact_path, "Job state callbacks"); } while (!globus_list_empty(references_to_restart)) { globus_reltime_t delay; request = globus_list_remove( &references_to_restart, references_to_restart); GlobusGramJobManagerRequestLock(request); if (request->jobmanager_state != GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) { GlobusTimeReltimeSet(delay, request->two_phase_commit, 0); } else { GlobusTimeReltimeSet(delay, 0, 0); } rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay); globus_gram_job_manager_remove_reference( manager, request->job_contact_path, "Job state callbacks"); GlobusGramJobManagerRequestUnlock(request); } } /* globus_l_gram_callback_reply() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_gsi.c0000644000000000000000000000013114243161125025124 xustar000000000000000030 mtime=1653400149.356970141 30 atime=1653401831.334127035 29 ctime=1653404021.23574708 globus_gram_job_manager-15.8/globus_gram_job_manager_gsi.c0000664000175000017500000010077714243161125025302 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_job_manager.h" #include "globus_gsi_system_config.h" #include "globus_callout.h" #include "globus_callout_constants.h" #include "globus_gram_jobmanager_callout_error.h" #include #include static void globus_l_gram_job_manager_proxy_expiration( void * callback_arg); static int globus_l_gram_job_manager_gsi_register_proxy_timeout( globus_gram_job_manager_t * manager, globus_reltime_t * timeout, globus_callback_handle_t * callback_handle); int globus_gram_job_manager_import_sec_context( globus_gram_job_manager_t * manager, int context_fd, gss_ctx_id_t * response_contextp) { OM_uint32 major_status; OM_uint32 minor_status; int token_status; gss_name_t globus_id = NULL; gss_buffer_desc globus_id_token = { 0, NULL }; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.import_sec_context.start level=TRACE fd=%d\n", context_fd); major_status = globus_gss_assist_import_sec_context( &minor_status, response_contextp, &token_status, context_fd, NULL /*manager->jobmanager_log_fp*/); if (GSS_ERROR(major_status)) { char * error_string = NULL; char * escaped_error_string; globus_gss_assist_display_status_str( &error_string, "", major_status, minor_status, 0); escaped_error_string = globus_gram_prepare_log_string(error_string); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.import_sec_context.end level=ERROR status=%d " "major_status=%d msg=\"Failed to load security context\" " "reason=\"%s\"\n", -GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED, major_status, escaped_error_string ? escaped_error_string : ""); if (error_string) { free(error_string); } if (escaped_error_string) { free(escaped_error_string); } return GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED; } if (manager && manager->config->log_levels & GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE) { do { major_status = gss_inquire_context( &minor_status, *response_contextp, &globus_id, NULL, NULL, NULL, NULL, NULL, NULL); } while (major_status == GSS_S_CONTINUE_NEEDED); if (major_status == GSS_S_COMPLETE) { do { major_status = gss_display_name( &minor_status, globus_id, &globus_id_token, NULL); } while (major_status == GSS_S_CONTINUE_NEEDED); } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.import_sec_context.end " "level=TRACE " "status=%d " "globusid=\"%s\" " "\n", 0, globus_id_token.value != NULL ? globus_id_token.value : ""); gss_release_buffer( &minor_status, &globus_id_token); gss_release_name( &minor_status, &globus_id); } return GLOBUS_SUCCESS; } /* globus_gram_job_manager_import_sec_context() */ /** * Check to see if we are using GSI. * * Checks the GSSAPI implementation mechanisms to decide if we * are using the GSI implementation of the GSSAPI specification. * If so, we can do some nice tricks like relocation of a user proxy * into the user's GASS cache. * * @param request * The request we are processing. Used for logging. * * @return This function returns GLOBUS_TRUE if the job manager is * using GSI, GLOBUS_FALSE otherwise. */ globus_bool_t globus_gram_job_manager_gsi_used( globus_gram_jobmanager_request_t * request) { OM_uint32 major_status; OM_uint32 minor_status; /* * define the Globus object ids * This is regestered as a private enterprise * via IANA * http://www.isi.edu/in-notes/iana/assignments/enterprise-numbers * * iso.org.dod.internet.private.enterprise (1.3.6.1.4.1) * globus 3536 * security 1 * gssapi_ssleay 1 */ gss_OID_desc gsi_mech = {9, "\x2b\x06\x01\x04\x01\x9b\x50\x01\x01"}; gss_OID_set mechs; int present = 0; /* * Figure out if we're using GSI */ major_status = gss_indicate_mechs( &minor_status, &mechs); if(major_status == GSS_S_COMPLETE) { major_status = gss_test_oid_set_member( &minor_status, &gsi_mech, mechs, &present); if(major_status != GSS_S_COMPLETE) { present = 0; } gss_release_oid_set(&minor_status, &mechs); } return (present ? GLOBUS_TRUE : GLOBUS_FALSE); } /* globus_l_gram_job_manager_gsi_used() */ /** * Register timeout to occur when the job manager's proxy is set to expire * * @param manager * Job manager state (for logging) * @param cred * Job manager credential * @param timeout * Time (in seconds) to stop the manager if no credential is available. * @param callback_handle * Pointer to be set to the handle to the expiration callback. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_EXPIRED * User proxy expired * @retval GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES * No resources for callback * @retval GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_NOT_FOUND * Proxy not found */ int globus_gram_job_manager_gsi_register_proxy_timeout( globus_gram_job_manager_t * manager, gss_cred_id_t cred, int timeout, globus_callback_handle_t * callback_handle) { int rc = GLOBUS_SUCCESS; globus_reltime_t delay; OM_uint32 major_status; OM_uint32 minor_status; OM_uint32 lifetime; time_t cred_expiration_time; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.register_proxy_timeout.start " "level=TRACE " "\n"); *callback_handle = GLOBUS_NULL_HANDLE; cred_expiration_time = time(NULL); major_status = gss_inquire_cred( &minor_status, cred, NULL, &lifetime, NULL, NULL); if (major_status != GSS_S_COMPLETE) { char * error_string = NULL; rc = GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_NOT_FOUND; globus_gss_assist_display_status_str( &error_string, "", major_status, minor_status, 0); globus_gram_prepare_log_string(error_string); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.register_proxy_timeout.end " "level=ERROR " "status=%d " "msg=\"%s\" " "major_status=%d " "reason=\"%s\"\n", -rc, "gss_inquire_cred failed", major_status, error_string ? error_string : ""); if (error_string) { free(error_string); } goto failed_inquire_cred; } if (lifetime == GSS_C_INDEFINITE) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.register_proxy_timeout.end " "level=TRACE " "status=%d " "lifetime=indefinite " "msg=\"%s\" " "\n", "User proxy has indefinite lifetime"); goto wont_expire; } cred_expiration_time += (time_t) lifetime; if (((long) lifetime - timeout) <= 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_EXPIRED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.register_proxy_timeout.end " "level=ERROR " "status=%d " "lifetime=%d " "msg=\"user proxy lifetime is less than minimum " "(%d seconds)\" " "reason=\"%s\" " "\n", (int) -rc, lifetime, timeout, globus_gram_protocol_error_string(rc)); goto proxy_expired; } GlobusTimeReltimeSet(delay, lifetime - timeout, 0); manager->cred_expiration_time = cred_expiration_time; rc = globus_l_gram_job_manager_gsi_register_proxy_timeout( manager, &delay, callback_handle); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.register_proxy_timeout.end " "level=ERROR " "status=%d " "lifetime=%d " "msg=\"Error registering proxy timeout callback\" " "reason=\"%s\" " "\n", (int) -rc, lifetime, globus_gram_protocol_error_string(rc)); } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.register_proxy_timeout.end " "level=TRACE " "status=%d " "lifetime=%d " "timeout=%d " "\n", (int) -rc, lifetime, timeout); } proxy_expired: wont_expire: failed_inquire_cred: return rc; } /* globus_gram_job_manager_gsi_register_proxy_timeout() */ /** * Look up subject name from the process's credential. * * @param subject_namep * Pointer to set to a copy of the subject name. The caller is responsible * for freeing this string. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_NOT_FOUND * Proxy not found. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. */ int globus_gram_job_manager_gsi_get_subject( char ** subject_namep) { OM_uint32 major_status; OM_uint32 minor_status; int rc = GLOBUS_SUCCESS; gss_name_t name; gss_buffer_desc export_name; char * subject_name = NULL; export_name.value = NULL; export_name.length = 0; globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram_gsi_get_subject.start " "level=TRACE \n"); major_status = gss_inquire_cred( &minor_status, GSS_C_NO_CREDENTIAL, &name, NULL, NULL, NULL); if (major_status != GSS_S_COMPLETE) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_NOT_FOUND; goto failed_inquire_cred; } major_status = gss_display_name( &minor_status, name, &export_name, NULL); if (major_status != GSS_S_COMPLETE) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_display_name; } subject_name = strdup(export_name.value); if (subject_name == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_subject_name_copy; } failed_subject_name_copy: gss_release_buffer(&minor_status, &export_name); failed_display_name: major_status = gss_release_name( &minor_status, &name); failed_inquire_cred: *subject_namep = subject_name; if (rc != GLOBUS_SUCCESS) { char *errmsg = NULL, *errmsg_escaped = NULL; if (major_status != GSS_S_COMPLETE) { globus_gss_assist_display_status_str( &errmsg, "Error getting subject", major_status, minor_status, 0); errmsg_escaped = globus_gram_prepare_log_string(errmsg); } globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram_gsi_get_subject.end " "level=ERROR " "status=%d " "reason=\"%s\" " "\n", -rc, errmsg_escaped ? errmsg_escaped : globus_gram_protocol_error_string(rc)); if (errmsg) { free(errmsg); } if (errmsg_escaped) { free(errmsg_escaped); } } return rc; } /* globus_gram_job_manager_gsi_get_subject() */ /** * Register timeout to occur when the job manager's proxy is set to expire * * @param manager * Job manager state (for logging) * @param timeout * Relative time to delay before firing the proxy timeout * @param callback_handle * Pointer to the expiration callback handle. If this points to * GLOBUS_NULL_HANDLE, then a new callback will be created and this will * be modified to point to it. Otherwise, the callback handle will be * modified. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_EXPIRED * User proxy expired * @retval GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES * No resources for callback * @retval GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_NOT_FOUND * Proxy not found */ static int globus_l_gram_job_manager_gsi_register_proxy_timeout( globus_gram_job_manager_t * manager, globus_reltime_t * timeout, globus_callback_handle_t * callback_handle) { int rc = GLOBUS_SUCCESS; globus_result_t result; if (*callback_handle == GLOBUS_NULL_HANDLE) { result = globus_callback_register_oneshot( callback_handle, timeout, globus_l_gram_job_manager_proxy_expiration, manager); } else { result = globus_callback_adjust_oneshot( *callback_handle, timeout); } if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; } return rc; } /* globus_l_gram_job_manager_gsi_register_proxy_timeout() */ /** * Update the request with a new security credential. * * If the new credential will live longer than the current Job Manager-wide * credential, use the new one with the GRAM protocol library, write it to the * state directory, and update the proxy timeout. * * If the request is non-null, update the proxy on disk in the job directory so * this particular job will have a copy of this credential. * * The credential is either destroyed or passed to the GRAM Protocol library, * which will destroy it when no longer needed. The caller must not free * the credential. * * @param request * Job request to update with this credential * @param credential * New GSSAPI credential. */ int globus_gram_job_manager_gsi_update_credential( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, gss_cred_id_t credential) { OM_uint32 major_status; OM_uint32 minor_status; OM_uint32 lifetime; time_t credential_expiration_time; int rc = GLOBUS_SUCCESS; globus_reltime_t delay_time; globus_bool_t set_credential = GLOBUS_FALSE; credential_expiration_time = time(NULL); major_status = gss_inquire_cred( &minor_status, credential, NULL, &lifetime, NULL, NULL); if (GSS_ERROR(major_status)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; goto inquire_cred_failed; } if (lifetime != GSS_C_INDEFINITE) { credential_expiration_time += lifetime; } else { credential_expiration_time = 0; } if (manager->cred_expiration_time != 0 && (lifetime == GSS_C_INDEFINITE || credential_expiration_time > manager->cred_expiration_time)) { manager->cred_expiration_time = credential_expiration_time; rc = globus_gram_job_manager_gsi_write_credential( request, credential, manager->cred_path); if (rc != 0) { goto write_manager_cred_failed; } set_credential = GLOBUS_TRUE; manager->stop = GLOBUS_FALSE; } if (request) { rc = globus_gram_job_manager_gsi_write_credential( request, credential, request->x509_user_proxy); if (rc != 0) { goto write_job_cred_failed; } } if (set_credential) { GlobusTimeReltimeSet( delay_time, lifetime - manager->config->proxy_timeout, 0); rc = globus_l_gram_job_manager_gsi_register_proxy_timeout( manager, &delay_time, &manager->proxy_expiration_timer); if (rc != GLOBUS_SUCCESS) { goto register_timeout_failed; } rc = globus_gram_protocol_set_credentials(credential); credential = GSS_C_NO_CREDENTIAL; if (rc != GLOBUS_SUCCESS) { goto set_credentials_failed; } } set_credentials_failed: register_timeout_failed: write_job_cred_failed: write_manager_cred_failed: inquire_cred_failed: if (credential != GSS_C_NO_CREDENTIAL) { gss_release_cred(&minor_status, &credential); } return rc; } /* globus_gram_job_manager_gsi_update_credential() */ /* Write a GSSAPI credential to a given path * @param credential * Credential to write * @param path * Path to write to * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY * Error opening path */ int globus_gram_job_manager_gsi_write_credential( globus_gram_jobmanager_request_t * request, gss_cred_id_t credential, const char * path) { OM_uint32 major_status; OM_uint32 minor_status; gss_buffer_desc credential_buffer; int rc; int fd; char * gt3_error_message = NULL; int written; int save_errno; major_status = gss_export_cred(&minor_status, credential, GSS_C_NO_OID, 0, &credential_buffer); if(GSS_ERROR(major_status)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; (void) globus_gss_assist_display_status_str( >3_error_message, "credential export failed", major_status, minor_status, 0); goto export_failed; } fd = open( path, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR); if(fd == -1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; save_errno = errno; gt3_error_message = globus_common_create_string( "open credential file for writing failed: %s: %s (%d)", path, strerror(save_errno), save_errno); goto job_proxy_open_failed; } written = 0; do { rc = write( fd, ((char *) credential_buffer.value) + written, (size_t) credential_buffer.length - written); if(rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE_USER_PROXY; save_errno = errno; gt3_error_message = globus_common_create_string( "writing credential file failed: %s: %s (%d)", path, strerror(save_errno), save_errno); goto job_proxy_write_failed; } else if (rc == 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE_USER_PROXY; gt3_error_message = globus_common_create_string( "writing credential file failed: %s: %s", path, "short write"); goto job_proxy_write_failed; } else { written += rc; } } while (written < credential_buffer.length); rc = close(fd); if (rc != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE_USER_PROXY; save_errno = errno; gt3_error_message = globus_common_create_string( "writing credential file failed: %s: %s (%d)", path, strerror(save_errno), save_errno); goto job_proxy_close_failed; } rc = 0; fd = -1; job_proxy_write_failed: if(fd != -1) { close(fd); fd = -1; } job_proxy_close_failed: job_proxy_open_failed: (void) gss_release_buffer(&minor_status, &credential_buffer); export_failed: if (request != NULL && request->gt3_failure_message == NULL) { request->gt3_failure_message = gt3_error_message; } else if (gt3_error_message) { free(gt3_error_message); } return rc; } /* globus_gram_job_manager_gsi_write_credential() */ static void globus_l_gram_job_manager_proxy_expiration( void * callback_arg) { globus_gram_job_manager_t * manager; manager = callback_arg; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.proxy_expire.end level=WARN " "msg=\"Proxy expired, stopping job manager\"\n"); globus_gram_job_manager_stop_all_jobs(manager); } /* globus_l_gram_job_manager_proxy_expiration() */ int globus_gram_job_manager_call_authz_callout( globus_gram_job_manager_config_t * config, gss_ctx_id_t request_context, gss_ctx_id_t authz_context, const char * uniq_id, const globus_rsl_t * rsl, const char * auth_type) { int rc = GLOBUS_SUCCESS; globus_result_t result; globus_object_t * error; char * filename; globus_callout_handle_t authz_handle; if (! config->enable_callout) { return GLOBUS_SUCCESS; } result = GLOBUS_GSI_SYSCONFIG_GET_AUTHZ_CONF_FILENAME(&filename); if(result != GLOBUS_SUCCESS) { error = globus_error_peek(result); if(! globus_error_match( error, GLOBUS_GSI_SYSCONFIG_MODULE, GLOBUS_GSI_SYSCONFIG_ERROR_GETTING_AUTHZ_FILENAME)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION_SYSTEM_FAILURE; } goto conf_filename_failed; } result = globus_callout_handle_init(&authz_handle); if(result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION_SYSTEM_FAILURE; goto handle_init_failed; } result = globus_callout_read_config(authz_handle, filename); if(result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION_SYSTEM_FAILURE; goto read_config_failed; } result = globus_callout_call_type(authz_handle, GLOBUS_GRAM_AUTHZ_CALLOUT_TYPE, request_context, authz_context, uniq_id, rsl, auth_type); if(result != GLOBUS_SUCCESS) { error = globus_error_peek(result); if (globus_error_match( error, GLOBUS_CALLOUT_MODULE, GLOBUS_CALLOUT_ERROR_TYPE_NOT_REGISTERED)) { /* For queries, check authz self by default. The start case * is handled by the gatekeeper. */ if (strcmp(auth_type, "start") != 0) { if (globus_gram_protocol_authorize_self(authz_context)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION_DENIED; } } } else if (globus_error_match( error, GLOBUS_GRAM_JOBMANAGER_CALLOUT_ERROR_MODULE, GLOBUS_GRAM_JOBMANAGER_CALLOUT_AUTHZ_DENIED)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION_DENIED; } else if (globus_error_match( error, GLOBUS_GRAM_JOBMANAGER_CALLOUT_ERROR_MODULE, GLOBUS_GRAM_JOBMANAGER_CALLOUT_AUTHZ_DENIED_INVALID_JOB)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION_DENIED_JOB_ID; } else if (globus_error_match( error, GLOBUS_GRAM_JOBMANAGER_CALLOUT_ERROR_MODULE, GLOBUS_GRAM_JOBMANAGER_CALLOUT_AUTHZ_DENIED_BAD_EXECUTABLE)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION_DENIED_EXECUTABLE; } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION_SYSTEM_FAILURE; } } read_config_failed: globus_callout_handle_destroy(authz_handle); handle_init_failed: free(filename); conf_filename_failed: return rc; } /* globus_gram_job_manager_call_authz_callout() */ int globus_gram_job_manager_authz_query( globus_gram_job_manager_t * manager, globus_gram_protocol_handle_t handle, const char * uri, const char * auth_type) { int rc = GLOBUS_SUCCESS; gss_ctx_id_t context; globus_gram_jobmanager_request_t * request; if (! manager->config->enable_callout) { goto skip_authz; } if ((rc = globus_gram_protocol_get_sec_context( handle, &context)) != GLOBUS_SUCCESS) { goto get_sec_context_failed; } rc = globus_gram_job_manager_add_reference( manager, uri, "query authz", &request); if (rc != GLOBUS_SUCCESS) { goto add_reference_failed; } rc = globus_gram_job_manager_call_authz_callout( request->config, request->response_context, context, request->uniq_id, request->rsl, auth_type); if (rc != GLOBUS_SUCCESS) { goto authz_failed; } authz_failed: globus_gram_job_manager_remove_reference( manager, request->job_contact_path, "query authz"); add_reference_failed: get_sec_context_failed: skip_authz: return rc; } /* globus_gram_job_manager_authz_query() */ /** * @brief Look up the identity of a GSSAPI credential and generate a hash * @ingroup globus_gram_gsi * * @details * The globus_gram_gsi_get_dn_hash() function inspects the credential * named by @a cred parameter to determine the identity of the credential. * It then computes the default hash on that name and assigns a copy of * that value to the @a hash parameter. The caller is responsible for freeing * that value. * * @param cred * GSSAPI credential to inspect * @param hash * Pointer to be set to the hash of the identity of @a cred. * * @return * On success, globus_gram_gsi_get_dn_hash() returns GLOBUS_SUCCESS * and modifies the @a hash parameter to point to a copy of the string * representation of the hash. If an error occurs, * globus_gram_gsi_get_dn_hash() returns a non-zero error code and the * the value of @a hash is undefined. */ int globus_gram_gsi_get_dn_hash( gss_cred_id_t cred, unsigned long * hash) { int rc = GLOBUS_SUCCESS; OM_uint32 major, minor; gss_name_t name; gss_buffer_desc namebuf; unsigned char md[EVP_MAX_MD_SIZE+1]; const EVP_MD * evp_md; EVP_MD_CTX * evp_ctx = NULL; unsigned int mdlen; unsigned long hash_value; if (hash == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NULL_PARAMETER; goto out; } *hash = 0L; if (cred == GSS_C_NO_CREDENTIAL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_NOT_FOUND; goto out; } major = gss_inquire_cred( &minor, cred, &name, NULL, NULL, NULL); if (major != GSS_S_COMPLETE) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_NOT_FOUND; goto out; } major = gss_display_name( &minor, name, &namebuf, NULL); if (major != GSS_S_COMPLETE) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_NOT_FOUND; goto free_name_out; } evp_md = EVP_get_digestbyname("sha1"); if (evp_md == NULL) { evp_md = EVP_get_digestbyname("md5"); } if (evp_md == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto free_namebuf_out; } evp_ctx = EVP_MD_CTX_create(); if (EVP_DigestInit_ex(evp_ctx, evp_md, NULL) != 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto free_namebuf_out; } if (EVP_DigestUpdate(evp_ctx, namebuf.value, namebuf.length) != 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto free_digest_out; } if (EVP_DigestFinal_ex(evp_ctx, md, &mdlen) != 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto free_digest_out; } hash_value = (((unsigned long)md[0]) | ((unsigned long)md[1] << 8L) | ((unsigned long)md[2] << 16L) | ((unsigned long)md[3] << 24L)) & 0xffffffffL; *hash = hash_value; free_digest_out: EVP_MD_CTX_destroy(evp_ctx); free_namebuf_out: gss_release_buffer(&minor, &namebuf); free_name_out: gss_release_name(&minor, &name); out: return rc; } /* globus_gram_gsi_get_dn_hash() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_history_file.c0000644000000000000000000000013114243161125027042 xustar000000000000000030 mtime=1653400149.356970141 30 atime=1653401831.353126856 29 ctime=1653404021.23674707 globus_gram_job_manager-15.8/globus_gram_job_manager_history_file.c0000664000175000017500000001416514243161125027213 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_job_manager.h" #include /** * Determine the name of the job history file for this job request * * @param request * Job to create file name for. The request's @a job_history_file member * is modified by this function. * * @retval GLOBUS_SUCCESS * Success. */ int globus_gram_job_manager_history_file_set( globus_gram_jobmanager_request_t * request) { int rc = GLOBUS_SUCCESS; if (! request->config->job_history_dir) { request->job_history_file = NULL; goto no_history; } request->job_history_file = globus_common_create_string( "%s/history.%s-%s_%s", request->config->job_history_dir, request->config->hostname, request->config->jobmanager_type, request->uniq_id ); if (request->job_history_file == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto history_file_malloc_failed; } history_file_malloc_failed: no_history: return rc; } /* globus_gram_job_manager_history_file_set() */ /** * Create job or update the job history file * * @param request * Job to create or update the job history file for. If the file exists, * information about the new job state is appended to it. Otherwise, * the file is created and information about the RSL, job contact, and * client identity are recorded along with the new job state data. * * @retval GLOBUS_SUCCESS * Success. */ int globus_gram_job_manager_history_file_create( globus_gram_jobmanager_request_t * request) { FILE * history_fp; char * status_str; unsigned long timestamp; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.history_file_create.start " "level=TRACE " "gramid=%s " "\n", request->job_contact_path); timestamp = time(0); if(!request->config->job_history_dir) { return GLOBUS_SUCCESS; } switch(request->status) { case GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING: status_str = "PENDING "; break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE: status_str = "ACTIVE "; break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED: if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) status_str = "JOBMANAGER_STOP"; else status_str = "FAILED "; break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE: status_str = "DONE "; break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_SUSPENDED: status_str = "SUSPENDED "; break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED: status_str = "UNSUBMITTED "; break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN: status_str = "STAGE_IN "; break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT: status_str = "STAGE_OUT "; break; default: status_str = "UNKNOWN "; break; } if(access(request->job_history_file, F_OK) == 0) { /* the file exists, so just append a line which has the * job status and timestamp */ history_fp = fopen(request->job_history_file, "a+"); if(history_fp == NULL) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.history_file_create.end " "level=WARN " "gramid=%s " "msg=\"%s\" " "path=\"%s\" " "errno=%d " "reason=\"%s\" " "status=-1 " "\n", request->job_contact_path, "Error opening job history file", request->job_history_file, errno, strerror(errno)); return GLOBUS_FAILURE; } fprintf(history_fp, "%s\t%10ld\n", status_str,timestamp); } else if((history_fp = fopen(request->job_history_file, "w")) == NULL) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.history_file_create.end " "level=WARN " "gramid=%s " "msg=\"%s\" " "path=\"%s\" " "errno=%d " "reason=\"%s\" " "status=-1\n", request->job_contact_path, request->job_history_file, errno, strerror(errno)); return GLOBUS_FAILURE; } else { fprintf(history_fp, "%s\n%s\n%s\n%s\t%10ld\n", request->rsl_spec, request->job_contact, request->config->subject, status_str,timestamp); } fclose(history_fp); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.history_file_create.end " "level=TRACE " "gramid=%s " "path=\"%s\" " "status=%d\n", request->job_contact_path, request->job_history_file, 0); return GLOBUS_SUCCESS; } /* globus_gram_job_manager_history_file_create() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_query.c0000644000000000000000000000013214243161125025510 xustar000000000000000030 mtime=1653400149.357970131 30 atime=1653401831.367126724 30 ctime=1653404021.238747051 globus_gram_job_manager-15.8/globus_gram_job_manager_query.c0000664000175000017500000020644214243161125025661 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file globus_gram_job_manager_query.c * @brief Job Manager Query Handlers */ #include "globus_gram_job_manager.h" #include "globus_callout.h" #include "globus_callout_constants.h" #include "globus_gsi_system_config.h" #include "globus_gsi_system_config_constants.h" #include "globus_gram_jobmanager_callout_error.h" #include "globus_rsl_assist.h" #include "version.h" #include #endif typedef struct globus_l_gram_renew_s { globus_gram_protocol_handle_t handle; globus_gram_jobmanager_request_t *request; } globus_l_gram_renew_t; static globus_bool_t globus_l_gram_job_manager_is_done( globus_gram_jobmanager_request_t * request); static int globus_l_gram_job_manager_cancel( globus_gram_jobmanager_request_t * request, globus_gram_protocol_handle_t handle, globus_bool_t * reply); static int globus_l_gram_job_manager_signal( globus_gram_jobmanager_request_t * request, const char * args, globus_gram_protocol_handle_t handle, globus_bool_t * reply); static int globus_l_gram_job_manager_register( globus_gram_jobmanager_request_t * request, const char * args); static int globus_l_gram_job_manager_unregister( globus_gram_jobmanager_request_t * request, const char * url, globus_gram_protocol_handle_t handle); static int globus_l_gram_job_manager_renew( globus_gram_jobmanager_request_t * request, globus_gram_protocol_handle_t handle, globus_bool_t * reply); static void globus_l_gram_job_manager_query_reply( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, globus_gram_protocol_handle_t handle, int status, int query_failure_code, int job_failure_code, int exit_code); static globus_bool_t globus_l_gram_job_manager_query_valid( globus_gram_jobmanager_request_t * request); static void globus_l_delegation_callback( void * arg, globus_gram_protocol_handle_t handle, gss_cred_id_t credential, int error_code); static int globus_l_gram_job_manager_query_stop_manager( globus_gram_jobmanager_request_t * request); static int globus_l_gram_create_extensions( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, int status, int exit_code, globus_hashtable_t * extensions); static const char * globus_l_gram_get_job_contact_from_uri( const char * uri); static int globus_l_gram_stdio_update_signal( globus_gram_jobmanager_request_t * request, char * update_rsl_spec); void globus_gram_job_manager_query_callback( void * arg, globus_gram_protocol_handle_t handle, globus_byte_t * buf, globus_size_t nbytes, int errorcode, char * uri) { globus_gram_job_manager_t * manager = arg; globus_gram_jobmanager_request_t * request = NULL; char * query = GLOBUS_NULL; char * rest; int rc = 0; globus_gram_protocol_job_state_t status = 0; int exit_code = 0; int job_failure_code = 0; globus_bool_t reply = GLOBUS_TRUE; const char * contact; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.query.start " "level=DEBUG " "uri=\"%s\" " "\n", uri); if (manager->config->log_levels & GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE) { char * querystring; querystring = globus_gram_prepare_log_string((char *) buf); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.query.info " "level=TRACE " "uri=\"%s\" " "message=\"%s\" " "\n", uri, querystring ? querystring : ""); if (querystring) { free(querystring); } } if (uri == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.query.end " "level=ERROR " "status=%d " "uri=%s " "msg=\"%s\" " "reason=\"%s\" " "\n", -rc, "NULL", "Invalid URI for query", globus_gram_protocol_error_string(rc)); goto invalid_query; } contact = globus_l_gram_get_job_contact_from_uri(uri); if (contact == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.query.end " "level=ERROR " "status=%d " "uri=%s " "msg=\"%s\" " "reason=\"%s\" " "\n", -rc, uri, "Invalid URI for query", globus_gram_protocol_error_string(rc)); goto invalid_query; } rc = globus_gram_protocol_unpack_status_request(buf, nbytes, &query); if (rc != GLOBUS_SUCCESS) { goto unpack_failed; } rc = globus_gram_job_manager_authz_query( manager, handle, contact, query); if (rc != GLOBUS_SUCCESS) { goto authz_failed; } rest = strchr(query,' '); if (rest) { *rest++ = '\0'; } /* When status query occurs, skip reloading the job request. Use the cached * value in the ref. */ if (strcmp(query, "status") == 0) { rc = globus_gram_job_manager_get_status( manager, contact, &status, &job_failure_code, &exit_code); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.query.end " "level=ERROR " "status=%d " "uri=%s " "msg=\"%s\" " "reason=\"%s\" " "\n", -rc, contact, "Unable to find job for URI", globus_gram_protocol_error_string(rc)); } goto status_done; } rc = globus_gram_job_manager_add_reference( manager, contact, "query", &request); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.query.end " "level=ERROR " "status=%d " "uri=%s " "msg=\"%s\" " "reason=\"%s\" " "\n", -rc, contact, "Unable to find job for URI", globus_gram_protocol_error_string(rc)); goto invalid_query; } GlobusGramJobManagerRequestLock(request); job_failure_code = request->failure_code; status = request->status; if (strcmp(query,"cancel")==0) { rc = globus_l_gram_job_manager_cancel(request, handle, &reply); } else if (strcmp(query,"signal")==0) { rc = globus_l_gram_job_manager_signal(request, rest, handle, &reply); request->job_stats.signal_count++; } else if (strcmp(query,"register")==0) { rc = globus_l_gram_job_manager_register(request, rest); request->job_stats.register_count++; } else if (strcmp(query,"unregister")==0) { rc = globus_l_gram_job_manager_unregister(request, rest, handle); request->job_stats.unregister_count++; } else if (strcmp(query,"renew")==0) { rc = globus_l_gram_job_manager_renew(request, handle, &reply); request->job_stats.refresh_count++; } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_JOB_QUERY; } unpack_failed: authz_failed: if (rc != GLOBUS_SUCCESS) { status = GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED; job_failure_code = 0; } globus_gram_job_manager_log( manager, rc ? GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR : GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.query.end " "level=%s " "%s%s%s" "uri=\"%s\" " "msg=\"%s\" " "status=%d " "%s%s " "\n", rc ? "ERROR" : "DEBUG", request ? "gramid=" : "", request ? request->job_contact_path : "", request ? " " : "", uri, rc ? "Error processing query" : "Done processing query" , rc ? -rc : 0, rc ? "reason=\"" : "", rc ? globus_gram_protocol_error_string(rc) : "", rc ? "\"" : ""); status_done: invalid_query: if(reply) { globus_l_gram_job_manager_query_reply( manager, request, handle, status, rc, job_failure_code, exit_code); } if (request) { GlobusGramJobManagerRequestUnlock(request); rc = globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "query"); } if(query) { free(query); } return; } /* globus_gram_job_manager_query_callback() */ void globus_gram_job_manager_query_reply( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_query_t * query) { if(query->type == GLOBUS_GRAM_JOB_MANAGER_CANCEL || query->signal == GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_CANCEL) { if(query->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED) { query->failure_code = GLOBUS_SUCCESS; } } globus_l_gram_job_manager_query_reply(request->manager, request, query->handle, request->status, query->failure_code, query->failure_code ? 0 : request->failure_code, request->exit_code); if(query->signal_arg) { free(query->signal_arg); } free(query); } /* globus_gram_job_manager_query_reply() */ static void globus_l_gram_job_manager_query_reply( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, globus_gram_protocol_handle_t handle, int status, int query_failure_code, int job_failure_code, int exit_code) { int rc; int code; globus_size_t replysize; globus_byte_t * reply = GLOBUS_NULL; globus_hashtable_t extensions = NULL; rc = query_failure_code; if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED) { globus_l_gram_create_extensions(manager, request, status, exit_code, &extensions); if (extensions != NULL) { rc = globus_gram_protocol_pack_status_reply_with_extensions( status, rc, job_failure_code, &extensions, &reply, &replysize ); } else { rc = globus_gram_protocol_pack_status_reply( status, rc, job_failure_code, &reply, &replysize ); } } if (rc == GLOBUS_SUCCESS) { code = 200; } else { code = 400; free(reply); reply = GLOBUS_NULL; replysize = 0; } if (request == NULL || request->job_log_level & GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE) { char * replystring; replystring = globus_gram_prepare_log_string((char *) reply); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.query.info " "%s%s%s" "level=TRACE " "reply=\"%s\" " "\n", request ? "gramid=" : "", request ? request->job_contact_path : "", request ? " " : "", replystring ? replystring : ""); if (replystring) { free(replystring); } } globus_gram_protocol_reply(handle, code, reply, replysize); if(reply) { free(reply); } if (extensions) { globus_gram_protocol_hash_destroy(&extensions); } } /* globus_l_gram_job_manager_query_reply() */ static int globus_l_gram_job_manager_cancel( globus_gram_jobmanager_request_t * request, globus_gram_protocol_handle_t handle, globus_bool_t * reply) { int rc = GLOBUS_SUCCESS; globus_result_t result; globus_gram_job_manager_query_t * query; globus_reltime_t delay; switch(request->jobmanager_state) { case GLOBUS_GRAM_JOB_MANAGER_STATE_START: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED; return GLOBUS_SUCCESS; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED; request->unsent_status_change = GLOBUS_TRUE; if(request->poll_timer != GLOBUS_HANDLE_TABLE_NO_HANDLE) { GlobusTimeReltimeSet(delay, 0, 0); result = globus_callback_adjust_oneshot( request->poll_timer, &delay); } return GLOBUS_SUCCESS; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED; request->unsent_status_change = GLOBUS_TRUE; return GLOBUS_SUCCESS; case GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2: query = calloc(1, sizeof(globus_gram_job_manager_query_t)); query->type = GLOBUS_GRAM_JOB_MANAGER_CANCEL; query->handle = handle; query->signal = 0; query->signal_arg = NULL; globus_fifo_enqueue(&request->pending_queries, query); *reply = GLOBUS_FALSE; if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1; if(request->poll_timer != GLOBUS_HANDLE_TABLE_NO_HANDLE) { GlobusTimeReltimeSet(delay, 0, 0); result = globus_callback_adjust_oneshot( request->poll_timer, &delay); } else { globus_gram_job_manager_state_machine_register( request->manager, request, NULL); } } return GLOBUS_SUCCESS; default: rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; *reply = GLOBUS_TRUE; return rc; } } /* globus_l_gram_job_manager_cancel() */ static int globus_l_gram_job_manager_register( globus_gram_jobmanager_request_t * request, const char * args) { int rc = GLOBUS_SUCCESS; char * url = NULL; int mask; url = malloc(strlen(args)); if (globus_l_gram_job_manager_is_done(request)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; } else if(sscanf(args, "%d %s", &mask, url) != 2) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; } else { rc = globus_gram_job_manager_contact_add(request, url, mask); } free(url); return rc; } /* globus_l_gram_job_manager_register() */ static int globus_l_gram_job_manager_unregister( globus_gram_jobmanager_request_t * request, const char * url, globus_gram_protocol_handle_t handle) { int rc; if (globus_l_gram_job_manager_is_done(request)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; } else if (!url || strlen(url) == 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; } else { rc = globus_gram_job_manager_contact_remove(request, url); /* Incase we unregister the last callback and we're waiting * for TWO_PHASE_END commit, fake the COMMIT_END signal */ if (!request->client_contacts && request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END) { globus_bool_t reply=GLOBUS_TRUE; char buf[32]; snprintf(buf,sizeof(buf),"%d",GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_END); globus_l_gram_job_manager_signal(request,buf,handle,&reply); globus_assert(reply == GLOBUS_TRUE); } } return rc; } /* globus_l_gram_job_manager_unregister() */ static int globus_l_gram_job_manager_renew( globus_gram_jobmanager_request_t * request, globus_gram_protocol_handle_t handle, globus_bool_t * reply) { int rc = 0; globus_l_gram_renew_t * renew; char *msg = "Success"; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.proxyrenew.start " "level=DEBUG " "gramid=%s " "\n", request->job_contact_path); renew = malloc(sizeof(globus_l_gram_renew_t)); if(renew == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; msg = "Malloc failed"; goto renew_malloc_failed; } rc = globus_gram_job_manager_add_reference( request->manager, request->job_contact_path, "renew", &renew->request); renew->handle = handle; if (rc != GLOBUS_SUCCESS) { msg = "Add reference failed"; goto add_reference_failed; } rc = globus_gram_protocol_accept_delegation( renew->handle, GSS_C_NO_OID_SET, GSS_C_NO_BUFFER_SET, GSS_C_GLOBUS_LIMITED_DELEG_PROXY_FLAG | GSS_C_GLOBUS_SSL_COMPATIBLE, 0, globus_l_delegation_callback, renew); if (rc == GLOBUS_SUCCESS) { *reply = GLOBUS_FALSE; } else { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.proxyrenew.end " "level=ERROR " "gramid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, -rc, msg, globus_gram_protocol_error_string(rc)); globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "renew"); add_reference_failed: free(renew); renew_malloc_failed: *reply = GLOBUS_TRUE; } return rc; } /* globus_l_gram_job_manager_renew() */ static int globus_l_gram_job_manager_signal( globus_gram_jobmanager_request_t * request, const char * args, globus_gram_protocol_handle_t handle, globus_bool_t * reply) { int rc = GLOBUS_SUCCESS; int signal; char * after_signal; globus_off_t out_size = -1; globus_off_t err_size = -1; globus_reltime_t delay; globus_gram_job_manager_query_t * query; globus_result_t result; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.signal.start " "level=DEBUG " "gramid=%s " "signal=\"%s\" " "msg=\"%s\" " "jmstate=%s " "\n", request->job_contact_path, args, "GRAM signal", globus_i_gram_job_manager_state_strings[request->jobmanager_state]); *reply = GLOBUS_TRUE; if(args == NULL || sscanf(args, "%d", &signal) != 1) { return GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; } after_signal = strchr(args,' '); if (after_signal) *after_signal++ = '\0'; switch(signal) { case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STDIO_UPDATE: if(!after_signal || strlen(after_signal) == 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Missing signal argument", -rc, globus_gram_protocol_error_string(rc)); break; } if(!globus_l_gram_job_manager_query_valid(request)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Invalid query", -rc, globus_gram_protocol_error_string(rc)); break; } rc = globus_l_gram_stdio_update_signal(request, after_signal); break; case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_CANCEL: case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_SUSPEND: case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_RESUME: case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_PRIORITY: if(!after_signal || strlen(after_signal) == 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Missing signal argument", -rc, globus_gram_protocol_error_string(rc)); break; } if(!globus_l_gram_job_manager_query_valid(request)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Invalid query", -rc, globus_gram_protocol_error_string(rc)); break; } query = calloc(1, sizeof(globus_gram_job_manager_query_t)); query->type = GLOBUS_GRAM_JOB_MANAGER_SIGNAL; query->handle = handle; query->signal = signal; if(after_signal) { query->signal_arg = strdup(after_signal); if (query->signal_arg == NULL) { free(query); rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "malloc failed", -rc, globus_gram_protocol_error_string(rc)); break; } } globus_fifo_enqueue(&request->pending_queries, query); *reply = GLOBUS_FALSE; if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1; } else if (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1; } else { break; } if(request->poll_timer != GLOBUS_HANDLE_TABLE_NO_HANDLE) { GlobusTimeReltimeSet(delay, 0, 0); result = globus_callback_adjust_oneshot( request->poll_timer, &delay); } else { globus_gram_job_manager_state_machine_register( request->manager, request, NULL); } break; case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST: if(request->two_phase_commit == 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_COMMIT; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Two-phase commit signal when job doesn't have two_phase timeout", -rc, globus_gram_protocol_error_string(rc)); break; } else if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE || request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_START) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED; } else if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1 || request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED; } else if (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.signal.info " "level=DEBUG " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Unnecessary two-phase commit signal", -rc, globus_gram_protocol_error_string(rc)); break; } else { /* GRAM-103: Ease two phase end commit timeout * In some cases, Condor-G decides to restart a job where * the job manager is already running. When this happens, * the job can be in pretty much any job manager state. We'll * ignore any error here, and assume things are working just * fine in the state machine. */ globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.signal.info " "level=DEBUG " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Unnecessary two-phase commit signal", -rc, globus_gram_protocol_error_string(rc)); break; } if(request->poll_timer != GLOBUS_HANDLE_TABLE_NO_HANDLE) { GlobusTimeReltimeSet(delay, 0, 0); result = globus_callback_adjust_oneshot( request->poll_timer, &delay); } else { globus_gram_job_manager_state_machine_register( request->manager, request, NULL); } break; case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_END: if(request->two_phase_commit == 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_COMMIT; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Two-phase commit signal when job doesn't have two_phase timeout", -rc, globus_gram_protocol_error_string(rc)); break; } else if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END || request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED; } else if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED; } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Two-phase commit signal in invalid jobmanager state", -rc, globus_gram_protocol_error_string(rc)); break; } if(request->poll_timer != GLOBUS_HANDLE_TABLE_NO_HANDLE) { GlobusTimeReltimeSet(delay, 0, 0); result = globus_callback_adjust_oneshot( request->poll_timer, &delay); } else { globus_gram_job_manager_state_machine_register( request->manager, request, NULL); } break; case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_EXTEND: if ((!after_signal) || (strlen(after_signal) == 0)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Missing argument to commit extend signal", -rc, globus_gram_protocol_error_string(rc)); } else if(request->two_phase_commit == 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_COMMIT; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Two-phase commit extend signal when job doesn't have two_phase timeout", -rc, globus_gram_protocol_error_string(rc)); } else if((request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE) || (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END) || (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE) || (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1) || (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2)) { request->commit_extend += atoi(after_signal); } break; case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STDIO_SIZE: if (after_signal && sscanf(after_signal, "%"GLOBUS_OFF_T_FORMAT" %"GLOBUS_OFF_T_FORMAT, &out_size, &err_size) > 0) { struct stat st; globus_off_t local_size_stdout = 0; globus_off_t local_size_stderr = 0; const char * local_stdout; const char * local_stderr; rc = globus_gram_job_manager_rsl_attribute_get_string_value( request->rsl, GLOBUS_GRAM_PROTOCOL_STDOUT_PARAM, &local_stdout); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_JOB_QUERY; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Stdio size signal when stdout not in RSL", -rc, globus_gram_protocol_error_string(rc)); break; } if (local_stdout == NULL || strstr(local_stdout, "://")) { local_stdout = request->cached_stdout; } rc = globus_gram_job_manager_rsl_attribute_get_string_value( request->rsl, GLOBUS_GRAM_PROTOCOL_STDERR_PARAM, &local_stderr); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_JOB_QUERY; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Stdio size signal when stderr not in RSL", -rc, globus_gram_protocol_error_string(rc)); break; } if (local_stderr == NULL || strstr(local_stderr, "://")) { local_stderr = request->cached_stderr; } if (!globus_list_empty(request->stage_stream_todo)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_STILL_STREAMING; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Stdio size signal when output still streaming", -rc, globus_gram_protocol_error_string(rc)); break; } if (strcmp(local_stdout, request->cached_stdout) == 0) { /* fakestreaming is likely to happen */ rc = stat(local_stdout, &st); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_JOB_QUERY; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Unable get stdout file size", -rc, errno, strerror(errno)); break; } local_size_stdout = st.st_size; } if (strcmp(local_stderr, request->cached_stderr) == 0) { /* fakestreaming is likely to happen */ rc = stat(local_stderr, &st); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_JOB_QUERY; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Unable get stderr file size", -rc, errno, strerror(errno)); break; } local_size_stderr = st.st_size; } if (out_size >= 0 && out_size != local_size_stdout) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_STDIO_SIZE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "stdout_signal_size=%ld " "stdout_actual_size=%ld " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Stdout size mismatch", -rc, (long int) out_size, (long int) local_size_stdout, globus_gram_protocol_error_string(rc)); } else if (err_size >= 0 && err_size != local_size_stderr) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_STDIO_SIZE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "stderr_signal_size=%ld " "stderr_actual_size=%ld " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Stderr size mismatch", -rc, (long int) err_size, (long int) local_size_stderr, globus_gram_protocol_error_string(rc)); } else { rc = GLOBUS_SUCCESS; } } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Missing argument to stdio_size signal", -rc, globus_gram_protocol_error_string(rc)); } break; case GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STOP_MANAGER: rc = globus_l_gram_job_manager_query_stop_manager(request); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Error stopping manager", -rc, globus_gram_protocol_error_string(rc)); } break; default: rc = GLOBUS_GRAM_PROTOCOL_ERROR_UNKNOWN_SIGNAL_TYPE; if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.signal.end " "level=WARN " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Unknown signal", -rc, globus_gram_protocol_error_string(rc)); } } if (rc == GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.signal.end " "level=DEBUG " "gramid=%s " "signal=\"%s\" " "jmstate=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, args, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], "Signal processed or queued", 0, globus_gram_protocol_error_string(rc)); } return rc; } /* globus_l_gram_job_manager_signal() */ /** * Handle a STOP_MANAGER signal. * * This signal causes the job manager to stop monitoring the job and exit, * without killing the job. We want this stop to happen pretty quickly, so * we'll unregister any poll_timer events (either the intra-poll delay or * the two_phase_commit delay) and reregister as a oneshot. */ static int globus_l_gram_job_manager_query_stop_manager( globus_gram_jobmanager_request_t * request) { int rc = GLOBUS_SUCCESS; globus_gram_jobmanager_state_t state; globus_reltime_t delay; state = request->jobmanager_state; if(state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2) { if(request->poll_timer != GLOBUS_HANDLE_TABLE_NO_HANDLE) { GlobusTimeReltimeSet(delay, 0, 0); globus_callback_adjust_oneshot( request->poll_timer, &delay); } else { globus_gram_job_manager_state_machine_register( request->manager, request, NULL); } } switch(state) { case GLOBUS_GRAM_JOB_MANAGER_STATE_STOP: request->unsent_status_change = GLOBUS_TRUE; request->stop_reason = GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_START: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN: case GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2: case GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED: request->unsent_status_change = GLOBUS_TRUE; request->stop_reason = GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED; request->restart_state = request->jobmanager_state; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_FILE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_SCRATCH_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_CACHE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_DONE: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_FILE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CACHE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT: rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; break; } return rc; } /* globus_l_gram_job_manager_query_stop_manager() */ static globus_bool_t globus_l_gram_job_manager_is_done( globus_gram_jobmanager_request_t * request) { if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_DONE || request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE) { return GLOBUS_TRUE; } return GLOBUS_FALSE; } /* globus_l_gram_job_manager_is_done() */ static globus_bool_t globus_l_gram_job_manager_query_valid( globus_gram_jobmanager_request_t * request) { switch(request->jobmanager_state) { case GLOBUS_GRAM_JOB_MANAGER_STATE_START: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2: case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN: case GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2: return GLOBUS_TRUE; case GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FILE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_CACHE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_SCRATCH_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_DONE: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_FILE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CACHE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE: case GLOBUS_GRAM_JOB_MANAGER_STATE_STOP: return GLOBUS_FALSE; } return GLOBUS_FALSE; } /* globus_l_gram_job_manager_query_valid() */ static void globus_l_delegation_callback( void * arg, globus_gram_protocol_handle_t handle, gss_cred_id_t credential, int error_code) { globus_l_gram_renew_t * renew; globus_gram_jobmanager_request_t * request; globus_gram_job_manager_t * manager; int renew_code, failure_code, exit_code; renew = arg; request = renew->request; manager = request->manager; GlobusGramJobManagerRequestLock(request); GlobusGramJobManagerLock(manager); (void) globus_gram_job_manager_gsi_update_credential( manager, request, credential); GlobusGramJobManagerUnlock(manager); renew_code = (credential == GSS_C_NO_CREDENTIAL) ? GLOBUS_GRAM_PROTOCOL_ERROR_DELEGATION_FAILED : 0; failure_code = (credential == GSS_C_NO_CREDENTIAL) ? 0 : request->failure_code, exit_code = request->exit_code; globus_l_gram_job_manager_query_reply( manager, request, renew->handle, request->status, renew_code, failure_code, exit_code); GlobusGramJobManagerRequestUnlock(request); globus_gram_job_manager_request_log( request, (renew_code == GLOBUS_SUCCESS) ? GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG : GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.proxyrenew.end " "level=%s " "gramid=%s " "status=%d " "reason=\"%s\" " "\n", (renew_code == GLOBUS_SUCCESS) ? "DEBUG" : "ERROR", request->job_contact_path, -renew_code, globus_gram_protocol_error_string(renew_code)); (void) globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "renew"); free(renew); } /* globus_l_delegation_callback() */ static int globus_l_gram_create_extensions( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, int status, int exit_code, globus_hashtable_t * extensions) { globus_gram_protocol_extension_t * entry = NULL; int rc; *extensions = NULL; rc = globus_hashtable_init( extensions, 3, globus_hashtable_string_hash, globus_hashtable_string_keyeq); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto hashtable_init_failed; } if ((manager->config->seg_module != NULL || strcmp(manager->config->jobmanager_type, "condor") == 0) && status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { entry = globus_gram_protocol_create_extension( "exit-code", "%d", exit_code); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_create_failed; } rc = globus_hashtable_insert( extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_insert_failed; } } entry = globus_gram_protocol_create_extension( "toolkit-version", "%s", manager->config->globus_version); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_create_failed; } rc = globus_hashtable_insert( extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_insert_failed; } entry = globus_gram_protocol_create_extension( "version", "%d.%d (%d-%d)", local_version.major, local_version.minor, local_version.timestamp, local_version.branch_id); if (entry == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_create_failed; } rc = globus_hashtable_insert( extensions, entry->attribute, entry); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_insert_failed; } entry = NULL; if (entry) { extension_insert_failed: free(entry->value); free(entry->attribute); free(entry); } extension_create_failed: if (rc != GLOBUS_SUCCESS) { globus_gram_protocol_hash_destroy(extensions); *extensions = NULL; } hashtable_init_failed: return rc; } /* globus_l_gram_create_extensions() */ static const char * globus_l_gram_get_job_contact_from_uri( const char * uri) { int n; int rc; if (uri[0] == '/') { return uri; } else { rc = sscanf(uri, "https://%*[^:]%*[:0-9]%n", &n); if (rc < 0) { return NULL; } return uri+n; } } /* globus_l_gram_get_job_contact_from_uri() */ static int globus_l_gram_stdio_update_signal( globus_gram_jobmanager_request_t * request, char * update_rsl_spec) { globus_rsl_t * rsl; globus_rsl_t * original_rsl; globus_rsl_t * position; globus_rsl_t * new_unevaluated_rsl; char * new_rsl_spec; int rc = GLOBUS_SUCCESS; rsl = globus_rsl_parse(update_rsl_spec); if(!rsl) { char * tmp_str; tmp_str = globus_gram_prepare_log_string(update_rsl_spec); rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.state_machine.info " "level=ERROR " "gramid=%s " "query_type=%s " "rsl=\"%s\" " "msg=%s " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, "stdio_update", tmp_str ? tmp_str : "", "Error parsing query rsl", -rc, globus_gram_protocol_error_string(rc)); if (tmp_str) { free(tmp_str); } goto error_out; } rc = globus_rsl_assist_attributes_canonicalize(rsl); if(rc != GLOBUS_SUCCESS) { char * tmp_str; tmp_str = globus_gram_prepare_log_string(update_rsl_spec); rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.state_machine.end" "level=ERROR " "query_type=%s " "gramid=%s " "rsl=\"%s\" " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", "stdio_update", request->job_contact_path, tmp_str ? tmp_str : "", "Error canonicalizing RSL", -rc, globus_gram_protocol_error_string(rc)); if (tmp_str) { free(tmp_str); } goto free_rsl_out; } rc = globus_gram_job_manager_validate_rsl( request, rsl, GLOBUS_GRAM_VALIDATE_STDIO_UPDATE); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto free_rsl_out; } /* Remove unsupported stdout and stderr position attributes */ position = globus_gram_job_manager_rsl_extract_relation( rsl, GLOBUS_GRAM_PROTOCOL_STDOUT_POSITION_PARAM); if (position != NULL) { globus_rsl_free_recursive(position); } position = globus_gram_job_manager_rsl_extract_relation( rsl, GLOBUS_GRAM_PROTOCOL_STDERR_POSITION_PARAM); if (position != NULL) { globus_rsl_free_recursive(position); } /* Replace the string RSL representation for this job with the * merge of the original and this update. The new RSL unparsed * into a string and stored in request->rsl_spec */ original_rsl = globus_rsl_parse(request->rsl_spec); if (original_rsl == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto free_rsl_out; } new_unevaluated_rsl = globus_gram_job_manager_rsl_merge( original_rsl, rsl); if (new_unevaluated_rsl == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto free_original_rsl_out; } new_rsl_spec = globus_rsl_unparse(new_unevaluated_rsl); if (new_rsl_spec == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto free_new_unevaluated_rsl_out; } free(request->rsl_spec); request->rsl_spec = new_rsl_spec; new_rsl_spec = NULL; rc = globus_rsl_eval(rsl, &request->symbol_table); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED; goto free_new_unevaluated_rsl_out; } rc = globus_i_gram_request_stdio_update( request, rsl); free_new_unevaluated_rsl_out: globus_rsl_free_recursive(new_unevaluated_rsl); free_original_rsl_out: globus_rsl_free_recursive(original_rsl); free_rsl_out: globus_rsl_free_recursive(rsl); error_out: return rc; } /* globus_l_gram_stdio_update_signal() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_request.c0000644000000000000000000000013214243161125026033 xustar000000000000000030 mtime=1653400149.357970131 30 atime=1653401831.386126545 30 ctime=1653404021.240747032 globus_gram_job_manager-15.8/globus_gram_job_manager_request.c0000664000175000017500000033632514243161125026210 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file globus_gram_job_manager_request.c * @brief Globus Job Management Request */ /* * Include header files */ #include "globus_common.h" #include "globus_gram_protocol.h" #include "globus_gram_job_manager.h" #include "globus_rsl_assist.h" #include "globus_scheduler_event_generator_app.h" #include #include #include enum { GRAM_JOB_MANAGER_COMMIT_TIMEOUT=60 }; static int globus_l_gram_symboltable_add( globus_symboltable_t * symbol_table, const char * symbol, const char * value); static int globus_l_gram_generate_id( globus_gram_jobmanager_request_t * request, char ** jm_restart, uint64_t * uniq1p, uint64_t * uniq2p); static int globus_l_gram_init_cache( globus_gram_jobmanager_request_t * request, char ** cache_locationp, globus_gass_cache_t * cache_handlep); static int globus_l_gram_restart( globus_gram_jobmanager_request_t * request, globus_gram_jobmanager_request_t ** old_job_request); static int globus_l_gram_populate_environment( globus_gram_jobmanager_request_t * request); static int globus_l_gram_add_environment( globus_rsl_t * rsl, const char * variable, const char * value); static int globus_l_gram_init_scratchdir( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, const char * scratch_dir_base, char ** scratchdir); static int globus_l_gram_validate_rsl( globus_gram_jobmanager_request_t * request); static int globus_l_gram_remote_io_url_file_create( globus_gram_jobmanager_request_t * request, const char * remote_io_url, const char * job_dir, char ** remote_io_url_filep); static int globus_l_gram_export_cred( globus_gram_jobmanager_request_t * request, gss_cred_id_t cred, const char * job_directory, char ** proxy_filename); static int globus_l_gram_make_job_dir( globus_gram_jobmanager_request_t * request, char ** job_directory); static void globus_l_gram_event_destroy(void *datum); #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ /** * Allocate and initialize a request. * * This function allocates a new request structure and clears all of the * values in the structure. It also creates a script argument file which * will be used when the job request is submitted. * * @param request * A pointer to a globus_gram_jobmanager_request_t pointer. This * will be modified to point to a freshly allocated request structure. * @param manager * Job manager state and configuration. * @param rsl * Job request or restart RSL string * @param delegated_credential * Credential delegated with the job request. * @param response_ctx * Security context to use for sending the job request response, may be * GSS_C_NO_CONTEXT if the job RSL came from the command-line. * @param reinit * Boolean value indicating whether this is an internally-generated * reinitialization of an existing job or a new job request from a * client or command-line. * @param old_job_contact * Pointer to a string to be set to the old job contact if * GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE. Set to NULL otherwise. * @param old_job_request * Pointer to a job request structure that will be set to an existing * one if the return value is GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE. Set * to NULL otherwise. If non-null, the caller must release a reference * when done processing this. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed * @retval GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL * Bad RSL * @retval GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED * RSL evaluation failed * @retval GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCRATCH * Invalid scratchdir RSL attribute * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRATCH * Invalid scratchdir path * @retval GLOBUS_GRAM_PROTOCOL_ERROR_PARAMETER_NOT_SUPPORTED * RSL attribute not supported. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SUBMIT_ATTRIBUTE * Invalid submit RSL attribute. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_RESTART_ATTRIBUTE * Invalid restart RSL attribute. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_STDIO_UPDATE_ATTRIBUTE * Invalid stdio_update RSL attribute. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE * Old Job Manager is still alive. */ int globus_gram_job_manager_request_init( globus_gram_jobmanager_request_t ** request, globus_gram_job_manager_t * manager, char * rsl, gss_cred_id_t delegated_credential, gss_ctx_id_t response_ctx, const char * peer_address, globus_gsi_cred_handle_t peer_cred, globus_bool_t reinit, char ** old_job_contact, globus_gram_jobmanager_request_t ** old_job_request, char ** gt3_failure_message) { globus_gram_jobmanager_request_t * r; uint64_t uniq1, uniq2; int rc; const char * tmp_string; int count; int proxy_timeout; if (old_job_contact) { *old_job_contact = NULL; } if (old_job_request) { *old_job_request = NULL; } r = calloc(1, sizeof(globus_gram_jobmanager_request_t)); if (r == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto request_malloc_failed; } r->job_log_level = -1; r->config = manager->config; r->manager = manager; GlobusTimeAbstimeGetCurrent(r->job_stats.unsubmitted_timestamp); r->status = GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED; r->status_update_time = 0; r->failure_code = 0; r->exit_code = 0; r->stop_reason = 0; /* Won't be set until job has been submitted to the LRM */ r->job_id_string = NULL; r->original_job_id_string = NULL; r->poll_frequency = 10; r->commit_extend = 0; r->scratchdir = NULL; r->creation_time = time(NULL); r->queued_time = time(NULL); r->cache_tag = NULL; r->gateway_user = NULL; r->expected_terminal_state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE; r->gt3_failure_type = NULL; r->gt3_failure_message = NULL; r->gt3_failure_source = NULL; r->gt3_failure_destination = NULL; r->seg_last_timestamp = 0; rc = globus_symboltable_init( &r->symbol_table, globus_hashtable_string_hash, globus_hashtable_string_keyeq); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto symboltable_init_failed; } rc = globus_symboltable_create_scope(&r->symbol_table); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto symboltable_create_scope_failed; } rc = globus_i_gram_symbol_table_populate( r->config, &r->symbol_table); if (rc != GLOBUS_SUCCESS) { goto symboltable_populate_failed; } r->rsl = globus_rsl_parse(rsl); if (r->rsl == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto rsl_parse_failed; } rc = globus_rsl_assist_attributes_canonicalize(r->rsl); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto rsl_canonicalize_failed; } r->rsl_spec = globus_rsl_unparse(r->rsl); if (r->rsl_spec == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto rsl_unparse_failed; } /* If this is a restart job, the id will come from the restart RSL * value; otherwise, it will be generated from current pid and time */ rc = globus_l_gram_generate_id( r, &r->jm_restart, &uniq1, &uniq2); if (rc != GLOBUS_SUCCESS) { goto failed_generate_id; } /* Unique ID is used to have a handle to a job that has its state saved * and then the job is later restarted */ r->uniq_id = globus_common_create_string( "%"PRIu64".%"PRIu64, uniq1, uniq2); if (r->uniq_id == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_set_uniq_id; } /* The job contact is how the client is able to send signals or cancel this * job. */ r->job_contact = globus_common_create_string( "%s%"PRIu64"/%"PRIu64"/", r->manager->url_base, uniq1, uniq2); if (r->job_contact == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_set_job_contact; } rc = globus_l_gram_symboltable_add( &r->symbol_table, "GLOBUS_GRAM_JOB_CONTACT", r->job_contact); if (rc != GLOBUS_SUCCESS) { goto failed_add_contact_to_symboltable; } rc = globus_l_gram_symboltable_add( &r->symbol_table, "GLOBUS_GRAM_JOB_ID", r->uniq_id); if (rc != GLOBUS_SUCCESS) { goto failed_add_contact_to_symboltable; } r->job_contact_path = globus_common_create_string( "/%"PRIu64"/%"PRIu64"/", uniq1, uniq2); if (r->job_contact_path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_set_job_contact_path; } rc = globus_l_gram_make_job_dir(r, &r->job_dir); if (rc != GLOBUS_SUCCESS) { goto failed_make_job_dir; } r->cached_stdout = globus_common_create_string( "%s/%s", r->job_dir, "stdout"); if (r->cached_stdout == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto cached_stdout_malloc_failed; } rc = globus_symboltable_insert( &r->symbol_table, "GLOBUS_CACHED_STDOUT", r->cached_stdout); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto cached_stdout_symboltable_failed; } r->cached_stderr = globus_common_create_string( "%s/%s", r->job_dir, "stderr"); if (r->cached_stderr == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto cached_stderr_malloc_failed; } rc = globus_symboltable_insert( &r->symbol_table, "GLOBUS_CACHED_STDERR", r->cached_stderr); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto cached_stderr_symboltable_failed; } rc = globus_gram_job_manager_state_file_set( r, &r->job_state_file); if (rc != GLOBUS_SUCCESS) { goto failed_state_file_set; } r->client_contacts = NULL; r->stage_in_todo = NULL; r->stage_in_shared_todo = NULL; r->stage_out_todo = NULL; r->stage_stream_todo = NULL; if (r->jm_restart) { rc = globus_l_gram_restart(r, old_job_request); if (rc != GLOBUS_SUCCESS) { goto failed_restart; } manager->usagetracker->count_restarted++; } else { r->cache_tag = strdup(r->job_contact); if (r->cache_tag == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto cache_tag_alloc_failed; } rc = globus_i_gram_get_tg_gateway_user( response_ctx, peer_cred, &r->gateway_user); if(rc != GLOBUS_SUCCESS) { goto get_gateway_user_failed; } } rc = globus_gram_job_manager_rsl_eval_string( &r->symbol_table, r->config->scratch_dir_base, &r->scratch_dir_base); if(rc != GLOBUS_SUCCESS) { goto failed_eval_scratch_dir_base; } rc = globus_l_gram_init_scratchdir( r, r->rsl, r->scratch_dir_base, &r->scratchdir); if(rc != GLOBUS_SUCCESS) { goto init_scratchdir_failed; } rc = globus_l_gram_init_cache( r, &r->cache_location, &r->cache_handle); if (rc != GLOBUS_SUCCESS) { goto init_cache_failed; } /* At this point, all of the RSL substitutions have been populated, * including those based on runtime values, so we can validate the RSL */ rc = globus_l_gram_validate_rsl(r); if(rc != GLOBUS_SUCCESS) { goto validate_rsl_failed; } rc = globus_gram_job_manager_rsl_attribute_get_int_value( r->rsl, GLOBUS_GRAM_PROTOCOL_COUNT_PARAM, &count); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_COUNT; goto invalid_count; } rc = globus_gram_job_manager_rsl_attribute_get_boolean_value( r->rsl, GLOBUS_GRAM_PROTOCOL_DRY_RUN_PARAM, &r->dry_run); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_DRYRUN; goto get_dry_run_failed; } /* Some clients send (two_phase_commit = yes), others send * (two_phase_commit = timeout) */ rc = globus_gram_job_manager_rsl_attribute_get_int_value( r->rsl, GLOBUS_GRAM_PROTOCOL_TWO_PHASE_COMMIT_PARAM, &r->two_phase_commit); if (rc == GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE) { r->two_phase_commit = 0; } else if (rc != GLOBUS_SUCCESS) { globus_bool_t tmp_bool; rc = globus_gram_job_manager_rsl_attribute_get_boolean_value( r->rsl, GLOBUS_GRAM_PROTOCOL_TWO_PHASE_COMMIT_PARAM, &tmp_bool); if (rc == GLOBUS_SUCCESS) { r->two_phase_commit = tmp_bool ? GRAM_JOB_MANAGER_COMMIT_TIMEOUT : 0; } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_TWO_PHASE_COMMIT; goto get_two_phase_commit_failed; } globus_gram_job_manager_rsl_remove_attribute( r->rsl, GLOBUS_GRAM_PROTOCOL_TWO_PHASE_COMMIT_PARAM); } rc = globus_gram_job_manager_rsl_attribute_get_string_value( r->rsl, GLOBUS_GRAM_PROTOCOL_REMOTE_IO_URL_PARAM, &tmp_string); switch (rc) { case GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE: r->remote_io_url = NULL; r->remote_io_url_file = NULL; break; case GLOBUS_SUCCESS: if (tmp_string != NULL) { r->remote_io_url = strdup(tmp_string); if (r->remote_io_url == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto get_remote_io_url_failed; } } else { default: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_REMOTE_IO_URL; goto get_remote_io_url_failed; } } rc = globus_l_gram_remote_io_url_file_create( r, r->remote_io_url, r->job_dir, &r->remote_io_url_file); if (rc != GLOBUS_SUCCESS) { goto make_remote_io_url_file_failed; } /* TODO: Check that stdout and stderr, if a local files, can be written * to */ rc = globus_gram_job_manager_rsl_attribute_get_int_value( r->rsl, GLOBUS_GRAM_PROTOCOL_PROXY_TIMEOUT_PARAM, &proxy_timeout); if (rc == GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE) { rc = GLOBUS_SUCCESS; } else if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_PROXY_TIMEOUT; goto bad_proxy_timeout; } rc = globus_gram_job_manager_rsl_attribute_get_string_value( r->rsl, "loglevel", &tmp_string); switch (rc) { case GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE: r->job_log_level = r->config->log_levels; break; case GLOBUS_SUCCESS: if (tmp_string != NULL) { rc = globus_i_gram_parse_log_levels( tmp_string, &r->job_log_level, &r->gt3_failure_message); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_ATTR; goto get_job_log_levels_failed; } } else { default: rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_ATTR; goto get_job_log_levels_failed; } } rc = globus_gram_job_manager_rsl_attribute_get_string_value( r->rsl, "logpattern", &tmp_string); switch (rc) { case GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE: r->log_pattern = NULL; break; case GLOBUS_SUCCESS: if (tmp_string != NULL) { r->log_pattern = strdup(tmp_string); } else { default: rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_ATTR; goto get_job_log_pattern_failed; } } rc = globus_mutex_init(&r->mutex, NULL); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto mutex_init_failed; } rc = globus_cond_init(&r->cond, NULL); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto cond_init_failed; } rc = globus_gram_job_manager_staging_create_list(r); if(rc != GLOBUS_SUCCESS) { goto staging_list_create_failed; } if (reinit && r->jm_restart) { r->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED; } else { r->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_START; } if (r->jm_restart == NULL) { r->restart_state = GLOBUS_GRAM_JOB_MANAGER_STATE_START; } r->unsent_status_change = GLOBUS_FALSE; r->poll_timer = GLOBUS_NULL_HANDLE; rc = globus_fifo_init(&r->pending_queries); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; goto pending_queries_init_failed; } rc = globus_l_gram_export_cred( r, delegated_credential, r->job_dir, &r->x509_user_proxy); if (rc != GLOBUS_SUCCESS) { goto failed_export_cred; } rc = globus_l_gram_populate_environment(r); if (rc != GLOBUS_SUCCESS) { goto failed_populate_environment; } r->streaming_requested = GLOBUS_FALSE; rc = globus_gram_job_manager_history_file_set(r); if (rc != GLOBUS_SUCCESS) { goto history_file_set_failed; } r->job_history_status = GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED; r->response_context = response_ctx; rc = globus_fifo_init(&r->seg_event_queue); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto seg_event_queue_init_failed; } if (r->job_stats.client_address == NULL && peer_address != NULL) { r->job_stats.client_address = strdup(peer_address); if (r->job_stats.client_address == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto client_addr_strdup_failed; } } if (r->job_stats.user_dn == NULL && peer_cred != NULL) { globus_result_t id_result; char * id = NULL; id_result = globus_gsi_cred_get_identity_name( peer_cred, &id); if (id_result == GLOBUS_SUCCESS && id != NULL) { r->job_stats.user_dn = strdup(id); OPENSSL_free(id); } } if (r->jm_restart == NULL) { rc = globus_gram_job_manager_state_file_write(r); } if (rc != GLOBUS_SUCCESS) { client_addr_strdup_failed: globus_fifo_destroy(&r->seg_event_queue); seg_event_queue_init_failed: if (r->job_history_file) { free(r->job_history_file); r->job_history_file = NULL; } history_file_set_failed: failed_populate_environment: if (r->x509_user_proxy) { free(r->x509_user_proxy); r->x509_user_proxy = NULL; } failed_export_cred: pending_queries_init_failed: staging_list_create_failed: globus_cond_destroy(&r->cond); cond_init_failed: globus_mutex_destroy(&r->mutex); mutex_init_failed: if (r->log_pattern) { free(r->log_pattern); } get_job_log_pattern_failed: get_job_log_levels_failed: bad_proxy_timeout: if (r->remote_io_url_file) { remove(r->remote_io_url_file); free(r->remote_io_url_file); } make_remote_io_url_file_failed: if (r->remote_io_url) { free(r->remote_io_url); } get_remote_io_url_failed: get_two_phase_commit_failed: get_dry_run_failed: invalid_count: validate_rsl_failed: globus_gass_cache_close(&r->cache_handle); free(r->cache_location); init_cache_failed: if (r->scratchdir) { globus_gram_job_manager_destroy_directory(r, r->scratchdir); free(r->scratchdir); r->scratchdir = NULL; } init_scratchdir_failed: if (r->scratch_dir_base) { free(r->scratch_dir_base); } failed_eval_scratch_dir_base: if (r->gateway_user) { free(r->gateway_user); } get_gateway_user_failed: free(r->cache_tag); cache_tag_alloc_failed: failed_restart: free(r->job_state_file); failed_state_file_set: cached_stderr_symboltable_failed: free(r->cached_stderr); cached_stderr_malloc_failed: cached_stdout_symboltable_failed: free(r->cached_stdout); cached_stdout_malloc_failed: if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE) { globus_gram_job_manager_destroy_directory(r, r->job_dir); } free(r->job_dir); failed_make_job_dir: free(r->job_contact_path); failed_set_job_contact_path: failed_add_contact_to_symboltable: if (r->job_contact) { free(r->job_contact); } failed_set_job_contact: free(r->uniq_id); failed_set_uniq_id: if (r->jm_restart) { free(r->jm_restart); } failed_generate_id: free(r->rsl_spec); rsl_unparse_failed: rsl_canonicalize_failed: globus_rsl_free_recursive(r->rsl); rsl_parse_failed: symboltable_populate_failed: symboltable_create_scope_failed: globus_symboltable_destroy(&r->symbol_table); if (r->gt3_failure_message) { if (gt3_failure_message != NULL) { *gt3_failure_message = r->gt3_failure_message; } else { free(r->gt3_failure_message); } } if (r->gt3_failure_type) { free(r->gt3_failure_type); } if (r->gt3_failure_source) { free(r->gt3_failure_source); } if (r->gt3_failure_destination) { free(r->gt3_failure_destination); } symboltable_init_failed: free(r); r = NULL; } request_malloc_failed: *request = r; return rc; } /* globus_gram_job_manager_request_init() */ /** * Load request and security context, initialize structures, and send reply. * * @param manager * Job manager state * @param http_body_fd * File descriptor of the HTTP body file * @param context_fd * File descriptor pointing to the GSSAPI security context to use for the * response. * @param request * Pointer to be set to the new job request * @param context * Pointer to be set to the security context of the initial job request * @param contact * Pointer to be set to the job contact of the client to send job state * change notifications to. * @param job_state_mask * Pointer to be set to the job state mask for which job state changes * the client is interested in. * @param old_job_contact * Pointer to a string to be set to the old job contact if * GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE. Set to NULL otherwise. * @param old_job_request * Pointer to a job request structure that will be set to an existing * one if the return value is GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE. Set * to NULL otherwise. If non-null, the caller must release a reference * when done processing this. * @param gt3_failure_message * Pointer to be set to an extended failure message to explain why the * initialization failed. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED * Unable to import security context * @retval GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED * Unable to read job request from http_body_fd * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed * @retval GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL * Bad RSL * @retval GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED * RSL evaluation failed * @retval GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCRATCH * Invalid scratchdir RSL attribute * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRATCH * Invalid scratchdir path * @retval GLOBUS_GRAM_PROTOCOL_ERROR_PARAMETER_NOT_SUPPORTED * RSL attribute not supported. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SUBMIT_ATTRIBUTE * Invalid submit RSL attribute. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_RESTART_ATTRIBUTE * Invalid restart RSL attribute. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_STDIO_UPDATE_ATTRIBUTE * Invalid stdio_update RSL attribute. * * @note Even if this function returns a failure code, the @a context * may still be initialized to the security context. If it points to a * value other than GSS_C_NO_CONTEXT then it can be used by the caller * to send the failure response. */ int globus_gram_job_manager_request_load( globus_gram_job_manager_t * manager, int http_body_fd, int context_fd, gss_cred_id_t cred, const char * peer_address, globus_gsi_cred_handle_t peer_cred, size_t content_length, globus_gram_jobmanager_request_t ** request, gss_ctx_id_t * context, char ** contact, int * job_state_mask, char ** old_job_contact, globus_gram_jobmanager_request_t ** old_job_request, globus_bool_t * version_only, char ** gt3_failure_message) { int rc; char * rsl; *request = NULL; *context = GSS_C_NO_CONTEXT; *contact = NULL; *job_state_mask = 0; *version_only = GLOBUS_FALSE; if (context_fd != -1) { rc = globus_gram_job_manager_import_sec_context( manager, context_fd, context); if (rc != GLOBUS_SUCCESS) { goto import_context_failed; } } rc = globus_gram_job_manager_read_request( manager, http_body_fd, content_length, &rsl, contact, job_state_mask, version_only); if (rc != GLOBUS_SUCCESS) { goto read_request_failed; } if (! (*version_only)) { rc = globus_gram_job_manager_request_init( request, manager, rsl, cred, *context, peer_address, peer_cred, GLOBUS_FALSE, old_job_contact, old_job_request, gt3_failure_message); } if (rc != GLOBUS_SUCCESS) { goto request_init_failed; } request_init_failed: if (rsl) { free(rsl); } read_request_failed: import_context_failed: return rc; } /* globus_gram_job_manager_request_load() */ /** Verify that the job request is authorized, send a reply, and start the state machine for this request * * @param manager * Job manager state * @param request * Job request to start * @param response_fd * Descriptor to write the response to * @param client_contact * Client to send job state changes to (may be NULL) * @param job_state_mask * Job state mask for sending state changes to the client */ int globus_gram_job_manager_request_start( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, int response_fd, const char * client_contact, int job_state_mask) { int rc; int rc2; int response_code; char * job_contact; if (request == NULL) { /* Reply to a bad request */ rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_REQUEST; goto bad_request; } rc = globus_gram_job_manager_add_request( manager, request->job_contact_path, request); GlobusGramJobManagerRequestLock(request); if (rc != GLOBUS_SUCCESS) { goto add_request_failed; } rc = globus_gram_job_manager_call_authz_callout( request->config, request->response_context, request->response_context, request->uniq_id, request->rsl, "start"); if (rc != GLOBUS_SUCCESS) { goto authz_denied; } rc = globus_gram_job_manager_validate_username(request); if (rc != 0) { goto username_denied; } if (client_contact != NULL) { rc = globus_gram_job_manager_contact_add( request, client_contact, job_state_mask); if (rc != GLOBUS_SUCCESS) { goto contact_add_failed; } } if (request->dry_run) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_DRYRUN; rc = globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); manager->usagetracker->count_dryrun++; } contact_add_failed: username_denied: authz_denied: add_request_failed: bad_request: /* Reply to request with unsubmitted (and optionally * two-phase-commit needed) */ switch (request->failure_code) { case GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE: response_code = request->failure_code; job_contact = request->old_job_contact; break; case GLOBUS_SUCCESS: if (request->two_phase_commit) { response_code = GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT; } else { response_code = GLOBUS_SUCCESS; } job_contact = request->job_contact; break; default: response_code = request->failure_code; job_contact = NULL; break; } rc2 = globus_gram_job_manager_reply( request, request->manager, response_code, job_contact, response_fd, request->response_context, NULL); if (rc == GLOBUS_SUCCESS && rc2 == GLOBUS_SUCCESS) { globus_reltime_t delay; GlobusTimeReltimeSet(delay, 0, 0); rc = globus_gram_job_manager_state_machine_register( manager, request, &delay); } else if (rc == GLOBUS_SUCCESS && rc2 != GLOBUS_SUCCESS) { rc = rc2; } GlobusGramJobManagerRequestUnlock(request); return rc; } /* globus_gram_job_manager_request_start() */ /** * Deallocate memory related to a request. * * This function frees the data within the request, also destroying * files associated with the request. * The caller must not access the request after this function has returned. * * @param request * Job request to destroy. * * @return GLOBUS_SUCCESS */ void globus_gram_job_manager_request_destroy( globus_gram_jobmanager_request_t * request) { if (!request) { return; } if (request->scratchdir) { globus_gram_job_manager_destroy_directory( request, request->scratchdir); } globus_gram_job_manager_request_free(request); } /* globus_gram_job_manager_request_destroy() */ /** * Deallocate memory related to a request. * * This function frees the data within the request. * * @param request * Job request to destroy. * * @return GLOBUS_SUCCESS */ void globus_gram_job_manager_request_free( globus_gram_jobmanager_request_t * request) { if (!request) { return; } if (request->job_id_string) { free(request->job_id_string); } if (request->original_job_id_string) { free(request->original_job_id_string); } if (request->uniq_id) { free(request->uniq_id); } if (request->cached_stdout) { free(request->cached_stdout); } if (request->cached_stderr) { free(request->cached_stderr); } if (request->jm_restart) { free(request->jm_restart); } if (request->scratch_dir_base) { free(request->scratch_dir_base); } if (request->scratchdir) { free(request->scratchdir); } if (request->cache_tag) { free(request->cache_tag); } if (request->symbol_table != NULL) { globus_symboltable_destroy(&request->symbol_table); } if (request->rsl_spec) { free(request->rsl_spec); } if (request->rsl) { globus_rsl_free_recursive(request->rsl); } if (request->remote_io_url) { free(request->remote_io_url); } if (request->remote_io_url_file) { free(request->remote_io_url_file); } if (request->x509_user_proxy) { free(request->x509_user_proxy); } if (request->job_state_file) { free(request->job_state_file); } if (request->gt3_failure_type) { free(request->gt3_failure_type); } if (request->gt3_failure_message) { free(request->gt3_failure_message); } if (request->gt3_failure_source) { free(request->gt3_failure_source); } if (request->gt3_failure_destination) { free(request->gt3_failure_destination); } globus_mutex_destroy(&request->mutex); globus_cond_destroy(&request->cond); globus_gram_job_manager_contact_list_free(request); globus_gram_job_manager_staging_free_all(request); globus_assert(request->poll_timer == GLOBUS_NULL_HANDLE); if (request->job_contact) { free(request->job_contact); } if (request->job_contact_path) { free(request->job_contact_path); } if (request->pending_queries) { globus_fifo_destroy(&request->pending_queries); } if (request->job_history_file) { free(request->job_history_file); } if (request->job_dir) { free(request->job_dir); } if (request->cache_location) { free(request->cache_location); } if (request->gateway_user) { free(request->gateway_user); } if (request->cache_handle) { globus_gass_cache_close(&request->cache_handle); } if (request->response_context != GSS_C_NO_CONTEXT) { OM_uint32 minor_status; gss_delete_sec_context(&minor_status, &request->response_context, NULL); } if (request->seg_event_queue) { globus_fifo_destroy_all( &request->seg_event_queue, globus_l_gram_event_destroy); } if (request->job_stats.client_address != NULL) { free(request->job_stats.client_address); } if (request->job_stats.user_dn != NULL) { free(request->job_stats.user_dn); } } /* globus_gram_job_manager_request_free() */ /** * Change the status associated with a job request * * Changes the status associated with a job request. * There is now additional tracking data associated with the * status that must be updated when the status is. This function * handles managing it. It is NOT recommended that you directly * change the status. * * @param request * Job request to change status of. * @param status * Status to set the job request to. * * @return GLOBUS_SUCCESS assuming valid input. * If the request is null, returns GLOBUS_FAILURE. */ int globus_gram_job_manager_request_set_status( globus_gram_jobmanager_request_t * request, globus_gram_protocol_job_state_t status) { switch (status) { case GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING: GlobusTimeAbstimeGetCurrent(request->job_stats.pending_timestamp); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE: GlobusTimeAbstimeGetCurrent(request->job_stats.active_timestamp); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED: GlobusTimeAbstimeGetCurrent(request->job_stats.failed_timestamp); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE: GlobusTimeAbstimeGetCurrent(request->job_stats.done_timestamp); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED: GlobusTimeAbstimeGetCurrent(request->job_stats.unsubmitted_timestamp); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN: GlobusTimeAbstimeGetCurrent(request->job_stats.file_stage_in_timestamp); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT: GlobusTimeAbstimeGetCurrent(request->job_stats.file_stage_out_timestamp); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_SUSPENDED: case GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL: break; } return globus_gram_job_manager_request_set_status_time( request, status, time(0)); } /* globus_gram_job_manager_request_set_status() */ /** * Change the status associated with a job request * * Changes the status associated with a job request. * There is now additional tracking data associated with the * status that must be updated when the status is. This function * handles managing it. It is NOT recommended that you directly * change the status. * * @param request * Job request to change status of. * @param status * Status to set the job request to. * @param valid_time * The status is known good as of this time (seconds since epoch) * * @return GLOBUS_SUCCESS assuming valid input. * If the request is null, returns GLOBUS_FAILURE. */ int globus_gram_job_manager_request_set_status_time( globus_gram_jobmanager_request_t * request, globus_gram_protocol_job_state_t status, time_t valid_time) { if( ! request ) return GLOBUS_FAILURE; request->status = status; request->status_update_time = valid_time; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.job.info " "level=DEBUG " "gramid=%s " "job_status=%d " "\n", request->job_contact_path, status); if (request->manager != NULL) { globus_gram_job_manager_set_status( request->manager, request->job_contact_path, request->status, request->failure_code, request->exit_code); } return GLOBUS_SUCCESS; } /* globus_gram_job_manager_request_set_status() */ /** * Write data to the job manager log file * * This function writes data to the passed file, using a printf format * string. Data is prefixed with a timestamp when written. * * @param log_fp * Log file to write to. * @param format * Printf-style format string to be written. * @param ... * Parameters substituted into the format string, if needed. * * @return This function returns the value returned by vfprintf. */ void globus_gram_job_manager_request_log( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_log_level_t level, const char * format, ... ) { va_list ap; int stdio_level = level; /* Allow logging code to determine this thread's current job request to handle * per-job log configuration */ globus_thread_setspecific( globus_i_gram_request_key, request); /* job_log_level is initialized to the global log level, but can be modified via * the log_level RSL attribute. If it masks the requested log level to zero, don't bother * calling the logging functions */ if (request != NULL && request->job_log_level != -1) { stdio_level = level & request->job_log_level; if (stdio_level == 0) { goto skip_stdio; } /* * If we have a request-specific log level that differs from the global * config, we need to make sure the log level matches the global type * mask so that it won't get discarded by globus_logging_vwrite */ if (request->config) { stdio_level = request->config->log_levels; } } va_start(ap, format); globus_logging_vwrite( globus_i_gram_job_manager_log_stdio, stdio_level, format, ap); va_end(ap); skip_stdio: if (globus_i_gram_job_manager_log_sys != NULL) { va_start(ap, format); globus_logging_vwrite( globus_i_gram_job_manager_log_sys, level, format, ap); va_end(ap); } globus_thread_setspecific( globus_i_gram_request_key, NULL); } /* globus_gram_job_manager_request_log() */ /** * Write data to the job manager accounting file. * Also use syslog() to allow for easy central collection. * * This function writes data to the passed file descriptor, if any, * using a printf format string. * Data is prefixed with a timestamp when written. * * @param format * Printf-style format string to be written. * @param ... * Parameters substituted into the format string, if needed. * * @return This function returns the value returned by write(). */ int globus_gram_job_manager_request_acct( globus_gram_jobmanager_request_t * request, const char * format, ... ) { static const char *jm_syslog_id = "gridinfo"; static int jm_syslog_fac = LOG_DAEMON; static int jm_syslog_lvl = LOG_NOTICE; static int jm_syslog_init; struct tm *curr_tm; time_t curr_time; va_list ap; int rc = -1; int fd; const char * gk_acct_fd_var = "GATEKEEPER_ACCT_FD"; const char * gk_acct_fd; int n; int t; char buf[1024 * 128]; time( &curr_time ); curr_tm = localtime( &curr_time ); n = t = sprintf( buf, "JMA %04d/%02d/%02d %02d:%02d:%02d ", curr_tm->tm_year + 1900, curr_tm->tm_mon + 1, curr_tm->tm_mday, curr_tm->tm_hour, curr_tm->tm_min, curr_tm->tm_sec ); va_start( ap, format ); /* * FIXME: we should use vsnprintf() here... */ n += vsprintf( buf + t, format, ap ); if (!jm_syslog_init) { const char *s; if ((s = getenv( "JOBMANAGER_SYSLOG_ID" )) != 0) { jm_syslog_id = *s ? s : 0; } if ((s = getenv( "JOBMANAGER_SYSLOG_FAC" )) != 0) { if (sscanf( s, "%d", &jm_syslog_fac ) != 1 || jm_syslog_fac < 0) { jm_syslog_id = 0; } } if ((s = getenv( "JOBMANAGER_SYSLOG_LVL" )) != 0) { if (sscanf( s, "%d", &jm_syslog_lvl ) != 1 || jm_syslog_lvl < 0) { jm_syslog_id = 0; } } if (jm_syslog_id) { openlog( jm_syslog_id, LOG_PID, jm_syslog_fac ); } jm_syslog_init = 1; } if (jm_syslog_id) { char *p, *q = buf; while ((p = q) < buf + n) { char c; while ((c = *q) != 0 && c != '\n') { q++; } *q = 0; syslog( jm_syslog_lvl, "%s", p ); *q++ = c; } } if (!(gk_acct_fd = getenv( gk_acct_fd_var ))) { return -1; } if (sscanf( gk_acct_fd, "%d", &fd ) != 1) { return -1; } fcntl( fd, F_SETFD, FD_CLOEXEC ); if ((rc = write( fd, buf, n )) != n) { rc = -1; } return rc; } /* globus_gram_job_manager_request_acct() */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * Populate the request symbol table with values from the job manager config * * @param request * Request to update the symbol table of * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed */ int globus_i_gram_symbol_table_populate( globus_gram_job_manager_config_t * config, globus_symboltable_t * symbol_table) { int rc = GLOBUS_SUCCESS; int i; struct { char * symbol; char *value; } symbols[] = { { "HOME", config->home }, { "LOGNAME", config->logname }, { "GLOBUS_ID", config->subject }, { "GLOBUS_HOST_MANUFACTURER",config->globus_host_manufacturer}, { "GLOBUS_HOST_CPUTYPE",config->globus_host_cputype}, { "GLOBUS_HOST_OSNAME",config->globus_host_osname}, { "GLOBUS_HOST_OSVERSION",config->globus_host_osversion}, { "GLOBUS_GATEKEEPER_HOST",config->globus_gatekeeper_host}, { "GLOBUS_GATEKEEPER_PORT",config->globus_gatekeeper_port}, { "GLOBUS_GATEKEEPER_SUBJECT",config->globus_gatekeeper_subject}, { "GLOBUS_LOCATION", config->target_globus_location }, { "GLOBUS_CONDOR_OS", config->condor_os } /* Deprecated */, { "GLOBUS_CONDOR_ARCH", config->condor_arch } /* Deprecated */, /* Others are job dependent values inserted after they are computed: * - GLOBUS_GRAM_JOB_CONTACT * - GLOBUS_CACHED_STDOUT * - GLOBUS_CACHED_STDERR * - SCRATCH_DIRECTORY */ { NULL, NULL } }; for (i = 0; symbols[i].symbol != NULL; i++) { if (symbols[i].value != NULL) { rc = globus_l_gram_symboltable_add( symbol_table, symbols[i].symbol, symbols[i].value); if (rc != GLOBUS_SUCCESS) { goto failed_insert_symbol; } } } if (rc != GLOBUS_SUCCESS) { failed_insert_symbol: for (--i; i >=0; i--) { globus_symboltable_remove( symbol_table, symbols[i].symbol); } } return rc; } /* globus_gram_symbol_table_populate() */ /** * Insert a symbol into the RSL evaluation symbol table * * Also checks that the value is non-NULL and transforms the return * value to a GRAM error code. * * @param symboltable * Symbol table to insert the value to. * @param symbol * Symbol name to add to the table. * @pram value * Symbol value to add to the table. If NULL nothing is inserted. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed */ static int globus_l_gram_symboltable_add( globus_symboltable_t * symbol_table, const char * symbol, const char * value) { int rc = GLOBUS_SUCCESS; if (value != NULL) { rc = globus_symboltable_insert( symbol_table, (void *) symbol, (void *) value); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; } } return rc; } /* globus_l_gram_symboltable_add() */ static int globus_l_gram_generate_id( globus_gram_jobmanager_request_t * request, char ** jm_restart, uint64_t * uniq1p, uint64_t * uniq2p) { int rc = GLOBUS_SUCCESS; *jm_restart = NULL; if(globus_gram_job_manager_rsl_need_restart(request)) { /* Need to do this before unique id is set */ rc = globus_gram_job_manager_rsl_eval_one_attribute( request, GLOBUS_GRAM_PROTOCOL_RESTART_PARAM, jm_restart); if (rc == GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_RESTART; goto failed_jm_restart_eval; } else if (rc != GLOBUS_SUCCESS) { goto failed_jm_restart_eval; } else if (*jm_restart == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_RESTART; goto failed_jm_restart_eval; } rc = sscanf( request->jm_restart, "https://%*[^:]:%*d/%"PRIu64"/%"PRIu64, uniq1p, uniq2p); if (rc < 2) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_RESTART; goto failed_jm_restart_scan; } rc = GLOBUS_SUCCESS; } else { globus_uuid_t uuid; rc = globus_uuid_create(&uuid); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; } request->jm_restart = NULL; memcpy(uniq1p, uuid.binary.bytes, 8); memcpy(uniq2p, uuid.binary.bytes+8, 8); } if (rc != GLOBUS_SUCCESS) { failed_jm_restart_scan: if (request->jm_restart != NULL) { free(request->jm_restart); } } failed_jm_restart_eval: return rc; } /* globus_l_gram_generate_id() */ /** * Determine the cache location to use for this job * * If the gass_cache RSL attribute is present, it is evaluated and used. * Otherwise, if -cache-location was in the configuration, it used. Otherwise, * the GASS cache library default is used. * * @param request * Request to use to find which value to use. * @param cache_locationp * Pointer to set to the job-specific cache location. * @param cache_handlep * Pointer to the GASS cache handle to initialize for this job * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_RSL_CACHE * Invalid gass_cache RSL parameter. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_CACHE * Invalid cache path. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE * Error opening cache. */ static int globus_l_gram_init_cache( globus_gram_jobmanager_request_t * request, char ** cache_locationp, globus_gass_cache_t * cache_handlep) { int rc = GLOBUS_SUCCESS; int gassrc = GLOBUS_SUCCESS; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.gass_cache_init.start " "level=TRACE " "gramid=%s " "\n", request->job_contact_path); if (globus_gram_job_manager_rsl_attribute_exists( request->rsl, GLOBUS_GRAM_PROTOCOL_GASS_CACHE_PARAM)) { /* If gass_cache is in RSL, we'll evaluate that and use it. */ rc = globus_gram_job_manager_rsl_eval_one_attribute( request, GLOBUS_GRAM_PROTOCOL_GASS_CACHE_PARAM, cache_locationp); if (rc != GLOBUS_SUCCESS) { if (rc == GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_CACHE; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.gass_cache_init.end " "level=ERROR " "gramid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, -rc, "Error evaluating cache RSL attribute", globus_gram_protocol_error_string(rc)); goto failed_cache_eval; } /* cache location in rsl, but not a literal after eval */ if ((*cache_locationp) == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_CACHE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.gass_cache_init.end " "level=ERROR " "gramid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, -rc, "Error evaluating cache RSL attribute", globus_gram_protocol_error_string(rc)); goto failed_cache_eval; } } else if (request->config->cache_location != NULL) { /* If -cache-location was on command-line or config file, then * eval and use it */ rc = globus_gram_job_manager_rsl_eval_string( &request->symbol_table, request->config->cache_location, cache_locationp); if(rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.gass_cache_init.end " "level=ERROR " "gramid=%s " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, -rc, globus_gram_protocol_error_string(rc)); goto failed_cache_eval; } } else { /* I'd like to use GASS-default location for the cache for this, * but we can't rely on being able to set the environment and having * it remain valid if multiple jobs are being processed. Instead, we'll * force it to what the library would do anyway. */ *cache_locationp = globus_common_create_string( "%s/.globus/.gass_cache", request->config->home); } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.gass_cache_init.info " "level=TRACE " "gramid=%s " "path=%s\n", request->job_contact_path, *(cache_locationp)); memset(cache_handlep, 0, sizeof(globus_gass_cache_t)); gassrc = rc = globus_gass_cache_open(*cache_locationp, cache_handlep); if(rc != GLOBUS_SUCCESS) { if (*cache_locationp) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_CACHE; } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.gass_cache_init.end " "level=ERROR " "gramid=%s " "status=%d " "path=%s " "msg=\"%s\" " "gasserror=%d " "reason=\"%s\"\n", request->job_contact_path, -rc, *(cache_locationp), "Error opening GASS cache", gassrc, globus_gass_cache_error_string(gassrc)); if (*cache_locationp) { free(*cache_locationp); *cache_locationp = NULL; } } else { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.gass_cache_init.end " "level=TRACE " "gramid=%s " "status=%d " "path=%s\n", request->job_contact_path, 0, *(cache_locationp)); } failed_cache_eval: return rc; } /* globus_l_gram_init_cache() */ static int globus_l_gram_restart( globus_gram_jobmanager_request_t * request, globus_gram_jobmanager_request_t ** old_job_request) { int rc; globus_rsl_t * stdout_position; globus_rsl_t * stderr_position; globus_rsl_t * restart_rsl; globus_rsl_t * original_rsl; globus_rsl_t * restartcontacts; globus_bool_t restart_contacts = GLOBUS_FALSE; /* Evaluate the restart RSL, so that we can merge it with the original * job RSL */ rc = globus_rsl_eval(request->rsl, &request->symbol_table); if(rc != GLOBUS_SUCCESS) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED; goto rsl_eval_failed; } rc = globus_gram_job_manager_validate_rsl( request, request->rsl, GLOBUS_GRAM_VALIDATE_JOB_MANAGER_RESTART); if(rc != GLOBUS_SUCCESS) { goto rsl_validate_failed; } /* * Eval after validating, as validation may insert * RSL substitions when processing default values of * RSL attributes */ rc = globus_rsl_eval(request->rsl, &request->symbol_table); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED; goto post_validate_eval_failed; } /* Free the restart RSL spec. Make room for the job * request RSL which we'll read from the state file */ free(request->rsl_spec); request->rsl_spec = NULL; /* Remove the restart parameter from the RSL spec. */ globus_gram_job_manager_rsl_remove_attribute( request->rsl, GLOBUS_GRAM_PROTOCOL_RESTART_PARAM); if (globus_gram_job_manager_request_exists( request->manager, request->job_contact_path)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; } else { /* Read the job state file. This has all sorts of side-effects on * the request structure */ rc = globus_gram_job_manager_state_file_read(request); } if (rc == GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE) { /* Something is handling this request already. We'll check if it is * this process. If so, we'll merge the RSLs (as if we had done a * stdio update. */ rc = globus_gram_job_manager_add_reference( request->manager, request->job_contact_path, "restart", old_job_request); if (rc != GLOBUS_SUCCESS) { /* OK. It's alive, but not our job. Let it be */ rc = GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; goto state_file_read_failed; } rc = globus_i_gram_request_stdio_update( (*old_job_request), request->rsl); if (rc == GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; } else { /* Likely, we return GLOBUS_SUCCESS in this case, the wrong error value */ rc = globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "restart"); *old_job_request = NULL; } goto old_jm_alive; } else if(rc != GLOBUS_SUCCESS) { goto state_file_read_failed; } original_rsl = globus_rsl_parse(request->rsl_spec); if (!original_rsl) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto parse_original_rsl_failed; } restart_rsl = request->rsl; request->rsl = NULL; rc = globus_gram_job_manager_rsl_attribute_get_boolean_value( restart_rsl, "restartcontacts", &restart_contacts); if (rc != GLOBUS_SUCCESS || !restart_contacts) { globus_gram_job_manager_contact_list_free(request); rc = GLOBUS_SUCCESS; } restartcontacts = globus_gram_job_manager_rsl_extract_relation( restart_rsl, "restartcontacts"); if (restartcontacts != NULL) { globus_rsl_free_recursive(restartcontacts); } /* * Remove stdout_position and stderr_position. We don't do streaming * any more, so we will reject any restart where the positions * aren't 0 (validation file checks those). */ stdout_position = globus_gram_job_manager_rsl_extract_relation( restart_rsl, GLOBUS_GRAM_PROTOCOL_STDOUT_POSITION_PARAM); if (stdout_position != NULL) { globus_rsl_free_recursive(stdout_position); } stderr_position = globus_gram_job_manager_rsl_extract_relation( restart_rsl, GLOBUS_GRAM_PROTOCOL_STDERR_POSITION_PARAM); if (stderr_position != NULL) { globus_rsl_free_recursive(stderr_position); } request->rsl = globus_gram_job_manager_rsl_merge( original_rsl, restart_rsl); if(request->rsl == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; } request->job_stats.restart_count++; if (original_rsl) { globus_rsl_free_recursive(original_rsl); } if (restart_rsl) { globus_rsl_free_recursive(restart_rsl); } parse_original_rsl_failed: old_jm_alive: state_file_read_failed: post_validate_eval_failed: rsl_validate_failed: rsl_eval_failed: return rc; } /* globus_l_gram_restart() */ int globus_i_gram_request_stdio_update( globus_gram_jobmanager_request_t * request, globus_rsl_t * update_rsl) { int rc = GLOBUS_SUCCESS; const char * tmp_string; globus_rsl_t * tmp_rsl; globus_rsl_t * stdout_position; globus_rsl_t * stderr_position; globus_rsl_t * original_rsl; /* TODO: We should almost certainly validate RSL here rc = globus_gram_job_manager_validate_rsl( request, tmp_rsl, GLOBUS_GRAM_VALIDATE_STDIO_UPDATE); if(rc != GLOBUS_SUCCESS) { goto parse_original_rsl_failed; } */ /* * Remove stdout_position and stderr_position. We don't do streaming * any more, so we will reject any restart where the positions * aren't 0. */ stdout_position = globus_gram_job_manager_rsl_extract_relation( update_rsl, GLOBUS_GRAM_PROTOCOL_STDOUT_POSITION_PARAM); if (stdout_position != NULL) { globus_rsl_free_recursive(stdout_position); } stderr_position = globus_gram_job_manager_rsl_extract_relation( update_rsl, GLOBUS_GRAM_PROTOCOL_STDERR_POSITION_PARAM); if (stderr_position != NULL) { globus_rsl_free_recursive(stderr_position); } original_rsl = globus_rsl_parse(request->rsl_spec); if (!original_rsl) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto parse_original_rsl_failed; } /* TODO: it appears tmp_rsl leaks if a failure occurs */ tmp_rsl = globus_gram_job_manager_rsl_merge( original_rsl, update_rsl); if (tmp_rsl == GLOBUS_NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto failed_rsl_merge; } /* The update_rsl, for job restarts, contains a "restartcontacts" * attribute. This must be removed from the merged RSL prior to * saving it to disk; otherwise, it will cause submits to choke. * TODO: There should be a smarter way to do this with RSL validation. */ if (globus_gram_job_manager_rsl_remove_attribute(tmp_rsl, "restartcontacts")) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto failed_rsl_merge; } char * tmp_rsl_spec; if (!(tmp_rsl_spec = globus_rsl_unparse(tmp_rsl))) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto failed_rsl_merge; } rc = globus_rsl_eval(tmp_rsl, &request->symbol_table); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED; goto failed_rsl_merge; } rc = globus_gram_job_manager_validate_rsl( request, tmp_rsl, GLOBUS_GRAM_VALIDATE_JOB_SUBMIT); if(rc != GLOBUS_SUCCESS) { goto failed_rsl_merge; } rc = globus_rsl_eval(tmp_rsl, &request->symbol_table); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED; goto failed_rsl_merge; } globus_rsl_free_recursive(request->rsl); request->rsl = tmp_rsl; free(request->rsl_spec); request->rsl_spec = tmp_rsl_spec; rc = globus_gram_job_manager_streaming_list_replace(request); if (rc != GLOBUS_SUCCESS) { goto staging_list_replace_failed; } rc = globus_gram_job_manager_rsl_attribute_get_string_value( request->rsl, GLOBUS_GRAM_PROTOCOL_REMOTE_IO_URL_PARAM, &tmp_string); switch (rc) { case GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE: rc = GLOBUS_SUCCESS; break; case GLOBUS_SUCCESS: if (tmp_string != NULL) { if (request->remote_io_url) { free(request->remote_io_url); } request->remote_io_url = strdup(tmp_string); if (request->remote_io_url == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto get_remote_io_url_failed; } } else { default: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_REMOTE_IO_URL; goto get_remote_io_url_failed; } } if (request->remote_io_url) { rc = globus_i_gram_remote_io_url_update(request); } /* Now that we've recreated the stdio, redo the staging list. */ globus_gram_job_manager_staging_free_all(request); /* globus_gram_jobmanager_request_t * request) request->stage_in_todo = NULL; request->stage_in_shared_todo = NULL; request->stage_out_todo = NULL; request->stage_stream_todo = NULL; */ rc = globus_gram_job_manager_staging_create_list(request); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.restart.info " "level=ERROR " "gramid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, -rc, "Unable to recreate staging list", globus_gram_protocol_error_string(rc)); goto staging_list_replace_failed; } globus_gram_job_manager_state_file_write(request); get_remote_io_url_failed: staging_list_replace_failed: failed_rsl_merge: if (original_rsl) { globus_rsl_free_recursive(original_rsl); } parse_original_rsl_failed: return rc; } /* globus_i_gram_request_stdio_update() */ /** * Add default environment variables to the job environment * * Adds GLOBUS_GASS_CACHE_DEFAULT, LOGNAME, HOME, and anything that * is defined from the -extra-envar command-line option. * * @param request * Request to modify * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; * Malloc failed. */ static int globus_l_gram_populate_environment( globus_gram_jobmanager_request_t * request) { int rc; rc = globus_l_gram_add_environment( request->rsl, "GLOBUS_GASS_CACHE_DEFAULT", request->cache_location); if (rc != GLOBUS_SUCCESS) { goto add_cache_default_failed; } rc = globus_l_gram_add_environment( request->rsl, "LOGNAME", request->config->logname); if (rc != GLOBUS_SUCCESS) { goto add_logname_failed; } rc = globus_l_gram_add_environment( request->rsl, "HOME", request->config->home); if (rc != GLOBUS_SUCCESS) { goto add_home_failed; } if (request->config->x509_cert_dir) { rc = globus_l_gram_add_environment( request->rsl, "X509_CERT_DIR", request->config->x509_cert_dir); if (rc != GLOBUS_SUCCESS) { goto add_x509_cert_dir_failed; } } rc = globus_l_gram_add_environment( request->rsl, "GLOBUS_GRAM_JOB_CONTACT", request->job_contact); if (rc != GLOBUS_SUCCESS) { goto add_gram_job_contact_failed; } if (request->config->target_globus_location) { rc = globus_l_gram_add_environment( request->rsl, "GLOBUS_LOCATION", request->config->target_globus_location); if (rc != GLOBUS_SUCCESS) { goto add_globus_location_failed; } } if (request->config->tcp_port_range) { rc = globus_l_gram_add_environment( request->rsl, "GLOBUS_TCP_PORT_RANGE", request->config->tcp_port_range); if (rc != GLOBUS_SUCCESS) { goto add_tcp_port_range_failed; } } if (request->config->tcp_source_range) { rc = globus_l_gram_add_environment( request->rsl, "GLOBUS_TCP_SOURCE_RANGE", request->config->tcp_source_range); if (rc != GLOBUS_SUCCESS) { goto add_tcp_source_range_failed; } } if (request->remote_io_url_file) { rc = globus_l_gram_add_environment( request->rsl, "GLOBUS_REMOTE_IO_URL", request->remote_io_url_file); if (rc != GLOBUS_SUCCESS) { goto add_remote_io_url_file; } } if (request->x509_user_proxy) { rc = globus_l_gram_add_environment( request->rsl, "X509_USER_PROXY", request->x509_user_proxy); if (rc != GLOBUS_SUCCESS) { goto add_x509_user_proxy_failed; } } if (request->config->extra_envvars) { globus_list_t *l = request->config->extra_envvars; while (l) { char *p = globus_list_first(l); char *q; char *var, *val; l = globus_list_rest(l); if ((q = strchr(p, '=')) != NULL) { var = globus_common_create_string("%.*s", (int) (q-p), p); val = q+1; } else { var = strdup(p); val = getenv(var); } if (var && val) { rc = globus_l_gram_add_environment( request->rsl, var, val); if (rc != GLOBUS_SUCCESS) { free(var); goto add_extra_envvar_failed; } } if (var) { free(var); } } } add_extra_envvar_failed: add_x509_user_proxy_failed: add_remote_io_url_file: add_tcp_port_range_failed: add_tcp_source_range_failed: add_globus_location_failed: add_gram_job_contact_failed: add_x509_cert_dir_failed: add_home_failed: add_logname_failed: add_cache_default_failed: return rc; } /* globus_l_gram_populate_environment() */ /** * Add an environment variable to the job environment * * @param rsl * RSL to modify * @param variable * Environment variable name * @param value * Environment variable value. If NULL, this variable is ignored. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; * Malloc failed. */ static int globus_l_gram_add_environment( globus_rsl_t * rsl, const char * variable, const char * value) { int rc = GLOBUS_SUCCESS; if (value != NULL) { rc = globus_gram_job_manager_rsl_env_add( rsl, variable, value); if (rc != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; } } return rc; } /* globus_l_gram_add_environment() */ /** * Initialize the scratchdir member of the job request if needed * * As a side effect, the path named by scratchdir will be created and * variable SCRATCH_DIRECTORY will be added to both the symbol table and * the job environment. * * @param request * Request to act on. * @param rsl * RSL to check for "scratchdir" attribute * @param scratch_dir_base * Job-specific scratch_dir_base * @param scratchdir * Pointer to set to the new scratchdir * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCRATCH * Invalid scratchdir RSL attribute * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRATCH * Invalid scratchdir path */ static int globus_l_gram_init_scratchdir( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, const char * scratch_dir_base, char ** scratchdir) { int rc = GLOBUS_SUCCESS; char * dir = NULL; char * template = NULL; int i; int created = 0; enum { GLOBUS_GRAM_MKDIR_TRIES = 100 }; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.init_scratchdir.start " "level=DEBUG " "gramid=%s " "base=\"%s\" " "\n", request->job_contact_path, scratch_dir_base); /* In the case of a restart, this might have already been done */ if (request->jm_restart && request->scratchdir != NULL) { goto skip_mkdir; } if (! globus_gram_job_manager_rsl_attribute_exists( rsl, GLOBUS_GRAM_PROTOCOL_SCRATCHDIR_PARAM)) { *scratchdir = NULL; goto no_scratch; } rc = globus_gram_job_manager_rsl_eval_one_attribute( request, GLOBUS_GRAM_PROTOCOL_SCRATCHDIR_PARAM, &dir); if(rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.init_scratchdir.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "attribute=%s " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, "RSL evaluation failed", GLOBUS_GRAM_PROTOCOL_SCRATCHDIR_PARAM, -rc, globus_gram_protocol_error_string(rc)); if (rc == GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCRATCH; } goto eval_scratchdir_failed; } else if (dir == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCRATCH; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.init_scratchdir.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "attribute=%s " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, "RSL evaluation didn't yield a string", GLOBUS_GRAM_PROTOCOL_SCRATCHDIR_PARAM, -rc, globus_gram_protocol_error_string(rc)); goto eval_scratchdir_failed; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.init_scratchdir.info " "level=TRACE " "gramid=%s " "dir=\"%s\" " "\n", request->job_contact_path, dir); if (dir[0] == '/') { template = globus_common_create_string( "%s/gram_scratch_XXXXXX", dir); } else { template = globus_common_create_string( "%s/%s/gram_scratch_XXXXXX", scratch_dir_base, dir); } if (template == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.init_scratchdir.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\"\n", request->job_contact_path, "Directory template allocation failed", -rc, errno, strerror(errno)); goto template_malloc_failed; } for (i = 0, created = 0; i < GLOBUS_GRAM_MKDIR_TRIES && !created; i++) { char * scratchname; scratchname = strdup(template); if (scratchname == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.init_scratchdir.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, "Directory template allocation failed", -rc, errno, strerror(errno)); goto scratchname_strdup_failed; } *scratchdir = mktemp(scratchname); if (mkdir(*scratchdir, S_IRWXU) != 0) { if (errno != EEXIST && errno != EINTR) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRATCH; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.init_scratchdir.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, "Error creating directory", -rc, errno, strerror(errno)); goto fatal_mkdir_err; } else { free(*scratchdir); *scratchdir = NULL; } } else { created = 1; } } if (*scratchdir == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRATCH; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.init_scratchdir.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "\n", request->job_contact_path, "Error creating directory", -rc); goto fatal_mkdir_err; } skip_mkdir: rc = globus_symboltable_insert( &request->symbol_table, "SCRATCH_DIRECTORY", *scratchdir); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.init_scratchdir.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "\n", request->job_contact_path, "Error inserting scratch directory into RSL symbol table", -rc); goto insert_symbol_failed; } rc = globus_l_gram_add_environment( request->rsl, "SCRATCH_DIRECTORY", *scratchdir); if (rc != GLOBUS_SUCCESS) { globus_symboltable_remove( &request->symbol_table, "SCRATCH_DIRECTORY"); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.init_scratchdir.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, "Error inserting scratch directory into job environment", -rc, globus_gram_protocol_error_string(rc)); insert_symbol_failed: rmdir(*scratchdir); fatal_mkdir_err: free(*scratchdir); *scratchdir = NULL; } else scratchname_strdup_failed: if (template) { free(template); } template_malloc_failed: if (dir) { free(dir); } eval_scratchdir_failed: no_scratch: if (rc == GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.init_scratchdir.end " "level=DEBUG " "gramid=%s " "status=%d " "%s=\"%s\" " "\n", request->job_contact_path, 0, *scratchdir ? "path" : "reason", *scratchdir ? *scratchdir : "scratch_dir not in RSL"); } return rc; } /* globus_l_gram_init_scratchdir() */ /** * Remove a directory and all of its contents * * @param request * Request related to this directory. * @param directory * Directory to remove. */ void globus_gram_job_manager_destroy_directory( globus_gram_jobmanager_request_t * request, const char * directory) { int rc; char * path; char * new_path; DIR * dir; struct dirent * entry; struct stat st; globus_list_t * unchecked_dir_list = NULL; globus_list_t * dir_list = NULL; int failures = 0; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.directory_destroy.start " "level=TRACE " "gramid=%s " "path=\"%s\" " "\n", request->job_contact_path, directory); path = strdup(directory); if (path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.end " "level=WARN " "gramid=%s " "path=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, directory, -rc, globus_gram_protocol_error_string(rc)); goto path_strdup_failed; } rc = globus_list_insert(&unchecked_dir_list, path); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.end " "level=WARN " "gramid=%s " "path=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, directory, -rc, errno, strerror(errno)); free(path); goto unchecked_dir_insert_failed; } while (!globus_list_empty(unchecked_dir_list)) { /* We walk the directory structure once, removing all non-directory * entries. We store the directories in a list for a second pass. * * Note, we don't do much error handling here. If we fail, we'll leave * a dropping and note it in the log, but there's not much we can do. */ path = globus_list_remove(&unchecked_dir_list, unchecked_dir_list); if (path == NULL) { continue; } rc = globus_list_insert(&dir_list, path); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.info " "level=WARN " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, path, "List insert failed", -rc, errno, strerror(errno)); failures++; continue; } dir = opendir(path); if (dir == NULL) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.info " "level=WARN " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\"\n", request->job_contact_path, path, "opendir failed", -1, errno, strerror(errno)); failures++; continue; } while (globus_libc_readdir_r(dir, &entry) == 0 && entry != NULL) { if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { free(entry); continue; } new_path = globus_common_create_string( "%s/%s", path, entry->d_name); if (new_path == NULL) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.info " "level=WARN " "gramid=%s " "path=\"%s\" " "file=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, path, entry->d_name, "Malloc failed", -1, errno, strerror(errno)); failures++; free(entry); continue; } rc = lstat(new_path, &st); if (rc < 0) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.info " "level=WARN " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, new_path, "lstat failed", -1, errno, strerror(errno)); failures++; free(entry); continue; } if (st.st_mode & S_IFDIR) { rc = globus_list_insert(&unchecked_dir_list, new_path); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.info " "level=WARN " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, new_path, "List insert failed", -1, errno, strerror(errno)); free(new_path); failures++; free(entry); continue; } } else { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.directory_destroy.info " "level=TRACE " "gramid=%s " "path=\"%s\" " "msg=\"About to unlink\" " "\n", request->job_contact_path, new_path); rc = unlink(new_path); if (rc < 0) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.info " "level=WARN " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, new_path, "Unlink failed", -1, errno, strerror(errno)); failures++; } free(new_path); new_path = NULL; free(entry); } } closedir(dir); } while (!globus_list_empty(dir_list)) { /* Second pass removes (should be empty) subdirectories */ path = globus_list_remove(&dir_list, dir_list); rc = rmdir(path); if (rc < 0) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.directory_destroy.info " "level=WARN " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, path, "rmdir failed", -1, errno, strerror(errno)); failures++; } free(path); } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.directory_destroy.end " "level=DEBUG " "gramid=%s " "path=\"%s\" " "failures=%d " "status=%d " "\n", request->job_contact_path, directory, failures, failures == 0 ? 0 : -1); unchecked_dir_insert_failed: path_strdup_failed: return; } /* globus_gram_job_manager_destroy_directory() */ /** * Evaluate and validate the job RSL * * * @param request * Job request to validate * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED * RSL evaluation failed. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL * Invalid RSL. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_PARAMETER_NOT_SUPPORTED * RSL attribute not supported. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SUBMIT_ATTRIBUTE * Invalid submit RSL attribute. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_RESTART_ATTRIBUTE; * Invalid restart RSL attribute. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_STDIO_UPDATE_ATTRIBUTE; * Invalid stdio_update RSL attribute. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; * Malloc failed. */ static int globus_l_gram_validate_rsl( globus_gram_jobmanager_request_t * request) { int rc = GLOBUS_SUCCESS; rc = globus_rsl_eval(request->rsl, &request->symbol_table); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED; goto rsl_eval_failed; } rc = globus_gram_job_manager_validate_rsl( request, request->rsl, GLOBUS_GRAM_VALIDATE_JOB_SUBMIT); if(rc != GLOBUS_SUCCESS) { goto validate_rsl_failed; } rc = globus_rsl_eval(request->rsl, &request->symbol_table); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED; goto rsl_eval_failed2; } rsl_eval_failed2: validate_rsl_failed: rsl_eval_failed: return rc; } /* globus_l_gram_validate_rsl() */ /** * Create remote_io_url file in the job directory * * @param request * Request to log messages for * @param remote_io_url * Value to write to the remote_io_url file * @param remote_io_url_filep * Pointer to be set to the remote_io_url_file path upon success. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_RSL_REMOTE_IO_URL * Unable to create remote_io_url file. */ static int globus_l_gram_remote_io_url_file_create( globus_gram_jobmanager_request_t * request, const char * remote_io_url, const char * job_dir, char ** remote_io_url_filep) { int rc = GLOBUS_SUCCESS; FILE * fp; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.remote_io_url_file_create.start " "level=TRACE " "gramid=%s " "url=\"%s\" " "\n", request->job_contact_path, remote_io_url ? remote_io_url : ""); if (!remote_io_url) { *remote_io_url_filep = NULL; goto out; } *remote_io_url_filep = globus_common_create_string( "%s/remote_io_file", job_dir); if (remote_io_url_filep == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.remote_io_url_file_create.end " "level=ERROR " "gramid=%s " "url=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", request->job_contact_path, remote_io_url, -rc, "Error allocating path string", errno, strerror(errno)); goto set_remote_io_url_file_failed; } fp = fopen(*remote_io_url_filep, "r"); if (fp != NULL) { char * tmp; globus_bool_t skip_it = GLOBUS_FALSE; rc = fseek(fp, 0, SEEK_END); if (rc < 0) { goto close_readfp; } rc = ftell(fp); tmp = malloc(rc+1); if (tmp == NULL) { goto close_readfp; } if (fseek(fp, 0, SEEK_SET) < 0) { goto free_tmp; } tmp[rc] = 0; if (fgets(tmp, rc, fp) == NULL) { goto free_tmp; } /* trim trailing \n */ rc = strlen(tmp)-1; if (tmp[rc] == '\n') { tmp[rc] = 0; } if (strcmp(tmp, remote_io_url) == 0) { skip_it = GLOBUS_TRUE; } free_tmp: free(tmp); close_readfp: fclose(fp); fp = NULL; rc = GLOBUS_SUCCESS; if (skip_it) { goto out; } } fp = fopen(*remote_io_url_filep, "w"); if (fp == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_REMOTE_IO_URL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.remote_io_url_file_create.end " "level=ERROR " "gramid=%s " "url=\"%s\" " "path=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, remote_io_url, *remote_io_url_filep, -rc, "Error opening file", errno, strerror(errno)); goto fopen_failed; } rc = fprintf(fp, "%s\n", remote_io_url); if (rc < (1+strlen(remote_io_url))) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_REMOTE_IO_URL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.remote_io_url_file_create.end " "level=ERROR " "gramid=%s " "url=\"%s\" " "path=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, remote_io_url, *remote_io_url_filep, -rc, "Error writing remote_io file", errno, strerror(errno)); goto write_failed; } rc = GLOBUS_SUCCESS; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.remote_io_url_file_create.end " "level=TRACE " "gramid=%s " "url=\"%s\" " "path=\"%s\" " "status=0 " "\n", request->job_contact_path, remote_io_url, *remote_io_url_filep); write_failed: fclose(fp); if (rc != GLOBUS_SUCCESS) { fopen_failed: free(*remote_io_url_filep); *remote_io_url_filep = NULL; } set_remote_io_url_file_failed: out: return rc; } /* globus_l_gram_remote_io_url_file_create() */ static int globus_l_gram_export_cred( globus_gram_jobmanager_request_t * request, gss_cred_id_t cred, const char * job_directory, char ** proxy_filename) { OM_uint32 major_status, minor_status; char * filename = NULL; int file; gss_buffer_desc buffer; int rc = GLOBUS_SUCCESS; char * gt3_failure_message = NULL; int save_errno; int written; if (cred == GSS_C_NO_CREDENTIAL && !request->jm_restart) { goto no_cred; } if (cred != GSS_C_NO_CREDENTIAL) { major_status = gss_export_cred( &minor_status, cred, GSS_C_NO_OID, 0, &buffer); if (GSS_ERROR(major_status)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE_USER_PROXY; (void) globus_gss_assist_display_status_str( >3_failure_message, "Export proxy failed", major_status, minor_status, 0); goto export_cred_failed; } } filename = globus_common_create_string( "%s/x509_user_proxy", job_directory); if (filename == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_filename_failed; } if (cred == GSS_C_NO_CREDENTIAL && request->jm_restart) { goto jm_restart_done; } file = open( filename, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR); if (file < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE_USER_PROXY; save_errno = errno; gt3_failure_message = globus_common_create_string( "Error opening proxy file for writing: %s: %s (%d)", filename, strerror(save_errno), save_errno); goto fopen_failed; } written = 0; do { rc = write( file, ((char *) buffer.value) + written, buffer.length - written); if (rc < 0) { save_errno = errno; rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE_USER_PROXY; gt3_failure_message = globus_common_create_string( "Error writing proxy file: %s: %s (%d)", filename, strerror(save_errno), save_errno); goto fwrite_failed; } else if (rc == 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE_USER_PROXY; gt3_failure_message = globus_common_create_string( "Error writing proxy file: %s: %s", filename, "short write"); goto fwrite_failed; } else { written += rc; } } while (written < buffer.length); rc = GLOBUS_SUCCESS; fwrite_failed: rc = close(file); if (rc != 0) { save_errno = errno; rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_CACHE_USER_PROXY; gt3_failure_message = globus_common_create_string( "Error writing proxy file: %s: %s (%d)", filename, strerror(save_errno), save_errno); } fopen_failed: if (rc != GLOBUS_SUCCESS) { free(filename); filename = NULL; } malloc_filename_failed: gss_release_buffer(&minor_status, &buffer); jm_restart_done: export_cred_failed: if (request->gt3_failure_message == NULL) { request->gt3_failure_message = gt3_failure_message; } else { free(gt3_failure_message); } no_cred: *proxy_filename = filename; return rc; } /* globus_l_gram_export_cred() */ /** * Create job directory * * The job directory is used internally by the Job Manager to store various * pieces of job-specific data: stdout, stderr, proxy, and job scripts. * * @param request * Request to process * @param job_directory * Pointer to be set to the new value of the job directory. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_ARG_FILE_CREATION_FAILED * Error creating directory. */ static int globus_l_gram_make_job_dir( globus_gram_jobmanager_request_t * request, char ** job_directory) { char * out_file = NULL; char * tmp; int rc; struct stat statbuf; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.make_job_dir.start " "level=TRACE " "gramid=%s " "\n", request->job_contact_path); out_file = globus_common_create_string( "%s/.globus/job/%s/%s", request->config->home, request->config->short_hostname, request->uniq_id); if (out_file == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.make_job_dir.end " "level=ERROR " "gramid=%s " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, -rc, "Error allocating path string", errno, strerror(errno)); goto out; } if ((rc = stat(out_file, &statbuf)) < 0) { tmp = out_file; while (tmp != NULL) { tmp = strchr(tmp+1, '/'); if (tmp != out_file) { if (tmp != NULL) { *tmp = '\0'; } if ((rc = stat(out_file, &statbuf)) < 0) { /* Path component does not exist, try to make it */ errno = 0; rc = mkdir(out_file, S_IRWXU); if (rc == -1 && errno != EEXIST) { /* Error creating directory */ if (request->gt3_failure_message == NULL) { request->gt3_failure_message = globus_common_create_string( "mkdir failed: %s: %s", out_file, strerror(errno)); } } } if ((rc = stat(out_file, &statbuf)) < 0) { int save_errno = errno; rc = GLOBUS_GRAM_PROTOCOL_ERROR_ARG_FILE_CREATION_FAILED; if (request->gt3_failure_message == NULL) { request->gt3_failure_message = globus_common_create_string( "stat failed: %s: %s", out_file, strerror(save_errno)); } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.make_job_dir.end " "level=ERROR " "gramid=%s " "status=%d " "path=%s " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, -rc, out_file, "Error creating directory", save_errno, strerror(save_errno)); goto error_exit; } if (tmp != NULL) { *tmp = '/'; } } } } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.make_job_dir.end " "level=TRACE " "gramid=%s " "status=0 " "path=%s " "\n", request->job_contact_path, out_file); error_exit: if (rc != GLOBUS_SUCCESS) { free(out_file); out_file = NULL; } out: *job_directory = out_file; return rc; } /* globus_l_gram_make_job_dir() */ static void globus_l_gram_event_destroy(void *datum) { globus_scheduler_event_destroy(datum); } /* globus_l_gram_event_destroy() */ #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_rsl.c0000644000000000000000000000013214243161125025143 xustar000000000000000030 mtime=1653400149.358970121 30 atime=1653401831.417126253 30 ctime=1653404021.241747022 globus_gram_job_manager-15.8/globus_gram_job_manager_rsl.c0000664000175000017500000010401714243161125025307 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @file globus_gram_job_manager_rsl.c * @brief Job Manager RSL Manipulations */ #include "globus_gram_job_manager.h" #include "globus_rsl_assist.h" #include /** * @defgroup globus_gram_job_manager_rsl Job Manager RSL Utilities * @ingroup globus_gram_job_manager * @brief Job Manager RSL Utilities */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /* Module Specific Prototypes */ static int globus_l_gram_job_manager_rsl_match( void * datum, void * arg); #endif /** * @brief Merge two sets of RSL relations * @ingroup globus_gram_job_manager_rsl * @details * Create a new RSL consisting of the merging of the base_rsl and override_rsl. * The result after completion is one RSL containing all of the relations * from the base_rsl and the override_rsl with any conflicting definitions * resolved by the override_rsl winning. The base_rsl and override_rsl * are unmodified in this process. */ globus_rsl_t * globus_gram_job_manager_rsl_merge( globus_rsl_t * base_rsl, globus_rsl_t * override_rsl) { globus_rsl_t * tmp; globus_list_t ** base_relations; globus_list_t * override_relations; globus_rsl_t * result; char * attribute; globus_list_t * node; globus_assert(globus_rsl_is_boolean_and(base_rsl)); globus_assert(globus_rsl_is_boolean_and(override_rsl)); result = globus_rsl_copy_recursive(base_rsl); base_relations = globus_rsl_boolean_get_operand_list_ref(result); override_relations = globus_rsl_boolean_get_operand_list(override_rsl); while(!globus_list_empty(override_relations)) { tmp = globus_list_first(override_relations); override_relations = globus_list_rest(override_relations); attribute = globus_rsl_relation_get_attribute(tmp); node = globus_list_search_pred(*base_relations, globus_l_gram_job_manager_rsl_match, attribute); if(node) { globus_rsl_free_recursive(globus_list_remove(base_relations, node)); } globus_list_insert(base_relations, globus_rsl_copy_recursive(tmp)); } return result; } /* globus_l_gram_job_manager_rsl_merge() */ /** * @brief Attribute exists in an RSL * @ingroup globus_gram_job_manager_rsl * @details * Check to see if an RSL attribute exists in the given RSL. * @param rsl * RSL parse tree to search * @param attribute * Attribute name to search for. * * @retval GLOBUS_TRUE * Attribute exists in the RSL. * @retval GLOBUS_FALSE * Attribute does not exist in the RSL. */ globus_bool_t globus_gram_job_manager_rsl_attribute_exists( globus_rsl_t * rsl, const char * attribute) { globus_list_t * attributes; attributes = globus_rsl_boolean_get_operand_list(rsl); return globus_list_search_pred( attributes, globus_l_gram_job_manager_rsl_match, (void *) attribute) ? GLOBUS_TRUE : GLOBUS_FALSE; } globus_bool_t globus_gram_job_manager_rsl_need_stage_in( globus_gram_jobmanager_request_t * request) { globus_list_t * attributes; globus_list_t * node; char * value; globus_url_t url; int i; char * can_stage[] = { GLOBUS_GRAM_PROTOCOL_STDIN_PARAM, GLOBUS_GRAM_PROTOCOL_EXECUTABLE_PARAM, NULL }; attributes = globus_rsl_boolean_get_operand_list(request->rsl); if(globus_list_search_pred(attributes, globus_l_gram_job_manager_rsl_match, GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_PARAM)) { return GLOBUS_TRUE; } else if(globus_list_search_pred( attributes, globus_l_gram_job_manager_rsl_match, GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_SHARED_PARAM)) { return GLOBUS_TRUE; } else { for(i = 0; can_stage[i] != NULL; i++) { node = globus_rsl_param_get_values( request->rsl, can_stage[i]); if(node) { value = globus_rsl_value_literal_get_string( globus_list_first(node)); if(globus_url_parse(value, &url) == 0) { if(url.scheme_type != GLOBUS_URL_SCHEME_FILE) { globus_url_destroy(&url); return GLOBUS_TRUE; } else { globus_url_destroy(&url); } } } } } return GLOBUS_FALSE; } /* globus_gram_job_manager_rsl_need_stage_in() */ globus_bool_t globus_gram_job_manager_rsl_need_stage_out( globus_gram_jobmanager_request_t * request) { globus_list_t * attributes; attributes = globus_rsl_boolean_get_operand_list(request->rsl); if(globus_list_search_pred(attributes, globus_l_gram_job_manager_rsl_match, GLOBUS_GRAM_PROTOCOL_FILE_STAGE_OUT_PARAM)) { return GLOBUS_TRUE; } else if (globus_list_search_pred( attributes, globus_l_gram_job_manager_rsl_match, "filestreamout")) { return GLOBUS_TRUE; } else { return GLOBUS_FALSE; } } /* globus_gram_job_manager_rsl_need_stage_out() */ globus_bool_t globus_gram_job_manager_rsl_need_file_cleanup( globus_gram_jobmanager_request_t * request) { globus_list_t * attributes; attributes = globus_rsl_boolean_get_operand_list(request->rsl); if(globus_list_search_pred(attributes, globus_l_gram_job_manager_rsl_match, GLOBUS_GRAM_PROTOCOL_FILE_CLEANUP_PARAM)) { return GLOBUS_TRUE; } else { return GLOBUS_FALSE; } } /* globus_gram_job_manager_rsl_need_file_cleanup() */ globus_bool_t globus_gram_job_manager_rsl_need_scratchdir( globus_gram_jobmanager_request_t * request) { globus_list_t * attributes; attributes = globus_rsl_boolean_get_operand_list(request->rsl); if(globus_list_search_pred(attributes, globus_l_gram_job_manager_rsl_match, GLOBUS_GRAM_PROTOCOL_SCRATCHDIR_PARAM)) { return GLOBUS_TRUE; } else { return GLOBUS_FALSE; } } /* globus_gram_job_manager_rsl_need_scratchdir() */ globus_bool_t globus_gram_job_manager_rsl_need_restart( globus_gram_jobmanager_request_t * request) { return globus_gram_job_manager_rsl_attribute_exists( request->rsl, GLOBUS_GRAM_PROTOCOL_RESTART_PARAM); } /* globus_gram_job_manager_rsl_need_restart() */ globus_rsl_t * globus_gram_job_manager_rsl_extract_relation( globus_rsl_t * rsl, const char * attribute) { globus_list_t ** operand_ref; globus_list_t * node; if(! globus_rsl_is_boolean_and(rsl)) { return GLOBUS_NULL; } operand_ref = globus_rsl_boolean_get_operand_list_ref(rsl); node = globus_list_search_pred(*operand_ref, globus_l_gram_job_manager_rsl_match, (void *) attribute); if(node) { globus_rsl_t * relation; relation = globus_list_remove(operand_ref, node); return relation; } return GLOBUS_NULL; } /* globus_gram_job_manager_rsl_extract_relation() */ int globus_gram_job_manager_rsl_add_relation( globus_rsl_t * rsl, globus_rsl_t * relation) { globus_list_t ** operand_ref; int rc = GLOBUS_SUCCESS; if(! globus_rsl_is_boolean_and(rsl)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto nonboolean; } operand_ref = globus_rsl_boolean_get_operand_list_ref(rsl); if (operand_ref == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto no_operands; } rc = globus_list_insert(operand_ref, relation); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto insert_failed; } insert_failed: no_operands: nonboolean: return rc; } /* globus_gram_job_manager_rsl_add_relation() */ /** * @brief Add an output attribute to an RSL * @ingroup globus_gram_job_manager_rsl * @details * This function modifies the @a rsl parameter, adding a new relation of the * form: * @a attribute = ( @a value ) * This function assumes that the specified attribute is not present in the * RSL when called. Unlike the globus_rsl library, this function copies the * @a attribute and @a value strings as needed to keep it so the RSL can * be freed by calling globus_rsl_free_recursive(). * * @param request * Job request * @param rsl * RSL to modify * @param attribute * Attribute (either stdout or stderr) * @param value * Local output path * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed */ int globus_gram_rsl_add_output( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, const char * attribute, const char * value) { globus_rsl_t * relation; char * attr_copy; char * value_copy; globus_list_t * value_list = NULL; globus_rsl_value_t * value_literal; globus_rsl_value_t * value_sequence; int rc = GLOBUS_SUCCESS; attr_copy = strdup(attribute); if (attr_copy == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto attr_copy_failed; } value_copy = strdup(value); if (value_copy == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto value_copy_failed; } value_literal = globus_rsl_value_make_literal( value_copy); if (value_literal == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto make_literal_failed; } rc = globus_list_insert(&value_list, value_literal); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto list_insert_failed; } value_sequence = globus_rsl_value_make_sequence(value_list); if (value_sequence == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto make_sequence_failed; } relation = globus_rsl_make_relation( GLOBUS_RSL_EQ, attr_copy, value_sequence); if (relation == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto make_relation_failed; } rc = globus_gram_job_manager_rsl_add_relation( request->rsl, relation); if (rc != GLOBUS_SUCCESS) { goto add_relation_failed; } if (rc != GLOBUS_SUCCESS) { add_relation_failed: make_relation_failed: globus_rsl_value_free(value_sequence); make_sequence_failed: globus_list_free(value_list); list_insert_failed: globus_rsl_value_free(value_literal); make_literal_failed: free(value_copy); value_copy_failed: free(attr_copy); attr_copy_failed: ; } return rc; } /* globus_gram_rsl_add_output() */ /** * @brief Add a stage out value to the RSL * @ingroup globus_gram_job_manager_rsl * @details * Creates a new entry in the RSL's filestreamout value list for the * given (@a source, @a destination) pair. If the RSL does not contain * filestageout, it is added; otherwise, the new pair is prepended to the * existing list. * * @param request * Job request * @param rsl * RSL to modify * @param source * Source URL * @param destination * Destination URL * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed */ int globus_gram_rsl_add_stream_out( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, const char * source, const char * destination) { globus_list_t ** operand_ref; globus_list_t * node; char * attr_copy; char * source_copy; char * dest_copy; int rc = GLOBUS_SUCCESS; globus_rsl_t * relation; globus_rsl_value_t * value_sequence; globus_rsl_value_t * source_literal; globus_rsl_value_t * dest_literal; globus_list_t * file_stage_out_pair; globus_list_t ** file_stage_out_pair_end; globus_rsl_value_t * new_stage_sequence; operand_ref = globus_rsl_boolean_get_operand_list_ref(rsl); node = globus_list_search_pred( *operand_ref, globus_l_gram_job_manager_rsl_match, (void *) "filestreamout"); if (!node) { /* No file_stage_out in RSL, add a new empty one */ attr_copy = strdup("filestreamout"); if (attr_copy == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto attr_copy_failed; } value_sequence = globus_rsl_value_make_sequence(NULL); if (value_sequence == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto make_value_sequence_failed; } relation = globus_rsl_make_relation( GLOBUS_RSL_EQ, attr_copy, value_sequence); if (relation == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto make_value_relation_failed; } rc = globus_list_insert(operand_ref, relation); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto filestageout_insert_failed; } if (rc != GLOBUS_SUCCESS) { filestageout_insert_failed: globus_rsl_free(relation); make_value_relation_failed: globus_rsl_value_free(value_sequence); make_value_sequence_failed: free(attr_copy); attr_copy_failed: goto bad_relation; } } else { /* Adding new value to existing filestageout */ relation = globus_list_first(node); } /* * Now we're going to create a value sequence to append to the relation's * value sequence */ source_copy = strdup(source); if (source_copy == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto source_copy_failed; } dest_copy = strdup(destination); if (dest_copy == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto dest_copy_failed; } source_literal = globus_rsl_value_make_literal(source_copy); if (source_literal == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto source_literal_failed; } dest_literal = globus_rsl_value_make_literal(dest_copy); if (dest_literal == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto dest_literal_failed; } file_stage_out_pair = NULL; file_stage_out_pair_end = &file_stage_out_pair; rc = globus_list_insert( file_stage_out_pair_end, source_literal); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto add_source_literal_failed; } file_stage_out_pair_end = globus_list_rest_ref(*file_stage_out_pair_end); rc = globus_list_insert( file_stage_out_pair_end, dest_literal); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto add_dest_literal_failed; } new_stage_sequence = globus_rsl_value_make_sequence(file_stage_out_pair); if (new_stage_sequence == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto make_new_stage_sequence_failed; } rc = globus_list_insert( globus_rsl_value_sequence_get_list_ref( globus_rsl_relation_get_value_sequence(relation)), new_stage_sequence); if (rc != GLOBUS_SUCCESS) { goto insert_new_stage_sequence_failed; } if (rc != GLOBUS_SUCCESS) { insert_new_stage_sequence_failed: globus_rsl_value_free(new_stage_sequence); make_new_stage_sequence_failed: add_dest_literal_failed: globus_list_free(file_stage_out_pair); add_source_literal_failed: globus_rsl_value_free(dest_literal); dest_literal_failed: globus_rsl_value_free(source_literal); source_literal_failed: free(dest_copy); dest_copy_failed: free(source_copy); } source_copy_failed: bad_relation: return rc; } /* globus_gram_rsl_add_stream_out() */ /** * @brief Add an environment variable to the job RSL * @ingroup globus_gram_job_manager_rsl * @details * This function adds a single environment variable to the job RSL. If * there is no environment relation in the RSL, then one is added. Both * the variable name and value are copied into the RSL, so the original * values passed in may be static strings or pointers to data which is * freed or overwritten once this function returns. * * @param ast_node * A pointer to the RSL tree to update. This should point to the * root of the rsl tree (the boolean &) on the invocation of the * function, but will point to various relations in the RSL as * it calls itself recursively. * @param var * A pointer to a string containing the variable to be added to * the RSL. No checking is done to see if this environment variable * is already defined in the RSL. This will be duplicated and inserted * into the RSL. * @param value * The value of the environment variable named @a var. This will * be duplicated and inserted into the RSL. * * @retval 0 * The environment variable was added to the RSL. * @retval 1 * The @a ast_node points to a relation other than an environment * relation * @retval 2 * The @a ast_node points to some unexpected part of the RSL. * * @todo Remove old values of @a var if it is already in the RSL's * environment attribute's value. */ int globus_gram_job_manager_rsl_env_add( globus_rsl_t * ast_node, const char * var, const char * value) { globus_rsl_t * tmp_rsl_ptr; globus_list_t * tmp_rsl_list; globus_list_t * new_list; char * tmp_rsl_str; int rc; if (globus_rsl_is_boolean(ast_node)) { tmp_rsl_list = globus_rsl_boolean_get_operand_list(ast_node); while (! globus_list_empty(tmp_rsl_list)) { tmp_rsl_ptr = (globus_rsl_t *) globus_list_first (tmp_rsl_list); rc = globus_gram_job_manager_rsl_env_add( tmp_rsl_ptr, var, value); if(rc == 0) { return rc; } tmp_rsl_list = globus_list_rest(tmp_rsl_list); } /* Didn't find environment in the RSL: add it! */ tmp_rsl_str = malloc( strlen("environment = (%s %s)") + strlen(var) + strlen(value)); sprintf(tmp_rsl_str, "environment = (%s %s)", var, value); tmp_rsl_ptr = globus_rsl_parse(tmp_rsl_str); free(tmp_rsl_str); globus_list_insert( globus_rsl_boolean_get_operand_list_ref(ast_node), tmp_rsl_ptr); return 0; } else if (globus_rsl_is_relation(ast_node)) { if (!globus_rsl_is_relation_attribute_equal(ast_node, "environment")) { return(1); } new_list = NULL; globus_list_insert(&new_list, (void *) globus_rsl_value_make_literal(strdup(value))); globus_list_insert(&new_list, (void *) globus_rsl_value_make_literal(strdup(var))); globus_list_insert( globus_rsl_value_sequence_get_list_ref( globus_rsl_relation_get_value_sequence(ast_node)), (void *) globus_rsl_value_make_sequence(new_list)); return(0); } else { return(2); } } /* globus_gram_job_manager_rsl_env_add() */ /** * @brief Remove an RSL attribute * @ingroup globus_gram_job_manager_rsl * @details * Remove an RSL attribute from and RSL tree. * @param rsl * The RSL parse tree to modify * @param attribute * The name of the attribute to remove from the RSL. The * attribute and it's values will be freed. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL * Bad RSL */ int globus_gram_job_manager_rsl_remove_attribute( globus_rsl_t * rsl, char * attribute) { globus_list_t ** operand_ref; globus_list_t * node; if(! globus_rsl_is_boolean_and(rsl)) { return GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; } operand_ref = globus_rsl_boolean_get_operand_list_ref(rsl); node = globus_list_search_pred(*operand_ref, globus_l_gram_job_manager_rsl_match, attribute); if(node) { globus_rsl_free_recursive(globus_list_remove(operand_ref, node)); } return GLOBUS_SUCCESS; } /* globus_gram_job_manager_rsl_remove_attribute() */ /** * Evaluate RSL substitutions for a single RSL attribute * * Evaluates the value of the named RSL attribute. If it is present, and * the evaluation succeeds, then the @a value parameter is modified to * contain a copy of the newly-evaluated value of the attribute. * * @param request * The request containing the RSL tree to evaluate. * @param attribute * The name of the attribute to evaluate. * @param value * A pointer to a char * which will be filled with a copy * of the evaluated value of the RSL attribute. If the attribute * is not found, or an error occurs, this will be set to NULL. * * @retval GLOBUS_SUCCESS * The RSL attribute is present and has evaluated successfully. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL * The RSL is not a boolean tree containing attributes. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_EVALUATION_FAILED * The RSL attribute is present but some RSL substitution * could not be evaluated for that attribute. */ int globus_gram_job_manager_rsl_eval_one_attribute( globus_gram_jobmanager_request_t * request, char * attribute, char ** value) { globus_list_t * attributes; globus_list_t * node; globus_rsl_t * attribute_rsl = GLOBUS_NULL; char * single_value; int rc = GLOBUS_SUCCESS; *value = GLOBUS_NULL; attributes = globus_rsl_boolean_get_operand_list(request->rsl); if (attributes == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto bad_operand_list; } node = globus_list_search_pred( attributes, globus_l_gram_job_manager_rsl_match, attribute); if (!node) { goto no_match; } attribute_rsl = globus_list_first(node); if (!attribute_rsl) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto no_attribute; } rc = globus_rsl_eval(attribute_rsl, &request->symbol_table); if(rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED; goto rsl_eval_failed; } single_value = globus_rsl_value_literal_get_string( globus_rsl_relation_get_single_value( attribute_rsl)); if (single_value) { *value = strdup(single_value); if (*value == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto value_strdup_failed; } } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; } value_strdup_failed: rsl_eval_failed: no_attribute: no_match: bad_operand_list: return rc; } /* globus_gram_job_manager_eval_one_attribute() */ int globus_gram_job_manager_rsl_parse_value( char * value_string, globus_rsl_value_t ** rsl_value) { char * rsl_spec = NULL; char * format = "x = %s\n"; globus_rsl_t * rsl; globus_rsl_value_t * values; int rc = GLOBUS_SUCCESS; rsl_spec = malloc(strlen(format) + strlen(value_string) + 1); if (rsl_spec == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } sprintf(rsl_spec, format, value_string); rsl = globus_rsl_parse(rsl_spec); if (rsl == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto free_rsl_spec_out; } values = globus_list_first( globus_rsl_value_sequence_get_value_list( globus_rsl_relation_get_value_sequence(rsl))); if (values == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto free_rsl_out; } *rsl_value = globus_rsl_value_copy_recursive(values); if (*rsl_value == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto free_rsl_out; } free_rsl_out: globus_rsl_free_recursive(rsl); free_rsl_spec_out: free(rsl_spec); out: return rc; } /* globus_gram_job_manager_rsl_parse_value() */ int globus_gram_job_manager_rsl_evaluate_value( globus_symboltable_t * symbol_table, globus_rsl_value_t * value, char ** value_string) { globus_rsl_value_t * copy; int rc = GLOBUS_SUCCESS; *value_string = NULL; copy = globus_rsl_value_copy_recursive(value); if (copy == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } if(globus_rsl_value_is_literal(copy)) { *value_string = strdup(globus_rsl_value_literal_get_string(copy)); if (*value_string == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto free_copy_out; } } else { rc = globus_rsl_value_eval( copy, symbol_table, value_string, 0); } free_copy_out: globus_rsl_value_free_recursive(copy); out: return rc; } /* globus_gram_job_manager_rsl_evaluate_value() */ int globus_gram_job_manager_rsl_eval_string( globus_symboltable_t * symbol_table, const char * string, char ** value_string) { globus_rsl_value_t * value; int rc; *value_string = NULL; rc = globus_gram_job_manager_rsl_parse_value( (char *) string, &value); if(rc != GLOBUS_SUCCESS) { goto parse_failed; } rc = globus_gram_job_manager_rsl_evaluate_value( symbol_table, value, value_string); if(rc != GLOBUS_SUCCESS || (*value_string) == NULL) { goto eval_failed; } eval_failed: globus_rsl_value_free_recursive(value); parse_failed: return rc; } /* globus_gram_job_manager_rsl_eval_string() */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL static int globus_l_gram_job_manager_rsl_match( void * datum, void * arg) { globus_rsl_t * relation = datum; char * attribute = arg; char * test; if(!globus_rsl_is_relation(relation)) { return GLOBUS_FALSE; } test = globus_rsl_relation_get_attribute(relation); return (strcmp(test, attribute)==0); } /* globus_l_gram_job_manager_rsl_match() */ #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ /** * Search the RSL tree for an attribute and return its single value * * @param rsl * RSL tree to search * @param attribute * Attribute name to search for * @param value_ptr * Pointer to set to the value of this attribute. Must not be freed * by the caller. Will be set to NULL if the attribute is not present or * does not have a literal string value. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE * Attribute not found. */ int globus_gram_job_manager_rsl_attribute_get_string_value( globus_rsl_t * rsl, const char * attribute, const char ** value_ptr) { globus_list_t * attributes; globus_list_t * node; int rc = GLOBUS_SUCCESS; attributes = globus_rsl_boolean_get_operand_list(rsl); node = globus_list_search_pred( attributes, globus_l_gram_job_manager_rsl_match, (void *) attribute); if (node == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE; goto search_failed; } *value_ptr = globus_rsl_value_literal_get_string( globus_rsl_relation_get_single_value( globus_list_first(node))); search_failed: if (rc != GLOBUS_SUCCESS) { *value_ptr = NULL; } return rc; } /* globus_gram_job_manager_rsl_attribute_get_string_value() */ /** * Search the RSL tree for an attribute and return its boolean value * * @param rsl * RSL tree to search * @param attribute * Attribute name to search for * @param value_ptr * Pointer to set to the value of this attribute. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE; * Attribute not found. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL * Value is non-literal or has a non-boolean value. */ int globus_gram_job_manager_rsl_attribute_get_boolean_value( globus_rsl_t * rsl, const char * attribute, globus_bool_t * value_ptr) { const char * s; int rc = GLOBUS_SUCCESS; rc = globus_gram_job_manager_rsl_attribute_get_string_value( rsl, attribute, &s); if (rc != GLOBUS_SUCCESS) { goto get_literal_failed; } if (s && strcmp(s, "yes") == 0) { *value_ptr = GLOBUS_TRUE; } else if (s && strcmp(s, "no") == 0) { *value_ptr = GLOBUS_FALSE; } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; get_literal_failed: *value_ptr = GLOBUS_FALSE; } return rc; } /* globus_gram_job_manager_rsl_attribute_get_boolean_value() */ /** * Search the RSL tree for an attribute and return its integer value * * @param rsl * RSL tree to search * @param attribute * Attribute name to search for * @param value_ptr * Pointer to set to the value of this attribute. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE; * Attribute not found. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL * Value is non-literal or has a non-int value. */ int globus_gram_job_manager_rsl_attribute_get_int_value( globus_rsl_t * rsl, const char * attribute, int * value_ptr) { const char * s; char * end; int rc = GLOBUS_SUCCESS; rc = globus_gram_job_manager_rsl_attribute_get_string_value( rsl, attribute, &s); if (rc != GLOBUS_SUCCESS) { goto get_literal_failed; } else if (s == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; goto get_literal_failed; } errno = 0; *value_ptr = strtol(s, &end, 10); if (errno != 0 || strlen(end) != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; get_literal_failed: *value_ptr = 0; } return rc; } /* globus_gram_job_manager_rsl_attribute_get_int_value() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_script.c0000644000000000000000000000013214243161125025647 xustar000000000000000030 mtime=1653400149.358970121 30 atime=1653401831.438126055 30 ctime=1653404021.243747003 globus_gram_job_manager-15.8/globus_gram_job_manager_script.c0000664000175000017500000026362314243161125026024 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_job_manager.h" #include #include #include #include #include #include static const char * GLOBUS_GRAM_SCRIPT_NO_CLIENT = "noclient"; globus_xio_driver_t globus_i_gram_job_manager_popen_driver; globus_xio_stack_t globus_i_gram_job_manager_popen_stack; static uint64_t globus_l_gram_next_script_sequence = 0; typedef struct globus_gram_script_handle_s { globus_gram_job_manager_t * manager; globus_gram_job_manager_scripts_t * scripts; globus_xio_handle_t handle; globus_byte_t return_buf[GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE]; size_t return_buf_offset; globus_result_t result; int pending_ops; time_t last_use; } *globus_gram_script_handle_t; int globus_gram_job_manager_script_handle_init( globus_gram_job_manager_t * manager, globus_gram_job_manager_scripts_t * scripts, globus_gram_script_handle_t * handle); static int globus_l_gram_enqueue_description( globus_fifo_t * fifo, globus_gram_jobmanager_request_t * request, va_list ap); static int globus_l_gram_enqueue_string( globus_fifo_t * fifo, const char * format, ...); static int globus_l_gram_fifo_to_iovec( globus_fifo_t * fifo, struct iovec ** iovec, int * num_iovec); /* Module Specific Types */ typedef void (*globus_gram_job_manager_script_callback_t)( void * arg, globus_gram_jobmanager_request_t * request, int failure_code, int starting_state, const char * variable, const char * value); typedef struct { globus_gram_job_manager_script_callback_t callback; void * callback_arg; globus_gram_jobmanager_request_t * request; int starting_jobmanager_state; struct iovec * iov; int iovcnt; globus_gram_script_handle_t handle; globus_gram_script_priority_t priority; } globus_gram_job_manager_script_context_t; /* Module Specific Prototypes */ static void globus_l_gram_job_manager_script_read( globus_xio_handle_t handle, globus_result_t result, globus_byte_t * buffer, globus_size_t len, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void * user_arg); static void globus_l_gram_job_manager_default_done( void * arg, globus_gram_jobmanager_request_t * request, int failure_code, int starting_state, const char * variable, const char * value); static void globus_l_gram_job_manager_query_done( void * arg, globus_gram_jobmanager_request_t * request, int failure_code, int starting_jobmanager_state, const char * variable, const char * value); static int globus_l_gram_request_validate( globus_gram_jobmanager_request_t * request); static char * globus_l_gram_job_manager_script_prepare_param( const char * param); static int globus_l_gram_enqueue_staging_list( globus_gram_jobmanager_request_t * request, globus_fifo_t * fifo, globus_gram_job_manager_staging_type_t type); static void globus_l_gram_job_manager_script_staged_done( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_staging_type_t type, const char * value); static int globus_l_gram_script_queue( globus_gram_job_manager_t * manager, globus_gram_job_manager_script_context_t * context); static void globus_l_gram_process_script_queue_locked( globus_gram_job_manager_t * manager, globus_gram_job_manager_scripts_t * scripts); static void globus_l_gram_job_manager_script_done( globus_gram_job_manager_t * manager, globus_gram_job_manager_scripts_t * scripts, globus_gram_script_handle_t handle); static void globus_l_script_close_callback( globus_xio_handle_t handle, globus_result_t result, void * user_arg); static void globus_l_script_writev_callback( globus_xio_handle_t handle, globus_result_t result, globus_xio_iovec_t * iovec, int count, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void * user_arg); static void globus_l_gram_script_open_callback( globus_xio_handle_t handle, globus_result_t result, void * user_arg); static int globus_l_gram_script_register_read_and_write( globus_gram_job_manager_script_context_t * script_context); static int globus_l_gram_script_priority_cmp( void * priority_1, void * priority_2); static int globus_l_match_script_client_addr( void * datum, void * arg); /** * Begin execution of a job manager script */ static int globus_l_gram_job_manager_script_run( globus_gram_jobmanager_request_t * request, const char * script_cmd, globus_gram_job_manager_script_callback_t callback, void * callback_arg, ...) { globus_gram_job_manager_script_context_t * script_context; int rc; globus_fifo_t fifo; va_list ap; rc = globus_fifo_init(&fifo); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto fifo_init_failed; } rc = globus_l_gram_enqueue_string(&fifo, "%s\n", script_cmd); if (rc != GLOBUS_SUCCESS) { goto enqueue_cmd_failed; } va_start(ap, callback_arg); rc = globus_l_gram_enqueue_description( &fifo, request, ap); va_end(ap); if (rc != GLOBUS_SUCCESS) { goto enqueue_description_failed; } rc = globus_l_gram_enqueue_string(&fifo, "\n"); if (rc != GLOBUS_SUCCESS) { goto enqueue_end_of_cmd_failed; } script_context = malloc( sizeof(globus_gram_job_manager_script_context_t)); if (script_context == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto script_context_malloc_failed; } rc = globus_gram_job_manager_add_reference( request->manager, request->job_contact_path, "script", NULL); globus_assert(rc == GLOBUS_SUCCESS); script_context->callback = callback; script_context->callback_arg = callback_arg; script_context->request = request; script_context->starting_jobmanager_state = request->jobmanager_state; if (strcmp(script_cmd, "poll") == 0) { script_context->priority.priority_level = GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_POLL; } else if (strcmp(script_cmd, "cancel") == 0) { script_context->priority.priority_level = GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_CANCEL; } else if (strcmp(script_cmd, "submit") == 0) { script_context->priority.priority_level = GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_SUBMIT; } else if (strcmp(script_cmd, "stage_out") == 0) { script_context->priority.priority_level = GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_STAGE_OUT; } else if (strcmp(script_cmd, "stage_in") == 0) { script_context->priority.priority_level = GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_STAGE_IN; } else if (strcmp(script_cmd, "signal") == 0) { script_context->priority.priority_level = GLOBUS_GRAM_SCRIPT_PRIORITY_LEVEL_SIGNAL; } rc = globus_l_gram_fifo_to_iovec( &fifo, &script_context->iov, &script_context->iovcnt); rc = globus_l_gram_script_queue( request->manager, script_context); if (rc != GLOBUS_SUCCESS) { goto queue_failed; } if (rc != GLOBUS_SUCCESS) { queue_failed: globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "script"); free(script_context); } script_context_malloc_failed: enqueue_end_of_cmd_failed: enqueue_description_failed: enqueue_cmd_failed: if (rc != GLOBUS_SUCCESS) { globus_fifo_destroy_all(&fifo, free); } else { globus_fifo_destroy(&fifo); } fifo_init_failed: return rc; } /* globus_l_gram_job_manager_script_run() */ static void globus_l_gram_job_manager_script_read( globus_xio_handle_t handle, globus_result_t result, globus_byte_t * buffer, globus_size_t len, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void * user_arg) { globus_gram_jobmanager_request_t * request; globus_gram_job_manager_script_context_t * script_context; globus_gram_script_handle_t script_handle; char * script_variable; char * script_variable_end; unsigned char * script_value; globus_bool_t eof = GLOBUS_FALSE; char * p; int failure_code = 0; int i; globus_gram_job_manager_scripts_t * scripts; script_context = user_arg; request = script_context->request; script_handle = script_context->handle; script_handle->return_buf_offset += nbytes; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.script_read.start " "level=DEBUG " "gramid=%s " "result=%d " "nbytes=%d " "\n", request->job_contact_path, result, (int) nbytes); if ((script_handle->return_buf_offset == sizeof(script_handle->return_buf)) && (memchr(script_handle->return_buf, '\n', script_handle->return_buf_offset) == NULL)) { result = GLOBUS_FAILURE; failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.script_read.end " "level=ERROR " "gramid=%s " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, (int) -failure_code, "script response doesn't contain newline"); eof = GLOBUS_TRUE; script_handle->result = GLOBUS_FAILURE; } else if (result) { eof = GLOBUS_TRUE; if (!globus_xio_error_is_eof(result)) { char * errstr; char * errstr_escaped; errstr = globus_error_print_friendly(globus_error_peek(result)); errstr_escaped = globus_gram_prepare_log_string(errstr); failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.script_read.end " "level=ERROR " "gramid=%s " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, (int) -failure_code, errstr_escaped ? errstr_escaped : ""); if (errstr) { free(errstr); } if (errstr_escaped) { free(errstr_escaped); } } script_handle->result = result; } while((p = memchr(script_handle->return_buf, '\n', script_handle->return_buf_offset)) != NULL) { char * escaped; size_t newline_offset; *p = '\0'; newline_offset = p - (char *) &script_handle->return_buf[0]; if (request->job_log_level & GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE) { escaped = globus_gram_prepare_log_string( (char *) &script_handle->return_buf[0]); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.script_read.info " "level=TRACE " "gramid=%s " "response=\"%s\" " "\n", request->job_contact_path, escaped ? escaped : ""); if (escaped) { free(escaped); } } script_variable = (char *) script_handle->return_buf; if (*script_variable == 0) { /* End of input */ eof = GLOBUS_TRUE; script_handle->return_buf_offset -= newline_offset + 1; break; } while(*script_variable && isspace(*script_variable)) { script_variable++; } script_variable_end = script_variable; while(*script_variable_end && *script_variable_end != ':') { script_variable_end++; } *script_variable_end = '\0'; script_value = (unsigned char *) script_variable_end+1; script_context->callback( script_context->callback_arg, request, failure_code, script_context->starting_jobmanager_state, script_variable, (char *) script_value); /* * We need to log the batch job ID to the accounting file. */ if(strcmp(script_variable, "GRAM_SCRIPT_JOB_ID") == 0) { const char * gk_jm_id_var = "GATEKEEPER_JM_ID"; const char * gk_jm_id = getenv(gk_jm_id_var); const char * gk_peer = getenv("GATEKEEPER_PEER"); const char * globus_id = getenv("GLOBUS_ID"); uid_t uid = getuid(); gid_t gid = getgid(); const char *user = request->config->logname; globus_gram_job_manager_request_acct( request, "%s %s for %s on %s\n", gk_jm_id_var, gk_jm_id ? gk_jm_id : "none", globus_id ? globus_id : "unknown", gk_peer ? gk_peer : "unknown"); globus_gram_job_manager_request_acct( request, "%s %s mapped to %s (%u, %u)\n", gk_jm_id_var, gk_jm_id ? gk_jm_id : "none", user, uid, gid); globus_gram_job_manager_request_acct( request, "%s %s has %s %s manager type %s\n", gk_jm_id_var, gk_jm_id ? gk_jm_id : "none", script_variable, script_value, request->config->jobmanager_type); } if(script_handle->return_buf_offset > newline_offset) { memmove(&script_handle->return_buf[0], &script_handle->return_buf[newline_offset+1], script_handle->return_buf_offset - newline_offset - 1); script_handle->return_buf_offset -= newline_offset + 1; } else { script_handle->return_buf[0] = '\0'; script_handle->return_buf_offset = 0; } } if(! eof) { if (sizeof(script_handle->return_buf) > script_handle->return_buf_offset) { globus_gram_job_manager_request_log( script_context->request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.script_read.info " "level=TRACE " "message=\"registering read\" " "return_buf_offset=%d " "read_len=%d " "\n", (int) script_handle->return_buf_offset, (int) (sizeof(script_handle->return_buf) - script_handle->return_buf_offset), p); result = globus_xio_register_read( script_handle->handle, &script_handle->return_buf[script_handle->return_buf_offset], sizeof(script_handle->return_buf) - script_handle->return_buf_offset, 1, NULL, globus_l_gram_job_manager_script_read, script_context); if(result == GLOBUS_SUCCESS) { /* New callback registered successfully */ return; } } else { result = GLOBUS_FAILURE; } { char * errstr; char * errstr_escaped; errstr = globus_error_print_friendly(globus_error_peek(result)); errstr_escaped = globus_gram_prepare_log_string(errstr); failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; globus_gram_job_manager_request_log( script_context->request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.script_read.end " "level=ERROR " "gramid=%s " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, -failure_code, errstr_escaped ? errstr_escaped : ""); if (errstr) { free(errstr); } if (errstr_escaped) { free(errstr_escaped); } } } script_handle = script_context->handle; GlobusGramJobManagerLock(request->manager); script_handle->pending_ops--; scripts = globus_list_first( globus_list_search_pred( request->manager->scripts_per_client, globus_l_match_script_client_addr, request->job_stats.client_address ? request->job_stats.client_address : (void *) GLOBUS_GRAM_SCRIPT_NO_CLIENT)); globus_l_gram_job_manager_script_done(request->manager, scripts, script_handle); GlobusGramJobManagerUnlock(request->manager); script_context->callback( script_context->callback_arg, request, (result == GLOBUS_SUCCESS) ? GLOBUS_SUCCESS : GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS, script_context->starting_jobmanager_state, NULL, NULL); if (result == GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( script_context->request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.script_read.end " "level=TRACE " "gramid=%s " "status=%d " "\n", request->job_contact_path, 0); } globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "script"); for (i = 0; i < script_context->iovcnt; i++) { free(script_context->iov[i].iov_base); } free(script_context->iov); free(script_context); } /* globus_l_gram_job_manager_script_read() */ /** * Submit a job request to a local scheduler. * * This function submits the passed job request to the local scheduler * script. * * @param request * The request containing the job description and related information. * * @return * This function returns GLOBUS_SUCCESS or a failure code if the * job could not be submitted. If successful, this function will call * into the state machine once the job submission result has happened. */ int globus_gram_job_manager_script_submit( globus_gram_jobmanager_request_t * request) { char * script_cmd = "submit"; int rc; rc = globus_l_gram_request_validate(request); if (rc != GLOBUS_SUCCESS) { return rc; } /* * used to test job manager functionality without actually submitting * job */ if (request->dry_run) { return GLOBUS_GRAM_PROTOCOL_ERROR_DRYRUN; } if (request->config->seg_module && strcmp(request->config->seg_module, "condor") == 0) { rc = globus_l_gram_job_manager_script_run( request, script_cmd, globus_l_gram_job_manager_default_done, NULL, "emitcondorprocesses", 'd', 1, NULL); } else if (request->config->seg_module && strcmp(request->config->seg_module, "fork") == 0) { rc = globus_l_gram_job_manager_script_run( request, script_cmd, globus_l_gram_job_manager_default_done, NULL, "useforkstarter", 'd', 1, NULL); } else { rc = globus_l_gram_job_manager_script_run( request, script_cmd, globus_l_gram_job_manager_default_done, NULL, NULL); } return rc; } /* globus_gram_job_manager_script_submit() */ /** * Set job request status and fire callback so it registers */ static int local_globus_set_status( globus_gram_jobmanager_request_t * request, globus_gram_protocol_job_state_t status) { globus_reltime_t delay; int rc; if(request->status != status) { globus_gram_job_manager_request_set_status(request, status); request->unsent_status_change = GLOBUS_TRUE; } GlobusTimeReltimeSet(delay, 0, 0); rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay); return rc; } /* local_globus_set_status() */ /** * Modified job_contact in place to remove the port. */ static void job_contact_strip_port( char * job_contact) { char * first_end; char * second_begin; if( job_contact == 0 ) return; first_end = strrchr( job_contact, ':' ); if( first_end == 0 ) /* malformed job_contact? */ return; second_begin = strchr( first_end, '/' ); if( second_begin == 0 ) /* malformed job_contact? */ return; memmove(first_end, second_begin, strlen(second_begin) + 1); } /** * Try to poll status of job request using Condor grid_manager_monitor_agent * * If the Condor grid_manager_monitor_agent is running on the machine, this * function retrieve job request status using that, otherwise it fails. * Expected to be called exclusively from globus_gram_job_manager_script_poll. */ int globus_gram_job_manager_script_poll_fast( globus_gram_jobmanager_request_t * request) { int i; char * grid_monitor_output = 0; char * grid_monitor_files[3] = { NULL, NULL, NULL }; /* Path is $GLOBUS_LOCATION/GRID_MONITOR_LOCATION$UID */ const char * GRID_MONITOR_LOCATION_1 = "/tmp/grid_manager_monitor_agent_log."; const char * GRID_MONITOR_LOCATION_2 = "/tmp/gram_job_state/grid_manager_monitor_agent_log."; const char * WHITESPACE = " \t"; uid_t this_uid = geteuid(); struct stat stat_results; FILE * grid_monitor_file = 0; int rc; time_t MAX_MONITOR_FILE_AGE = (60*5); /* seconds */ char line[1024]; char line_job_contact[1024]; int return_val = GLOBUS_FAILURE; time_t status_file_last_update = 0; char * job_contact_match = 0; if( ! request || !request->job_contact) { goto FAST_POLL_EXIT_FAILURE; } if(this_uid > 999999) { /* UIDs this large are unlikely, but if they occur the buffer * isn't large enough to handle it */ goto FAST_POLL_EXIT_FAILURE; } /* The grid monitor's job status file can be in one of two places. * We want to check both. */ grid_monitor_files[0] = globus_common_create_string( "%s%s%d", request->config->globus_location ? request->config->globus_location : "", GRID_MONITOR_LOCATION_1, (int)this_uid); if( ! grid_monitor_files[0]) { goto FAST_POLL_EXIT_FAILURE; } grid_monitor_files[1] = globus_common_create_string( "%s%s%d", request->config->globus_location ? request->config->globus_location : "", GRID_MONITOR_LOCATION_2, (int)this_uid); if( ! grid_monitor_files[1]) { goto FAST_POLL_EXIT_FAILURE; } for ( i = 0; grid_monitor_files[i]; i++ ) { grid_monitor_output = grid_monitor_files[i]; grid_monitor_file = fopen(grid_monitor_output, "r"); if( ! grid_monitor_file ) { /* No monitor file? That's acceptable, silently fail */ continue; } rc = stat(grid_monitor_output, &stat_results); if( rc != 0 ) { fclose(grid_monitor_file); grid_monitor_file = NULL; continue; } if(stat_results.st_uid != this_uid || !S_ISREG(stat_results.st_mode)) { fclose(grid_monitor_file); grid_monitor_file = NULL; continue; } if( (stat_results.st_mtime + MAX_MONITOR_FILE_AGE) < time(NULL) ) { fclose(grid_monitor_file); grid_monitor_file = NULL; continue; } break; } if ( grid_monitor_file == NULL ) { goto FAST_POLL_EXIT_FAILURE; } /* If we got this far, we've decided we trust the file */ /* Read the first line, which is two timestamps as seconds since epoch. * The first one is start time of last query pass, the second is finish. */ if( ! fgets(line, sizeof(line), grid_monitor_file) ) { goto FAST_POLL_EXIT_FAILURE; } if( ! feof(grid_monitor_file) && line[strlen(line) - 1] != '\n') { goto FAST_POLL_EXIT_FAILURE; } status_file_last_update = atoi(line); if(status_file_last_update < request->status_update_time) { /* We somehow got a status update more recent than the status file. * Most likely we successfully executed a traditional poll faster than * the status script processed things. This status file is fresh * enough, so we should switch over to using that, we want to avoid * firing off a traditional poll. So, leave the existing status in * place and report a successful poll. */ local_globus_set_status(request, request->status); return_val = GLOBUS_SUCCESS; goto FAST_POLL_EXIT; } job_contact_match = malloc(strlen(request->job_contact) + 1); strcpy(job_contact_match, request->job_contact); job_contact_strip_port(job_contact_match); /* TODO: First pass. Improve with binary search of file to make * scanning large files fast. Still this is probably plenty fast * enough for fairly large runs. */ while( 1 ) { size_t len = 0; char * line_bit = line; int new_status = 0; if( ! fgets(line, sizeof(line), grid_monitor_file) ) { /* end of file (or error), job isn't in file. It might just not * have been noticed yet. Silently skip */ goto FAST_POLL_EXIT_FAILURE; } if( ! feof(grid_monitor_file) && line[strlen(line) - 1] != '\n') { goto FAST_POLL_EXIT_FAILURE; } len = strcspn(line_bit, WHITESPACE); if(len == 0) { goto FAST_POLL_EXIT_FAILURE; } /* So long as sizeof(line_job_contact) == sizeof(line), * this is safe */ memcpy(line_job_contact, line, len); line_job_contact[len] = 0; job_contact_strip_port(line_job_contact); if( strcmp(line_job_contact, job_contact_match) != 0 ) { continue; } line_bit += len; len = strspn(line_bit, WHITESPACE); if(len == 0) { goto FAST_POLL_EXIT_FAILURE; } line_bit += len; /* Found exact match, read status */ len = strspn(line_bit, "0123456789"); if(len == 0) { /* No digits!? */ goto FAST_POLL_EXIT_FAILURE; } new_status = atoi(line_bit); if ( new_status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED ) { /* Condor's grid monitor doesn't report the GRAM failure code * that usually accompanies a FAILED status. Let's call the * poll function ourselves to get that status. */ globus_gram_job_manager_request_log(request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "JMI: poll_fast: Monitoring file reports FAILED, " "Reverting to normal polling to get failure code.\n"); goto FAST_POLL_EXIT_FAILURE; } local_globus_set_status(request, new_status); return_val = GLOBUS_SUCCESS; goto FAST_POLL_EXIT; } FAST_POLL_EXIT_FAILURE: return_val = GLOBUS_FAILURE; FAST_POLL_EXIT: if(grid_monitor_file) fclose(grid_monitor_file); for ( i = 0; grid_monitor_files[i]; i++ ) { free(grid_monitor_files[i]); } if( job_contact_match ) free(job_contact_match); return return_val; } /* globus_gram_job_manager_script_poll_fast() */ /** * Poll the status of a job request. * * This function invokes a scheduler-specific program to determine * the current status of the job request. The job status field of * the requst structure will be updated with the new status. * * @param request * The request containing the job description. * @return GLOBUS_GRAM_JOBMANAGER_STATUS_UNCHANGED or * GLOBUS_GRAM_JOBMANAGER_STATUS_CHANGED depending whether the job status * is the same as the result from the value of request's status field. This * field will be updated if the job's status has changed. */ int globus_gram_job_manager_script_poll( globus_gram_jobmanager_request_t * request) { char * script_cmd = "poll"; int rc; rc = globus_l_gram_request_validate(request); if (rc != GLOBUS_SUCCESS) { return rc; } /* Keep the state file's timestamp up to date so that * anything scrubbing the state files of old and dead * processes leaves it alone */ if(request->job_state_file) { utime(request->job_state_file, NULL); } if( globus_gram_job_manager_script_poll_fast(request) == GLOBUS_SUCCESS ) { return(GLOBUS_SUCCESS); } rc = globus_l_gram_job_manager_script_run( request, script_cmd, globus_l_gram_job_manager_default_done, NULL, NULL); if (rc != GLOBUS_SUCCESS) { return rc; } return(GLOBUS_SUCCESS); } /* globus_gram_job_manager_script_poll() */ /** * Cancel a GRAM job. * * This function invokes a scheduler-specific program which cancels the * job. * * @param request * The job request containing information about the job to be cancelled. */ int globus_gram_job_manager_script_cancel( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_query_t * query) { char * script_cmd = "cancel"; int rc; rc = globus_l_gram_request_validate(request); if (rc != GLOBUS_SUCCESS) { return rc; } rc = globus_l_gram_job_manager_script_run( request, script_cmd, globus_l_gram_job_manager_query_done, query, NULL); if (rc != GLOBUS_SUCCESS) { return rc; } return(GLOBUS_SUCCESS); } /* globus_gram_job_manager_script_cancel() */ /** * Send a signal to a job scheduler * * @param request * The job request containing information about the job to * signal. The signal and signal_arg data are used by * this function. */ int globus_gram_job_manager_script_signal( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_query_t * query) { char * script_cmd = "signal"; int rc; rc = globus_l_gram_request_validate(request); if (rc != GLOBUS_SUCCESS) { return rc; } /* * add the signal and signal_arg to the script arg file */ rc = globus_l_gram_job_manager_script_run( request, script_cmd, globus_l_gram_job_manager_query_done, query, "signal", 'd', query->signal, "signalarg", 's', query->signal_arg, NULL); if(rc != GLOBUS_SUCCESS) { return rc; } return(GLOBUS_SUCCESS); } /* globus_gram_job_manager_script_signal() */ int globus_gram_job_manager_script_stage_in( globus_gram_jobmanager_request_t * request) { char * script_cmd = "stage_in"; int rc; rc = globus_l_gram_request_validate(request); if (rc != GLOBUS_SUCCESS) { return rc; } rc = globus_l_gram_job_manager_script_run( request, script_cmd, globus_l_gram_job_manager_default_done, NULL, NULL); if (rc != GLOBUS_SUCCESS) { return rc; } return(GLOBUS_SUCCESS); } /* globus_gram_job_manager_script_stage_in() */ int globus_gram_job_manager_script_stage_out( globus_gram_jobmanager_request_t * request) { char * script_cmd = "stage_out"; int rc; rc = globus_l_gram_request_validate(request); if (rc != GLOBUS_SUCCESS) { return rc; } rc = globus_l_gram_job_manager_script_run( request, script_cmd, globus_l_gram_job_manager_default_done, NULL, NULL); return rc; } /* globus_gram_job_manager_script_stage_out() */ /** * Completion callback for done and poll scripts. * * This is called when a line of output containing a variable:value * pair is read from the script's execution. */ static void globus_l_gram_job_manager_default_done( void * arg, globus_gram_jobmanager_request_t * request, int failure_code, int starting_jobmanager_state, const char * variable, const char * value) { int script_status; int rc; GlobusGramJobManagerRequestLock(request); if(failure_code) { request->failure_code = failure_code; } if(!variable) { globus_reltime_t delay; GlobusTimeReltimeSet(delay, 0, 0); rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay); } else if(strcmp(variable, "GRAM_SCRIPT_JOB_STATE") == 0) { script_status = atoi(value); if(script_status < 0) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.script_read.info " "level=ERROR " "gramid=%s " "msg=\"%s\" " "value=\"%s\" " "script_status=%d " "\n", request->job_contact_path, "Invalid GRAM_SCRIPT_JOB_STATE", value, script_status); } else if(globus_i_gram_job_manager_script_valid_state_change( request, script_status)) { if ((script_status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) && globus_gram_job_manager_rsl_need_stage_out(request)) { globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT); } else { globus_gram_job_manager_request_set_status( request, script_status); } request->unsent_status_change = GLOBUS_TRUE; } } else if(strcmp(variable, "GRAM_SCRIPT_ERROR") == 0) { script_status = atoi(value); if(request->jobmanager_state == starting_jobmanager_state) { globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); if(script_status <= 0) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.script_read.info " "level=ERROR " "gramid=%s " "msg=\"%s\" " "value=\"%s\" " "script_status=%d " "\n", request->job_contact_path, "Invalid GRAM_SCRIPT_ERROR", value, script_status); } else { request->failure_code = script_status; } request->unsent_status_change = GLOBUS_TRUE; } } else if(strcmp(variable, "GRAM_SCRIPT_JOB_ID") == 0) { if(value != NULL && strlen(value) > 0) { request->job_id_string = strdup(value); request->original_job_id_string = strdup(value); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_INFO, "event=gram.job.info " "level=INFO " "msg=\"%s\" " "gramid=%s " "lrm_id=\"%s\" " "\n", "job submitted to lrm", request->job_contact_path, value); } } else if(strcmp(variable, "GRAM_SCRIPT_JOB_ACCT_INFO") == 0) { if(value != NULL && strlen(value) > 0) { const char *gk_jm_id_var = "GATEKEEPER_JM_ID"; const char *gk_jm_id = getenv(gk_jm_id_var); const char *v = value; char *buf = malloc(strlen(value) + 1); char *b = buf; char c; while ((*b++ = ((c = *v++) != '\\') ? c : ((c = *v++) != 'n' ) ? c : '\n')) { } globus_gram_job_manager_request_acct( request, "%s %s summary:\n%s\nJMA -- end of summary\n", gk_jm_id_var, gk_jm_id ? gk_jm_id : "none", buf); free(buf); } } else if(strcmp(variable, "GRAM_SCRIPT_SCRATCH_DIR") == 0) { request->scratchdir = strdup(value); } else if(strcmp(variable, "GRAM_SCRIPT_STAGED_IN") == 0) { globus_l_gram_job_manager_script_staged_done( request, GLOBUS_GRAM_JOB_MANAGER_STAGE_IN, value); } else if(strcmp(variable, "GRAM_SCRIPT_STAGED_IN_SHARED") == 0) { globus_l_gram_job_manager_script_staged_done( request, GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED, value); } else if(strcmp(variable, "GRAM_SCRIPT_STAGED_OUT") == 0) { if(request->jobmanager_state == starting_jobmanager_state) { globus_l_gram_job_manager_script_staged_done( request, GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT, value); } } else if (strcmp(variable, "GRAM_SCRIPT_STAGED_STREAM") == 0) { if(request->jobmanager_state == starting_jobmanager_state) { globus_l_gram_job_manager_script_staged_done( request, GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS, value); } } else if(strncmp(variable, "GRAM_SCRIPT_GT3", 15) == 0) { if (request->gt3_failure_type == NULL && strcmp(variable, "GRAM_SCRIPT_GT3_FAILURE_TYPE") == 0) { request->gt3_failure_type = strdup(value); } else if (request->gt3_failure_message == NULL && strcmp(variable, "GRAM_SCRIPT_GT3_FAILURE_MESSAGE") == 0) { request->gt3_failure_message = strdup(value); } else if (request->gt3_failure_source == NULL && strcmp(variable, "GRAM_SCRIPT_GT3_FAILURE_SOURCE") == 0) { request->gt3_failure_source = strdup(value); } else if (request->gt3_failure_destination == NULL && strcmp(variable, "GRAM_SCRIPT_GT3_FAILURE_DESTINATION") == 0) { request->gt3_failure_destination = strdup(value); } } else if(strcmp(variable, "GRAM_SCRIPT_LOG") == 0) { if (request->job_log_level & GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.script.log " "level=DEBUG " "%s " "\n", value); } } else if(request->jobmanager_state == starting_jobmanager_state) { globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; request->unsent_status_change = GLOBUS_TRUE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.script_read.info " "level=ERROR " "gramid=%s " "msg=\"%s\" " "variable=\"%s\" " "value=\"%s\" " "\n", request->job_contact_path, "unknown variable", variable, value); } GlobusGramJobManagerRequestUnlock(request); } /* globus_l_gram_job_manager_default_done() */ /** * Completion callback for query-initiated scripts */ static void globus_l_gram_job_manager_query_done( void * arg, globus_gram_jobmanager_request_t * request, int failure_code, int starting_jobmanager_state, const char * variable, const char * value) { int script_status; globus_gram_job_manager_query_t * query; globus_reltime_t delay; int rc; query = arg; GlobusGramJobManagerRequestLock(request); if(failure_code) { request->failure_code = failure_code; } if(!variable) { GlobusTimeReltimeSet(delay, 0, 0); rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay); } else if(strcmp(variable, "GRAM_SCRIPT_ERROR") == 0) { script_status = atoi(value); if(script_status <= 0) { query->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; } else { query->failure_code = script_status; } } else if(strcmp(variable, "GRAM_SCRIPT_JOB_STATE") == 0) { script_status = atoi(value); if(script_status <= 0) { query->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; } else if((query->type == GLOBUS_GRAM_JOB_MANAGER_CANCEL || query->signal == GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_CANCEL) && (globus_i_gram_job_manager_script_valid_state_change( request, script_status))) { request->unsent_status_change = GLOBUS_TRUE; globus_gram_job_manager_request_set_status(request, script_status); if(request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED; query->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED; } } else if((query->signal == GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_SUSPEND || query->signal == GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_RESUME) && globus_i_gram_job_manager_script_valid_state_change( request, script_status)) { globus_gram_job_manager_request_set_status(request, script_status); request->unsent_status_change = GLOBUS_TRUE; } } else if(strcmp(variable, "GRAM_SCRIPT_LOG") == 0) { if (request->job_log_level & GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.script.log " "level=DEBUG " "%s " "\n", value); } } else { query->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS; } GlobusGramJobManagerRequestUnlock(request); } /* globus_l_gram_job_manager_default_done() */ static int globus_l_gram_enqueue_rsl_value( globus_fifo_t * fifo, globus_rsl_value_t * globus_rsl_value_ptr) { globus_rsl_value_t * tmp_rsl_value_ptr; globus_list_t * tmp_rsl_list; char * prepared; char * tmp; int rc = GLOBUS_SUCCESS; if (globus_rsl_value_ptr==NULL) return(0); switch (globus_rsl_value_ptr->type) { case GLOBUS_RSL_VALUE_LITERAL: rc = globus_l_gram_enqueue_string(fifo, "'"); tmp = globus_rsl_value_literal_get_string(globus_rsl_value_ptr); prepared = globus_l_gram_job_manager_script_prepare_param( tmp); if (!prepared) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto prepare_failed; } rc = globus_fifo_enqueue(fifo, prepared); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; free(prepared); goto enqueue_failed; } rc = globus_l_gram_enqueue_string(fifo, "'"); break; case GLOBUS_RSL_VALUE_SEQUENCE: tmp_rsl_list = globus_rsl_value_sequence_get_value_list( globus_rsl_value_ptr); rc = globus_l_gram_enqueue_string(fifo, "["); if (rc != GLOBUS_SUCCESS) { goto enqueue_failed; } while (! globus_list_empty(tmp_rsl_list)) { tmp_rsl_value_ptr = (globus_rsl_value_t *) globus_list_first (tmp_rsl_list); globus_l_gram_enqueue_rsl_value(fifo, tmp_rsl_value_ptr); tmp_rsl_list = globus_list_rest(tmp_rsl_list); if(!globus_list_empty(tmp_rsl_list)) { rc = globus_l_gram_enqueue_string(fifo, ","); if (rc != GLOBUS_SUCCESS) { goto enqueue_failed; } } } rc = globus_l_gram_enqueue_string(fifo, "] "); if (rc != GLOBUS_SUCCESS) { goto enqueue_failed; } break; case GLOBUS_RSL_VALUE_VARIABLE: case GLOBUS_RSL_VALUE_CONCATENATION: default: rc = GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; break; } enqueue_failed: prepare_failed: return rc; } /* globus_l_gram_enqueue_rsl_value() */ static int globus_l_gram_enqueue_rsl( globus_fifo_t * fifo, globus_rsl_t * ast_node) { globus_list_t * tmp_rsl_list; globus_rsl_t * tmp_rsl_ptr; int rc; if (globus_rsl_is_boolean(ast_node)) { tmp_rsl_list = globus_rsl_boolean_get_operand_list(ast_node); while (! globus_list_empty(tmp_rsl_list)) { tmp_rsl_ptr = (globus_rsl_t *) globus_list_first (tmp_rsl_list); rc = globus_l_gram_enqueue_rsl(fifo, tmp_rsl_ptr); tmp_rsl_list = globus_list_rest(tmp_rsl_list); if(!globus_list_empty(tmp_rsl_list)) { rc = globus_l_gram_enqueue_string(fifo, ",\n"); } if(rc != GLOBUS_SUCCESS) { return rc; } } } else { /* Skip these, as they will be over-ridden by the todo lists */ if((strcmp(globus_rsl_relation_get_attribute(ast_node), "filestagein") == 0) || (strcmp(globus_rsl_relation_get_attribute(ast_node), "filestageinshared") == 0) || (strcmp(globus_rsl_relation_get_attribute(ast_node), "filestageout") == 0) || (strcmp(globus_rsl_relation_get_attribute(ast_node), "filestreamout") == 0)) { return 0; } rc = globus_l_gram_enqueue_string( fifo, " '%s' => ", globus_rsl_relation_get_attribute(ast_node)); rc = globus_l_gram_enqueue_rsl_value( fifo, globus_rsl_relation_get_value_sequence(ast_node)); if(rc != GLOBUS_SUCCESS) { return rc; } } return 0; } /* globus_l_gram_enqueue_rsl() */ static int globus_l_gram_enqueue_description( globus_fifo_t * fifo, globus_gram_jobmanager_request_t * request, va_list ap) { char * attribute; char format; char * string_value; int int_value; char * prepared; int rc; rc = globus_l_gram_enqueue_string( fifo, "$ENV{X509_USER_PROXY} = '%s';\n" "$ENV{GLOBUS_GRAM_JOB_CONTACT} = '%s';\n", request->x509_user_proxy, request->job_contact); rc = globus_l_gram_enqueue_string( fifo, "$description =\n{\n"); globus_l_gram_enqueue_rsl(fifo, request->rsl); /* Other non-rsl or rsl-override attributes */ for (attribute = va_arg(ap, char *); attribute != NULL; attribute = va_arg(ap, char *)) { format = (char) va_arg(ap, int); switch(format) { case 's': string_value = va_arg(ap, char *); if(string_value) { prepared = globus_l_gram_job_manager_script_prepare_param( string_value); rc = globus_l_gram_enqueue_string( fifo, ",\n '%s' => [ '%s' ]", attribute, prepared); free(prepared); } break; case 'i': case 'd': int_value = va_arg(ap, int); rc = globus_l_gram_enqueue_string( fifo, ",\n '%s' => [ '%d' ]", attribute, int_value); break; } } if(request->uniq_id) { rc = globus_l_gram_enqueue_string( fifo, ",\n 'uniqid' => [ '%s' ]", request->uniq_id); } if(request->job_id_string) { rc = globus_l_gram_enqueue_string( fifo, ",\n 'jobid' => [ '%s' ]", request->job_id_string); } if(request->cache_tag) { rc = globus_l_gram_enqueue_string( fifo, ",\n 'cachetag' => [ '%s' ]", request->cache_tag); } if(request->config->condor_os) { rc = globus_l_gram_enqueue_string( fifo, ",\n 'condoros' => [ '%s' ]", request->config->condor_os); } if(request->config->condor_arch) { rc = globus_l_gram_enqueue_string( fifo, ",\n 'condorarch' => [ '%s' ]", request->config->condor_arch); } if (request->job_dir) { rc = globus_l_gram_enqueue_string( fifo, ",\n 'jobdir' => [ '%s' ]", request->job_dir); } rc = globus_l_gram_enqueue_string( fifo, ",\n 'streamingdisabled' => [ %d ]", request->config->streaming_disabled); rc = globus_l_gram_enqueue_string( fifo, ",\n 'streamingrequested' => [ %d ]", request->streaming_requested ); rc = globus_l_gram_enqueue_string( fifo, ",\n 'statefile' => [ '%s' ]", request->job_state_file); rc = globus_l_gram_enqueue_staging_list( request, fifo, GLOBUS_GRAM_JOB_MANAGER_STAGE_IN); rc = globus_l_gram_enqueue_staging_list( request, fifo, GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED); rc = globus_l_gram_enqueue_staging_list( request, fifo, GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT); rc = globus_l_gram_enqueue_staging_list( request, fifo, GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS); rc = globus_l_gram_enqueue_string( fifo, "\n};\n"); return rc; } /* globus_l_gram_enqueue_description() */ /** * Escape single quotes within a string * * @param param * Original string to be escaped */ static char * globus_l_gram_job_manager_script_prepare_param( const char * param) { int i; int j; char * new_param; if (param == NULL) { return NULL; } new_param = malloc(strlen(param)*2+1); for (i = 0, j = 0; param[i] != '\0'; i++) { if(param[i] == '\\' ) { new_param[j++] = '\\'; new_param[j++] = '\\'; } else if (param[i] == '\'') { new_param[j++] = '\\'; new_param[j++] = '\''; } else { new_param[j++] = param[i]; } } new_param[j] = '\0'; return new_param; } /* globus_l_gram_job_manager_script_prepare_param() */ /** * Validate that the job manager is properly configured. * * This function validates the job scripts needed to handle this job * request exist and are executable. * * @param request * The job request we are submitting. This is used to check * that the job manager type is supported by this installation * of the job manager, and for logging. * * @retval GLOBUS_SUCCESS * The job manager is able to submit the job request to the appropriate * scripts. * @retval GLOBUS_FAILURE * The job manager is unable to submit the job request; the request * failure code will be updated with the reason why the job couldn't be * submitted. */ static int globus_l_gram_request_validate( globus_gram_jobmanager_request_t * request) { struct stat statbuf; char * script_path; char * script_path_pattern; int rc = GLOBUS_SUCCESS; globus_result_t result = GLOBUS_SUCCESS; static globus_bool_t first = GLOBUS_TRUE; //if (!first) { return GLOBUS_SUCCESS; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.request_validate.start " "level=TRACE " "gramid=%s " "\n", request->job_contact_path); globus_assert(request->config->jobmanager_type); if(request->rsl == NULL) { return GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; } /* * test that the scheduler script files exist and * that the user has permission to execute then. */ /*---------------- job manager script -----------------*/ result = globus_eval_path("${libexecdir}/globus-job-manager-script.pl", &script_path); if (result != GLOBUS_SUCCESS || script_path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_SCRIPT_NOT_FOUND; goto eval_script_path_failed; } if (stat(script_path, &statbuf) != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_SCRIPT_NOT_FOUND; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.request_validate.end " "level=ERROR " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, script_path, "Script status failed", -rc, errno, strerror(errno)); goto script_path_not_found; } if (access(script_path, X_OK) < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_SCRIPT_PERMISSIONS; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.request_validate.end " "level=ERROR " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "\n", request->job_contact_path, script_path, "Script not executable", -rc); goto bad_script_permissions; } free(script_path); script_path = NULL; script_path_pattern = globus_common_create_string( "${perlmoduledir}/Globus/GRAM/JobManager/%s.pm", request->config->jobmanager_type); if (script_path_pattern == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto script_pattern_alloc_failed; } /* Verify existence of scheduler specific script. */ result = globus_eval_path(script_path_pattern, &script_path); if (result != GLOBUS_SUCCESS || script_path == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto lrm_script_path_failed; } if(stat(script_path, &statbuf) != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_SCRIPT_NOT_FOUND; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.request_validate.end " "level=ERROR " "gramid=%s " "path=\"%s\" " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, script_path, "Module status failed", -rc, errno, strerror(errno)); goto lrm_module_not_found; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.request_validate.end " "level=TRACE " "gramid=%s " "status=%d\n", request->job_contact_path, 0); lrm_module_not_found: lrm_script_path_failed: if (script_path_pattern != NULL) { free(script_path_pattern); script_path_pattern = NULL; } script_pattern_alloc_failed: bad_script_permissions: script_path_not_found: if (script_path != NULL) { free(script_path); script_path = NULL; } eval_script_path_failed: if (rc == GLOBUS_SUCCESS) { first = GLOBUS_FALSE; } return rc; } /* globus_l_gram_request_validate() */ static int globus_l_gram_enqueue_string( globus_fifo_t * fifo, const char * format, ...) { va_list ap; char * tmp; int rc; va_start(ap, format); tmp = globus_common_v_create_string(format, ap); va_end(ap); if (!tmp) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto create_string_failed; } rc = globus_fifo_enqueue(fifo, tmp); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; free(tmp); goto fifo_enqueue_failed; } fifo_enqueue_failed: create_string_failed: return rc; } /* globus_l_gram_enqueue_string() */ static int globus_l_gram_enqueue_staging_list( globus_gram_jobmanager_request_t * request, globus_fifo_t * fifo, globus_gram_job_manager_staging_type_t type) { globus_list_t * tmp_list = NULL; char * attribute = NULL; char * from; char * to; globus_gram_job_manager_staging_info_t * info; int rc; switch(type) { case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN: tmp_list = request->stage_in_todo; attribute = GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_PARAM; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED: tmp_list = request->stage_in_shared_todo; attribute = GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_SHARED_PARAM; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT: tmp_list = request->stage_out_todo; attribute = GLOBUS_GRAM_PROTOCOL_FILE_STAGE_OUT_PARAM; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS: tmp_list = request->stage_stream_todo; attribute = "filestreamout"; break; } /* Always write the attribute to the script arg file, even if * it's empty---if we were restarted during staging, then we * may have files listed in the original RSL which have been staged * completely. */ rc = globus_l_gram_enqueue_string( fifo, ",\n '%s' => [", attribute); if (rc != GLOBUS_SUCCESS) { goto enqueue_string_failed; } while(!globus_list_empty(tmp_list)) { info = globus_list_first(tmp_list); tmp_list = globus_list_rest(tmp_list); from = globus_l_gram_job_manager_script_prepare_param( info->evaled_from); to = globus_l_gram_job_manager_script_prepare_param( info->evaled_to); rc = globus_l_gram_enqueue_string( fifo, " ['%s', '%s']%s", from, to, globus_list_empty(tmp_list) ? "\n" : ",\n"); free(from); free(to); if (rc != GLOBUS_SUCCESS) { goto enqueue_string_failed; } } rc = globus_l_gram_enqueue_string(fifo, " ]"); enqueue_string_failed: return rc; } /* globus_l_gram_enqueue_staging_list() */ static void globus_l_gram_job_manager_script_staged_done( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_staging_type_t type, const char * value) { char * from; char * to; from = malloc(strlen(value)+1); to = malloc(strlen(value)+1); sscanf(value, "%s %s", from, to); globus_gram_job_manager_staging_remove( request, type, from, to); if(request->jobmanager_state != GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) { globus_gram_job_manager_state_file_write( request); } free(from); free(to); } /* globus_l_gram_job_manager_script_staged_done() */ globus_bool_t globus_i_gram_job_manager_script_valid_state_change( globus_gram_jobmanager_request_t * request, globus_gram_protocol_job_state_t new_state) { switch(request->status) { case GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING: if(new_state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING) { return GLOBUS_TRUE; } return GLOBUS_FALSE; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE: if(new_state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING && new_state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE) { return GLOBUS_TRUE; } return GLOBUS_FALSE; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED: return GLOBUS_FALSE; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE: return GLOBUS_FALSE; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_SUSPENDED: if(new_state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING && new_state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_SUSPENDED) { return GLOBUS_TRUE; } return GLOBUS_FALSE; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED: if(new_state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED) { return GLOBUS_TRUE; } return GLOBUS_FALSE; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN: if(new_state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN) { return GLOBUS_TRUE; } return GLOBUS_FALSE; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT: if(new_state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE || new_state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { return GLOBUS_TRUE; } return GLOBUS_FALSE; default: return GLOBUS_FALSE; } } /* globus_l_gram_job_manager_script_valid_state_change() */ /** * Queue and perhaps start a job manager script * * If the job manager isn't currently running too many simultaneous scripts, * start the script described in the @a context parameter. Otherwise, queue * it in the manager's script fifo and it will start when another one finishes. * * @param manager * Manager state * @param context * Script context * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Error opening jobmanager script */ static int globus_l_gram_script_queue( globus_gram_job_manager_t * manager, globus_gram_job_manager_script_context_t * context) { int rc; globus_list_t * tmp; globus_gram_job_manager_scripts_t * scripts = NULL; GlobusGramJobManagerLock(manager); context->priority.sequence = globus_l_gram_next_script_sequence++; tmp = globus_list_search_pred( manager->scripts_per_client, globus_l_match_script_client_addr, context->request->job_stats.client_address ? context->request->job_stats.client_address : (void *) GLOBUS_GRAM_SCRIPT_NO_CLIENT); if (tmp == NULL) { scripts = malloc(sizeof(globus_gram_job_manager_scripts_t)); if (scripts == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto scripts_malloc_failed; } scripts->client_addr = strdup( context->request->job_stats.client_address ? context->request->job_stats.client_address : GLOBUS_GRAM_SCRIPT_NO_CLIENT); if (scripts->client_addr == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto scripts_contact_malloc_failed; } /* Remove port from the client addr */ { char * colon = strrchr(scripts->client_addr, ':'); if (colon) { *colon = '\0'; } } rc = globus_priority_q_init( &scripts->script_queue, globus_l_gram_script_priority_cmp); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto script_queue_init_failed; } /* Default number of scripts which can be run simultaneously */ scripts->script_slots_available = 5; rc = globus_fifo_init(&scripts->script_handles); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto script_handles_fifo_init_failed; } globus_list_insert(&manager->scripts_per_client, scripts); if (rc != GLOBUS_SUCCESS) { script_handles_fifo_init_failed: globus_priority_q_destroy(&scripts->script_queue); script_queue_init_failed: free(scripts->client_addr); scripts_contact_malloc_failed: free(scripts); scripts = NULL; } } else { scripts = globus_list_first(tmp); } if (scripts) { rc = globus_priority_q_enqueue( &scripts->script_queue, context, &context->priority); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto fifo_enqueue_failed; } globus_l_gram_process_script_queue_locked(manager, scripts); } scripts_malloc_failed: fifo_enqueue_failed: GlobusGramJobManagerUnlock(manager); return rc; } /* globus_l_gram_script_queue() */ /** * Start processing queued script commands on XIO handles. * * For each script context queued in the script fifo, either write its command * to an existing XIO handle or create a new XIO handle to process the script, * provided there are slots available for running more scripts. * * The mutex associated with the @a manager parameter must be locked when this * procedure is called. * * @param manager * Job manager state * @param scripts * Client-specific script handle collection */ static void globus_l_gram_process_script_queue_locked( globus_gram_job_manager_t * manager, globus_gram_job_manager_scripts_t * scripts) { int rc = GLOBUS_SUCCESS; globus_gram_job_manager_script_context_t * head = NULL; globus_result_t result; while ((!globus_priority_q_empty(&scripts->script_queue)) && (scripts->script_slots_available > 0 || !globus_fifo_empty(&scripts->script_handles))) { /* head may be non-null if we fail due to an I/O error below (see * the "continue" statements */ if (head == NULL) { head = globus_priority_q_first(&scripts->script_queue); } /* Prefer to reuse a handle to the script */ if (!globus_fifo_empty(&scripts->script_handles)) { head->handle = globus_fifo_dequeue(&scripts->script_handles); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.script.info " "level=DEBUG " "msg=\"%s\" " "handle=%p " "\n", "Using script handle from fifo", head->handle); rc = globus_l_gram_script_register_read_and_write(head); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_SUCCESS; continue; } } else { /* Create a new script if more slots are available */ assert(scripts->script_slots_available > 0); rc = globus_gram_job_manager_script_handle_init( manager, scripts, &head->handle); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.script.info " "level=DEBUG " "msg=\"%s\" " "handle=%p " "rc=%d " "\n", "Created new script handle", head->handle, -rc); if (rc != GLOBUS_SUCCESS) { continue; } result = globus_xio_register_open( head->handle->handle, NULL, manager->script_attr, globus_l_gram_script_open_callback, head); if (result != GLOBUS_SUCCESS) { /* I think blocking call is safe here */ globus_xio_close(head->handle->handle, NULL); head->handle->handle = NULL; continue; } head->handle->pending_ops++; scripts->script_slots_available--; } globus_priority_q_dequeue(&scripts->script_queue); head = NULL; } return; } /* globus_l_gram_process_script_queue_locked() */ static void globus_l_gram_script_open_callback( globus_xio_handle_t handle, globus_result_t result, void * user_arg) { globus_gram_job_manager_script_context_t * context = user_arg; globus_gram_script_handle_t script_handle = context->handle; globus_gram_jobmanager_request_t * request = context->request; int rc = GLOBUS_SUCCESS; int i; globus_gram_job_manager_scripts_t * scripts; script_handle->pending_ops--; if (result == GLOBUS_SUCCESS) { rc = globus_l_gram_script_register_read_and_write(context); } else { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_JOBMANAGER_SCRIPT; } if (rc != GLOBUS_SUCCESS) { GlobusGramJobManagerLock(script_handle->manager); scripts = globus_list_first( globus_list_search_pred( request->manager->scripts_per_client, globus_l_match_script_client_addr, request->job_stats.client_address ? request->job_stats.client_address : (void *) GLOBUS_GRAM_SCRIPT_NO_CLIENT)); globus_xio_register_close( handle, NULL, globus_l_script_close_callback, script_handle); scripts->script_slots_available++; GlobusGramJobManagerUnlock(script_handle->manager); context->callback( context->callback_arg, request, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRIPT_STATUS, context->starting_jobmanager_state, NULL, NULL); globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "script"); for (i = 0; i < context->iovcnt; i++) { free(context->iov[i].iov_base); } free(context->iov); free(context); } } /* globus_l_gram_script_open_callback() */ static int globus_l_gram_script_register_read_and_write( globus_gram_job_manager_script_context_t * script_context) { int i, total_iov_contents; globus_result_t result; globus_gram_job_manager_t * manager; globus_gram_jobmanager_request_t * request = script_context->request; globus_gram_job_manager_scripts_t * scripts; manager = script_context->handle->manager; scripts = globus_list_first( globus_list_search_pred( manager->scripts_per_client, globus_l_match_script_client_addr, request->job_stats.client_address ? request->job_stats.client_address : (void *) GLOBUS_GRAM_SCRIPT_NO_CLIENT)); for (i = 0, total_iov_contents = 0; i < script_context->iovcnt; i++) { total_iov_contents += script_context->iov[i].iov_len; } result = globus_xio_register_writev( script_context->handle->handle, script_context->iov, script_context->iovcnt, total_iov_contents, NULL, globus_l_script_writev_callback, script_context->handle); if (result != GLOBUS_SUCCESS) { char *errstr = globus_error_print_friendly( globus_error_peek(result)); char *escaped_errstr; escaped_errstr = globus_gram_prepare_log_string(errstr); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.script.write.end level=ERROR " "msg=\"%s\" status=%d reason=\"%s\"\n", "error writing to script input", -1, escaped_errstr ? escaped_errstr : ""); if (errstr) { free(errstr); } if (escaped_errstr) { free(escaped_errstr); } globus_xio_register_close( script_context->handle->handle, NULL, globus_l_script_close_callback, script_context->handle); script_context->handle = NULL; scripts->script_slots_available++; return GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_JOBMANAGER_SCRIPT; } script_context->handle->pending_ops++; result = globus_xio_register_read( script_context->handle->handle, script_context->handle->return_buf, sizeof(script_context->handle->return_buf), 1, NULL, globus_l_gram_job_manager_script_read, script_context); if (result != GLOBUS_SUCCESS) { globus_xio_register_close( script_context->handle->handle, NULL, globus_l_script_close_callback, script_context->handle); script_context->handle = NULL; scripts->script_slots_available++; return GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_JOBMANAGER_SCRIPT; } script_context->handle->pending_ops++; return GLOBUS_SUCCESS; } /** * Convert a fifo of NULL-terminated strings into an array of iovec structs * * @param fifo * Fifo of strings. All strings will be removed from this fifo, but it * will not be destroyed. * @param iov * Pointer to an array of iovec structs. A new array will be allocated * to hold the values of @a fifo. * @param num_iov * Pointer to the number of iovec structs in the resulting string. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed */ static int globus_l_gram_fifo_to_iovec( globus_fifo_t * fifo, struct iovec ** iov, int * num_iov) { globus_list_t *list; size_t len; char * str; int i; int rc = GLOBUS_SUCCESS; len = globus_fifo_size(fifo); list = globus_fifo_convert_to_list(fifo); *iov = malloc(len * sizeof(struct iovec)); if (*iov == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_iov_failed; } *num_iov = len; i = 0; for (; list != NULL; i++) { str = globus_list_remove(&list, list); (*iov)[i].iov_base = str; (*iov)[i].iov_len = strlen(str); } if (rc != GLOBUS_SUCCESS) { malloc_iov_failed: *iov = NULL; *num_iov = 0; } return rc; } /* globus_l_gram_fifo_to_iovec() */ /** * Finished processing a script, start another if one is queued * * @param manager * Job manager state * * @return void */ static void globus_l_gram_job_manager_script_done( globus_gram_job_manager_t * manager, globus_gram_job_manager_scripts_t * scripts, globus_gram_script_handle_t handle) { if (handle->pending_ops > 0) { return; } if (handle->result == GLOBUS_SUCCESS) { handle->last_use = time(NULL); globus_fifo_enqueue(&scripts->script_handles, handle); } else { globus_xio_register_close( handle->handle, NULL, globus_l_script_close_callback, handle); scripts->script_slots_available++; } globus_l_gram_process_script_queue_locked(manager, scripts); return; } /* globus_l_gram_job_manager_script_done() */ void globus_gram_job_manager_script_close_all( globus_gram_job_manager_t * manager) { globus_gram_script_handle_t handle; globus_list_t * tmp; globus_gram_job_manager_scripts_t * scripts; for (tmp = manager->scripts_per_client; tmp != NULL; tmp = globus_list_rest(tmp)) { scripts = globus_list_first(tmp); while (!globus_fifo_empty(&scripts->script_handles)) { handle = globus_fifo_dequeue(&scripts->script_handles); globus_xio_close( handle->handle, NULL); free(handle); scripts->script_slots_available++; } } } /* globus_gram_job_manager_script_close_all() */ int globus_gram_job_manager_script_handle_init( globus_gram_job_manager_t * manager, globus_gram_job_manager_scripts_t * scripts, globus_gram_script_handle_t * handle) { globus_result_t result; int rc = GLOBUS_SUCCESS; *handle = malloc(sizeof(struct globus_gram_script_handle_s)); if (*handle == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto fail; } (*handle)->scripts = scripts; (*handle)->return_buf[0] = 0; (*handle)->return_buf_offset = 0; (*handle)->result = GLOBUS_SUCCESS; (*handle)->manager = manager; (*handle)->pending_ops = 0; (*handle)->last_use = time(NULL); result = globus_xio_handle_create( &(*handle)->handle, globus_i_gram_job_manager_popen_stack); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_JOBMANAGER_SCRIPT; goto handle_create_failed; } if (rc != GLOBUS_SUCCESS) { handle_create_failed: free(*handle); } fail: if (rc != GLOBUS_SUCCESS) { *handle = NULL; } return rc; } /* globus_gram_job_manager_script_handle_init() */ static void globus_l_script_close_callback( globus_xio_handle_t handle, globus_result_t result, void * user_arg) { free(user_arg); } /* globus_l_script_close_callback() */ static void globus_l_script_writev_callback( globus_xio_handle_t handle, globus_result_t result, globus_xio_iovec_t * iovec, int count, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void * user_arg) { globus_gram_script_handle_t script_handle = user_arg; globus_gram_job_manager_log( script_handle->manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.script_write.end " "level=DEBUG " "msg=\"%s\" " "nbytes=%d " "result=%d " "pending_ops=%d " "\n ", "writev callback", (int) nbytes, (int) result, script_handle->pending_ops); GlobusGramJobManagerLock(script_handle->manager); if (script_handle->result == GLOBUS_SUCCESS) { script_handle->result = result; } script_handle->pending_ops--; globus_l_gram_job_manager_script_done( script_handle->manager, script_handle->scripts, script_handle); GlobusGramJobManagerUnlock(script_handle->manager); } /** * Periodic callback to close idle script handles * * If a script handle hasn't been used in over 30 seconds, and there are * no pending script events, it will be closed by this callback and removed * from the script handle fifo. */ void globus_gram_script_close_idle( void * arg) { globus_gram_job_manager_t * manager = arg; globus_gram_script_handle_t handle; time_t now = time(NULL); globus_list_t * tmp; globus_gram_job_manager_scripts_t * scripts; GlobusGramJobManagerLock(manager); for (tmp = manager->scripts_per_client; tmp != NULL; tmp = globus_list_rest(tmp)) { scripts = globus_list_first(tmp); if (!globus_priority_q_empty(&scripts->script_queue)) { goto nonempty_queue; } while (!globus_fifo_empty(&scripts->script_handles)) { handle = globus_fifo_peek(&scripts->script_handles); if (difftime(now, handle->last_use) > 30.0) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.script_idle.info " "level=DEBUG " "msg=\"closing idle script handle after %.1f seconds" "\n ", difftime(now, handle->last_use)); globus_fifo_dequeue(&scripts->script_handles); globus_xio_close( handle->handle, NULL); free(handle); scripts->script_slots_available++; } else { break; } } nonempty_queue: ; } GlobusGramJobManagerUnlock(manager); } /* globus_gram_script_close_idle() */ static int globus_l_gram_script_priority_cmp( void * priority_1, void * priority_2) { globus_gram_script_priority_t *p1 = priority_1, *p2 = priority_2; if (p1->priority_level > p2->priority_level) { return 1; } else if (p1->priority_level < p2->priority_level) { return -1; } else if (p1->sequence > p2->sequence) { return 2; } else { assert(p1->sequence < p2->sequence); return -2; } } /* globus_l_gram_script_priority_cmp() */ static int globus_l_match_script_client_addr( void * datum, void * arg) { globus_gram_job_manager_scripts_t * scripts = datum; char * client_addr = arg; return strncmp(scripts->client_addr, client_addr, strlen(scripts->client_addr)) == 0; } /* globus_l_match_script_client_addr() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_seg.c0000644000000000000000000000013214243161125025121 xustar000000000000000030 mtime=1653400149.358970121 30 atime=1653401831.473125725 30 ctime=1653404021.245746984 globus_gram_job_manager-15.8/globus_gram_job_manager_seg.c0000664000175000017500000015702214243161125025271 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_job_manager.h" #include "globus_scheduler_event_generator.h" #include "globus_scheduler_event_generator_app.h" #include #include #include typedef struct globus_gram_seg_resume_s { globus_gram_job_manager_t * manager; globus_list_t * events; } globus_gram_seg_resume_t; static globus_bool_t globus_l_condor_regexes_compiled = GLOBUS_FALSE; static regex_t globus_l_condor_outer_re; static regex_t globus_l_condor_inner_re; globus_result_t globus_l_gram_seg_event_callback( void * user_arg, const globus_scheduler_event_t * event); static void globus_l_gram_fork_poll_callback( void * user_arg); static int globus_l_gram_deliver_event( globus_gram_jobmanager_request_t * request, globus_scheduler_event_t * event); static void globus_l_seg_resume_callback( void * user_arg); static int globus_l_condor_parse_log( const char * data, globus_gram_job_manager_ref_t * ref, globus_fifo_t * events); static int globus_l_condor_read_log( globus_gram_job_manager_t *manager, const char *path, size_t last_size, char **data); static void globus_l_gram_condor_poll_callback( void * user_arg); globus_result_t globus_gram_job_manager_init_seg( globus_gram_job_manager_t * manager) { globus_result_t result = GLOBUS_SUCCESS; int rc; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg.start level=TRACE module=%s\n", manager->config->seg_module ? manager->config->seg_module : "fork"); GlobusGramJobManagerLock(manager); if (manager->config->seg_module == NULL && strcmp(manager->config->jobmanager_type, "fork") == 0) { globus_reltime_t delay; GlobusTimeReltimeSet(delay, 1, 0); result = globus_callback_register_periodic( &manager->fork_callback_handle, &delay, &delay, globus_l_gram_fork_poll_callback, manager); if (result != GLOBUS_SUCCESS) { char * errstr; char * errstr_escaped; errstr = globus_error_print_friendly(globus_error_peek(result)); errstr_escaped = globus_gram_prepare_log_string( errstr); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.seg.end level=WARN status=%d " "reason=\"%s\"\n", -1, errstr_escaped ? errstr_escaped : ""); if (errstr_escaped) { free(errstr_escaped); } if (errstr) { free(errstr); } goto failed_periodic; } } else if (strcmp(manager->config->jobmanager_type, "condor") == 0) { globus_reltime_t delay; GlobusTimeReltimeSet(delay, 5, 0); result = globus_callback_register_periodic( &manager->fork_callback_handle, &delay, &delay, globus_l_gram_condor_poll_callback, manager); if (result != GLOBUS_SUCCESS) { char * errstr; char * errstr_escaped; errstr = globus_error_print_friendly(globus_error_peek(result)); errstr_escaped = globus_gram_prepare_log_string( errstr); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.seg.end level=WARN status=%d " "reason=\"%s\"\n", -1, errstr_escaped ? errstr_escaped : ""); if (errstr_escaped) { free(errstr_escaped); } if (errstr) { free(errstr); } goto failed_periodic; } } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg.activate.start level=TRACE module=%s\n", manager->config->seg_module); rc = globus_module_activate(GLOBUS_SCHEDULER_EVENT_GENERATOR_MODULE); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.seg.activate.end level=ERROR error=%d " "reason=\"Error activating SEG\"\n", rc); goto failed_activate; } globus_scheduler_event_generator_set_event_handler( globus_l_gram_seg_event_callback, manager); globus_scheduler_event_generator_set_timestamp( manager->seg_last_timestamp); setenv("JOB_MANAGER_SEG_SCHEDULER", manager->config->seg_module, 1); rc = globus_scheduler_event_generator_load_module( "job_manager"); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.seg.end level=ERROR " "error=%d " "module=%s " "reason=\"Error loading job_manager SEG " "module\"\n", rc, manager->config->seg_module); free(manager->config->seg_module); manager->config->seg_module = NULL; goto failed_load; } } manager->seg_started = GLOBUS_TRUE; failed_load: failed_activate: failed_periodic: GlobusGramJobManagerUnlock(manager); return result; } /* globus_gram_job_manager_init_seg() */ globus_result_t globus_gram_job_manager_shutdown_seg( globus_gram_job_manager_t * manager) { if (! manager->seg_started) { return GLOBUS_SUCCESS; } if (manager->fork_callback_handle != GLOBUS_NULL_HANDLE) { globus_callback_unregister( manager->fork_callback_handle, NULL, NULL, NULL); manager->fork_callback_handle = GLOBUS_NULL_HANDLE; } else { globus_module_deactivate(GLOBUS_SCHEDULER_EVENT_GENERATOR_MODULE); } manager->seg_started = GLOBUS_FALSE; return GLOBUS_SUCCESS; } /* globus_gram_job_manager_shutdown_seg() */ globus_result_t globus_l_gram_seg_event_callback( void * user_arg, const globus_scheduler_event_t * event) { int rc; globus_gram_job_manager_t * manager = user_arg; globus_gram_jobmanager_request_t * request; globus_result_t result = GLOBUS_SUCCESS; globus_scheduler_event_t * new_event; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg.event.start level=TRACE segid=\"%s\" " "state=%d event_ts=%ld\n", event->job_id, (int) event->event_type, (long int) event->timestamp); if (event->event_type == GLOBUS_SCHEDULER_EVENT_RAW) { rc = GLOBUS_SUCCESS; goto raw_event; } result = globus_scheduler_event_copy(&new_event, event); if (result != GLOBUS_SUCCESS) { goto copy_failed; } GlobusGramJobManagerLock(manager); /* Find the job request associated by this job id */ rc = globus_gram_job_manager_add_reference_by_jobid( manager, event->job_id, "SEG event", &request); if (rc != GLOBUS_SUCCESS) { if (manager->seg_pause_count > 0) { /* New submit script is running. Avoid race by adding this to the * manager-wide queue */ globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg.event.queue level=TRACE segid=\"%s\"\n", event->job_id); rc = globus_fifo_enqueue(&manager->seg_event_queue, new_event); } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg.event.end level=TRACE segid=\"%s\" " "reason=\"Event ID doesn't match known job id\"\n", event->job_id); } } if (rc != GLOBUS_SUCCESS) { GlobusGramJobManagerUnlock(manager); goto manager_event_queue_failed; } else if (request == NULL) { /* Ignore unwanted event */ GlobusGramJobManagerUnlock(manager); goto done; } else { if (event->timestamp > manager->seg_last_timestamp) { manager->seg_last_timestamp = event->timestamp; } GlobusGramJobManagerUnlock(manager); rc = globus_l_gram_deliver_event( request, new_event); } if (rc != GLOBUS_SUCCESS) { (void) globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "SEG event"); manager_event_queue_failed: globus_scheduler_event_destroy(new_event); copy_failed: raw_event: ; } done: result = GLOBUS_SUCCESS; return result; } /* globus_l_gram_seg_event_callback() */ void globus_gram_job_manager_seg_handle_event( globus_gram_jobmanager_request_t * request) { globus_scheduler_event_t * event; char * subjob_id_ptr = NULL; size_t subjob_id_len; globus_bool_t found_subjob_id; event = globus_fifo_dequeue(&request->seg_event_queue); if (event->timestamp > request->seg_last_timestamp) { /* * GRAM-145: GRAM5 Job Manager fails to save SEG timestamps in job * state files * * We'll update the SEG timestamp here so that if the job manager * is restarted it (potentially) ignore events that have already been * noticed in the job state file. */ request->seg_last_timestamp = event->timestamp; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.handle_seg_event.start " "level=DEBUG " "state=%d " "gramid=%s " "jobid=\"%s\" " "\n", event->event_type, request->job_contact_path, event->job_id); found_subjob_id = GLOBUS_FALSE; subjob_id_len = strlen(event->job_id); while (!found_subjob_id) { subjob_id_ptr = strstr(request->job_id_string, event->job_id); if (subjob_id_ptr == NULL) { break; } if (subjob_id_ptr == request->job_id_string || (*(subjob_id_ptr - 1) == ',')) { /* request->job_id_string starts with this subjob_id, or this * subjob_id happens after a comma. If it ends with a comma or * \0, then we've found a match. */ if (subjob_id_ptr[subjob_id_len] == ',') { found_subjob_id = GLOBUS_TRUE; if (event->event_type == GLOBUS_SCHEDULER_EVENT_DONE || event->event_type == GLOBUS_SCHEDULER_EVENT_FAILED) { /* Remove this sub job id from the list by moving * after the comma up until \0 to subjob_id_ptr */ memmove(subjob_id_ptr, subjob_id_ptr + subjob_id_len + 1, strlen(subjob_id_ptr + subjob_id_len + 1) + 1); } } else if (subjob_id_ptr[subjob_id_len] == 0) { /* This is the final subjob in the job_id_string */ found_subjob_id = GLOBUS_TRUE; if (event->event_type == GLOBUS_SCHEDULER_EVENT_DONE || event->event_type == GLOBUS_SCHEDULER_EVENT_FAILED) { /* Don't need to do memmove here, just null terminate at * either the initial part of the string if subjob_id is * the only one in the list, or at the comma otherwise */ if (subjob_id_ptr != request->job_id_string) { *(subjob_id_ptr - 1) = '\0'; } else { request->job_id_string[0] = '\0'; } } } } } /* If this is a terminal event (done or failed), we'll update the expected * terminal state (in the case of a multi-subjob case) and the exit code * if the job's exit code is currently 0 * * Thus, if any subjob fails or exits with a non-0 exit code, we will * propogate that in the job state change notification. */ if (event->event_type == GLOBUS_SCHEDULER_EVENT_DONE || event->event_type == GLOBUS_SCHEDULER_EVENT_FAILED) { if (request->expected_terminal_state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && event->event_type == GLOBUS_SCHEDULER_EVENT_FAILED) { request->expected_terminal_state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED; } if (event->event_type == GLOBUS_SCHEDULER_EVENT_DONE && request->exit_code == 0 && event->exit_code != 0) { request->exit_code = event->exit_code; } } /* If the last job terminated or any job moved to active, we'll update the * job status and potentially send notifications. */ if (event->event_type != GLOBUS_SCHEDULER_EVENT_DONE && event->event_type != GLOBUS_SCHEDULER_EVENT_FAILED) { int protocol_event_type; switch (event->event_type) { case GLOBUS_SCHEDULER_EVENT_PENDING: protocol_event_type = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; break; case GLOBUS_SCHEDULER_EVENT_ACTIVE: protocol_event_type = GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE; break; default: protocol_event_type = -1; } if (protocol_event_type != -1) { if (globus_i_gram_job_manager_script_valid_state_change( request, protocol_event_type)) { globus_gram_job_manager_request_set_status( request, protocol_event_type); request->unsent_status_change = GLOBUS_TRUE; } } } else if (*request->job_id_string == '\0') { if (globus_i_gram_job_manager_script_valid_state_change( request, request->expected_terminal_state)) { if ((request->expected_terminal_state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) && globus_gram_job_manager_rsl_need_stage_out(request)) { globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT); } else { globus_gram_job_manager_request_set_status( request, request->expected_terminal_state); } request->unsent_status_change = GLOBUS_TRUE; } } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.handle_seg_event.end " "level=DEBUG " "state=%d " "gramid=%s " "jobid=\"%s\" " "\n", event->event_type, request->job_contact_path, event->job_id); globus_scheduler_event_destroy(event); (void) globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "SEG event"); } /* globus_gram_job_manager_seg_handle_event() */ void globus_gram_job_manager_seg_pause( globus_gram_job_manager_t * manager) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg_pause.start " "level=TRACE " "count=%d " "\n", manager->seg_pause_count+1); GlobusGramJobManagerLock(manager); manager->seg_pause_count++; GlobusGramJobManagerUnlock(manager); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg_pause.end " "level=TRACE " "count=%d " "\n", manager->seg_pause_count); } /* globus_gram_job_manager_seg_pause() */ void globus_gram_job_manager_seg_resume( globus_gram_job_manager_t * manager) { globus_result_t result; globus_scheduler_event_t * event; globus_gram_seg_resume_t * resume; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg_resume.start " "level=TRACE " "count=%d " "\n", manager->seg_pause_count-1); GlobusGramJobManagerLock(manager); manager->seg_pause_count--; if (manager->seg_pause_count == 0 && !globus_fifo_empty(&manager->seg_event_queue)) { resume = malloc(sizeof(globus_gram_seg_resume_t)); if (resume != NULL) { globus_reltime_t delay; GlobusTimeReltimeSet(delay, 0, 0); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg_resume.info " "level=TRACE " "message=\"%s\" " "event_count=%d " "\n", "Creating resume callback struct", globus_fifo_size(&manager->seg_event_queue)); resume->manager = manager; resume->events = globus_fifo_convert_to_list( &manager->seg_event_queue); result = globus_callback_register_oneshot( NULL, &delay, globus_l_seg_resume_callback, resume); if (result != GLOBUS_SUCCESS) { while (!globus_list_empty(resume->events)) { event = globus_list_remove(&resume->events, resume->events); globus_scheduler_event_destroy(event); } } } } GlobusGramJobManagerUnlock(manager); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg_resume.end " "level=TRACE " "count=%d " "\n", manager->seg_pause_count); } /* globus_gram_job_manager_seg_resume() */ static void globus_l_seg_resume_callback( void * user_arg) { globus_gram_seg_resume_t * resume = user_arg; globus_scheduler_event_t * event; globus_gram_jobmanager_request_t * request; int rc; globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg.resume_callback.start " "level=TRACE " "\n"); while (!globus_list_empty(resume->events)) { event = globus_list_remove(&resume->events, resume->events); GlobusGramJobManagerLock(resume->manager); rc = globus_gram_job_manager_add_reference_by_jobid( resume->manager, event->job_id, "SEG event", &request); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg.resume_callback.end " "level=TRACE " "status=%d " "msg=\"%s\" " "\n", 0, "Ignoring unknown job id"); GlobusGramJobManagerUnlock(resume->manager); globus_scheduler_event_destroy(event); } else { if (event->timestamp > request->manager->seg_last_timestamp) { request->manager->seg_last_timestamp = event->timestamp; } GlobusGramJobManagerUnlock(resume->manager); rc = globus_l_gram_deliver_event( request, event); globus_gram_job_manager_log( NULL, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg.resume_callback.end " "level=TRACE " "status=%d " "msg=\"%s\" " "\n", -rc, "Delivered event"); } } } /* globus_l_seg_resume_callback() */ static int globus_l_gram_deliver_event( globus_gram_jobmanager_request_t * request, globus_scheduler_event_t * event) { int rc; globus_reltime_t delay_time; GlobusGramJobManagerRequestLock(request); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg_deliver_event.start " "level=TRACE " "gramid=%s " "jobid=\"%s\" " "state=%d " "jmstate=%s\n", request->job_contact_path, event->job_id, event->event_type, globus_i_gram_job_manager_state_strings[ request->jobmanager_state]); /* Keep the state file's timestamp up to date so that * anything scrubbing the state files of old and dead * processes leaves it alone */ if(request->job_state_file) { utime(request->job_state_file, NULL); } rc = globus_fifo_enqueue(&request->seg_event_queue, event); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.seg_deliver_event.end " "level=ERROR " "gramid=%s " "jobid=\"%s\" " "state=%d " "jmstate=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, event->job_id, event->event_type, globus_i_gram_job_manager_state_strings[ request->jobmanager_state], -rc, "Fifo enqueue failed", globus_gram_protocol_error_string(rc)); goto event_enqueue_failed; } if (event->event_type == GLOBUS_SCHEDULER_EVENT_DONE || event->event_type == GLOBUS_SCHEDULER_EVENT_FAILED) { (void) globus_gram_job_manager_unregister_job_id( request->manager, event->job_id); } if (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2) { GlobusTimeReltimeSet(delay_time, 0, 0); request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1; rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay_time); if (rc != GLOBUS_SUCCESS) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2; } } rc = GLOBUS_SUCCESS; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.seg_deliver_event.end " "level=TRACE " "gramid=%s " "jobid=\"%s\" " "state=%d " "jmstate=%s " "status=%d " "\n", request->job_contact_path, event->job_id, event->event_type, globus_i_gram_job_manager_state_strings[request->jobmanager_state], 0); event_enqueue_failed: GlobusGramJobManagerRequestUnlock(request); return rc; } /* globus_l_gram_deliver_event() */ static void globus_l_gram_fork_poll_callback( void * user_arg) { int rc; globus_gram_job_manager_t * manager = user_arg; globus_list_t * l; globus_scheduler_event_t * event; globus_list_t * events = NULL; globus_gram_jobmanager_request_t * request; int pid_count = 0; int done_count = 0; globus_list_t * job_id_list; globus_list_t * tmp; /* Walk the job id list, checking to see if the process has completed */ rc = globus_gram_job_manager_get_job_id_list( manager, &job_id_list); for (tmp = job_id_list; tmp != NULL; tmp = globus_list_rest(tmp)) { char * tok_end = NULL; char * pid_string; char * job_id_string; char * job_id_string_copy; job_id_string = globus_list_first(tmp); job_id_string_copy = strdup(job_id_string); if (job_id_string_copy == NULL) { continue; } pid_count = 0; done_count = 0; for (tok_end = NULL, pid_string = strtok_r(job_id_string, ",", &tok_end); pid_string != NULL; pid_string = strtok_r(NULL, ",", &tok_end)) { char * end = NULL; unsigned long pid; pid_count++; errno = 0; pid = strtoul(pid_string, &end, 10); if ((pid == ULONG_MAX && errno != 0) || strlen(end) != 0) { continue; } if (kill((pid_t) pid, 0) < 0) { done_count++; } } if (pid_count == done_count && pid_count > 0) { /* Synthesize done event */ event = malloc(sizeof(globus_scheduler_event_t)); event->event_type = GLOBUS_SCHEDULER_EVENT_DONE; event->job_id = job_id_string_copy; event->timestamp = time(NULL); event->exit_code = 0; event->failure_code = 0; event->raw_event = NULL; globus_list_insert(&events, event); } else { free(job_id_string_copy); } free(job_id_string); } globus_list_free(job_id_list); /* Queue events in the request-specific SEG event queue */ for (l = events; l != NULL; l = globus_list_rest(l)) { event = globus_list_first(l); GlobusGramJobManagerLock(manager); rc = globus_gram_job_manager_add_reference_by_jobid( manager, event->job_id, "SEG event", &request); GlobusGramJobManagerUnlock(manager); if (rc == GLOBUS_SUCCESS) { rc = globus_l_gram_deliver_event( request, event); if (rc != GLOBUS_SUCCESS) { goto destroy_event; } } if (rc != GLOBUS_SUCCESS) { destroy_event: globus_scheduler_event_destroy(event); } } globus_list_free(events); } /* globus_l_gram_fork_poll_callback() */ /** * @brief * Condor SEG-like periodic callback * * @details * This function is called periodically to check for condor state changes by * polling the condor log files for the jobs. This code assumes that * - The condor log files can be located in $job_state_file_dir/condor.$uniq_id * - The condor log files are in (pseudo) XML format * - The condor log files are owned by the user whose job is being logged * - The condor log files are removed when the job is cleaned up * * This function uses this algorithm to process the logs: * - Note current poll timestamp, last poll timestamp * - For each file that matches the file pattern * -- Check ownership, if not owned by user, skip file * -- Check if modified since last poll timestamp, if not changed, skip file * -- Lock File * -- Parse log file to generate SEG events (see globus_l_condor_parse_log()) * - set last poll timestamp to current poll timestamp */ static void globus_l_gram_condor_poll_callback( void * user_arg) { int rc; time_t last_poll_time; time_t poll_time; double poll_length; globus_reltime_t delay; globus_gram_job_manager_t * manager = user_arg; globus_scheduler_event_t * event; globus_fifo_t events; char * condor_log_data; globus_gram_job_manager_ref_t * ref; uint64_t uniq1, uniq2; char * path = NULL; GlobusGramJobManagerLock(manager); poll_time = time(NULL); last_poll_time = manager->seg_last_timestamp; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.condor_poll.start " "level=TRACE " "poll_time=%d " "last_poll=%d " "\n", poll_time, last_poll_time); rc = globus_fifo_init(&events); if (rc != GLOBUS_SUCCESS) { poll_time = last_poll_time; } for (ref = globus_hashtable_first(&manager->request_hash); ref != NULL; ref = globus_hashtable_next(&manager->request_hash)) { if (ref->request && ref->request->job_id_string && *ref->request->job_id_string == 0) { /* Skip jobs which have no outstanding subjobs to poll */ continue; } rc = sscanf(ref->key, "/%" SCNu64 "/%" SCNu64 "/", &uniq1, &uniq2); if (rc != 2) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.condor_poll.info " "level=WARN " "msg=\"%s\" " "key=\"%s\" " "\n", "Unexpected key format", ref->key); continue; } path = globus_common_create_string("%s/condor.%"PRIu64".%"PRIu64, manager->config->job_state_file_dir, uniq1, uniq2); if (path == NULL) { continue; } rc = globus_l_condor_read_log( manager, path, ref->seg_last_size, &condor_log_data); /* condor_log_data is null if the file hasn't changed since * seg_last_size or an error happened. */ if (rc != GLOBUS_SUCCESS || condor_log_data == NULL) { goto read_failed; } rc = globus_l_condor_parse_log( condor_log_data, ref, &events); free(condor_log_data); read_failed: free(path); path = NULL; } /* * Adjust poll interval based on polling time. If things are going slowly, * wait for a multiple of the poll time, otherwise reset the clock to * 5 seconds to avoid globus_callback scheduling this to run fewer than 5 * seconds from now. */ poll_length = difftime(time(NULL), poll_time); if (poll_length > 1.0) { GlobusTimeReltimeSet(delay, (time_t) (poll_length * 5), 0); } else { GlobusTimeReltimeSet(delay, (time_t) 5, 0); } globus_callback_adjust_period(manager->fork_callback_handle, &delay); GlobusGramJobManagerUnlock(manager); while (!globus_fifo_empty(&events)) { event = globus_fifo_dequeue(&events); globus_l_gram_seg_event_callback(manager, event); globus_scheduler_event_destroy(event); } globus_fifo_destroy(&events); GlobusGramJobManagerLock(manager); if (poll_time > manager->seg_last_timestamp) { manager->seg_last_timestamp = poll_time; } if (globus_l_condor_regexes_compiled) { regfree(&globus_l_condor_outer_re); regfree(&globus_l_condor_inner_re); globus_l_condor_regexes_compiled = GLOBUS_FALSE; } GlobusGramJobManagerUnlock(manager); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.condor_poll.end " "level=TRACE " "\n"); } /* globus_i_gram_condor_poll_callback() */ /** * @brief Generate SEG events for condor log events in a data buffer * * @details * This function uses a couple of regular expressions to pull out the * data from a (pseudo)XML condor log. This parser is adapted from the * condor SEG implement from GT4. The log messages look something like this * <c> * <<b v="t|f"/>|<s>STRING</s>|<i>INTEGER</i>|<r>REAL</r> * </c> * * We are only interested in attributes directly related to SEG events: * - EventTypeNumber * - EventTime * - Cluster * - Proc * - Subproc * - TerminatedNormally * - ReturnValue * * The parser pulls out values for all of the children of a c element, then * creates an event from it and pushes it onto the events fifo. */ static int globus_l_condor_parse_log( const char * data, globus_gram_job_manager_ref_t * ref, globus_fifo_t * events) { regmatch_t matches[8]; const char * p; int event_type_number = 0; const char * event_time; int cluster = 0; int proc = 0; int subproc = 0; globus_bool_t terminated_normally = GLOBUS_FALSE; int return_value = 0; struct tm event_tm; time_t event_stamp = 0; int rc; globus_off_t parsed_length = 0; globus_scheduler_event_t * event; enum condor_attr_e { DONTCARE, EVENT_TYPE_NUMBER, EVENT_TIME, CLUSTER, PROC, SUBPROC, TERMINATED_NORMALLY, RETURN_VALUE } condor_attr; typedef enum { CONDOR_STRING, CONDOR_INTEGER, CONDOR_BOOLEAN, CONDOR_REAL } condor_parse_type_t; union { condor_parse_type_t type; struct { condor_parse_type_t type; const char * s; size_t len; } s; struct { condor_parse_type_t type; int i; } i; struct { condor_parse_type_t type; globus_bool_t b; } b; struct { condor_parse_type_t type; float r; } r; } pu; p = data; parsed_length = 0; if (!globus_l_condor_regexes_compiled) { rc = regcomp(&globus_l_condor_outer_re, "^([[:space:]]*((<[^/]||]{2,}>|[^<])*)[[:space:]]*)", REG_EXTENDED); assert (rc == 0); rc = regcomp(&globus_l_condor_inner_re, "^([[:space:]]*" "[[:space:]]*" "(<(b) v=\"([tf])\"/>|<([sire])>([^<]*))" "[[:space:]]*)", REG_EXTENDED); assert(rc == 0); globus_l_condor_regexes_compiled = GLOBUS_TRUE; } while ((rc = regexec( &globus_l_condor_outer_re, p, (int) (sizeof(matches)/sizeof(matches[0])), matches, 0)) == 0) { const char * e = p + matches[0].rm_eo; regoff_t event_length = matches[0].rm_eo - matches[0].rm_so; p = p + matches[2].rm_so; while ((rc = regexec(&globus_l_condor_inner_re, p, (int) (sizeof(matches)/sizeof(matches[0])), matches, 0)) == 0) { size_t matchlen; const char * match; /* Regular expression match indices as xpath strings * 1: a * 2: a/@n * 3: a/b|a/s/|a/i|a/r * 4: a/b * 5: a/b/@v * 6: a/s/local-name()|a/i/local-name()|a/r/local-name() * 7: a/s/text()|a/i/text()|a/r/text() */ matchlen = (size_t) (matches[2].rm_eo - matches[2].rm_so); match = p + matches[2].rm_so; if (strncmp(match, "EventTypeNumber", matchlen) == 0) { condor_attr = EVENT_TYPE_NUMBER; } else if (strncmp(match, "EventTime", matchlen) == 0) { condor_attr = EVENT_TIME; } else if (strncmp(match, "Cluster", matchlen) == 0) { condor_attr = CLUSTER; } else if (strncmp(match, "Proc", matchlen) == 0) { condor_attr = PROC; } else if (strncmp(match, "Subproc", matchlen) == 0) { condor_attr = SUBPROC; } else if (strncmp(match, "TerminatedNormally", matchlen) == 0) { condor_attr = TERMINATED_NORMALLY; } else if (strncmp(match, "ReturnValue", matchlen) == 0) { condor_attr = RETURN_VALUE; } else { condor_attr = DONTCARE; } matchlen = (size_t) (matches[4].rm_eo - matches[4].rm_so); match = p + matches[4].rm_so; if (matches[4].rm_so != -1) { if (strncmp(match, "b", matchlen) == 0) { pu.type = CONDOR_BOOLEAN; matchlen = (size_t) (matches[5].rm_eo - matches[5].rm_so); match = p + matches[5].rm_so; if (strncmp(match, "t", matchlen) == 0) { pu.b.b = GLOBUS_TRUE; } else { pu.b.b = GLOBUS_FALSE; } } } matchlen = (size_t) (matches[6].rm_eo - matches[6].rm_so); match = p + matches[6].rm_so; if (matches[6].rm_so != -1) { if (strncmp(match, "s", matchlen) == 0) { pu.type = CONDOR_STRING; pu.s.s = p + matches[7].rm_so; pu.s.len = (size_t) (matches[7].rm_eo - matches[7].rm_so); } else if (strncmp(match, "i", matchlen) == 0) { pu.type = CONDOR_INTEGER; pu.i.i = atoi(p + matches[7].rm_so); } else if (strncmp(match, "r", matchlen) == 0) { pu.type = CONDOR_REAL; sscanf(p + matches[7].rm_so, "%f", &pu.r.r); } else if (strncmp(match, "e", matchlen) == 0) { /* ? */ pu.type = CONDOR_STRING; pu.s.s = p + matches[7].rm_so; pu.s.len = (size_t) (matches[7].rm_eo - matches[7].rm_so); } } switch (condor_attr) { case EVENT_TYPE_NUMBER: globus_assert (pu.type == CONDOR_INTEGER); event_type_number = pu.i.i; break; case EVENT_TIME: globus_assert (pu.type == CONDOR_STRING); event_time = pu.s.s; globus_strptime( (char *) event_time, "%Y-%m-%dT%H:%M:%S", &event_tm); event_stamp = mktime(&event_tm); break; case CLUSTER: globus_assert (pu.type == CONDOR_INTEGER); cluster = pu.i.i; break; case PROC: globus_assert (pu.type == CONDOR_INTEGER); proc = pu.i.i; break; case SUBPROC: globus_assert (pu.type == CONDOR_INTEGER); subproc = pu.i.i; break; case TERMINATED_NORMALLY: globus_assert (pu.type == CONDOR_BOOLEAN); terminated_normally = pu.b.b; break; case RETURN_VALUE: globus_assert (pu.type == CONDOR_INTEGER); return_value = pu.i.i; break; case DONTCARE: default: break; } p = p + matches[1].rm_eo; } p = e; parsed_length += event_length; event = NULL; switch (event_type_number) { case 0: /* SubmitEvent */ event = calloc(1, sizeof(globus_scheduler_event_t)); event->event_type = GLOBUS_SCHEDULER_EVENT_PENDING; event->job_id = globus_common_create_string("%03d.%03d.%03d", cluster, proc, subproc); event->timestamp = event_stamp; globus_fifo_enqueue(events, event); break; case 1: /* ExecuteEvent */ event = calloc(1, sizeof(globus_scheduler_event_t)); event->event_type = GLOBUS_SCHEDULER_EVENT_ACTIVE; event->job_id = globus_common_create_string("%03d.%03d.%03d", cluster, proc, subproc); event->timestamp = event_stamp; globus_fifo_enqueue(events, event); break; case 5: /* JobTerminatedEvent */ if (terminated_normally) { event = calloc(1, sizeof(globus_scheduler_event_t)); event->event_type = GLOBUS_SCHEDULER_EVENT_DONE; event->job_id = globus_common_create_string("%03d.%03d.%03d", cluster, proc, subproc); event->timestamp = event_stamp; event->exit_code = return_value; globus_fifo_enqueue(events, event); } else { case 9: /* JobAbortedEvent */ event = calloc(1, sizeof(globus_scheduler_event_t)); event->event_type = GLOBUS_SCHEDULER_EVENT_FAILED; event->job_id = globus_common_create_string("%03d.%03d.%03d", cluster, proc, subproc); event->timestamp = event_stamp; event->failure_code = return_value; globus_fifo_enqueue(events, event); } break; } if (event && event->timestamp > ref->seg_last_timestamp) { ref->seg_last_timestamp = event->timestamp; } } ref->seg_last_size += parsed_length; return 0; } /* globus_l_condor_parse_log() */ static int globus_l_condor_read_log( globus_gram_job_manager_t *manager, const char *path, size_t last_size, char **data) { int condor_log_fd; char *condor_log_data; struct stat st; struct flock flock_data; int rc = GLOBUS_SUCCESS; *data = NULL; condor_log_fd = open(path, O_RDONLY); if (condor_log_fd < 0) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.condor_poll.info " "level=TRACE " "message=\"%s\" " "errno=%d " "errstr=\"%s\" " "\n", "open failed", errno, strerror(errno)); rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_STATE_FILE; goto open_failed; } rc = fstat(condor_log_fd, &st); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.condor_poll.info " "level=TRACE " "message=\"%s\" " "errno=%d " "errstr=\"%s\" " "\n", "fstat failed", errno, strerror(errno)); rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto fstat_failed; } if (st.st_uid != getuid()) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.condor_poll.info " "level=TRACE " "message=\"%s\" " "uid.me=%ld " "uid.file=%ld " "\n", "uid mismatch", (long) getuid(), (long) st.st_uid); rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto uid_mismatch; } if (st.st_size <= last_size) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.condor_poll.info " "level=TRACE " "message=\"%s\" " "file=\"%s\" " "size.last_poll=%lld " "size.file=%lld " "\n", "file hasn't grown since last poll", path, (long long) last_size, (long long) st.st_size); goto not_grown; } flock_data.l_type = F_RDLCK; flock_data.l_whence = SEEK_SET; flock_data.l_start = 0; flock_data.l_len = 0; flock_data.l_pid = getpid(); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.condor_poll.info " "level=TRACE " "message=\"%s\" " "file=\"%s\" " "\n", "Checking file for new events", path); do { rc = fcntl(condor_log_fd, F_SETLKW, &flock_data); if (rc != 0 && errno != EINTR) { goto fcntl_lock_failed; } } while (rc == -1); { ssize_t read_res; size_t amt_to_read = st.st_size - last_size; size_t amt_read = 0; off_t off_rc; condor_log_data = malloc(amt_to_read + 1); if (condor_log_data == NULL) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.condor_poll.info " "level=WARN " "message=\"%s\" " "filename=\"%s\" " "size=%llu " "errno=%d " "reason=%s\n", "Error allocating memory for condor log", path, (unsigned long long) st.st_size, errno, strerror(errno)); rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto malloc_data_failed; } condor_log_data[amt_to_read] = 0; off_rc = lseek(condor_log_fd, (off_t) last_size, SEEK_SET); if (off_rc < 0) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.condor_poll.info " "level=WARN " "message=\"%s\" " "filename=\"%s\" " "size=%llu " "errno=%d " "reason=%s\n", "Error seeking in condor log", path, (unsigned long long) st.st_size, errno, strerror(errno)); rc = GLOBUS_GRAM_PROTOCOL_ERROR_TEMP_SCRIPT_FILE_FAILED; goto seek_failed; } while (amt_to_read > amt_read) { read_res = read( condor_log_fd, condor_log_data + amt_read, amt_to_read - amt_read); if (read_res < 0 && errno == EINTR) { continue; } else if (read_res > 0) { amt_read += read_res; } else { /* Some other error or short read */ break; } } if (amt_to_read != amt_read) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.condor_poll.info " "level=WARN " "message=\"%s\" " "filename=\"%s\" " "size=%llu " "amt_read=%llu " "errno=%d " "reason=%s\n", "Error reading condor log", path, (unsigned long long) st.st_size, (unsigned long long) amt_read, errno, strerror(errno)); goto read_failed; } *data = condor_log_data; rc = GLOBUS_SUCCESS; } if (rc != GLOBUS_SUCCESS) { read_failed: seek_failed: free(condor_log_data); } malloc_data_failed: fcntl_lock_failed: not_grown: uid_mismatch: fstat_failed: close(condor_log_fd); open_failed: return rc; } int globus_gram_job_manager_seg_parse_condor_id( globus_gram_jobmanager_request_t * request, char ** condor_idp) { char * condor_name; char * condor_data; globus_fifo_t events; int rc = GLOBUS_SUCCESS; time_t old_last_timestamp; globus_off_t old_last_size; char * condor_id; globus_gram_job_manager_ref_t * ref; globus_scheduler_event_t * event; *condor_idp = NULL; GlobusGramJobManagerLock(request->manager); ref = globus_hashtable_lookup( &request->manager->request_hash, request->job_contact_path); if (!ref) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND; goto no_ref; } condor_name = globus_common_create_string( "%s/condor.%s", request->config->job_state_file_dir, request->uniq_id); if (condor_name == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto name_malloc_fail; } rc = globus_l_condor_read_log( request->manager, condor_name, 0, &condor_data); if (rc != GLOBUS_SUCCESS || condor_data == NULL) { goto read_failed; } rc = globus_fifo_init(&events); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto fifo_init_failed; } /* Don't want to affect the ref timestamp for these events, just * pull out the jobid value */ old_last_timestamp = ref->seg_last_timestamp; old_last_size = ref->seg_last_size; globus_l_condor_parse_log( condor_data, ref, &events); ref->seg_last_timestamp = old_last_timestamp; ref->seg_last_size = old_last_size; /* If there's any event in this file, then we'll assume that's the * job id base for this job and construct the subjob ids based on the * rsl count attribute */ if (!globus_fifo_empty(&events)) { event = globus_fifo_peek(&events); if (event->job_id != NULL) { int cluster; int count; int i; char *p; size_t subjob_len; rc = globus_gram_job_manager_rsl_attribute_get_int_value( request->rsl, GLOBUS_GRAM_PROTOCOL_COUNT_PARAM, &count); if (rc != GLOBUS_SUCCESS) { goto bad_count; } sscanf(event->job_id, "%d", &cluster); subjob_len = globus_libc_printf_length( "%03d.%03d.%03d,", cluster, count, 0); condor_id = malloc(subjob_len * count + 1); if (condor_id == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto condor_id_malloc_failed; } condor_id[0] = 0; p = condor_id; for (i = 0; i < count; i++) { int chars; chars = sprintf(p, "%03d.%03d.%03d,", cluster, i, 0); p += chars; } *(p-1) = 0; *condor_idp = condor_id; } } condor_id_malloc_failed: bad_count: /* * Should probably put these directly into the request's SEG event queue, * but for simplicity, just discard these here and let the regular poll * callback handle them. */ while (!globus_fifo_empty(&events)) { event = globus_fifo_dequeue(&events); globus_scheduler_event_destroy(event); } globus_fifo_destroy(&events); fifo_init_failed: free(condor_data); read_failed: free(condor_name); name_malloc_fail: no_ref: GlobusGramJobManagerUnlock(request->manager); return rc; } /* globus_gram_job_manager_seg_parse_condor_id() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_staging.c0000644000000000000000000000013214243161125025777 xustar000000000000000030 mtime=1653400149.358970121 30 atime=1653401831.495125518 30 ctime=1653404021.247746965 globus_gram_job_manager-15.8/globus_gram_job_manager_staging.c0000664000175000017500000010140414243161125026140 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file globus_gram_job_manager_staging.c * @brief GRAM Job Manager Staging Tracking */ #include "globus_gram_job_manager.h" #include "globus_rsl_assist.h" #include static int globus_l_gram_job_manager_staging_add_pair( globus_gram_jobmanager_request_t * request, globus_rsl_value_t * from, globus_rsl_value_t * to, const char * type); static globus_bool_t globus_l_gram_job_manager_staging_match( void * datum, void * arg); static int globus_l_gram_staging_list_read_state( globus_gram_jobmanager_request_t * request, FILE * fp, char * buffer, globus_gram_job_manager_staging_type_t staging_type, globus_list_t ** staging_list); static void globus_l_gram_staging_list_free( globus_list_t ** staging_list); static int globus_l_staging_replace_stream( globus_gram_jobmanager_request_t * request, char * parameter, char * cached_destination); #endif int globus_gram_job_manager_staging_create_list( globus_gram_jobmanager_request_t * request) { int i; int rc; globus_rsl_value_t * from; globus_rsl_value_t * to; globus_list_t * list; globus_list_t * pairs; char * can_stage_list[] = { GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_PARAM, GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_SHARED_PARAM, GLOBUS_GRAM_PROTOCOL_FILE_STAGE_OUT_PARAM, NULL }; int errors_list[] = { GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN_SHARED, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_OUT, 0 }; if(request->jm_restart) { return GLOBUS_SUCCESS; } for(i = 0; can_stage_list[i] != NULL; i++) { list = globus_rsl_param_get_values(request->rsl, can_stage_list[i]); if(!list) { continue; } while(!globus_list_empty(list)) { pairs = globus_rsl_value_sequence_get_value_list( globus_list_first(list)); list = globus_list_rest(list); if(globus_list_size(pairs) != 2) { rc = errors_list[i]; goto failed_adding_exit; } from = globus_list_first(pairs); to = globus_list_first(globus_list_rest(pairs)); rc = globus_l_gram_job_manager_staging_add_pair( request, from, to, can_stage_list[i]); if(rc != GLOBUS_SUCCESS) { goto failed_adding_exit; } } } rc = globus_gram_job_manager_streaming_list_replace(request); failed_adding_exit: if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_staging_free_all(request); } return rc; } /* globus_gram_job_manager_staging_create_list() */ int globus_gram_job_manager_streaming_list_replace( globus_gram_jobmanager_request_t * request) { globus_list_t * old_list; int rc; /* We'll restore to the old list if this fails */ old_list = request->stage_stream_todo; request->stage_stream_todo = NULL; rc = globus_l_staging_replace_stream( request, GLOBUS_GRAM_PROTOCOL_STDOUT_PARAM, request->cached_stdout); if (rc != GLOBUS_SUCCESS) { goto bad_stdout; } rc = globus_l_staging_replace_stream( request, GLOBUS_GRAM_PROTOCOL_STDERR_PARAM, request->cached_stderr); if (rc != GLOBUS_SUCCESS) { goto bad_stderr; } if (rc == GLOBUS_SUCCESS) { globus_l_gram_staging_list_free(&old_list); old_list = NULL; } else { bad_stderr: bad_stdout: globus_l_gram_staging_list_free(&request->stage_stream_todo); request->stage_stream_todo = old_list; } return rc; } /* globus_gram_job_manager_streaming_list_replace() */ static int globus_l_staging_replace_one_stream( globus_gram_jobmanager_request_t * request, char * parameter, char * cached_destination, globus_list_t * list, globus_bool_t single) { globus_rsl_value_t from_cached; globus_rsl_value_t *to = NULL; globus_rsl_value_t *tag = NULL; char *evaled_to = NULL; char *evaled_tag = NULL; char *fname = NULL; unsigned long timestamp = GLOBUS_GASS_CACHE_TIMESTAMP_UNKNOWN; int rc = GLOBUS_SUCCESS; static const char gass_cache_scheme[] = "x-gass-cache://"; from_cached.type = GLOBUS_RSL_VALUE_LITERAL; from_cached.value.literal.string = cached_destination; /* * First element of the list is the destination, the second is the * (optional) tag. Both (if present) must be something that * evaluates to a string and not a sequence. */ to = globus_list_first(list); list = globus_list_rest(list); if (!globus_list_empty(list)) { tag = globus_list_first(list); list = globus_list_rest(list); } if (globus_rsl_value_is_sequence(to) || ((tag != NULL) && globus_rsl_value_is_sequence(tag)) || list != NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT; goto bad_value; } rc = globus_gram_job_manager_rsl_evaluate_value( &request->symbol_table, to, &evaled_to); if (rc != GLOBUS_SUCCESS) { goto bad_value; } /* If it evaluates to a string, and is not an x-gass-cache URL, * then tag must be NULL */ if (strncmp(evaled_to, gass_cache_scheme, sizeof(gass_cache_scheme)-1) != 0 && tag != NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT; free(evaled_to); goto bad_value; } if (tag != NULL) { /* If there's a tag, evaluate it and add it to the cache file * so that the file won't get erased when the job terminates */ rc = globus_gram_job_manager_rsl_evaluate_value( &request->symbol_table, tag, &evaled_tag); if (rc != GLOBUS_SUCCESS) { goto bad_value; } rc = globus_gass_cache_add( request->cache_handle, evaled_to, evaled_tag, GLOBUS_TRUE, ×tamp, &fname); if (rc != GLOBUS_GASS_CACHE_ADD_NEW && rc != GLOBUS_GASS_CACHE_ADD_EXISTS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT; goto bad_value; } free(fname); rc = globus_gass_cache_add_done( request->cache_handle, evaled_to, evaled_tag, timestamp); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT; goto bad_value; } } /* If there is more than one output destination, or this one is * a non-local destination, then add it to the streamout list */ if ((!single) || (strstr(evaled_to, "://") != NULL && strncmp(evaled_to, gass_cache_scheme, sizeof(gass_cache_scheme)-1) != 0)) { rc = globus_l_gram_job_manager_staging_add_pair( request, &from_cached, to, "filestreamout"); free(evaled_to); evaled_to = NULL; if (rc != GLOBUS_SUCCESS) { goto bad_value; } } else if (strstr(evaled_to, "://") == NULL) { /* If it's a local file, check that it is writable */ int tmpfd; tmpfd = open(evaled_to, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR); if (tmpfd < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT; free(evaled_to); goto bad_value; } else { close(tmpfd); } } if (evaled_to) { free(evaled_to); } if (rc != GLOBUS_SUCCESS) { bad_value: /* Normalize error types to match the RSL attribute that we are * processing */ if (strcmp(parameter, GLOBUS_GRAM_PROTOCOL_STDERR_PARAM) == 0) { switch (rc) { case GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDERR; break; case GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT: rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDERR; break; default: break; } } } return rc; } /* globus_l_staging_replace_one_stream() */ static int globus_l_staging_replace_stream( globus_gram_jobmanager_request_t * request, char * parameter, char * cached_destination) { globus_list_t * list; globus_rsl_value_t *to; globus_bool_t single; int rc = GLOBUS_SUCCESS; list = globus_rsl_param_get_values( request->rsl, parameter); if (list == NULL) { /* Attempting to replace something that was never in the job * RSL---too bad */ return GLOBUS_SUCCESS; } /* The stdout and stderr attributes can occur in two forms: * - stdout = destination [tag] * - stdout = (destination [tag])+ * That is, either as a sequence of 1 or 2 values, or as a sequence of * sequences. * * In either form, if there is only one destination, and it's a local file * or x-gass-cache URL, we can safely write directly to that file and don't * need it to be staged after the job completes. Otherwise, we'll have to * write to the stdout (stderr) file in the job directory and copy it * during the STAGE_OUT state. */ if (! globus_rsl_value_is_sequence(globus_list_first(list))) { rc = globus_l_staging_replace_one_stream( request, parameter, cached_destination, list, GLOBUS_TRUE); } else { single = (globus_list_size(list) == 1); while (!globus_list_empty(list)) { globus_list_t *sequence_list; to = globus_list_first(list); list = globus_list_rest(list); if (!globus_rsl_value_is_sequence(to)) { /* Bare value instead of a sequence */ rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT; goto bad_value; } sequence_list = globus_rsl_value_sequence_get_value_list(to); rc = globus_l_staging_replace_one_stream( request, parameter, cached_destination, sequence_list, single); if (rc != GLOBUS_SUCCESS) { goto bad_value; } } } if (rc != GLOBUS_SUCCESS) { bad_value: /* Normalize error types to match the RSL attribute that we are * processing */ if (strcmp(parameter, GLOBUS_GRAM_PROTOCOL_STDERR_PARAM) == 0) { switch (rc) { case GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDERR; break; case GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT: rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDERR; break; default: break; } } } return rc; } /* globus_gram_job_manager_staging_create_list() */ int globus_gram_job_manager_staging_remove( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_staging_type_t type, char * from, char * to) { globus_gram_job_manager_staging_info_t query; globus_gram_job_manager_staging_info_t * item; globus_list_t ** list = NULL; globus_list_t * node; const char * typestr = ""; switch(type) { case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN: typestr = "file_stage_in"; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED: typestr = "file_stage_in_shared"; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT: typestr = "file_stage_out"; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS: typestr = "file_stream_out"; break; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.staging_remove.start " "level=DEBUG " "gramid=%s " "src=\"%s\" " "dst=\"%s\" " "type=%s " "\n", request->job_contact_path, from, to, typestr); query.evaled_from = from; query.evaled_to = to; query.type = type; switch(type) { case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN: list = &request->stage_in_todo; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED: list = &request->stage_in_shared_todo; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT: list = &request->stage_out_todo; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS: list = &request->stage_stream_todo; break; } node = globus_list_search_pred( *list, globus_l_gram_job_manager_staging_match, &query); if(node) { item = globus_list_remove(list, node); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.staging_remove.end " "level=TRACE " "gramid=%s " "msg=\"%s\" " "src=\"%s\" " "dst=\"%s\" " "type=%s " "status=%d " "\n", request->job_contact_path, "File staged", from, to, typestr, 0); if (item->type == GLOBUS_GRAM_JOB_MANAGER_STAGE_IN) { if (strncmp(item->evaled_from, "http://", 7) == 0) { request->job_stats.file_stage_in_http_count++; } else if (strncmp(item->evaled_from, "https://", 8) == 0) { request->job_stats.file_stage_in_https_count++; } else if (strncmp(item->evaled_from, "ftp://", 6) == 0) { request->job_stats.file_stage_in_ftp_count++; } else if (strncmp(item->evaled_from, "gsiftp://", 6) == 0) { request->job_stats.file_stage_in_gsiftp_count++; } } else if (item->type == GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED) { if (strncmp(item->evaled_from, "http://", 7) == 0) { request->job_stats.file_stage_in_shared_http_count++; } else if (strncmp(item->evaled_from, "https://", 8) == 0) { request->job_stats.file_stage_in_shared_https_count++; } else if (strncmp(item->evaled_from, "ftp://", 6) == 0) { request->job_stats.file_stage_in_shared_ftp_count++; } else if (strncmp(item->evaled_from, "gsiftp://", 6) == 0) { request->job_stats.file_stage_in_shared_gsiftp_count++; } } else if (item->type == GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT || item->type == GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS) { if (strncmp(item->evaled_to, "http://", 7) == 0) { request->job_stats.file_stage_out_http_count++; } else if (strncmp(item->evaled_to, "https://", 8) == 0) { request->job_stats.file_stage_out_https_count++; } else if (strncmp(item->evaled_to, "ftp://", 6) == 0) { request->job_stats.file_stage_out_ftp_count++; } else if (strncmp(item->evaled_to, "gsiftp://", 6) == 0) { request->job_stats.file_stage_out_gsiftp_count++; } } globus_rsl_value_free_recursive(item->from); globus_rsl_value_free_recursive(item->to); free(item->evaled_from); free(item->evaled_to); free(item); } else { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.staging_remove.end " "level=WARN " "gramid=%s " "msg=\"%s\" " "src=\"%s\" " "dst=\"%s\" " "type=%s " "status=%d " "msg=\"%s\" " "\n", request->job_contact_path, "File staged", from, to, typestr, 0, "Unexpected staging completion"); } return GLOBUS_SUCCESS; } /* globus_gram_job_manager_staging_remove() */ int globus_gram_job_manager_staging_write_state( globus_gram_jobmanager_request_t * request, FILE * fp) { globus_list_t * tmp_list; globus_gram_job_manager_staging_info_t * info; char * tmp_str; int rc; rc = fprintf(fp, "%d\n", globus_list_size(request->stage_in_todo)); if (rc < 0) { return GLOBUS_FAILURE; } tmp_list = request->stage_in_todo; while(!globus_list_empty(tmp_list)) { info = globus_list_first(tmp_list); tmp_list = globus_list_rest(tmp_list); tmp_str = globus_rsl_value_unparse(info->from); rc = fprintf(fp, "%s\n", tmp_str); free(tmp_str); if (rc < 0) { return GLOBUS_FAILURE; } tmp_str = globus_rsl_value_unparse(info->to); rc = fprintf(fp, "%s\n", tmp_str); free(tmp_str); if (rc < 0) { return GLOBUS_FAILURE; } } rc = fprintf(fp, "%d\n", globus_list_size(request->stage_in_shared_todo)); if (rc < 0) { return GLOBUS_FAILURE; } tmp_list = request->stage_in_shared_todo; while(!globus_list_empty(tmp_list)) { info = globus_list_first(tmp_list); tmp_list = globus_list_rest(tmp_list); tmp_str = globus_rsl_value_unparse(info->from); rc = fprintf(fp, "%s\n", tmp_str); free(tmp_str); if (rc < 0) { return GLOBUS_FAILURE; } tmp_str = globus_rsl_value_unparse(info->to); rc = fprintf(fp, "%s\n", tmp_str); free(tmp_str); if (rc < 0) { return GLOBUS_FAILURE; } } rc = fprintf(fp, "%d\n", globus_list_size(request->stage_out_todo)); if (rc < 0) { return GLOBUS_FAILURE; } tmp_list = request->stage_out_todo; while(!globus_list_empty(tmp_list)) { info = globus_list_first(tmp_list); tmp_list = globus_list_rest(tmp_list); tmp_str = globus_rsl_value_unparse(info->from); rc = fprintf(fp, "%s\n", tmp_str); free(tmp_str); if (rc < 0) { return GLOBUS_FAILURE; } tmp_str = globus_rsl_value_unparse(info->to); rc = fprintf(fp, "%s\n", tmp_str); free(tmp_str); if (rc < 0) { return GLOBUS_FAILURE; } } rc = fprintf(fp, "%d\n", globus_list_size(request->stage_stream_todo)); tmp_list = request->stage_stream_todo; while(!globus_list_empty(tmp_list)) { info = globus_list_first(tmp_list); tmp_list = globus_list_rest(tmp_list); tmp_str = globus_rsl_value_unparse(info->from); rc = fprintf(fp, "%s\n", tmp_str); free(tmp_str); if (rc < 0) { return GLOBUS_FAILURE; } tmp_str = globus_rsl_value_unparse(info->to); rc = fprintf(fp, "%s\n", tmp_str); free(tmp_str); if (rc < 0) { return GLOBUS_FAILURE; } } return GLOBUS_SUCCESS; } /* globus_gram_job_manager_staging_write_state() */ int globus_gram_job_manager_staging_read_state( globus_gram_jobmanager_request_t * request, FILE * fp) { int rc = GLOBUS_SUCCESS; char * buffer; size_t buffer_len; long offset; offset = ftell(fp); if (fseek(fp, 0, SEEK_END) < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto out; } buffer_len = ftell(fp) - offset; if (fseek(fp, offset, SEEK_SET) < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto out; } buffer = malloc(buffer_len+1); if (buffer == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } rc = globus_l_gram_staging_list_read_state( request, fp, buffer, GLOBUS_GRAM_JOB_MANAGER_STAGE_IN, &request->stage_in_todo); if (rc != GLOBUS_SUCCESS) { goto free_buffer_out; } rc = globus_l_gram_staging_list_read_state( request, fp, buffer, GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED, &request->stage_in_shared_todo); if (rc != GLOBUS_SUCCESS) { goto free_buffer_out; } rc = globus_l_gram_staging_list_read_state( request, fp, buffer, GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT, &request->stage_out_todo); if (rc != GLOBUS_SUCCESS) { goto free_buffer_out; } rc = globus_l_gram_staging_list_read_state( request, fp, buffer, GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS, &request->stage_stream_todo); free_buffer_out: free(buffer); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_staging_free_all(request); } out: return rc; } /* globus_gram_job_manager_staging_read_state() */ static int globus_l_gram_job_manager_staging_add_pair( globus_gram_jobmanager_request_t * request, globus_rsl_value_t * from, globus_rsl_value_t * to, const char * type) { int rc; globus_gram_job_manager_staging_info_t * info; info = calloc( 1, sizeof(globus_gram_job_manager_staging_info_t)); if(!info) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto info_calloc_failed; } info->from = globus_rsl_value_copy_recursive(from); info->to = globus_rsl_value_copy_recursive(to); if(strcmp(type, GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_PARAM) == 0) { info->type = GLOBUS_GRAM_JOB_MANAGER_STAGE_IN; } else if(strcmp(type, GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_SHARED_PARAM)== 0) { info->type = GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED; } else if(strcmp(type, GLOBUS_GRAM_PROTOCOL_FILE_STAGE_OUT_PARAM) == 0) { info->type = GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT; } else if (strcmp(type, "filestreamout") == 0) { info->type = GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS; } rc = globus_gram_job_manager_rsl_evaluate_value( &request->symbol_table, info->from, &info->evaled_from); if(!info->evaled_from) { if(rc == GLOBUS_SUCCESS) { /* Not a literal after a successful eval */ switch(info->type) { case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN_SHARED; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_OUT; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT; break; } } goto eval_from_failed; } rc = globus_gram_job_manager_rsl_evaluate_value( &request->symbol_table, info->to, &info->evaled_to); if(!info->evaled_to) { if(rc == GLOBUS_SUCCESS) { /* Not a literal after a successful eval */ switch(info->type) { case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN_SHARED; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_OUT; break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS: rc = GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT; break; } } goto eval_to_failed; } switch(info->type) { case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN: globus_list_insert(&request->stage_in_todo, info); break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_IN_SHARED: globus_list_insert(&request->stage_in_shared_todo, info); break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_OUT: globus_list_insert(&request->stage_out_todo, info); break; case GLOBUS_GRAM_JOB_MANAGER_STAGE_STREAMS: if (strcmp(info->evaled_to, "/dev/null") == 0) { globus_rsl_value_free_recursive(info->from); globus_rsl_value_free_recursive(info->to); free(info->evaled_from); free(info->evaled_to); free(info); } else { globus_list_insert(&request->stage_stream_todo, info); } break; } return GLOBUS_SUCCESS; eval_to_failed: free(info->evaled_from); eval_from_failed: free(info); info_calloc_failed: return rc; } /* globus_l_gram_job_manager_staging_add_url() */ static globus_bool_t globus_l_gram_job_manager_staging_match( void * datum, void * arg) { globus_gram_job_manager_staging_info_t * item; globus_gram_job_manager_staging_info_t * query; item = datum; query = arg; globus_assert(item->type == query->type); if((strcmp(item->evaled_from, query->evaled_from) == 0) && (strcmp(item->evaled_to, query->evaled_to) == 0)) { return GLOBUS_TRUE; } else { return GLOBUS_FALSE; } } /* globus_l_gram_job_manager_staging_match() */ static void globus_l_gram_staging_list_free( globus_list_t ** staging_list) { globus_gram_job_manager_staging_info_t * info; while (!globus_list_empty(*staging_list)) { info = globus_list_remove(staging_list, *staging_list); globus_rsl_value_free_recursive(info->from); globus_rsl_value_free_recursive(info->to); free(info->evaled_from); free(info->evaled_to); free(info); } } void globus_gram_job_manager_staging_free_all( globus_gram_jobmanager_request_t * request) { globus_l_gram_staging_list_free(&request->stage_in_todo); globus_l_gram_staging_list_free(&request->stage_in_shared_todo); globus_l_gram_staging_list_free(&request->stage_out_todo); globus_l_gram_staging_list_free(&request->stage_stream_todo); } /* globus_gram_job_manager_staging_free_all() */ /** * Read a list of staging pairs from the state file * * @param request * Job request associated with the state file (used for * RSL evaluation) * @param fp * State file opened for reading * @param buffer * Buffer containing the state file data * @param staging_type * Type of staging list to read * @param staging_list * List to insert the staging work into. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE * Error reading state file * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Out of memory */ static int globus_l_gram_staging_list_read_state( globus_gram_jobmanager_request_t * request, FILE * fp, char * buffer, globus_gram_job_manager_staging_type_t staging_type, globus_list_t ** staging_list) { int rc = GLOBUS_SUCCESS; int i, tmp_list_size; globus_gram_job_manager_staging_info_t * info; if (fscanf(fp, "%[^\n]%*c", buffer) < 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto out; } tmp_list_size = atoi(buffer); for(i = 0; i < tmp_list_size; i++) { info = calloc( 1, sizeof(globus_gram_job_manager_staging_info_t)); if (info == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto out; } info->type = staging_type; if(fscanf(fp, "%[^\n]%*c", buffer) < 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto free_info_out; } rc = globus_gram_job_manager_rsl_parse_value( buffer, &info->from); if (rc != GLOBUS_SUCCESS) { goto free_info_out; } if(fscanf(fp, "%[^\n]%*c", buffer) < 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; goto free_info_from_out; } rc = globus_gram_job_manager_rsl_parse_value( buffer, &info->to); if (rc != GLOBUS_SUCCESS) { goto free_info_from_out; } rc = globus_gram_job_manager_rsl_evaluate_value( &request->symbol_table, info->from, &info->evaled_from); if (rc != GLOBUS_SUCCESS) { goto free_info_to_out; } rc = globus_gram_job_manager_rsl_evaluate_value( &request->symbol_table, info->to, &info->evaled_to); if (rc != GLOBUS_SUCCESS) { goto free_info_evaled_from_out; } globus_list_insert(staging_list, info); } if (rc != GLOBUS_SUCCESS) { free_info_evaled_from_out: free(info->evaled_from); free_info_to_out: free(info->to); free_info_from_out: free(info->from); free_info_out: free(info); } out: return rc; } /* globus_l_gram_staging_list_read_state() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_state.c0000644000000000000000000000013214243161125025463 xustar000000000000000030 mtime=1653400149.359970111 30 atime=1653401831.514125339 30 ctime=1653404021.248746956 globus_gram_job_manager-15.8/globus_gram_job_manager_state.c0000664000175000017500000022414114243161125025630 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file globus_gram_job_manager_state.c * @brief Job Manager State Machine */ #include "globus_gram_job_manager.h" #include "globus_rsl_assist.h" #include "globus_gsi_system_config.h" #include "globus_gsi_system_config_constants.h" #include "version.h" #include /* Module Specific Prototypes */ const char * globus_i_gram_job_manager_state_strings[] = { "GLOBUS_GRAM_JOB_MANAGER_STATE_START", "GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE", "GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED", "GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN", "GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT", "GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1", "GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2", "GLOBUS_GRAM_JOB_MANAGER_STATE_CLOSE_OUTPUT", "GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT", "GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END", "GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED", "GLOBUS_GRAM_JOB_MANAGER_STATE_FILE_CLEAN_UP", "GLOBUS_GRAM_JOB_MANAGER_STATE_SCRATCH_CLEAN_UP", "GLOBUS_GRAM_JOB_MANAGER_STATE_CACHE_CLEAN_UP", "GLOBUS_GRAM_JOB_MANAGER_STATE_DONE", "GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED", "GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT", "GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE", "GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED", "GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_FILE_CLEAN_UP", "GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP", "GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CACHE_CLEAN_UP", "GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE", "GLOBUS_GRAM_JOB_MANAGER_STATE_STOP", "GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1", "GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2", NULL, /*"GLOBUS_GRAM_JOB_MANAGER_STATE_PROXY_REFRESH ,*/ "GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT", "GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1", "GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2", NULL /*"GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_PROXY_REFRESH" */ }; static globus_bool_t globus_l_gram_job_manager_set_restart_state( globus_gram_jobmanager_request_t * request); static int globus_l_gram_job_manager_add_cache_info( globus_gram_jobmanager_request_t * request); static void globus_l_gram_job_manager_cancel_queries( globus_gram_jobmanager_request_t * request); static int globus_l_gram_gss_send_fd( void * arg, void * buffer, size_t length); static void globus_l_gram_file_cleanup( globus_gram_jobmanager_request_t * request); static globus_bool_t globus_l_gram_job_manager_state_machine( globus_gram_jobmanager_request_t * request); #endif /* * Callback to enter the state machine from a timeout. Used to * handle two-phase commit timeouts, and delays between calls to the * poll script. */ void globus_gram_job_manager_state_machine_callback( void * user_arg) { globus_gram_jobmanager_request_t * request; globus_bool_t event_registered; int rc; request = user_arg; GlobusGramJobManagerRequestLock(request); /* * If nobody tried to cancel this callback, then we need to unregister * it to free memory in the callback code. */ if(request->poll_timer != GLOBUS_HANDLE_TABLE_NO_HANDLE) { globus_callback_unregister(request->poll_timer, NULL, NULL, NULL); request->poll_timer = GLOBUS_HANDLE_TABLE_NO_HANDLE; } do { event_registered = globus_l_gram_job_manager_state_machine(request); } while(!event_registered); GlobusGramJobManagerRequestUnlock(request); rc = globus_gram_job_manager_remove_reference( request->manager, request->job_contact_path, "state machine"); assert(rc == GLOBUS_SUCCESS); } /* globus_gram_job_manager_state_machine_callback() */ /* * Job Manager state machine. */ static globus_bool_t globus_l_gram_job_manager_state_machine( globus_gram_jobmanager_request_t * request) { globus_bool_t event_registered = GLOBUS_FALSE; globus_reltime_t delay_time; int rc = 0; globus_gram_job_manager_query_t * query; globus_bool_t first_poll = GLOBUS_FALSE; globus_gram_jobmanager_state_t next_state; char exit_code_string[] = "unknown"; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.state_machine.start " "level=TRACE " "gramid=%s " "jmstate=%s " "job_state=%d " "\n", request->job_contact_path, globus_i_gram_job_manager_state_strings[request->jobmanager_state], request->status); switch(request->jobmanager_state) { case GLOBUS_GRAM_JOB_MANAGER_STATE_START: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE; /* * To do a two-phase commit, we need to send an error * message (WAITING_FOR_COMMIT) in the initial reply; otherwise, * we just return the current status code. * * When doing a dry run, we don't send the reply until we would * submit the job (no state callbacks with a dry-run.) */ if(!request->dry_run) { if(request->two_phase_commit != 0 && rc == GLOBUS_SUCCESS) { GlobusTimeReltimeSet(delay_time, request->two_phase_commit, 0); rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay_time); if (rc == GLOBUS_SUCCESS) { event_registered = GLOBUS_TRUE; } } } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE: if(request->two_phase_commit != 0 && request->commit_extend != 0) { GlobusTimeReltimeSet(delay_time, request->commit_extend, 0); request->commit_extend = 0; rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay_time); if (rc == GLOBUS_SUCCESS) { event_registered = GLOBUS_TRUE; } } else if(request->two_phase_commit == 0) { /* Nothing to do here if we are not doing the two-phase * commit protocol */ request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED; } else if(request->jm_restart) { /* * commit didn't happen, but this was a restart of a job manager * so we'll just stop and leave the job manager state. */ request->poll_timer = GLOBUS_HANDLE_TABLE_NO_HANDLE; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; request->stop_reason = GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT; } else { request->poll_timer = GLOBUS_HANDLE_TABLE_NO_HANDLE; /* Send failed message later */ request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT; request->unsent_status_change = GLOBUS_TRUE; } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED: if(request->jm_restart) { if(globus_l_gram_job_manager_set_restart_state(request)) { break; } } request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN; if(globus_gram_job_manager_rsl_need_stage_in(request)) { globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN); if(!request->dry_run) { globus_gram_job_manager_contact_state_callback( request, GLOBUS_FALSE); } rc = globus_gram_job_manager_script_stage_in(request); if(rc != GLOBUS_SUCCESS) { request->failure_code = rc; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; } else { event_registered = GLOBUS_TRUE; } } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN: if((!globus_list_empty(request->stage_in_todo)) || (!globus_list_empty(request->stage_in_shared_todo))) { /* Didn't successfully stage in everything. */ request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; if(request->failure_code == GLOBUS_SUCCESS) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_STAGE_IN_FAILED; } break; } request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT; if(request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && request->dry_run) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED; break; } else if(request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; break; } /* write submit state, so that condor job id recovery can work */ request->restart_state = GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT; globus_gram_job_manager_state_file_write(request); globus_gram_job_manager_seg_pause(request->manager); /* * GRAM-145: GRAM5 Job Manager fails to save SEG timestamps in job * state files * * The request state file needs to contain of the earliest time a SEG * event occurred for this job. The default value of seg_last_timestamp * is 0 which means that the job doesn't care about how far back * in time the SEG looks. We set it to the time the job is submitted so * that if a restart occurs, the job manager will be able to go back * as far as necessary for any of the jobs which are reloaded. */ request->seg_last_timestamp = time(NULL); rc = globus_gram_job_manager_script_submit(request); if(rc != GLOBUS_SUCCESS) { request->failure_code = rc; globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); if(!request->dry_run) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; request->unsent_status_change = GLOBUS_TRUE; } globus_gram_job_manager_seg_resume(request->manager); } else { event_registered = GLOBUS_TRUE; } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT: if(request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && request->dry_run) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED; globus_gram_job_manager_seg_resume(request->manager); break; } else if(request->job_id_string == NULL) { /* submission failed to generate a job id */ if(request->failure_code == GLOBUS_SUCCESS) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_SUBMIT_UNKNOWN; } globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->unsent_status_change = GLOBUS_TRUE; globus_gram_job_manager_seg_resume(request->manager); } else { rc = globus_gram_job_manager_register_job_id( request->manager, request->job_id_string, request, GLOBUS_FALSE); if (rc != GLOBUS_SUCCESS) { request->failure_code = rc; globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->unsent_status_change = GLOBUS_TRUE; } globus_l_gram_job_manager_add_cache_info(request); globus_gram_job_manager_seg_resume(request->manager); } request->queued_time = time(NULL); globus_gram_job_manager_history_file_create(request); request->job_history_status = request->status; request->restart_state = request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1; globus_gram_job_manager_state_file_write(request); first_poll = GLOBUS_TRUE; /* FALLSTHROUGH so we can act on a job state change returned from * the submit script. */ case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1: if (! globus_fifo_empty(&request->seg_event_queue)) { /* A SEG event occurred recently. Let's update our job state */ globus_gram_job_manager_seg_handle_event(request); } if(request->unsent_status_change) { request->restart_state = request->jobmanager_state; globus_gram_job_manager_state_file_write(request); } /* The request->job_history_status is used to save the last job status * that is stored in history file. If it is different with * request->status, we have to write history file. */ if(request->unsent_status_change && (request->job_history_status != request->status)) { globus_gram_job_manager_history_file_create(request); request->job_history_status = request->status; } if (request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; } else if (request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE || request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT) { /* Job finished! start finalizing */ request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT; break; } else { /* Send job state callbacks if necessary */ if(request->unsent_status_change) { globus_gram_job_manager_contact_state_callback(request, GLOBUS_FALSE); request->unsent_status_change = GLOBUS_FALSE; } if(!globus_fifo_empty(&request->pending_queries)) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1; break; } request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2; if (!first_poll && !request->manager->seg_started) { /* Register next poll of job state */ GlobusTimeReltimeSet( delay_time, request->poll_frequency, 0); rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay_time); if (rc == GLOBUS_SUCCESS) { event_registered = GLOBUS_TRUE; } } else if (request->manager->seg_started) { /* SEG has been started. If there is an event pending, * we should jump to POLL1 state and not set * event_registered, so that we can process it. * * Otherwise, we'll set event_registered and the next * query or SEG event will move the state machine. */ if (! globus_fifo_empty(&request->seg_event_queue)) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1; } else { event_registered = GLOBUS_TRUE; } } } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2: /* timer expired since last poll. start polling again. */ request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1; if (request->config->seg_module == NULL && strcmp(request->config->jobmanager_type, "fork") != 0 && strcmp(request->config->jobmanager_type, "condor") != 0) { rc = globus_gram_job_manager_script_poll(request); } else if (!globus_fifo_empty(&request->seg_event_queue)) { /* We don't want to set event_registered in this case, because * we want to immediately process the event in the queue. */ break; } else { /* Nothing in the SEG queue. We need to stay in this state to * get SEG code to reregister the state machine */ request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2; } if(rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.state_machine.info " "level=WARN " "gramid=%s " "msg=\"%s\" " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, "Poll failed", -rc, globus_gram_protocol_error_string(rc)); } else { event_registered = GLOBUS_TRUE; } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1: if (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1) { next_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2; } else { next_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2; } /* * timer cancelled since last poll, because we may have some * queries to process */ query = globus_fifo_peek(&request->pending_queries); if (query->type == GLOBUS_GRAM_JOB_MANAGER_SIGNAL) { rc = globus_gram_job_manager_script_signal( request, query); } else if(query->type == GLOBUS_GRAM_JOB_MANAGER_CANCEL) { rc = globus_gram_job_manager_script_cancel( request, query); } if(rc == GLOBUS_SUCCESS) { request->jobmanager_state = next_state; event_registered = GLOBUS_TRUE; } else { globus_fifo_dequeue(&request->pending_queries); query->failure_code = rc; globus_gram_job_manager_query_reply(request, query); if(globus_fifo_empty(&request->pending_queries)) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2; } } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY2: query = globus_fifo_dequeue(&request->pending_queries); /* Frees the query */ globus_gram_job_manager_query_reply( request, query); if(globus_fifo_empty(&request->pending_queries)) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE; GlobusTimeReltimeSet(delay_time, request->two_phase_commit, 0); rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay_time); if (rc == GLOBUS_SUCCESS) { event_registered = GLOBUS_TRUE; } } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_QUERY1; } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2: query = globus_fifo_dequeue(&request->pending_queries); /* Frees the query */ globus_gram_job_manager_query_reply( request, query); if(globus_fifo_empty(&request->pending_queries) && (request->unsent_status_change || !globus_fifo_empty(&request->seg_event_queue))) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1; } else if(globus_fifo_empty(&request->pending_queries)) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2; } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1; } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED: if(request->unsent_status_change) { request->restart_state = request->jobmanager_state; globus_gram_job_manager_state_file_write(request); if (request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT) { globus_gram_job_manager_contact_state_callback( request, GLOBUS_FALSE); request->unsent_status_change = GLOBUS_FALSE; } } if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_CLOSE_OUTPUT; } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT; } /* Reply to any outstanding queries */ while (!globus_fifo_empty(&request->pending_queries)) { query = globus_fifo_dequeue(&request->pending_queries); query->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; /* Frees the query */ globus_gram_job_manager_query_reply( request, query); } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE: if (request->two_phase_commit != 0 && request->commit_extend != 0 && request->failure_code != GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT) { GlobusTimeReltimeSet(delay_time, request->commit_extend, 0); request->commit_extend = 0; rc = globus_gram_job_manager_state_machine_register( request->manager, request, &delay_time); if (rc == GLOBUS_SUCCESS) { event_registered = GLOBUS_TRUE; } } else if (request->two_phase_commit == 0 || !request->client_contacts || request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT) { /* Nothing to do here if we are not doing the two-phase * commit protocol or if we have no client callbacks or this is * clean up from a failed two-phase commit */ if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED; } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED; } } else { request->restart_state = request->jobmanager_state; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STOP; request->stop_reason = GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT; event_registered = GLOBUS_TRUE; } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE_COMMITTED: if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FILE_CLEAN_UP; } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_FILE_CLEAN_UP; } if(globus_gram_job_manager_rsl_need_file_cleanup(request) || strcmp(request->config->jobmanager_type, "condor") == 0) { globus_l_gram_file_cleanup(request); } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_FILE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_FILE_CLEAN_UP: if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FILE_CLEAN_UP) { if(request->status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_SCRATCH_CLEAN_UP; } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP; } } else if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_FILE_CLEAN_UP) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP; } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP; } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_SCRATCH_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_SCRATCH_CLEAN_UP: if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_SCRATCH_CLEAN_UP) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_CACHE_CLEAN_UP; } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CACHE_CLEAN_UP; } /* Cache cleanup script cleaned gass cache and jobdir */ globus_gram_job_manager_destroy_directory( request, request->job_dir); globus_gass_cache_cleanup_tag_all( request->cache_handle, request->cache_tag); break; case GLOBUS_GRAM_JOB_MANAGER_STATE_CACHE_CLEAN_UP: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CACHE_CLEAN_UP: if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_CACHE_CLEAN_UP) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_DONE; } else { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE; } if(request->job_state_file) { remove(request->job_state_file); } globus_l_gram_job_manager_cancel_queries(request); break; case GLOBUS_GRAM_JOB_MANAGER_STATE_STOP: /* This state is reached when the job manager decides to stop * between the time the job request reply is sent and the * job manager has noticed stop or failed */ globus_gram_job_manager_contact_state_callback(request, GLOBUS_FALSE); globus_gram_job_manager_state_file_write(request); event_registered = GLOBUS_TRUE; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE: if(request->job_state_file) { remove(request->job_state_file); } globus_l_gram_job_manager_cancel_queries(request); /* Write auditing file if job is DONE or FAILED */ if (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_DONE || request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_DONE) { request->restart_state = request->jobmanager_state; globus_gram_job_manager_auditing_file_write(request); } /* Don't allow any new SEG events to enter the queue */ (void) globus_gram_job_manager_unregister_job_id( request->manager, request->job_id_string); /* Clear any existing SEG events */ while (! globus_fifo_empty(&request->seg_event_queue)) { /* A SEG event occurred recently. Let's update our job state */ globus_gram_job_manager_seg_handle_event(request); } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.job.end " "level=ERROR " "gramid=%s " "job_status=%d " "status=%d " "reason=\"%s\"\n", request->job_contact_path, request->status, -request->failure_code, globus_gram_protocol_error_string(request->failure_code)); event_registered = GLOBUS_TRUE; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_DONE: globus_l_gram_job_manager_cancel_queries(request); request->restart_state = request->jobmanager_state; globus_gram_job_manager_auditing_file_write(request); event_registered = GLOBUS_TRUE; /* Don't allow any new SEG events to enter the queue */ (void) globus_gram_job_manager_unregister_job_id( request->manager, request->job_id_string); /* Clear any existing SEG events */ while (! globus_fifo_empty(&request->seg_event_queue)) { /* A SEG event occurred recently. Let's update our job state */ globus_gram_job_manager_seg_handle_event(request); } if (request->config->seg_module && request->manager->seg_started) { snprintf( exit_code_string, sizeof(exit_code_string), "%d", (int) request->exit_code & 0xffff); } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_INFO, "event=gram.job.end " "level=INFO " "gramid=%s " "job_status=%d " "exit_code=%s " "status=%d " "msg=\"%s\" " "\n", request->job_contact_path, request->status, exit_code_string, 0, "Job complete"); break; case GLOBUS_GRAM_JOB_MANAGER_STATE_CLOSE_OUTPUT: if (request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_STAGE_OUT_FAILED) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT; break; } request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT; if ((!globus_list_empty(request->stage_stream_todo)) || (!globus_list_empty(request->stage_out_todo))) { rc = globus_gram_job_manager_script_stage_out(request); if(rc != GLOBUS_SUCCESS) { request->failure_code = rc; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; } else { event_registered = GLOBUS_TRUE; request->unsent_status_change = GLOBUS_TRUE; } } else { request->unsent_status_change = GLOBUS_TRUE; } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT: if(!globus_list_empty(request->stage_stream_todo)) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT; if(request->failure_code == GLOBUS_SUCCESS || request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_STAGE_OUT_FAILED) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT; } } else if(!globus_list_empty(request->stage_out_todo)) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT; if(request->failure_code == GLOBUS_SUCCESS) { request->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_STAGE_OUT_FAILED; } } /* FALLSTHROUGH */ case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT: if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END; globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE); } else if(request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_CLOSE_OUTPUT) { request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE; globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); } if(request->unsent_status_change) { if(request->job_history_status != request->status) { globus_gram_job_manager_history_file_create(request); request->job_history_status = request->status; } /* * If we are doing two-phase_commit, then we will have the * state machine restarted after the job state callback message * is done being processed. */ globus_gram_job_manager_contact_state_callback( request, (request->two_phase_commit != 0)); request->unsent_status_change = GLOBUS_FALSE; if (request->two_phase_commit != 0) { event_registered = GLOBUS_TRUE; } } break; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.state_machine.end " "level=TRACE " "gramid=%s " "jmstate=%s " "job_state=%d " "event_registered=%s " "\n", request->job_contact_path, globus_i_gram_job_manager_state_strings[request->jobmanager_state], request->status, event_registered ? "true" : "false"); return event_registered; } /* globus_gram_job_manager_state_machine() */ /** * Send the response to the initial job request to the GRAM client * * @param request * Job request * @param response_code * GLOBUS_SUCCESS, or a GRAM protocol failure code. * @param job_contact * Job contact * @param response_fd * Descriptor to send response to * @param response_context * GSSAPI context to use to wrap the response message * @param gt3_failure_message * Error information to include in a GRAM extension */ int globus_gram_job_manager_reply( globus_gram_jobmanager_request_t * request, globus_gram_job_manager_t * manager, int response_code, const char * job_contact, int response_fd, gss_ctx_id_t response_context, const char * gt3_failure_message) { int rc; globus_byte_t * reply = NULL; globus_size_t replysize; globus_byte_t * sendbuf; globus_size_t sendsize; OM_uint32 major_status = GSS_S_COMPLETE; OM_uint32 minor_status; int token_status; globus_hashtable_t extensions = NULL; globus_gram_protocol_extension_t * extension = NULL; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.reply.start " "level=DEBUG " "gramid=%s " "job_contact=\"%s\" " "response_code=%d " "\n", request ? request->job_contact_path : "", job_contact ? job_contact : "", response_code); rc = globus_hashtable_init( &extensions, 3, globus_hashtable_string_hash, globus_hashtable_string_keyeq); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto hashtable_init_failed; } if (manager != NULL) { extension = globus_gram_protocol_create_extension( "toolkit-version", "%s", manager->config->globus_version); if (extension == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, extension->attribute, extension); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_insert_failed; } extension = NULL; } extension = globus_gram_protocol_create_extension( "version", "%d.%d (%d-%d)", local_version.major, local_version.minor, local_version.timestamp, local_version.branch_id); if (extension == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_create_failed; } rc = globus_hashtable_insert(&extensions, extension->attribute, extension); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_insert_failed; } extension = NULL; if (gt3_failure_message != NULL) { extension = globus_gram_protocol_create_extension( "gt3-failure-message", "%s", gt3_failure_message); if (extension == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_create_failed; } rc = globus_hashtable_insert( &extensions, extension->attribute, extension); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto extension_insert_failed; } extension = NULL; } /* Response to initial job request. */ rc = globus_gram_protocol_pack_job_request_reply_with_extensions( response_code, job_contact, &extensions, &reply, &replysize); if(rc == GLOBUS_SUCCESS) { rc = globus_gram_protocol_frame_reply( 200, reply, replysize, &sendbuf, &sendsize); } else { rc = globus_gram_protocol_frame_reply( 400, NULL, 0, &sendbuf, &sendsize); } if(reply) { free(reply); } if (! response_context) { /* * No response context, the gatekeeper will supply HTTP response line, * so we skip the first line of the framed reply */ reply = (globus_byte_t *) strstr((char *) sendbuf, "\r\n"); reply += 2; sendsize -= (reply - sendbuf); memmove(sendbuf, reply, sendsize); } if(rc == GLOBUS_SUCCESS) { if (response_context != GSS_C_NO_CONTEXT) { major_status = globus_gss_assist_wrap_send( &minor_status, response_context, (void *) sendbuf, sendsize, &token_status, globus_l_gram_gss_send_fd, (void *) (intptr_t) response_fd, NULL); if (GSS_ERROR(major_status)) { char * error_string = NULL; char * escaped_error_string; globus_gss_assist_display_status_str( &error_string, "", major_status, minor_status, 0); escaped_error_string = globus_gram_prepare_log_string(error_string); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.reply.end " "level=ERROR " "gramid=%s " "status=%d " "major_status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, -GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED, major_status, "Error sending wrapped response", escaped_error_string ? escaped_error_string : ""); if (error_string) { free(error_string); } if (escaped_error_string) { free(escaped_error_string); } } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.reply.end " "level=DEBUG " "gramid=%s " "status=%d " "\n", request ? request->job_contact_path : "", 0); } if ((!request) || (request && request->response_context != response_context)) { /* In the case of a job restart via RSL, the response context * will not be the same as the request context, but still must * be freed */ gss_delete_sec_context( &minor_status, &response_context, GSS_C_NO_BUFFER); } if (request && !manager->config->enable_callout) { /* Save a some memory by freeing this while the job runs */ gss_delete_sec_context( &minor_status, &request->response_context, GSS_C_NO_BUFFER); request->response_context = GSS_C_NO_CONTEXT; } } else { ssize_t written = 0, rc = 0; do { errno = 0; rc = write(response_fd, sendbuf + written, sendsize - written); if (rc < 0 && errno != EINTR) { break; } written += rc; } while (written < sendsize); major_status = GSS_S_COMPLETE; } free(sendbuf); if (request && major_status != GSS_S_COMPLETE) { globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; } } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.reply.end " "level=ERROR " "gramid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, -rc, major_status, "Error preparing response", globus_gram_protocol_error_string(rc)); globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED; } if (request && rc != GLOBUS_SUCCESS) { request->failure_code = rc; } extension_insert_failed: globus_gram_protocol_hash_destroy(&extensions); extension_create_failed: if (extension) { free(extension->attribute); free(extension->value); free(extension); } hashtable_init_failed: return rc; } /* globus_gram_job_manager_reply() */ int globus_gram_job_manager_read_request( globus_gram_job_manager_t * manager, int fd, size_t content_length, char ** rsl, char ** client_contact, int * job_state_mask, globus_bool_t * version_only) { int rc; globus_hashtable_t extensions; globus_gram_protocol_extension_t * entry; size_t amt_read = 0; globus_byte_t buffer[ GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE]; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.read_request.start " "level=TRACE " "fd=%d\n", fd); *rsl = NULL; *client_contact = NULL; *job_state_mask = 0; *version_only = GLOBUS_FALSE; if (content_length > GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.read_request.end " "level=ERROR " "status=%d " "reason=\"%s\" " "\n", -rc, "RSL too large"); return rc; } do { errno = 0; rc = read(fd, buffer + amt_read, content_length - amt_read); if (rc < 0 && (errno == EINTR || errno == EAGAIN)) { sleep(1); continue; } else if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.read_request.end " "level=ERROR " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", -rc, "Error reading rsl", errno, strerror(errno)); return rc; } else { amt_read += rc; } } while (amt_read < content_length); if (manager->config->log_levels & GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE) { char * message; message = globus_gram_prepare_log_string((char *) buffer); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.read_request.info " "level=TRACE " "request_string=\"%s\" " "\n", message ? message : ""); if (message != NULL) { free(message); } } rc = globus_gram_protocol_unpack_job_request( buffer, content_length, job_state_mask, client_contact, rsl); if(rc == GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED) { rc = globus_gram_protocol_unpack_message( (const char *) buffer, content_length, &extensions); if (rc == GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.read_request.info " "level=TRACE " "msg=\"%s\" ", "Message is not a job request, checking for version " "request"); entry = globus_hashtable_lookup( &extensions, "command"); if (entry != NULL && strcmp(entry->value, "version") == 0) { *version_only = GLOBUS_TRUE; } else { char * buffer_escaped; buffer_escaped = globus_gram_prepare_log_string( (const char *) buffer); rc = GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.read_request.end " "level=ERROR " "status=%d" "request=\"%s\" " "msg=\"%s\" " "reason=\"%s\"\n", -rc, buffer_escaped ? buffer_escaped : "", "Message is not a job or version request", globus_gram_protocol_error_string(rc)); } globus_gram_protocol_hash_destroy(&extensions); } } else if (rc != GLOBUS_SUCCESS) { char * buffer_escaped; buffer_escaped = globus_gram_prepare_log_string( (const char *) buffer); rc = GLOBUS_GRAM_PROTOCOL_ERROR_HTTP_UNPACK_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.read_request.end level=ERROR status=%d" "request=\"%s\" " "msg=\"%s\" reason=\"%s\"\n", -rc, buffer_escaped ? buffer_escaped : "", "Error unpacking message", globus_gram_protocol_error_string(rc)); return rc; } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.read_request.end " "level=TRACE " "status=%d " "\n", 0); return rc; } /* globus_gram_job_manager_read_request() */ /** * Do the state transition for handling a job manager restart. * * @param request * The request to changes states. * * @return * Returns GLOBUS_TRUE if if the job manager's state was * changed as a result of this call; GLOBUS_FALSE otherwise. * * @note This case statement MUST cover all cases where the * state file can be written (where * globus_gram_job_manager_state_file_write() * is called). */ static globus_bool_t globus_l_gram_job_manager_set_restart_state( globus_gram_jobmanager_request_t * request) { globus_bool_t changed = GLOBUS_FALSE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.set_restart_state.start " "level=TRACE " "gramid=%s " "jmstate=%s " "restart_state=%s " "\n", request->job_contact_path, globus_i_gram_job_manager_state_strings[request->jobmanager_state], globus_i_gram_job_manager_state_strings[request->restart_state]); switch(request->restart_state) { case GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT: if (strcmp(request->config->jobmanager_type, "condor") == 0) { int rc; /* * Check if the condor submit happened prior to writing the * job state. if so, we'll have a log we can bootstrap the * job from without resubmitting */ rc = globus_gram_job_manager_seg_parse_condor_id( request, &request->original_job_id_string); if (rc == GLOBUS_SUCCESS && request->original_job_id_string != NULL) { request->job_id_string = strdup( request->original_job_id_string ); globus_gram_job_manager_seg_pause(request->manager); request->status = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT; changed = GLOBUS_TRUE; } } break; case GLOBUS_GRAM_JOB_MANAGER_STATE_START: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED: case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_IN: break; case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL_QUERY2: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1: case GLOBUS_GRAM_JOB_MANAGER_STATE_POLL2: request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_SUBMIT; changed = GLOBUS_TRUE; break; case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED: case GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE: if (request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_STAGE_OUT_FAILED || request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT || request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDERR) { /* These failure types can be (possibly) remedied in the restart * RSL changing stdout or stderr destinations, so these will * be non-fatal. We'll clear the job status and proceed. */ request->failure_code = GLOBUS_SUCCESS; globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT); request->unsent_status_change = GLOBUS_TRUE; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1; changed = GLOBUS_TRUE; break; } else if (request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_STAGING_EXECUTABLE || request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_STAGING_STDIN || request->failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_STAGE_IN_FAILED) { /* These failure types can be (possibly) remedied in the restart * RSL changing stdin, staging, or executable destinations, so * these will be non-fatal. We'll clear the job status and proceed. */ request->failure_code = GLOBUS_SUCCESS; globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED); request->unsent_status_change = GLOBUS_TRUE; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_COMMITTED; changed = GLOBUS_TRUE; break; } else { /* These types of failures can't be helped by a change in stdio, * destination so we continue with the failure */ globus_gram_job_manager_request_set_status( request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); request->unsent_status_change = GLOBUS_TRUE; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1; break; } case GLOBUS_GRAM_JOB_MANAGER_STATE_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_PRE_CLOSE_OUTPUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_STAGE_OUT: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END: case GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END_COMMITTED: globus_gram_job_manager_request_set_status(request, GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE); request->unsent_status_change = GLOBUS_TRUE; request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_POLL1; changed = GLOBUS_TRUE; break; default: break; } /*request->restart_state = GLOBUS_GRAM_JOB_MANAGER_STATE_START;*/ globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.set_restart_state.end " "level=TRACE " "gramid=%s " "jmstate=%s " "restart_state=%s " "changed=%s " "\n", request->job_contact_path, globus_i_gram_job_manager_state_strings[request->jobmanager_state], globus_i_gram_job_manager_state_strings[request->restart_state], changed ? "true" : "false"); return changed; } /* globus_l_gram_job_manager_set_restart_state() */ static void globus_l_gram_job_manager_cancel_queries( globus_gram_jobmanager_request_t * request) { globus_gram_job_manager_query_t * query; while(!globus_fifo_empty(&request->pending_queries)) { query = globus_fifo_dequeue(&request->pending_queries); query->failure_code = GLOBUS_GRAM_PROTOCOL_ERROR_JOB_QUERY_DENIAL; /* Frees the query */ globus_gram_job_manager_query_reply( request, query); } } /* globus_l_gram_job_manager_cancel_queries() */ /** * Validate that the job manager is running as the username specified in the * RSL if it is present. * * @param request * Request which contains information about the job. We'll only look at * the RSL in the request to check for presence of the username attribute. * * @retval GLOBUS_SUCCESS * Either the username RSL attribute was not present, or it was present * and its value matched the account this process is running as. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Some system call failed when we tried to look up the user id. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_USER_NAME * This process is not running as the desired user. */ int globus_gram_job_manager_validate_username( globus_gram_jobmanager_request_t * request) { char * tmp_str = NULL; char * buffer = NULL; struct passwd pwd; struct passwd * pwd_result = NULL; int rc = GLOBUS_SUCCESS; uid_t uid; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.validate_user.start " "level=TRACE " "gramid=%s " "\n", request->job_contact_path); /* Validate username RSL attribute if present */ rc = globus_gram_job_manager_rsl_eval_one_attribute( request, GLOBUS_GRAM_PROTOCOL_USER_NAME, &tmp_str); if (rc != 0) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_user.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "attribute=%s " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, "Error evaluating attribute", GLOBUS_GRAM_PROTOCOL_USER_NAME, -rc, globus_gram_protocol_error_string(rc)); return rc; } if (tmp_str != NULL) { buffer = malloc(1024); if (buffer == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_user.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\"\n", request->job_contact_path, "Malloc failed", -rc, errno, strerror(errno)); goto free_tmp_str_exit; } rc = globus_libc_getpwnam_r( tmp_str, &pwd, buffer, 1024, &pwd_result); if (rc != 0 || pwd_result == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_user.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, "getpwnam_r failed", -rc, errno, strerror(errno)); goto free_buffer_exit; } uid = getuid(); if (pwd.pw_uid != uid) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_USER_NAME; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_user.end " "level=ERROR " "gramid=%s " "msg=\"%s\" " "uid=%u " "desired_uid=%u " "status=%d " "reason=\"%s\" " "\n", request->job_contact_path, "Job manager not running as desired user", uid, pwd.pw_uid, -rc, globus_gram_protocol_error_string(rc)); goto free_buffer_exit; } } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.validate_user.end " "level=TRACE " "gramid=%s " "status=%d " "\n", request->job_contact_path, 0); free_buffer_exit: if (buffer != NULL) { free(buffer); } free_tmp_str_exit: if (tmp_str != NULL) { free(tmp_str); } return rc; } /* globus_gram_job_manager_validate_username() */ static int globus_l_gram_job_manager_add_cache_info( globus_gram_jobmanager_request_t * request) { char * out_file; char * fname; unsigned long timestamp; FILE * file; char * gk_id; int rc; out_file = globus_common_create_string( "x-gass-cache://%s/%s/cache-info", request->config->hostname, request->uniq_id); rc = globus_gass_cache_add( request->cache_handle, out_file, request->cache_tag, GLOBUS_TRUE, ×tamp, &fname); if(rc != GLOBUS_GASS_CACHE_ADD_NEW && rc != GLOBUS_GASS_CACHE_ADD_EXISTS) { return GLOBUS_FAILURE; } file = fopen(fname,"w"); if (file != NULL) { gk_id = getenv("GATEKEEPER_JM_ID"); if (gk_id == NULL) { gk_id = "-"; } fprintf(file,"%s\n%s\n%s\n%s\n",request->uniq_id,request->job_id_string, request->config->jobmanager_type,gk_id); fclose(file); time((time_t *)×tamp); globus_gass_cache_add_done( request->cache_handle, out_file, request->cache_tag, timestamp); } else { globus_gass_cache_delete( request->cache_handle, out_file, request->cache_tag, timestamp, GLOBUS_TRUE); } free(fname); free(out_file); return 0; } /* globus_l_gram_job_manager_add_cache_info() */ int globus_i_gram_remote_io_url_update( globus_gram_jobmanager_request_t * request) { FILE * fp; int rc = GLOBUS_SUCCESS; fp = fopen(request->remote_io_url_file, "w"); if (fp == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_REMOTE_IO_URL; goto fopen_failed; } rc = fprintf(fp, "%s\n", request->remote_io_url); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_REMOTE_IO_URL; goto fprintf_failed; } fprintf_failed: rc = fclose(fp); if (rc == EOF) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_REMOTE_IO_URL; goto fclose_failed; } fclose_failed: fopen_failed: return rc; } /* globus_i_gram_remote_io_url_update() */ /** * Write a GSSAPI token to a file descriptor * * Unlike the functions in globus_gss_assist, this uses file descriptors, not * FILE * values for @a arg. Writes a 4-byte header for the same conditions * as the function in globus_gss_assist. * * @param arg * Void * cast of the file descriptor number * @param buffer * GSSAPI token buffer to send * @param length * Token length * */ static int globus_l_gram_gss_send_fd( void * arg, void * buffer, size_t length) { unsigned char lengthbuf[4]; unsigned char * header = buffer; int fd; int rc; ssize_t written = 0; fd = (int) (intptr_t) arg; lengthbuf[0] = length >> 24; lengthbuf[1] = length >> 16; lengthbuf[2] = length >> 8; lengthbuf[3] = length; if (!(length > 5 && header[0] <= 26 && header[0] >= 20 && ((header[1] == 3) || (header[1] == 2 && header[2] == 0)))) { written = 0; do { rc = write((int) fd, lengthbuf + written, (size_t) (4 - written)); if (rc < 0) { if (errno == EINTR) { rc = 0; } else { return GLOBUS_GSS_ASSIST_TOKEN_EOF; } } written += rc; } while (written < 4); } written = 0; do { rc = write((int) fd, header + written, (size_t) (length - written)); if (rc < 0) { if (errno == EINTR) { rc = 0; } else { return GLOBUS_GSS_ASSIST_TOKEN_EOF; } } written += rc; } while (written < length); return 0; } /* globus_l_gram_gss_send_fd() */ static void globus_l_gram_file_cleanup( globus_gram_jobmanager_request_t * request) { globus_rsl_t * relation; globus_rsl_value_t * value_sequence; globus_list_t * value_list; globus_rsl_value_t * value; char * path; relation = globus_gram_job_manager_rsl_extract_relation( request->rsl, GLOBUS_GRAM_PROTOCOL_FILE_CLEANUP_PARAM); if (!relation) { goto not_found; } value_sequence = globus_rsl_relation_get_value_sequence(relation); if (!value_sequence) { goto no_sequence; } /* * GRAM-155: Leak in file_clean_up * Old code removed list elements and freed path in the loop, but * neglected to free value. Now all the data is freed in the * globus_rsl_free_recursive() call at the end. */ value_list = globus_rsl_value_sequence_get_value_list(value_sequence); while (!globus_list_empty(value_list)) { value = globus_list_first(value_list); value_list = globus_list_rest(value_list); path = globus_rsl_value_literal_get_string(value); if (path) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.file_cleanup.info " "level=TRACE " "gramid=%s " "path=\"%s\" " "msg=\"About to unlink\" " "\n", request->job_contact_path, path); remove(path); } } no_sequence: globus_rsl_free_recursive(relation); not_found: /* * GRAM-130: Individual Condor Logs per Job */ if (strcmp(request->config->jobmanager_type, "condor") == 0) { char * condor_log = globus_common_create_string( "%s/condor.%s", request->config->job_state_file_dir, request->uniq_id); remove(condor_log); free(condor_log); } return; } /* globus_l_gram_file_cleanup() */ /** * Register the state machine callback callback for this request * * @param manager * Job manager state * @param request * Locked jobmanager request structure. * @param delay * Oneshot delay */ int globus_gram_job_manager_state_machine_register( globus_gram_job_manager_t * manager, globus_gram_jobmanager_request_t * request, globus_reltime_t * delay) { int rc = GLOBUS_SUCCESS; globus_result_t result; globus_reltime_t nodelay; if (delay == NULL) { GlobusTimeReltimeSet(nodelay, 0, 0); delay = &nodelay; } /* GRAM-128: Scalable reloading of requests at job manager restart. * It's possible now that the job manager has put this job id in the * pending_restarts list. When we add the reference here, if it is in that * list, the state machine will be registered for this job automatically, * with another new reference. So, we'll check if * (request->poll_timer == GLOBUS_NULL_HANDLE) below. If that is true, * then it wasn't in that list and we can proceed as we always had done; * otherwise, we'll need to remove the reference we just added. * * See also globus_l_gram_process_pending_restarts() for the other case * where we might expect to add a reference to a partially-reloaded job. */ rc = globus_gram_job_manager_add_reference( manager, request->job_contact_path, "state machine", NULL); if (rc != GLOBUS_SUCCESS) { goto failed_add_reference; } if (request->poll_timer == GLOBUS_NULL_HANDLE) { result = globus_callback_register_oneshot( &request->poll_timer, delay, globus_gram_job_manager_state_machine_callback, request); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto oneshot_failed; } } else { /* GRAM-128: Scalable reloading of requests at job manager restart. * If we get here, then the add_reference call added the state machine * callback already. We need to remove this duplicate reference to * avoid leaving the job in memory forever. */ globus_gram_job_manager_remove_reference( manager, request->job_contact_path, "state machine"); } if (rc != GLOBUS_SUCCESS) { /* Too bad, the state machine couldn't get registered. At least we * can drop the reference count to potentially free some memory. */ oneshot_failed: globus_gram_job_manager_remove_reference( manager, request->job_contact_path, "state machine"); failed_add_reference: ; } return rc; } /* globus_gram_job_manager_state_machine_register() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_state_file.c0000644000000000000000000000013214243161125026462 xustar000000000000000030 mtime=1653400149.359970111 30 atime=1653401831.538125113 30 ctime=1653404021.250746936 globus_gram_job_manager-15.8/globus_gram_job_manager_state_file.c0000664000175000017500000006415114243161125026632 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_job_manager.h" #include /** * Compute the name of the state file to use for this job request. * * Sets the value of the @a job_state_file member of the request structure. * * @param request * The request to create the state file for. * @param state_file * Pointer to set to the state file string. The caller is responsible for * freeing this. * * @retval GLOBUS_SUCCESS * Success. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED * Malloc failed. */ int globus_gram_job_manager_state_file_set( globus_gram_jobmanager_request_t * request, char ** state_file) { int rc = GLOBUS_SUCCESS; *state_file = globus_common_create_string( "%s/job.%s.%s", request->config->job_state_file_dir, request->config->hostname, request->uniq_id); if (*state_file == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto create_state_file_failed; } if ((access(*state_file, R_OK) != 0) && errno == ENOENT) { char * dirname_end; /* If it doesn't exist yet, we'll use a per-user state file dir * to reduce the size of the global state file dir (GT-157) */ free(*state_file); *state_file = globus_common_create_string( "%s/%s/%s/%s/job.%s", request->config->job_state_file_dir, request->config->logname, request->config->service_tag, request->config->jobmanager_type, request->uniq_id); if (*state_file == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto create_state_file_failed; } dirname_end = strrchr(*state_file, '/'); *dirname_end = '\0'; globus_i_gram_mkdir(*state_file); *dirname_end = '/'; } create_state_file_failed: return rc; } /* globus_gram_job_manager_state_file_set() */ int globus_gram_job_manager_state_file_write( globus_gram_jobmanager_request_t * request) { int rc = GLOBUS_SUCCESS; FILE * fp = NULL; char tmp_file[1024] = { 0 }; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.write_state_file.start " "level=TRACE " "gramid=%s " "path=\"%s\" " "\n", request->job_contact_path, request->job_state_file); /* * We want the file update to be atomic, so create a new temp file, * write the new information, close the new file, then rename the new * file on top of the old one. The rename is the atomic update action. */ strcpy( tmp_file, request->job_state_file ); strcat( tmp_file, ".tmp" ); fp = fopen( tmp_file, "w" ); if ( fp == NULL ) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_STATE_FILE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.write_state_file.end " "level=ERROR " "gramid=%s " "path=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", request->job_contact_path, tmp_file, -rc, "Error opening state file", errno, strerror(errno)); return rc; } rc = fprintf(fp, "%s\n", request->job_contact ? request->job_contact : " "); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_STATE_FILE; goto error_exit; } rc = fprintf(fp, "%4d\n", (request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) ? (int) request->restart_state : (int) request->jobmanager_state); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%4d\n", (int) request->status); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%4d\n", request->failure_code); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n", request->job_id_string ? request->job_id_string : " "); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n", request->rsl_spec); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n", request->cache_tag); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n", request->config->jobmanager_type); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%d\n", request->two_phase_commit); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n", request->scratchdir ? request->scratchdir : " "); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%lu\n", (unsigned long) request->seg_last_timestamp); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%lu\n", (unsigned long) request->creation_time); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%lu\n", (unsigned long) request->queued_time); if (rc < 0) { goto error_exit; } rc = globus_gram_job_manager_staging_write_state(request, fp); if (rc < 0) { goto error_exit; } rc = globus_gram_job_manager_write_callback_contacts(request, fp); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n", request->gateway_user ? request->gateway_user : " "); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%d\n", request->exit_code); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%ld.%09ld %ld.%09ld %ld.%09ld " "%ld.%09ld %ld.%09ld %ld.%09ld %ld.%09ld " "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", request->job_stats.unsubmitted_timestamp.tv_sec, request->job_stats.unsubmitted_timestamp.tv_nsec, request->job_stats.file_stage_in_timestamp.tv_sec, request->job_stats.file_stage_in_timestamp.tv_nsec, request->job_stats.pending_timestamp.tv_sec, request->job_stats.pending_timestamp.tv_nsec, request->job_stats.active_timestamp.tv_sec, request->job_stats.active_timestamp.tv_nsec, request->job_stats.failed_timestamp.tv_sec, request->job_stats.failed_timestamp.tv_nsec, request->job_stats.file_stage_out_timestamp.tv_sec, request->job_stats.file_stage_out_timestamp.tv_nsec, request->job_stats.done_timestamp.tv_sec, request->job_stats.done_timestamp.tv_nsec, request->job_stats.restart_count, request->job_stats.callback_count, request->job_stats.status_count, request->job_stats.register_count, request->job_stats.unregister_count, request->job_stats.signal_count, request->job_stats.refresh_count, request->job_stats.file_clean_up_count, request->job_stats.file_stage_in_http_count, request->job_stats.file_stage_in_https_count, request->job_stats.file_stage_in_ftp_count, request->job_stats.file_stage_in_gsiftp_count, request->job_stats.file_stage_in_shared_http_count, request->job_stats.file_stage_in_shared_https_count, request->job_stats.file_stage_in_shared_ftp_count, request->job_stats.file_stage_in_shared_gsiftp_count, request->job_stats.file_stage_out_http_count, request->job_stats.file_stage_out_https_count, request->job_stats.file_stage_out_ftp_count, request->job_stats.file_stage_out_gsiftp_count); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n%s\n", request->job_stats.client_address ? request->job_stats.client_address : " ", request->job_stats.user_dn ? request->job_stats.user_dn : " "); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%4d\n", (int) request->expected_terminal_state); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n", request->config->service_tag); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%s\n", request->original_job_id_string ? request->original_job_id_string : ""); if (rc < 0) { goto error_exit; } rc = fprintf(fp, "%d\n", request->job_log_level); if (rc < 0) { goto error_exit; } /* * On some filsystems, write + rename is *not* atomic, so we explicitly * flush to disk here. fdatasync might be better, but only on systems with * POSIX realtime extensions */ fflush(fp); fsync(fileno(fp)); fclose( fp ); fp = NULL; rc = rename( tmp_file, request->job_state_file ); if (rc != 0) { rc = GLOBUS_FAILURE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.write_state_file.end " "level=ERROR " "gramid=%s " "path=%s " "status=-1 " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, request->job_state_file, "Error renaming temporary state file", errno, strerror(errno)); goto rename_failed; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.write_state_file.end " "level=TRACE " "gramid=%s " "path=%s " "status=0 " "\n", request->job_contact_path, request->job_state_file); return GLOBUS_SUCCESS; error_exit: globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.write_state_file.end " "level=ERROR " "gramid=%s " "path=\"%s\" " "status=%d " "msg=\"%s\"\n", request->job_contact_path, tmp_file, rc, "Error writing to state file"); if (fp) { fclose(fp); } rename_failed: if (tmp_file[0] != 0) { remove(tmp_file); } return rc; } /* globus_gram_job_manager_state_file_write() */ int globus_gram_job_manager_state_file_read( globus_gram_jobmanager_request_t * request) { FILE * fp; char * buffer = NULL; size_t file_len; struct stat statbuf; int rc = GLOBUS_SUCCESS; int i; unsigned long tmp_timestamp; request->old_job_contact = NULL; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.state_file_read.start " "level=TRACE " "gramid=%s " "path=%s " "\n", request->job_contact_path, request->job_state_file); if (stat(request->job_state_file, &statbuf) != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_STATE_FILE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.state_file_read.end " "level=ERROR " "gramid=%s " "path=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, request->job_state_file, "Error checking file status", -rc, errno, strerror(errno)); return rc; } if (statbuf.st_uid != getuid()) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_STATE_FILE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.state_file_read.end " "level=ERROR " "gramid=%s " "path=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, request->job_state_file, "State file not owned by me", -rc, errno, strerror(errno)); return rc; } file_len = (size_t) statbuf.st_size; buffer = malloc(file_len+1); if (buffer == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.state_file_read.end " "level=ERROR " "gramid=%s " "path=%s " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", request->job_contact_path, request->job_state_file, "Malloc failed", -rc, errno, strerror(errno)); goto exit; } fp = fopen( request->job_state_file, "r" ); if(!fp) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_STATE_FILE; globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.state_file.read.end " "level=ERROR " "path=%s " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", request->job_state_file, -rc, "Error opening state file", errno, strerror(errno)); goto fopen_state_file_failed; } if(fgets( buffer, file_len, fp ) == NULL) { goto error_exit; } /* job contact string */ if (fgets( buffer, file_len, fp ) == NULL) { goto error_exit; } request->restart_state = atoi( buffer ); if (fgets( buffer, file_len, fp ) == NULL) { goto error_exit; } /* We don't know when the job status in the state file was obtained. * Set the time to 0 so that any new status will be used. */ globus_gram_job_manager_request_set_status_time(request, atoi( buffer ), 0); if (fgets( buffer, file_len, fp ) == NULL) { goto error_exit; } request->failure_code = atoi( buffer ); if(fgets( buffer, file_len, fp ) == NULL) { goto error_exit; } buffer[strlen(buffer)-1] = '\0'; if(strcmp(buffer, " ") != 0) { request->job_id_string = strdup( buffer ); } if (fgets( buffer, file_len, fp ) == NULL) { goto free_job_id_string; } buffer[strlen(buffer)-1] = '\0'; request->rsl_spec = strdup( buffer ); if (fgets( buffer, file_len, fp ) == NULL) { goto free_rsl_spec; } buffer[strlen(buffer)-1] = '\0'; request->cache_tag = strdup( buffer ); if (fgets( buffer, file_len, fp ) == NULL) { goto free_cache_tag; } buffer[strlen(buffer)-1] = '\0'; if (request->config && strcmp(buffer, request->config->jobmanager_type) != 0) { /* Job should be handled by another job manager */ rc = GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; goto free_cache_tag; } if (fgets( buffer, file_len, fp ) == NULL) { goto free_cache_tag; } buffer[strlen(buffer)-1] = '\0'; if((sscanf(buffer,"%d",&i)) < 1) { /* The last line we grabbed was the jobmanager_type. Now we * need to grab the two_phase_commit number. Older jobmanagers * don't print the jobmanager_type to the state file, hence * the check above. */ if(fgets( buffer, file_len, fp ) == NULL) { goto free_cache_tag; } buffer[strlen(buffer)-1] = '\0'; } request->two_phase_commit = atoi(buffer); if (fgets( buffer, file_len, fp ) == NULL) { goto free_cache_tag; } buffer[strlen(buffer)-1] = '\0'; if(strcmp(buffer, " ") != 0) { request->scratchdir = strdup(buffer); } if (fgets( buffer, file_len, fp ) == NULL) { goto free_scratchdir; } buffer[strlen(buffer)-1] = '\0'; sscanf(buffer, "%lu", &tmp_timestamp); request->seg_last_timestamp = (time_t) tmp_timestamp; if (fgets( buffer, file_len, fp ) == NULL) { goto free_scratchdir; } buffer[strlen(buffer)-1] = '\0'; sscanf(buffer, "%lu", &tmp_timestamp); request->creation_time = (time_t) tmp_timestamp; if (fgets( buffer, file_len, fp ) == NULL) { goto free_scratchdir; } buffer[strlen(buffer)-1] = '\0'; sscanf(buffer, "%lu", &tmp_timestamp); request->queued_time = (time_t) tmp_timestamp; request->stage_in_todo = NULL; request->stage_in_shared_todo = NULL; request->stage_out_todo = NULL; request->stage_stream_todo = NULL; rc = globus_gram_job_manager_staging_read_state(request,fp); if(rc != GLOBUS_SUCCESS) { goto free_scratchdir; } rc = globus_gram_job_manager_read_callback_contacts(request, fp); if(rc != GLOBUS_SUCCESS) { goto free_staging; } if (fgets( buffer, file_len, fp ) == NULL) { goto free_callback_contacts; } buffer[strlen(buffer)-1] = '\0'; if(strcmp(buffer, " ") != 0) { request->gateway_user = strdup(buffer); } else { request->gateway_user = NULL; } if (fgets( buffer, file_len, fp ) == NULL) { goto free_gateway_user; } buffer[strlen(buffer)-1] = 0; sscanf(buffer, "%d", &request->exit_code); if (fgets( buffer, file_len, fp ) == NULL) { goto free_gateway_user; } buffer[strlen(buffer)-1] = 0; sscanf(buffer, "%ld.%09ld %ld.%09ld %ld.%09ld " "%ld.%09ld %ld.%09ld %ld.%09ld %ld.%09ld " "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", &request->job_stats.unsubmitted_timestamp.tv_sec, &request->job_stats.unsubmitted_timestamp.tv_nsec, &request->job_stats.file_stage_in_timestamp.tv_sec, &request->job_stats.file_stage_in_timestamp.tv_nsec, &request->job_stats.pending_timestamp.tv_sec, &request->job_stats.pending_timestamp.tv_nsec, &request->job_stats.active_timestamp.tv_sec, &request->job_stats.active_timestamp.tv_nsec, &request->job_stats.failed_timestamp.tv_sec, &request->job_stats.failed_timestamp.tv_nsec, &request->job_stats.file_stage_out_timestamp.tv_sec, &request->job_stats.file_stage_out_timestamp.tv_nsec, &request->job_stats.done_timestamp.tv_sec, &request->job_stats.done_timestamp.tv_nsec, &request->job_stats.restart_count, &request->job_stats.callback_count, &request->job_stats.status_count, &request->job_stats.register_count, &request->job_stats.unregister_count, &request->job_stats.signal_count, &request->job_stats.refresh_count, &request->job_stats.file_clean_up_count, &request->job_stats.file_stage_in_http_count, &request->job_stats.file_stage_in_https_count, &request->job_stats.file_stage_in_ftp_count, &request->job_stats.file_stage_in_gsiftp_count, &request->job_stats.file_stage_in_shared_http_count, &request->job_stats.file_stage_in_shared_https_count, &request->job_stats.file_stage_in_shared_ftp_count, &request->job_stats.file_stage_in_shared_gsiftp_count, &request->job_stats.file_stage_out_http_count, &request->job_stats.file_stage_out_https_count, &request->job_stats.file_stage_out_ftp_count, &request->job_stats.file_stage_out_gsiftp_count); if (fgets( buffer, file_len, fp ) == NULL) { goto free_gateway_user; } buffer[strlen(buffer)-1] = '\0'; if(strcmp(buffer, " ") != 0) { request->job_stats.client_address = strdup(buffer); } else { request->job_stats.client_address = NULL; } if (fgets( buffer, file_len, fp ) == NULL) { goto free_client_address; } buffer[strlen(buffer)-1] = 0; if(strcmp(buffer, " ") != 0) { request->job_stats.user_dn = strdup(buffer); } else { request->job_stats.user_dn = NULL; } if (fgets( buffer, file_len, fp ) == NULL) { goto free_user_dn; } request->expected_terminal_state = atoi( buffer ); if (fgets( buffer, file_len, fp ) == NULL) { goto free_user_dn; } buffer[strlen(buffer)-1] = '\0'; if (request->config && strcmp(buffer, request->config->service_tag) != 0) { /* Job should be handled by another job manager */ rc = GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; goto free_user_dn; } if(fgets( buffer, file_len, fp ) == NULL) { goto free_user_dn; } buffer[strlen(buffer)-1] = '\0'; if(strcmp(buffer, " ") != 0) { request->original_job_id_string = strdup(buffer); } if(fgets( buffer, file_len, fp ) == NULL) { goto free_original_job_id_string; } buffer[strlen(buffer)-1] = '\0'; if(strcmp(buffer, " ") != 0) { request->job_log_level = atoi(buffer); } fclose(fp); free(buffer); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.state_file.read.end " "level=TRACE " "path=%s " "status=%d " "\n", request->job_state_file, 0); return GLOBUS_SUCCESS; free_original_job_id_string: if (request->original_job_id_string != NULL) { free(request->original_job_id_string); request->original_job_id_string = NULL; } free_user_dn: if (request->job_stats.user_dn) { free(request->job_stats.user_dn); } free_client_address: if (request->job_stats.client_address != NULL) { free(request->job_stats.client_address); request->job_stats.client_address = NULL; } free_gateway_user: if (request->gateway_user != NULL) { free(request->gateway_user); request->gateway_user = NULL; } free_callback_contacts: globus_gram_job_manager_contact_list_free(request); free_staging: globus_gram_job_manager_staging_free_all(request); free_scratchdir: if (request->scratchdir != NULL) { free(request->scratchdir); request->scratchdir = NULL; } free_cache_tag: if (request->cache_tag != NULL) { free(request->cache_tag); request->cache_tag = NULL; } free_rsl_spec: if (request->rsl_spec != NULL) { free(request->rsl_spec); request->rsl_spec = NULL; } free_job_id_string: if (request->job_id_string != NULL) { free(request->job_id_string); request->job_id_string = NULL; } error_exit: if (rc == GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_STATE_FILE; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.state_file.read.end " "level=ERROR " "path=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_state_file, -rc, "Error reading state file", globus_gram_protocol_error_string(rc)); fclose(fp); fopen_state_file_failed: if (buffer != NULL) { free(buffer); } exit: return rc; } /* globus_gram_job_manager_state_file_read() */ /** * Try to set an advisory write lock on a file descriptor * * @param fd * Open file descriptor to lock. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE * Another process has the file locked. * @retval GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE * System error locking the file. */ int globus_gram_job_manager_file_lock( int fd) { int rc; struct flock fl; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; while( (rc = fcntl( fd, F_SETLK, &fl )) < 0 ) { if ( errno == EACCES || errno == EAGAIN ) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; break; } else if ( errno != EINTR ) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE; break; } } return rc; } /* globus_gram_job_manager_file_lock() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_job_manager_validate.c0000644000000000000000000000013214243161125026134 xustar000000000000000030 mtime=1653400149.359970111 30 atime=1653401831.554124963 30 ctime=1653404021.252746917 globus_gram_job_manager-15.8/globus_gram_job_manager_validate.c0000664000175000017500000011131014243161125026272 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file globus_gram_job_manager_validate.c * @brief RSL Validation Support for the GRAM Job Manager. */ #define GLOBUS_GRAM_VALIDATE_JOB_SUBMIT_STRING \ "GLOBUS_GRAM_JOB_SUBMIT" #define GLOBUS_GRAM_VALIDATE_JOB_MANAGER_RESTART_STRING \ "GLOBUS_GRAM_JOB_MANAGER_RESTART" #define GLOBUS_GRAM_VALIDATE_STDIO_UPDATE_STRING \ "GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE" #include "globus_common.h" #include "globus_gram_job_manager.h" #include "globus_rsl.h" #include "globus_rvf_parser.h" #include #include #include static char * validation_filename; static char * site_validation_filename; static char * lrm_validation_filename; static char * lrm_validation_filename_pattern; static char * site_lrm_validation_filename; static char * site_lrm_validation_filename_pattern; static int globus_l_gram_job_manager_attribute_match( void * datum, void * args); static int globus_gram_job_manager_validation_init( globus_gram_job_manager_t * manager); static globus_bool_t globus_l_gram_job_manager_validation_string_match( const char * str1, const char * str2); static int globus_l_gram_job_manager_check_rsl_attributes( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, globus_gram_job_manager_validation_when_t when); static globus_bool_t globus_l_gram_job_manager_attribute_exists( globus_list_t * attributes, char * attribute_name); static int globus_l_gram_job_manager_insert_default_rsl( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, globus_gram_job_manager_validation_when_t when); static void globus_l_gram_job_manager_validation_record_free( globus_rvf_record_t * record); static int globus_l_gram_job_manager_validation_rsl_error( const char * attribute); static int globus_l_gram_job_manager_validation_value_error( globus_gram_jobmanager_request_t * request, const char * attribute, const char * value, const char * enumerated_values); static int globus_l_gram_job_manager_missing_value_error( const char * attribute); extern int globus_gram_job_manager_validation_update( globus_gram_job_manager_t * manager) { time_t validation_timestamp = time(NULL); int rc = GLOBUS_SUCCESS; globus_result_t result; struct stat st; globus_bool_t do_update = GLOBUS_FALSE; if (validation_timestamp <= manager->validation_record_timestamp) { goto skip_update_check; } if (validation_filename == NULL) { result = globus_eval_path( "${datadir}/globus/globus_gram_job_manager/globus-gram-job-manager.rvf", &validation_filename); if (result != GLOBUS_SUCCESS || validation_filename == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto validation_filename_failed; } } if (site_validation_filename == NULL) { result = globus_eval_path( "${sysconfdir}/globus/gram/job-manager.rvf", &site_validation_filename); if (result != GLOBUS_SUCCESS || site_validation_filename == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto site_validation_filename_failed; } } if (lrm_validation_filename_pattern == NULL) { lrm_validation_filename_pattern = globus_common_create_string( "${datadir}/globus/globus_gram_job_manager/%s.rvf", manager->config->jobmanager_type); if(lrm_validation_filename_pattern == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto lrm_validation_filename_pattern_failed; } } if (lrm_validation_filename == NULL) { result = globus_eval_path( lrm_validation_filename_pattern, &lrm_validation_filename); if (result != GLOBUS_SUCCESS || lrm_validation_filename == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto lrm_validation_filename_failed; } } if (site_lrm_validation_filename_pattern == NULL) { site_lrm_validation_filename_pattern = globus_common_create_string( "${sysconfdir}/globus/gram/%s.rvf", manager->config->jobmanager_type); if(site_lrm_validation_filename_pattern == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto site_lrm_validation_filename_pattern_failed; } } if (site_lrm_validation_filename == NULL) { result = globus_eval_path(site_lrm_validation_filename_pattern, &site_lrm_validation_filename); if (result != GLOBUS_SUCCESS || site_lrm_validation_filename == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto site_lrm_validation_filename_failed; } } rc = stat(validation_filename, &st); if ((rc == GLOBUS_SUCCESS && ((!manager->validation_file_exists[0]) || st.st_mtime > manager->validation_record_timestamp)) || (rc != GLOBUS_SUCCESS && errno == ENOENT && manager->validation_file_exists[0])) { do_update = GLOBUS_TRUE; } if (!do_update) { rc = stat(lrm_validation_filename, &st); if ((rc == GLOBUS_SUCCESS && ((!manager->validation_file_exists[1]) || st.st_mtime > manager->validation_record_timestamp)) || (rc != GLOBUS_SUCCESS && errno == ENOENT && manager->validation_file_exists[1])) { do_update = GLOBUS_TRUE; } } if (!do_update) { rc = stat(site_validation_filename, &st); if ((rc == GLOBUS_SUCCESS && ((!manager->validation_file_exists[2]) || st.st_mtime > manager->validation_record_timestamp)) || (rc != GLOBUS_SUCCESS && errno == ENOENT && manager->validation_file_exists[2])) { do_update = GLOBUS_TRUE; } } if (!do_update) { rc = stat(site_lrm_validation_filename, &st); if ((rc == GLOBUS_SUCCESS && ((!manager->validation_file_exists[3]) || st.st_mtime > manager->validation_record_timestamp)) || (rc != GLOBUS_SUCCESS && errno == ENOENT && manager->validation_file_exists[3])) { do_update = GLOBUS_TRUE; } } if (! (manager->validation_file_exists[0] || manager->validation_file_exists[1] || manager->validation_file_exists[2] || manager->validation_file_exists[3]) ) { do_update = 1; } if (do_update) { /* Free old validation entries */ globus_gram_job_manager_validation_destroy( manager->validation_records); manager->validation_records = NULL; rc = globus_gram_job_manager_validation_init(manager); } else { rc = GLOBUS_SUCCESS; } site_lrm_validation_filename_failed: site_lrm_validation_filename_pattern_failed: lrm_validation_filename_failed: lrm_validation_filename_pattern_failed: site_validation_filename_failed: validation_filename_failed: skip_update_check: return rc; } /* globus_gram_job_manager_validation_update() */ /** * @param manager * A job request. The validation field of this job request will be * updated with a list of validation records constructed from the * rsl validation files associated with the job manager. */ static int globus_gram_job_manager_validation_init( globus_gram_job_manager_t * manager) { time_t validation_timestamp = time(NULL); int rc = GLOBUS_SUCCESS; globus_list_t * l; manager->validation_records = NULL; manager->validation_file_exists[0] = GLOBUS_FALSE; manager->validation_file_exists[1] = GLOBUS_FALSE; manager->validation_file_exists[2] = GLOBUS_FALSE; manager->validation_file_exists[3] = GLOBUS_FALSE; /* Read in validation files. Do the generic job manager one first, * as the scheduler-specific one overrides it. */ rc = globus_rvf_parse_file( validation_filename, &manager->validation_records, &manager->gt3_failure_message); if(rc != GLOBUS_SUCCESS) { manager->validation_file_exists[0] = GLOBUS_FALSE; rc = globus_rvf_parse_string( globus_i_gram_default_rvf, &manager->validation_records, &manager->gt3_failure_message); } else { manager->validation_file_exists[0] = GLOBUS_TRUE; } if(rc != GLOBUS_SUCCESS) { goto read_validation_failed; } if(access(lrm_validation_filename, R_OK) == 0) { rc = globus_rvf_parse_file( lrm_validation_filename, &manager->validation_records, &manager->gt3_failure_message); if (rc != GLOBUS_SUCCESS) { goto read_lrm_validation_filename_failed; } manager->validation_file_exists[1] = GLOBUS_TRUE; } if (access(site_validation_filename, R_OK) == 0) { rc = globus_rvf_parse_file( site_validation_filename, &manager->validation_records, &manager->gt3_failure_message); if (rc != GLOBUS_SUCCESS) { goto read_site_validation_filename_failed; } manager->validation_file_exists[2] = GLOBUS_TRUE; } if (access(site_lrm_validation_filename, R_OK) == 0) { rc = globus_rvf_parse_file( site_lrm_validation_filename, &manager->validation_records, &manager->gt3_failure_message); if (rc != GLOBUS_SUCCESS) { goto read_site_lrm_validation_filename_failed; } manager->validation_file_exists[3] = GLOBUS_TRUE; } for(l = manager->validation_records; l != NULL; l = globus_list_rest(l)) { globus_rvf_record_t * record = globus_list_first(l); if (record->valid_when == -1) { record->valid_when = 0; } if (record->default_when == -1) { record->default_when = 0; } if (record->required_when == -1) { record->required_when = 0; } if (record->publishable == -1) { record->publishable = 1; } } manager->validation_record_timestamp = validation_timestamp; read_site_lrm_validation_filename_failed: read_site_validation_filename_failed: read_lrm_validation_filename_failed: if(rc != GLOBUS_SUCCESS) { globus_gram_job_manager_validation_destroy( manager->validation_records); manager->validation_records = NULL; } read_validation_failed: return rc; } /* globus_gram_job_manager_validation_init() */ int globus_gram_job_manager_validation_destroy( globus_list_t * validation_records) { globus_list_t * tmp; globus_rvf_record_t * record; tmp = validation_records; while (!globus_list_empty(tmp)) { record = globus_list_first(tmp); tmp = globus_list_rest(tmp); globus_l_gram_job_manager_validation_record_free(record); } globus_list_free(validation_records); return GLOBUS_SUCCESS; } /** * Validate a request's RSL. * @ingroup globus_gram_job_manager_rsl_validation * * Validate the RSL tree defining a job request, using validation files. * An RSL is valid if all required RSL parameters and defined in the RSL, * and if all RSL parameters in the RSL tree are supported by the job * manager and/or scheduler. * * As a side effect, the RSL will be modified to include any missing RSL * parameters which have default values defined in one of the validation * files. * * @param request * A job request. The rsl field of this job request is validated * according to the rsl validation data stored in the two files * passed in to this function. * * @return Returns GLOBUS_SUCCESS if the RSL is valid, and GLOBUS_FAILURE * if it is not. * @see globus_gram_job_manager_rsl_validation_file */ int globus_gram_job_manager_validate_rsl( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, globus_gram_job_manager_validation_when_t when) { int rc; /* First validation: RSL is a boolean "&" */ if(!globus_rsl_is_boolean_and(rsl)) { return GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; } rc = globus_gram_job_manager_validation_update(request->manager); if (rc != GLOBUS_SUCCESS) { return rc; } /* * Make sure all of the attributes match defined RSL validation records. */ rc = globus_l_gram_job_manager_check_rsl_attributes( request, rsl, when); if(rc != GLOBUS_SUCCESS) { goto rsl_check_failed; } /* * Insert default RSL values where appropriate, make sure everything * which is required is defined. */ rc = globus_l_gram_job_manager_insert_default_rsl( request, rsl, when); if (rc != GLOBUS_SUCCESS) { goto insert_default_rsl_failed; } insert_default_rsl_failed: rsl_check_failed: return rc; } /* globus_gram_job_manager_validate_rsl() */ /** * Attribute name matching search predicate. * * Compares a validation record against the desired attribute name. Used * as a predicate in globus_list_search_pred(). * * @param datum * A void * cast of a validation record. * @param args * A void * cast of the desired attribute name. */ static int globus_l_gram_job_manager_attribute_match( void * datum, void * args) { globus_rvf_record_t * tmp = datum; return globus_l_gram_job_manager_validation_string_match( tmp->attribute, args); } /* globus_l_gram_job_manager_attribute_match() */ static globus_bool_t globus_l_gram_job_manager_validation_string_match( const char * str1, const char * str2) { return (strcmp(str1, str2) == 0); } /* globus_l_gram_job_manager_validation_string_match() */ /** * Validate RSL attributes * * Checks that all of the RSL attributes in the request's RSL match * a validation record. If an RSL has an enumerated list of values, * then the value of the RSL is compared against that list. * * @param request * The job request containing the RSL to validate. * @param when * Which RSL validation time scope we will use to decide * whether to use the default values or not. */ static int globus_l_gram_job_manager_check_rsl_attributes( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, globus_gram_job_manager_validation_when_t when) { globus_list_t * operands; globus_list_t * node; globus_rsl_t * relation; char * attribute; char * value_str; globus_rvf_record_t * record; globus_rsl_value_t * value; int rc = GLOBUS_SUCCESS; static const char * operation_types[] = { "??", "=", "!=", ">", ">=", "<", "<=", "??", "&", "|", "+" }; operands = globus_rsl_boolean_get_operand_list(rsl); /* Check to make sure that every attribute is recognized by this * job manager. */ while(!globus_list_empty(operands)) { relation = globus_list_first(operands); operands = globus_list_rest(operands); if (!globus_rsl_is_relation(relation)) { int operator = globus_rsl_boolean_get_operator(relation); if (operator > 10 || operator < 0) { operator = 0; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_rsl.end " "level=ERROR " "msg=\"Required RSL relation, got boolean\" " "operator=%s " "status=%d " "\n", operation_types[operator], -GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL); if (request->gt3_failure_message == NULL) { request->gt3_failure_message = globus_common_create_string( "Required RSL relation, got boolean %s", operation_types[operator]); } } else if (!globus_rsl_is_relation_eq(relation)) { int operator = globus_rsl_relation_get_operator(relation); if (operator > 10 || operator < 0) { operator = 0; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_rsl.end " "level=ERROR " "msg=\"Unsupported RSL operation\" " "attribute=%s " "operator=%s " "status=%d " "\n", globus_rsl_relation_get_attribute(relation), operation_types[operator], -GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL); if (request->gt3_failure_message == NULL) { request->gt3_failure_message = globus_common_create_string( "the job manager does not support the RSL operator " "\"%s\" for the %s attribute", operation_types[operator], globus_rsl_relation_get_attribute(relation)); } return GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL; } attribute = globus_rsl_relation_get_attribute(relation); node = globus_list_search_pred( request->manager->validation_records, globus_l_gram_job_manager_attribute_match, attribute); if(!node) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_rsl.end " "level=ERROR " "msg=\"Unsupported RSL attribute\" " "attribute=%s " "status=%d " "\n", globus_rsl_relation_get_attribute(relation), -GLOBUS_GRAM_PROTOCOL_ERROR_BAD_RSL); if (request->gt3_failure_message == NULL) { request->gt3_failure_message = globus_common_create_string( "the RSL attribute \"%s\" is not supported by the LRM adapter", globus_rsl_relation_get_attribute(relation)); } return GLOBUS_GRAM_PROTOCOL_ERROR_PARAMETER_NOT_SUPPORTED; } record = globus_list_first(node); /* Check valid_when */ if((record->valid_when & when) == 0) { const char * whenstr = "unknown operation"; switch(when) { case GLOBUS_GRAM_VALIDATE_JOB_SUBMIT: whenstr = "submit"; rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SUBMIT_ATTRIBUTE; break; case GLOBUS_GRAM_VALIDATE_JOB_MANAGER_RESTART: whenstr = "restart"; rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_RESTART_ATTRIBUTE; break; case GLOBUS_GRAM_VALIDATE_STDIO_UPDATE: whenstr = "stdio_update"; rc = GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_STDIO_UPDATE_ATTRIBUTE; break; } globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_rsl.end " "level=ERROR " "msg=\"Invalid RSL attribute for operation\" " "attribute=%s " "operation=%s " "status=%d " "\n", globus_rsl_relation_get_attribute(relation), whenstr, -rc); if (request->gt3_failure_message == NULL) { request->gt3_failure_message = globus_common_create_string( "Invalid RSL attribute \"%s\" for %s", globus_rsl_relation_get_attribute(relation), whenstr); } return rc; } /* Check enumerated values if applicable */ if(record->enumerated_values) { value = globus_rsl_relation_get_single_value(relation); if(!value) { return globus_l_gram_job_manager_validation_rsl_error(attribute); } value_str = globus_rsl_value_literal_get_string(value); if(!value_str) { return globus_l_gram_job_manager_validation_rsl_error( attribute); } if(strstr(record->enumerated_values, value_str) == GLOBUS_NULL) { rc = globus_l_gram_job_manager_validation_value_error( request, attribute, value_str, record->enumerated_values); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_rsl.end " "level=ERROR " "msg=\"RSL attribute value not in enumeration\" " "attribute=%s " "value=%s " "enumeration=\"%s\" " "status=%d " "\n", record->attribute, value_str, record->enumerated_values, -rc); return rc; } } } return GLOBUS_SUCCESS; } /* globus_l_gram_job_manager_check_rsl_attributes() */ /** * Add default values to RSL and verify required parameters * * Inserts default values to RSL when an RSL parameter is not defined * in it. After this is complete, it checks that all RSL parameters * with the "required_when" flag set are present in the RSL tree. * * @param request * Request which contains the RSL tree to validate. * @param when * Which RSL validation time scope we will use to decide * whether to use the default values or not. */ static int globus_l_gram_job_manager_insert_default_rsl( globus_gram_jobmanager_request_t * request, globus_rsl_t * rsl, globus_gram_job_manager_validation_when_t when) { globus_rvf_record_t * record; globus_list_t ** attributes; globus_rsl_t * new_relation; char * new_relation_str; globus_list_t * validation_records; int rc = GLOBUS_SUCCESS; attributes = globus_rsl_boolean_get_operand_list_ref(rsl); validation_records = request->manager->validation_records; while(!globus_list_empty(validation_records)) { record = globus_list_first(validation_records); validation_records = globus_list_rest(validation_records); if(record->default_value && (record->default_when&when)) { if(!globus_l_gram_job_manager_attribute_exists( *attributes, record->attribute)) { new_relation_str = globus_common_create_string( "%s = %s", record->attribute, record->default_value); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.validate_rsl.info " "level=TRACE " "msg=\"Inserting default RSL for attribute\" " "attribute=%s " "default=\"%s\" " "\n", record->attribute, record->default_value); new_relation = globus_rsl_parse(new_relation_str); globus_list_insert(attributes, new_relation); free(new_relation_str); } } if(record->required_when & when) { if(!globus_l_gram_job_manager_attribute_exists( *attributes, record->attribute)) { rc = globus_l_gram_job_manager_missing_value_error( record->attribute); globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.validate_rsl.end " "level=ERROR " "msg=\"RSL missing required attribute\" " "attribute=%s " "\n", record->attribute); return rc; } } } return rc; } /* globus_l_gram_job_manager_insert_default_rsl() */ /** * Check that a relation for a required RSL attribute is present. * * @param attributes * List of relations which are part of the job request's * RSL. * @param attribute_name * The name of the attribute to search for. */ static globus_bool_t globus_l_gram_job_manager_attribute_exists( globus_list_t * attributes, char * attribute_name) { char * tmp; globus_rsl_t * relation; while(!globus_list_empty(attributes)) { relation = globus_list_first(attributes); attributes = globus_list_rest(attributes); tmp = globus_rsl_relation_get_attribute(relation); if(globus_l_gram_job_manager_validation_string_match( tmp, attribute_name)) { return GLOBUS_TRUE; } } return GLOBUS_FALSE; } /* globus_l_gram_job_manager_attribute_exists() */ /** * Free a validation record * * Frees all strings referenced by the validation record, and * then frees the record itself. * * @param record * The record to free. */ static void globus_l_gram_job_manager_validation_record_free( globus_rvf_record_t * record) { if(!record) { return; } if(record->attribute) { free(record->attribute); } if(record->description) { free(record->description); } if(record->default_value) { free(record->default_value); } if(record->enumerated_values) { free(record->enumerated_values); } free(record); } /* globus_l_gram_job_manager_validation_record_free() */ #define HANDLE_RSL_ERROR(param,error) \ if(globus_l_gram_job_manager_validation_string_match( \ attribute, param)) \ { \ return error; \ } /** * Decide what type of RSL error to return when the value of @a attribute. * is not of the appropriate type. * * @param attribute * Attribute to check. * * @note This should go away when we have better error reporting in the * GRAM protocol. */ static int globus_l_gram_job_manager_validation_rsl_error( const char * attribute) { HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_ARGUMENTS_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_ARGUMENTS) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_COUNT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_COUNT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_DIR_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_DIRECTORY) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_DRY_RUN_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_DRYRUN) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_ENVIRONMENT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_ENVIRONMENT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_EXECUTABLE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EXECUTABLE) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_FILE_CLEANUP_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_CLEANUP) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_FILE_STAGE_IN_SHARED_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN_SHARED) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_FILE_STAGE_OUT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_OUT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_GASS_CACHE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_GASS_CACHE) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MYJOB_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MYJOB) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_HOST_COUNT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_HOST_COUNT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_JOB_TYPE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_JOBTYPE) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MAX_CPU_TIME_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MAX_CPU_TIME) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MAX_MEMORY_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MAX_MEMORY) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MAX_TIME_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MAXTIME) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MAX_WALL_TIME_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MAX_WALL_TIME) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MIN_MEMORY_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MIN_MEMORY) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_PROJECT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_PROJECT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_QUEUE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_QUEUE) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_REMOTE_IO_URL_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_REMOTE_IO_URL) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_RESTART_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_RESTART) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_SAVE_STATE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SAVE_STATE) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_SCRATCHDIR_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCRATCH) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_STDERR_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDERR) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_STDERR_POSITION_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDERR_POSITION) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_STDIN_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDIN) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_STDOUT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_STDOUT_POSITION_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT_POSITION) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_TWO_PHASE_COMMIT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_TWO_PHASE_COMMIT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_PROXY_TIMEOUT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_RSL_PROXY_TIMEOUT) return GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCHEDULER_SPECIFIC; } /* globus_l_gram_job_manager_validation_rsl_error() */ static int globus_l_gram_job_manager_validation_value_error( globus_gram_jobmanager_request_t * request, const char * attribute, const char * value, const char * enumerated_values) { if (request->gt3_failure_message == NULL) { request->gt3_failure_message = globus_common_create_string( "RSL attribute \"%s\" has value \"%s\" which is not one of the allowed values (%s)", attribute, value, enumerated_values); } HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_COUNT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_COUNT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MYJOB_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_GRAM_MYJOB) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_HOST_COUNT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_HOST_COUNT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_JOB_TYPE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_JOBTYPE) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MAX_CPU_TIME_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MAX_CPU_TIME) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MAX_MEMORY_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MAX_MEMORY) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MAX_TIME_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MAXTIME) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MAX_WALL_TIME_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MAX_WALL_TIME) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_MIN_MEMORY_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MIN_MEMORY) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_PROJECT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_PROJECT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_QUEUE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_QUEUE) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_SAVE_STATE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SAVE_STATE) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_SCRATCHDIR_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRATCH) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_STDERR_POSITION_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_STDERR_POSITION) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_STDOUT_POSITION_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_STDOUT_POSITION) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_TWO_PHASE_COMMIT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_TWO_PHASE_COMMIT) HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_PROXY_TIMEOUT_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_PROXY_TIMEOUT) return GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCHEDULER_SPECIFIC; } /* globus_l_gram_job_manager_validation_value_error() */ static int globus_l_gram_job_manager_missing_value_error( const char * attribute) { HANDLE_RSL_ERROR(GLOBUS_GRAM_PROTOCOL_EXECUTABLE_PARAM, GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_EXE) return GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_ATTRIBUTE; } /* globus_l_gram_job_manager_missing_value_error() */ #endif /* !GLOBUS_DONT_DOCUMENT_INTERNAL */ globus_gram_job_manager-15.8/PaxHeaders.31186/logging.c0000644000000000000000000000013214243161125021064 xustar000000000000000030 mtime=1653400149.360970101 30 atime=1653401831.599124539 30 ctime=1653404021.253746908 globus_gram_job_manager-15.8/logging.c0000664000175000017500000002165514243161125021236 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_job_manager.h" #include "globus_gsi_system_config.h" #include "globus_callout.h" #include "globus_callout_constants.h" #include "globus_gram_jobmanager_callout_error.h" #include globus_logging_handle_t globus_i_gram_job_manager_log_stdio; globus_logging_handle_t globus_i_gram_job_manager_log_sys; static globus_symboltable_t globus_l_gram_log_symboltable; static FILE * globus_l_gram_log_fp = NULL; globus_thread_key_t globus_i_gram_request_key; static globus_bool_t globus_l_gram_reopen_log; static void globus_l_gram_logging_close( void * user_arg); static void globus_l_gram_logging_write( globus_byte_t * buf, globus_size_t length, void * user_arg); globus_logging_module_t globus_l_gram_logging_module = { NULL, globus_l_gram_logging_write, globus_l_gram_logging_close, NULL }; int globus_gram_job_manager_logging_init( globus_gram_job_manager_config_t * config) { globus_result_t result = GLOBUS_SUCCESS; int rc; if (config->syslog_enabled) { result = globus_logging_init( &globus_i_gram_job_manager_log_sys, NULL, 0, config->log_levels|GLOBUS_LOGGING_INLINE, &globus_logging_syslog_ng_module, NULL); if (result != GLOBUS_SUCCESS) { char * errstr = globus_error_print_friendly( globus_error_peek(result)); fprintf(stderr, "Error initializing logging: %s\n", errstr); exit(1); } } else { globus_i_gram_job_manager_log_sys = NULL; } rc = globus_symboltable_init( &globus_l_gram_log_symboltable, globus_hashtable_string_hash, globus_hashtable_string_keyeq); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error initializing logging: symboltable_init\n"); exit(1); } rc = globus_symboltable_create_scope(&globus_l_gram_log_symboltable); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error initializing logging: create scope\n"); exit(1); } rc = globus_i_gram_symbol_table_populate( config, &globus_l_gram_log_symboltable); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error initializing logging: symboltable_populate\n"); exit(1); } globus_l_gram_logging_module.header_func = globus_logging_stdio_ng_module.header_func; result = globus_logging_init( &globus_i_gram_job_manager_log_stdio, NULL, 0, config->log_levels|GLOBUS_LOGGING_INLINE, &globus_l_gram_logging_module, (void *) config); if (result != GLOBUS_SUCCESS) { char * errstr = globus_error_print_friendly( globus_error_peek(result)); fprintf(stderr, "Error initializing logging: %s\n", errstr); exit(1); } return result; } /* globus_gram_job_manager_logging_init() */ void globus_gram_job_manager_logging_destroy(void) { if (globus_i_gram_job_manager_log_sys) { globus_logging_destroy(globus_i_gram_job_manager_log_sys); globus_i_gram_job_manager_log_sys = NULL; } if (globus_i_gram_job_manager_log_stdio) { globus_logging_destroy(globus_i_gram_job_manager_log_stdio); globus_i_gram_job_manager_log_stdio = NULL; } globus_symboltable_destroy( &globus_l_gram_log_symboltable); globus_l_gram_log_symboltable = NULL; } char * globus_gram_prepare_log_string( const char * instr) { char * outstr; int i = 0; if (instr == NULL) { return NULL; } outstr = malloc(2*strlen(instr) + 1); if (outstr == NULL) { return NULL; } while (*instr != 0) { if (*instr == '\n') { outstr[i++] = '\\'; outstr[i++] = 'n'; instr++; } else if (*instr == '\r') { outstr[i++] = '\\'; outstr[i++] = 'r'; instr++; } else if (*instr == '\\') { outstr[i++] = '\\'; outstr[i++] = '\\'; instr++; } else if (*instr == '"') { outstr[i++] = '\\'; outstr[i++] = '"'; instr++; } else { outstr[i++] = *(instr++); } } outstr[i++] = '\0'; return outstr; } /* globus_gram_prepare_log_string() */ void globus_i_job_manager_log_rotate(int sig) { globus_l_gram_reopen_log = GLOBUS_TRUE; } static void globus_l_gram_logging_write( globus_byte_t * buf, globus_size_t length, void * user_arg) { static char * DATE_SYMBOL = "DATE"; globus_gram_job_manager_config_t * config = user_arg; const char * log_pattern = NULL; time_t now; struct tm * now_tm; char now_str[9]; char * path = NULL; static char * last_path = NULL; int fd; int flags; int rc; globus_gram_jobmanager_request_t * request; globus_symboltable_t * symboltable; request = globus_thread_getspecific(globus_i_gram_request_key); if (request != NULL) { symboltable = &request->symbol_table; log_pattern = request->log_pattern; } else { symboltable = &globus_l_gram_log_symboltable; } if (log_pattern == NULL) { log_pattern = config->log_pattern; } if (log_pattern == NULL) { /* stdio logging was not enabled for the system or via the job rsl */ return; } now = time(NULL); now_tm = gmtime(&now); snprintf(now_str, 9, "%04d%02d%02d", now_tm->tm_year + 1900, now_tm->tm_mon + 1, now_tm->tm_mday); /* Create a new scope for this so that job RSL variables which conflict with * DATE_SYMBOL won't get clobbered and leak */ globus_symboltable_create_scope(symboltable); globus_symboltable_insert( symboltable, DATE_SYMBOL, now_str); globus_gram_job_manager_rsl_eval_string( symboltable, log_pattern, &path); globus_symboltable_remove_scope( symboltable); if (path == NULL) { /* Bad RSL Substitution? */ return; } if (last_path == NULL || globus_l_gram_reopen_log || strcmp(path, last_path) != 0) { globus_l_gram_reopen_log = GLOBUS_FALSE; if (last_path) { free(last_path); } last_path = path; path = NULL; if (globus_l_gram_log_fp != NULL) { freopen(last_path, "a", globus_l_gram_log_fp); } else { globus_l_gram_log_fp = fopen(last_path, "a"); if (globus_l_gram_log_fp) { setvbuf(globus_l_gram_log_fp, NULL, _IONBF, 0); } } if (globus_l_gram_log_fp) { fd = fileno(globus_l_gram_log_fp); flags = fcntl(fd, F_GETFD); if (flags >= 0) { flags |= FD_CLOEXEC; rc = fcntl(fd, F_SETFD, flags); } } } else { free(path); path = NULL; } if (globus_l_gram_log_fp) { fwrite(buf, length, 1, globus_l_gram_log_fp); } } /* globus_l_gram_logging_write() */ static void globus_l_gram_logging_close( void * user_arg) { if (globus_l_gram_log_fp != NULL) { fclose(globus_l_gram_log_fp); globus_l_gram_log_fp = NULL; } } /* globus_l_gram_logging_close() */ globus_gram_job_manager-15.8/PaxHeaders.31186/startup_socket.c0000644000000000000000000000013114243161125022507 xustar000000000000000029 mtime=1653400149.36597005 30 atime=1653401831.857122109 30 ctime=1653404021.254746898 globus_gram_job_manager-15.8/startup_socket.c0000664000175000017500000022640614243161125022663 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file startup_socket.c * @brief Job Manager Socket Transfer Code */ #include "globus_common.h" #include "globus_gram_job_manager.h" #include "globus_gsi_credential.h" #include "globus_xio.h" #include #include #include #include /* If there exists a system which doesn't define the RFC 2292 extensions * CMSG_SPACE and CMSG_LEN, add macro definitions in the #ifndef sections * below */ #ifndef CMSG_SPACE #error "CMSG_SPACE not defined, unknown padding needed for struct cmsghdr" #endif #ifndef CMSG_LEN #error "CMSG_LEN not defined, unknown data padding needed for struct cmsghdr" #endif static const char * globus_l_gatekeeper_env[] = { "REMOTE_ADDR", "REQUEST_METHOD", "SCRIPT_NAME", "CONTENT_LENGTH", "GATEWAY_INTERFACE", "SSL_CLIENT_CERT", NULL }; static globus_result_t globus_l_gram_create_handle( int sock, globus_xio_handle_t * handle); static void globus_l_gram_startup_socket_callback( globus_xio_handle_t handle, globus_result_t result, globus_byte_t * buffer, globus_size_t len, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void * user_arg); static int globus_l_create_starter_connect_socket( globus_gram_job_manager_t * manager, int * sockptr); static int globus_l_encode_gatekeeper_env( struct iovec *iov); static int globus_l_decode_gatekeeper_env( const char *p, size_t len, char **remote_addr, size_t *content_length, globus_gsi_cred_handle_t *cred_handle); static int globus_l_blocking_send_length_and_fds( int fd, int msg_length, int * fds, int fd_count); static int globus_l_blocking_writev( int fd, struct iovec * iov, int iovcnt); static int globus_l_blocking_read( int fd, void *buf, int len); static void globus_l_remove_proxy( gss_buffer_t buffer); globus_xio_driver_t globus_i_gram_job_manager_file_driver; globus_xio_stack_t globus_i_gram_job_manager_file_stack; #endif /** * Acquire the lock file for the job manager * * The globus_gram_job_manager_startup_lock() attempts to lock the job * manager's lock file. If successful then this job manager must become the * main job manager to manage jobs for this particular resource. * * This function can fail in two main ways: if the lock fails because another * process owns a lock, it returns GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE; * otherwise, it returns GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE. * * @param manager * Pointer to job manager state * @param lock_fd * Pointer to set to the lock file descriptor. * * @retval GLOBUS_SUCCESS * Success * @retval GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE * Error locking state file * @retval GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE * Old job manager alive */ int globus_gram_job_manager_startup_lock( globus_gram_job_manager_t * manager, int * lock_fd) { int rc = 0; int lockfd = -1; int i; int flags; enum { GRAM_RETRIES = 100 }; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.startup_lock.start " "level=DEBUG " "path=\"%s\" " "\n", manager->lock_path); /* Create and lock lockfile */ for (i = 0, lockfd = -1; lockfd < 0 && i < GRAM_RETRIES; i++) { lockfd = open(manager->lock_path, O_RDWR|O_CREAT, S_IRWXU); } if (lockfd < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup_lock.end " "level=ERROR " "status=%d " "path=\"%s\" " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", -rc, manager->lock_path, "Error opening state lock file", errno, strerror(errno)); goto lockfd_open_failed; } flags = fcntl(lockfd, F_GETFD); if (flags < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup_lock.end " "level=ERROR " "status=%d " "path=\"%s\" " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", -rc, manager->lock_path, "Error getting file descriptor flags", errno, strerror(errno)); goto fcntl_lockfd_failed; } flags |= FD_CLOEXEC; if (fcntl(lockfd, F_SETFD, flags) < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup_lock.end " "level=ERROR " "status=%d " "path=\"%s\" " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", -rc, manager->lock_path, "Error setting close-on-exec flag for lock file", errno, strerror(errno)); goto fcntl_lockfd_failed; } rc = globus_gram_job_manager_file_lock(lockfd); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.startup_lock.end " "level=DEBUG " "status=%d " "path=\"%s\" " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", -rc, manager->lock_path, "Unable to lock file, perhaps another job manager is running", errno, strerror(errno)); goto lock_failed; } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.startup_lock.end " "level=DEBUG " "path=\"%s\" " "status=%d " "\n", manager->lock_path, rc); } if (rc != GLOBUS_SUCCESS) { lock_failed: fcntl_lockfd_failed: close(lockfd); lockfd = -1; } lockfd_open_failed: *lock_fd = lockfd; return rc; } /* globus_gram_job_manager_startup_lock() */ /** * Create socket to handle startup messages from other job managers * * Creates a UNIX domain socket, binds it to a well-known user-and lrm-specific * filename, and then creates and registers an XIO handle for select. * * @param manager * Manager to create the socket for. * @param handle * Pointer to XIO handle to be set to the socket descriptor. * @param socket_fd * Pointer to file descriptor pointing to the UNIX domain socket. */ int globus_gram_job_manager_startup_socket_init( globus_gram_job_manager_t * manager, globus_xio_handle_t * handle, int * socket_fd) { static unsigned char byte[1]; int sock = -1; int rc = 0; globus_result_t result; struct sockaddr_un addr; mode_t old_umask; int i; int rcvbuf; int flags; int save_errno; FILE * fp; enum { GRAM_RETRIES = 100 }; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.startup_socket_init.start level=DEBUG\n"); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.startup_socket_init.write_pid.start " "level=TRACE " "path=\"%s\" " "\n", manager->pid_path); fp = fopen(manager->pid_path, "w"); if (fp == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_STATE_FILE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup_socket_init.write_pid.end " "level=ERROR " "path=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", manager->pid_path, -rc, "Error opening pid file", errno, strerror(errno)); goto open_pid_failed; } rc = fprintf(fp, "%ld\n", (long) getpid()); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_STATE_FILE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup_socket_init.write_pid.end " "level=ERROR " "path=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", manager->pid_path, -rc, "Error writing to pid file", errno, strerror(errno)); goto write_pid_failed; } rc = fclose(fp); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_WRITING_STATE_FILE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup_socket_init.write_pid.end " "level=ERROR " "path=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", manager->pid_path, -rc, "Error writing to pid file", errno, strerror(errno)); goto close_pid_failed; } fp = NULL; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.startup_socket_init.write_pid.end " "level=TRACE " "path=\"%s\" " "status=%d " "\n", manager->pid_path, 0); /* create and bind socket */ globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.startup_socket_init.create_socket.start " "level=TRACE " "path=\"%s\" " "\n", manager->socket_path); memset(&addr, 0, sizeof(struct sockaddr_un)); addr.sun_family = AF_UNIX; strncpy(addr.sun_path, manager->socket_path, sizeof(addr.sun_path)-1); sock = socket(AF_UNIX, SOCK_STREAM, 0); if (sock < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup_socket_init.create_socket.end " "level=ERROR " "path=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", manager->socket_path, -rc, "Error creating socket", errno, strerror(errno)); goto socket_failed; } rcvbuf = 10 * GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE; rc = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(rcvbuf)); if (rc < 0 && errno != ENOPROTOOPT) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup_socket_init.create_socket.end " "level=ERROR " "path=\"%s\" " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", manager->socket_path, -rc, "Error setting socket buffer size", errno, strerror(errno)); goto setsockopt_failed; } old_umask = umask(S_IRWXG|S_IRWXO); (void ) remove(addr.sun_path); for (rc = -1, i = 0; rc < 0 && i < GRAM_RETRIES; i++) { rc = bind(sock, (struct sockaddr *) &addr, sizeof(addr)); if (rc < 0) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.startup_socket_init.create_socket " "level=WARN " "path=\"%s\" " "tries=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", manager->socket_path, i+1, "Error binding socket to filesystem", errno, strerror(errno)); remove(addr.sun_path); } } save_errno = errno; (void) umask(old_umask); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_LOCKING_STATE_LOCK_FILE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup.socket.create_socket.end " "level=ERROR " "status=%d " "path=\"%s\" " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", -rc, manager->socket_path, "Error binding socket to filesystem", save_errno, strerror(save_errno)); goto bind_failed; } flags = fcntl(sock, F_GETFD); if (flags < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup.socket.create_socket.end " "level=ERROR " "status=%d " "path=\"%s\" " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", -rc, manager->socket_path, "Error getting socket flags", errno, strerror(errno)); goto fcntl_failed; } flags |= FD_CLOEXEC; if (fcntl(sock, F_SETFD, flags) < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup.socket.create_socket.end " "level=ERROR " "status=%d " "path=\"%s\" " "msg=\"%s\" " "errno=%d " "reason=\"%s\"\n", -rc, manager->socket_path, "Error getting socket flags", errno, strerror(errno)); goto fcntl_failed; } listen(sock, 8); result = globus_l_gram_create_handle( sock, handle); if (result != GLOBUS_SUCCESS) { char * errstr; char * errstr_escaped; errstr = globus_error_print_friendly(globus_error_peek(result)); errstr_escaped = globus_gram_prepare_log_string(errstr); rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_FAILED_ALLOW_ATTACH; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup.socket.create_socket.end " "level=ERROR " "status=%d " "path=\"%s\" " "msg=\"%s\" " "reason=\"%s\"\n", -rc, manager->socket_path, "Error creating xio handle from socket", errstr_escaped ? errstr_escaped : ""); if (errstr) { free(errstr); } if (errstr_escaped) { free(errstr_escaped); } goto create_handle_failed; } result = globus_xio_register_read( *handle, byte, 0, 0, NULL, globus_l_gram_startup_socket_callback, manager); if (result != GLOBUS_SUCCESS) { char * errstr; char * errstr_escaped; rc = GLOBUS_GRAM_PROTOCOL_ERROR_JM_FAILED_ALLOW_ATTACH; errstr = globus_error_print_friendly(globus_error_peek(result)); errstr_escaped = globus_gram_prepare_log_string(errstr); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.startup.socket.create_socket.end " "level=ERROR " "status=%d " "path=\"%s\" " "msg=\"%s\" " "reason=\"%s\"\n", -rc, manager->socket_path, "Error registering socket for reading", errstr_escaped ? errstr_escaped : ""); if (errstr) { free(errstr); } if (errstr_escaped) { free(errstr_escaped); } goto register_read_failed; } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE, "event=gram.startup.socket.create_socket.end " "level=TRACE " "status=%d " "path=\"%s\" " "\n", 0, manager->socket_path); if (rc != GLOBUS_SUCCESS) { register_read_failed: globus_xio_close(*handle, NULL); *handle = NULL; create_handle_failed: fcntl_failed: bind_failed: setsockopt_failed: close(sock); sock = -1; socket_failed: close_pid_failed: fp = NULL; write_pid_failed: if (fp != NULL) { fclose(fp); } remove(manager->pid_path); } open_pid_failed: *socket_fd = sock; if (rc == GLOBUS_SUCCESS) { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.startup_socket_init.end " "level=DEBUG " "status=0 " "path=\"%s\" " "\n", manager->socket_path); } else { globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.startup_socket_init.end " "level=DEBUG " "status=%d " "reason=\"%s\" " "\n", -rc, globus_gram_protocol_error_string(rc)); } return rc; } /* globus_gram_job_manager_startup_socket_init() */ /* * This is the for job managers running on system where * gss_export_sec_context() works. In those cases, the * gatekeeper will exit after sending the context and http * message and expect the jobmanager to import the context and * wrap its replies. For systems without that, the v2 function * below is used. */ int globus_gram_job_manager_starter_send( globus_gram_job_manager_t * manager, int http_body_fd, int context_fd, int response_fd, gss_cred_id_t cred) { int sock; char byte[1]; int rc = 0; struct iovec iov[1]; int fdarray[3]; gss_buffer_desc cred_buffer; OM_uint32 major_status, minor_status; enum { GRAM_RETRIES = 100 }; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.send_job.start " "level=DEBUG " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "\n", http_body_fd, context_fd, response_fd); /* create socket */ rc = globus_l_create_starter_connect_socket(manager, &sock); if (rc != GLOBUS_SUCCESS) { goto socket_failed; } /* Export credential to be sent to active job manager */ major_status = gss_export_cred( &minor_status, cred, GSS_C_NO_OID, 1, &cred_buffer); if (GSS_ERROR(major_status)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "status=%d " "reason=\"%s\" " "\n", http_body_fd, context_fd, response_fd, -rc, "Error exporting proxy"); goto export_cred_failed; } /* Shouldn't be the case, as we're using the mech-specific * form, which is the path to the proxy on disk */ if (cred_buffer.length > GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "status=%d " "reason=\"%s\" " "\n", http_body_fd, context_fd, response_fd, -rc, "Proxy larger than protocol allows"); goto cred_too_big; } fdarray[0] = http_body_fd; fdarray[1] = context_fd; fdarray[2] = response_fd; rc = globus_l_blocking_send_length_and_fds( sock, (int) cred_buffer.length, fdarray, 3); if (rc != GLOBUS_SUCCESS) { goto sendmsg_failed; } iov[0].iov_base = cred_buffer.value; iov[0].iov_len = cred_buffer.length; rc = globus_l_blocking_writev(sock, iov, 1); if (rc < cred_buffer.length) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", http_body_fd, context_fd, response_fd, -rc, "Error sending datagram", errno, strerror(errno)); goto sendmsg_failed; } rc = globus_l_blocking_read(sock, byte, 1); if (rc <= 0 || byte[0] != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", http_body_fd, context_fd, response_fd, -rc, "Error receiving ack", errno, strerror(errno)); } else { rc = GLOBUS_SUCCESS; } iov[0].iov_base = &byte; iov[0].iov_len = 1; byte[0]++; rc = globus_l_blocking_writev(sock, iov, 1); if (rc != 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", http_body_fd, context_fd, response_fd, -rc, "Error sending ack", errno, strerror(errno)); } else { rc = GLOBUS_SUCCESS; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.send_job.end " "level=DEBUG " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "status=%d " "\n", http_body_fd, context_fd, response_fd, 0); } sendmsg_failed: cred_too_big: if (rc != GLOBUS_SUCCESS) { globus_l_remove_proxy(&cred_buffer); } gss_release_buffer( &minor_status, &cred_buffer); export_cred_failed: close(sock); socket_failed: return rc; } /* globus_gram_job_manager_starter_send() */ int globus_gram_job_manager_starter_send_v2( globus_gram_job_manager_t * manager, gss_cred_id_t cred) { int sock; char byte[1]; int rc = 0; int fdarray[2]; gss_buffer_desc cred_buffer; OM_uint32 major_status, minor_status; int msg_total; char * content_length_str; size_t content_length; unsigned char cred_length_buffer[4]; unsigned char env_length_buffer[4]; struct iovec iov[5]; char * cgi_env; enum { GRAM_RETRIES = 100 }; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.send_job.start " "level=DEBUG " "\n"); content_length_str = getenv("CONTENT_LENGTH"); sscanf(content_length_str, "%zu", &content_length); rc = globus_l_create_starter_connect_socket(manager, &sock); if (rc != GLOBUS_SUCCESS) { goto socket_failed; } /* Export credential to be sent to active job manager */ major_status = gss_export_cred( &minor_status, cred, GSS_C_NO_OID, 1, &cred_buffer); if (GSS_ERROR(major_status)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_USER_PROXY; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "status=%d " "reason=\"%s\" " "\n", -rc, "Error exporting proxy"); goto export_cred_failed; } /* Shouldn't be the case, as we're using the mech-specific * form, which is the path to the proxy on disk */ if (cred_buffer.length > GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "status=%d " "reason=\"%s\" " "\n", -rc, "Proxy larger than protocol allows"); goto cred_too_big; } globus_l_encode_gatekeeper_env(&iov[4]); cgi_env = iov[4].iov_base; /* Message format * "msg2" * 4 bytes: length of credential in network byte order * credential blob * 4 bytes: length of environment in network byte order * sequence of name=value pairs that form the environment * passed from the gatekeeper, separated by \0 * REMOTE_ADDR=%s * REQUEST_METHOD=%s * SCRIPT_NAME=%s * CONTENT_LENGTH=%s * GATEWAY_INTERFACE=%s * SSL_CLIENT_CERT=%s * SSL_CLIENT_CERT_CHAIN%d=%s */ msg_total = 4 /* "msg2" */ + 4 /* cred length */ + cred_buffer.length + 4 /* env length */ + iov[4].iov_len; /* fds from/to gatekeeper's socket to the client */ fdarray[0] = 0; fdarray[1] = 1; rc = globus_l_blocking_send_length_and_fds(sock, msg_total, fdarray, 2); if (rc != GLOBUS_SUCCESS) { goto sendmsg_failed; } iov[0].iov_base = "msg2"; iov[0].iov_len = 4; iov[1].iov_base = cred_length_buffer; iov[1].iov_len = 4; iov[2].iov_base = cred_buffer.value; iov[2].iov_len = cred_buffer.length; iov[3].iov_base = env_length_buffer; iov[3].iov_len = 4; /*iov[4] set above*/ /* network order 4-byte size of the credential token */ cred_length_buffer[0] = (cred_buffer.length >> 24) & 0xff; cred_length_buffer[1] = (cred_buffer.length >> 16) & 0xff; cred_length_buffer[2] = (cred_buffer.length >> 8) & 0xff; cred_length_buffer[3] = (cred_buffer.length) & 0xff; env_length_buffer[0] = (iov[4].iov_len >> 24) & 0xff; env_length_buffer[1] = (iov[4].iov_len >> 16) & 0xff; env_length_buffer[2] = (iov[4].iov_len >> 8) & 0xff; env_length_buffer[3] = (iov[4].iov_len) & 0xff; rc = globus_l_blocking_writev(sock, iov, 5); if (rc < msg_total) { goto sendmsg_failed; } rc = globus_l_blocking_read(sock, byte, 1); if (rc <= 0 || byte[0] != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", -rc, "Error receiving ack", errno, strerror(errno)); goto ack_failed; } else { rc = GLOBUS_SUCCESS; } iov[0].iov_base = byte; iov[0].iov_len = 1; byte[0]++; rc = globus_l_blocking_writev(sock, iov, 1); if (rc < 1) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "status=%d " "msg=\"%s\" " "errno=%d " "reason=\"%s\" " "\n", -rc, "Error sending ack", errno, strerror(errno)); } else { rc = GLOBUS_SUCCESS; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.send_job.end " "level=DEBUG " "status=%d " "\n", 0); } ack_failed: sendmsg_failed: if (cgi_env) { free(cgi_env); } cred_too_big: if (rc != GLOBUS_SUCCESS) { globus_l_remove_proxy(&cred_buffer); } gss_release_buffer( &minor_status, &cred_buffer); export_cred_failed: close(sock); socket_failed: return rc; } /* globus_gram_job_manager_starter_send_v2() */ /* This is the accept/read handler for the inter-jobmanager communication. * It accepts, reads, acks, and checks the ack from the first to make * sure that it understands this process is now managing the file descriptors * and proxy associated with the job. */ static void globus_l_gram_startup_socket_callback( globus_xio_handle_t handle, globus_result_t result, globus_byte_t * buffer, globus_size_t len, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void * user_arg) { globus_gram_job_manager_t * manager = user_arg; int * sent_fds; unsigned char message_length_buffer[4]; int message_length; struct msghdr message; unsigned char * message_buffer; struct iovec iov[1]; gss_buffer_desc cred_buffer; struct cmsghdr * control_message = NULL; int http_body_fd = -1; int context_fd = -1; int response_fd = -1; int rc; gss_ctx_id_t context; char * contact = NULL; int job_state_mask; globus_gram_jobmanager_request_t * request; OM_uint32 major_status, minor_status; gss_cred_id_t cred; char byte[1] = {0}; void * cmsgbuf = NULL; const int MAX_NEW_PER_SELECT = 1; int accepted; globus_bool_t done = GLOBUS_FALSE; int tries; char * old_job_contact = NULL; globus_gram_jobmanager_request_t * old_job_request = NULL; globus_bool_t version_only = GLOBUS_FALSE; static unsigned char cred_buffer_value[GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE+16*1024]; gss_name_t name; gss_buffer_desc output_name; struct linger linger; char * gt3_failure_message = NULL; char * peername = NULL; size_t content_length; int newsock; globus_sockaddr_t addr; globus_socklen_t addrlen = sizeof(addr); globus_gsi_cred_handle_t peer_cred_handle = NULL; cred_buffer.value = cred_buffer_value; for (accepted = 0; !done && accepted < MAX_NEW_PER_SELECT; accepted++) { int flags; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.new_request.start " "level=DEBUG " "fd=%d " "\n", manager->socket_fd); newsock = accept( manager->socket_fd, (struct sockaddr *) &addr, &addrlen); if (newsock < 0) { break; } flags = fcntl(newsock, F_GETFL); flags &= ~O_NONBLOCK; fcntl(newsock, F_SETFL, flags); /* Don't define cmsgbuf as a static char[]---CMSG_SPACE isn't * guaranteed to be a constant expression, and alignment issues can * occur with some compilers. */ if (cmsgbuf == NULL) { /* Big enough to handle either of the sets of descriptors, * three for old gatekeeper (http_body_fd, context_fd, and * response_fd) or two for new (in, out) */ cmsgbuf = calloc(1, CMSG_SPACE(3 * sizeof(int))); } /* First we'll receive the message side + ancillary data, then * read into a buffer of that size to get the actual data */ iov[0].iov_base = message_length_buffer; iov[0].iov_len = 4; /* Message metadata */ message.msg_name = NULL; message.msg_namelen = 0; message.msg_iov = iov; message.msg_iovlen = 1; message.msg_control = cmsgbuf; message.msg_controllen = CMSG_SPACE(3 * sizeof(int)); message.msg_flags = 0; /* Attempt to receive file descriptors */ tries = 10; while (tries > 0) { rc = recvmsg(newsock, &message, 0); if (rc <= 0 && (errno == EAGAIN || errno == EINTR)) { tries--; globus_libc_usleep(10000); } else { break; } } if (rc < 4) { int level; char * levelstr; done = GLOBUS_TRUE; rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; if (manager->done) { level = GLOBUS_GRAM_JOB_MANAGER_LOG_TRACE; levelstr = "TRACE"; } else if (accepted == 0) { level = GLOBUS_GRAM_JOB_MANAGER_LOG_WARN; levelstr = "WARN"; } else { level = GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG; levelstr = "DEBUG"; } globus_gram_job_manager_log( manager, level, "event=gram.new_request.end " "level=%s " "fd=%d " "msg=\"%s\" " "status=%d " "errno=%d " "reason=\"%s\" " "\n", levelstr, newsock, "recvmsg failed", -rc, errno, strerror(errno)); goto failed_receive; } sent_fds = NULL; for (control_message = CMSG_FIRSTHDR(&message); control_message != NULL; control_message = CMSG_NXTHDR(&message, control_message)) { if (control_message->cmsg_level == SOL_SOCKET && control_message->cmsg_type == SCM_RIGHTS) { sent_fds = (int *) CMSG_DATA(control_message); break; } } if (!sent_fds) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto failed_receive; } message_length = message_length_buffer[0] << 24; message_length += message_length_buffer[1] << 16; message_length += message_length_buffer[2] << 8; message_length += message_length_buffer[3]; message_buffer = malloc(message_length); if (message_buffer == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto failed_malloc; } rc = globus_l_blocking_read(newsock, message_buffer, message_length); if (rc < message_length) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto failed_read; } if ((message_length > 4) && (strncmp((char *) message_buffer, "msg2", 4) == 0)) { unsigned char * p = message_buffer + 4; int env_length; if ((p + 4) > (((unsigned char *)message_buffer) + message_length)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto failed_read; } cred_buffer.length = *(p++) << 24; cred_buffer.length += *(p++) << 16; cred_buffer.length += *(p++) << 8; cred_buffer.length += *(p++); if ((p + cred_buffer.length) > (((unsigned char *) message_buffer) + message_length)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto failed_read; } cred_buffer.value = p; p += cred_buffer.length; if ((p + 4) > (((unsigned char *) message_buffer) + message_length)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto failed_read; } env_length = *(p++) << 24; env_length += *(p++) << 16; env_length += *(p++) << 8; env_length += *(p++); if ((p + env_length) > (((unsigned char *) message_buffer) + message_length)) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto failed_read; } globus_l_decode_gatekeeper_env( (char*)p, env_length, &peername, &content_length, &peer_cred_handle); http_body_fd = sent_fds[0]; response_fd = sent_fds[1]; } else { struct stat stat; cred_buffer.length = message_length; cred_buffer.value = message_buffer; http_body_fd = sent_fds[0]; context_fd = sent_fds[1]; response_fd = sent_fds[2]; rc = fstat(http_body_fd, &stat); if (rc < 0) { done = GLOBUS_TRUE; rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.new_request.end " "level=ERROR " "fd=%d " "status=%d " "msg=\"%s\" " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "errno=%d " "reason=\"%s\" " "\n", newsock, -rc, "Failed determining message length", http_body_fd, context_fd, response_fd, errno, strerror(errno)); goto ackfailed; } content_length = (size_t) stat.st_size; } linger.l_onoff = 1; linger.l_linger = 5; setsockopt( response_fd, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger)); byte[0] = 0; errno = 0; do { rc = write(newsock, byte, 1); if (rc < 0 && (errno == EINTR || errno == EAGAIN)) { rc = 0; } else if (rc < 0) { break; } } while (rc < 1); if (rc < 0) { done = GLOBUS_TRUE; rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.new_request.end " "level=ERROR " "fd=%d " "status=%d " "msg=\"%s\" " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "errno=%d " "reason=\"%s\" " "\n", newsock, -rc, "Failed sending ack", http_body_fd, context_fd, response_fd, errno, strerror(errno)); goto ackfailed; } errno = 0; rc = -1; tries = 10; do { rc = read(newsock, byte, 1); if (rc < 0 && (errno == EINTR || errno == EAGAIN)) { rc = 0; tries--; } else if (rc < 0) { tries--; } } while (rc < 1 && tries >= 0); if (rc < 0 || byte[0] != 1) { done = GLOBUS_TRUE; globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.new_request.end " "level=ERROR " "fd=%d " "status=%d " "msg=\"%s\" " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "errno=%d " "reason=\"%s\" " "rc=%d " "byte=%d " "\n", newsock, -GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED, "Failed receiving ack", http_body_fd, context_fd, response_fd, errno, strerror(errno), (int) rc, (int) byte[0]); rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto ackfailed; } { char * p; if (cred_buffer.length > GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto ackfailed; } p = cred_buffer.value; *(p + cred_buffer.length) = 0; major_status = gss_import_cred( &minor_status, &cred, GSS_C_NO_OID, 1, &cred_buffer, 0, NULL); } { globus_l_remove_proxy(&cred_buffer); } if (GSS_ERROR(major_status)) { char * errstr; char * errstr_escaped; globus_gss_assist_display_status_str( &errstr, "Import cred failed: ", major_status, minor_status, 0); errstr_escaped = globus_gram_prepare_log_string(errstr); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_ERROR, "event=gram.new_request.end " "level=ERROR " "fd=%d " "status=%d " "http_body_fd=%d " "context_fd=%d " "response_fd=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", newsock, -rc, http_body_fd, context_fd, response_fd, "Error importing credential", errstr_escaped ? errstr_escaped : ""); if (errstr) { free(errstr); } if (errstr_escaped) { free(errstr_escaped); } done = GLOBUS_TRUE; goto failed_import_cred; } /* Determine client address if we don't know it from the * gatekeeper */ if (peername == NULL) { globus_sockaddr_t peer_address; socklen_t peer_address_len; peer_address_len = sizeof(peer_address); rc = getpeername( response_fd, (struct sockaddr *) &peer_address, &peer_address_len); if (rc == GLOBUS_SUCCESS) { rc = globus_libc_addr_to_contact_string( &peer_address, GLOBUS_LIBC_ADDR_NUMERIC, &peername); } } /* Load request data */ rc = globus_gram_job_manager_request_load( manager, http_body_fd, context_fd, cred, peername, peer_cred_handle, content_length, &request, &context, &contact, &job_state_mask, &old_job_contact, &old_job_request, &version_only, >3_failure_message); if (rc != GLOBUS_SUCCESS) { if (rc == GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE && old_job_request) { if (old_job_request->two_phase_commit != 0) { /* * Condor-G expects waiting for commit message on restarts. */ rc = GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT; } else if (old_job_request->status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED ) { rc = old_job_request->failure_code; } else { rc = GLOBUS_SUCCESS; } globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.new_request.info " "level=DEBUG " "gramid=%s " "msg=\"%s\" " "response=%d " "job_state=%d " "job_manager_state=%s " "job_manager_restart_state=%s " "\n", old_job_request->job_contact_path, "Restarting already restarted request", rc, old_job_request->status, globus_i_gram_job_manager_state_strings[ old_job_request->jobmanager_state], globus_i_gram_job_manager_state_strings[ old_job_request->restart_state]); } else if(rc != GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE) { assert(old_job_request == NULL); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.new_request.info " "level=DEBUG " "gramid=%s " "msg=\"%s\" " "response=%d " "\n", old_job_contact ? old_job_contact : "", globus_gram_protocol_error_string(rc), rc); } rc = globus_gram_job_manager_reply( NULL, manager, rc, (old_job_contact == NULL && old_job_request) ? old_job_request->job_contact : old_job_contact, response_fd, context, gt3_failure_message); if (gt3_failure_message) { free(gt3_failure_message); } done = GLOBUS_TRUE; rc = globus_gram_job_manager_gsi_update_credential( manager, NULL, cred); cred = GSS_C_NO_CREDENTIAL; if (old_job_request) { /* This occurs when a client tries to restart a job that * we found during the load_all when this process started, or * one which had a two-phase end time out. * * We'll return information to the client about the job and * make sure the job manager knows about the client * contact/mask. * * If it is in a STOP state or two-phase end state, then we * need to fake the restart by setting the state to just after * two-phase commit and let the restart logic in the state * machine pick it up from there. * * Additionally, in the STOP state, we need to register the * state machine. */ GlobusGramJobManagerRequestLock(old_job_request); globus_gram_job_manager_contact_add( old_job_request, contact, job_state_mask); if (old_job_request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_STOP) { if (old_job_request->jm_restart) { free(old_job_request->jm_restart); } old_job_request->jm_restart = strdup( old_job_request->job_contact); /* In GLOBUS_GRAM_JOB_MANAGER_STATE_START, * the state machine jumps to the current restart state * based on the value in the state file after receiving * a two-phase commit signal */ old_job_request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_START; old_job_request->unsent_status_change = GLOBUS_TRUE; /* If the job is in another state, we'll assume that it's * already being handled by the state machine */ globus_gram_job_manager_state_machine_register( old_job_request->manager, old_job_request, NULL); } else if (old_job_request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_TWO_PHASE_END || old_job_request->jobmanager_state == GLOBUS_GRAM_JOB_MANAGER_STATE_FAILED_TWO_PHASE) { if (old_job_request->jm_restart) { free(old_job_request->jm_restart); } old_job_request->jm_restart = strdup(old_job_request->job_contact); /* In GLOBUS_GRAM_JOB_MANAGER_STATE_START, * the state machine jumps to the current restart state * based on the value in the state file. */ old_job_request->jobmanager_state = GLOBUS_GRAM_JOB_MANAGER_STATE_START; } GlobusGramJobManagerRequestUnlock(old_job_request); globus_gram_job_manager_remove_reference( old_job_request->manager, old_job_request->job_contact_path, "jm_restart"); } goto request_load_failed; } if (!version_only) { major_status = gss_inquire_cred( &minor_status, cred, &name, NULL, NULL, NULL); /* Don't care too much if this fails, as the user_dn will be * set to NULL in that case */ if (major_status == GSS_S_COMPLETE) { major_status = gss_display_name( &minor_status, name, &output_name, NULL); if (request->job_stats.user_dn == NULL) { request->job_stats.user_dn = strdup(output_name.value); } gss_release_name(&minor_status, &name); gss_release_buffer(&minor_status, &output_name); } } rc = globus_gram_job_manager_gsi_update_credential( manager, NULL, cred); cred = GSS_C_NO_CREDENTIAL; /* How much do I care about this error? */ if (rc != GLOBUS_SUCCESS || version_only) { globus_gram_job_manager_reply( request, manager, rc, NULL, response_fd, context, NULL); done = GLOBUS_TRUE; goto update_cred_failed; } if (!version_only) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.job.start " "level=DEBUG " "gramid=%s " "peer=%s " "\n", request->job_contact_path, peername ? peername : "\"\""); /* Start state machine and send response */ rc = globus_gram_job_manager_request_start( manager, request, response_fd, contact, job_state_mask); if (rc != GLOBUS_SUCCESS) { globus_gram_job_manager_request_log( request, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.job.end " "level=DEBUG " "gramid=%s " "status=%d " "msg=\"%s\" " "reason=\"%s\" " "\n", request->job_contact_path, -rc, "Request start failed", globus_gram_protocol_error_string(rc)); globus_gram_job_manager_request_free(request); request = NULL; } } update_cred_failed: request_load_failed: if (contact) { free(contact); } if (old_job_contact != NULL) { free(old_job_contact); } if (cred != GSS_C_NO_CREDENTIAL) { gss_release_cred( &minor_status, &cred); cred = GSS_C_NO_CREDENTIAL; } if (peername != NULL) { free(peername); } if (peer_cred_handle != NULL) { globus_gsi_cred_handle_destroy(peer_cred_handle); } ackfailed: failed_import_cred: if (http_body_fd != -1) { close(http_body_fd); if (response_fd == http_body_fd) { response_fd = -1; } http_body_fd = -1; } if (context_fd != -1) { close(context_fd); context_fd = -1; } if (response_fd != -1) { close(response_fd); response_fd = -1; } failed_read: free(message_buffer); failed_malloc: failed_receive: ; } if (cmsgbuf != NULL) { free(cmsgbuf); } if (http_body_fd != -1) { close(http_body_fd); if (response_fd == http_body_fd) { response_fd = -1; } http_body_fd = -1; } if (context_fd != -1) { close(context_fd); context_fd = -1; } if (response_fd != -1) { close(response_fd); response_fd = -1; } if (newsock != -1) { close(newsock); newsock = -1; } result = globus_xio_register_read( handle, buffer, 0, 0, NULL, globus_l_gram_startup_socket_callback, manager); } /* globus_l_gram_startup_socket_callback() */ static globus_result_t globus_l_gram_create_handle( int sock, globus_xio_handle_t * handle) { globus_xio_attr_t attr; globus_result_t result; result = globus_xio_attr_init(&attr); if (result != GLOBUS_SUCCESS) { goto attr_init_failed; } result = globus_xio_attr_cntl( attr, globus_i_gram_job_manager_file_driver, GLOBUS_XIO_FILE_SET_HANDLE, sock); if (result != GLOBUS_SUCCESS) { goto attr_cntl_failed; } result = globus_xio_handle_create( handle, globus_i_gram_job_manager_file_stack); if (result != GLOBUS_SUCCESS) { goto handle_create_failed; } result = globus_xio_open( *handle, NULL, attr); if (result != GLOBUS_SUCCESS) { globus_xio_close(*handle, NULL); *handle = NULL; } handle_create_failed: attr_cntl_failed: globus_xio_attr_destroy(attr); attr_init_failed: return result; } /* globus_l_gram_create_handle() */ static int globus_l_create_starter_connect_socket( globus_gram_job_manager_t * manager, int * sockptr) { int rc; struct sockaddr_un addr; int sock = -1; char * msg = ""; int sndbuf; int save_errno = 0; /* create socket */ memset(&addr, 0, sizeof(struct sockaddr_un)); addr.sun_family = AF_UNIX; strncpy(addr.sun_path, manager->socket_path, sizeof(addr.sun_path)-1); sock = socket(AF_UNIX, SOCK_STREAM, 0); if (sock < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; save_errno = errno; msg = "Error creating datagram socket"; goto socket_failed; } sndbuf = GLOBUS_GRAM_PROTOCOL_MAX_MSG_SIZE; rc = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(sndbuf)); if (rc < 0 && errno != ENOPROTOOPT) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; save_errno = errno; msg = "Error setting datagram socket buffer"; goto setsockopt_failed; } rc = connect(sock, (struct sockaddr *) &addr, sizeof(addr)); if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES; save_errno = errno; msg = "Error making datagram connection to Job Manager"; setsockopt_failed: close(sock); sock = -1; socket_failed: globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_WARN, "event=gram.send_job.end " "level=WARN " "status=%d " "errno=%d " "msg=\"%s\" " "reason=\"%s\" " "path=\"%s\" " "\n", -rc, save_errno, msg, strerror(save_errno), addr.sun_path); } *sockptr = sock; return rc; } /* globus_l_create_starter_connect_socket() */ static int globus_l_encode_gatekeeper_env( struct iovec *iov) { int envno; char *p; char cert_chain_name[] = "SSL_CLIENT_CERT_CHAINXX"; int rc; iov->iov_len = 0; for (envno = 0; globus_l_gatekeeper_env[envno] != NULL; envno++) { const char * tmpstr = getenv(globus_l_gatekeeper_env[envno]); if (tmpstr != NULL) { iov->iov_len += strlen(globus_l_gatekeeper_env[envno]) + strlen(tmpstr) + 2; } } for (envno = 0; envno < 100; envno++) { const char * tmpstr; sprintf(cert_chain_name, "SSL_CLIENT_CERT_CHAIN%d", envno); tmpstr = getenv(cert_chain_name); if (tmpstr != NULL) { iov->iov_len += strlen(cert_chain_name) + strlen(tmpstr) + 2; } } iov->iov_base = malloc(iov->iov_len); p = iov->iov_base; for (envno = 0; globus_l_gatekeeper_env[envno] != NULL; envno++) { const char * tmpstr = getenv(globus_l_gatekeeper_env[envno]); if (tmpstr != NULL) { rc = sprintf(p, "%s=%s", globus_l_gatekeeper_env[envno], tmpstr); p += rc; *(p++) = 0; } } for (envno = 0; envno < 100; envno++) { const char * tmpstr; sprintf(cert_chain_name, "SSL_CLIENT_CERT_CHAIN%d", envno); tmpstr = getenv(cert_chain_name); if (tmpstr != NULL) { rc = sprintf(p, "%s=%s", cert_chain_name, tmpstr); p += rc; *(p++) = 0; } } return GLOBUS_SUCCESS; } static int globus_l_decode_gatekeeper_env( const char *p, size_t len, char **remote_addr, size_t *content_length, globus_gsi_cred_handle_t *cred_handle) { const char * endp = p + len; const char * cert_pem; X509 * cert; BIO * b = NULL; STACK_OF(X509) * chain = NULL; chain = sk_X509_new_null(); globus_gsi_cred_handle_init(cred_handle, NULL); b = BIO_new(BIO_s_mem()); while (p < endp) { if (strncmp(p, "REMOTE_ADDR=", 12) == 0) { *remote_addr = globus_common_create_string("%s", p+13); } else if (strncmp(p, "CONTENT_LENGTH", 14) == 0) { sscanf(p+15, "%zu", content_length); } /* SSL_CLIENT_CERT_CHAIN must be before SSL_CLIENT_CERT */ else if (strncmp(p, "SSL_CLIENT_CERT_CHAIN", 21) == 0) { int chain_index; sscanf(p + 21, "%d", &chain_index); cert_pem = strchr(p, '=') + 1; BIO_write(b, cert_pem, strlen(cert_pem)); cert = PEM_read_bio_X509(b, NULL, 0, NULL); sk_X509_insert(chain, cert, chain_index); } else if (strncmp(p, "SSL_CLIENT_CERT", 15) == 0) { cert_pem = p + 16; BIO_write(b, cert_pem, strlen(cert_pem)); cert = PEM_read_bio_X509(b, NULL, 0, NULL); globus_gsi_cred_set_cert(*cred_handle, cert); X509_free(cert); cert = NULL; } p += strlen(p) + 1; } globus_gsi_cred_set_cert_chain(*cred_handle, chain); sk_X509_pop_free(chain, X509_free); BIO_free(b); return GLOBUS_SUCCESS; } /* globus_l_decode_gatekeeper_env() */ /** * Send a unix domain message containing an integer and an array of * file descriptors. The integer is encoded as as a 4 byte binary * value in network byte order. The file descriptors are sent as * ancillary data in the message. * * @param fd * File descriptor to send the message on * @param msg_length * Integer to send as the data payload of the message in encoded form. * @param fds * Array of file descriptors to send via message control rights header. * @param fd_count * Number of elements in the @a fds array. * * @return This function returns GLOBUS_SUCCESS when the message is * sent successfully, or a GRAM protocol error if an error occurs. */ static int globus_l_blocking_send_length_and_fds( int fd, int msg_length, int * fds, int fd_count) { struct msghdr message; struct cmsghdr * cmsg; void *cmsgbuf; unsigned char msg_length_buf[4]; struct iovec iov[1]; int *fdptr; int i, rc; cmsgbuf = calloc(1, CMSG_SPACE(fd_count * sizeof(int))); msg_length_buf[0] = (msg_length >> 24) & 0xff; msg_length_buf[1] = (msg_length >> 16) & 0xff; msg_length_buf[2] = (msg_length >> 8) & 0xff; msg_length_buf[3] = (msg_length) & 0xff; /* Credential we send along with the descriptors */ iov[0].iov_base = msg_length_buf; iov[0].iov_len = 4; /* Message metadata */ message.msg_name = NULL; message.msg_namelen = 0; message.msg_iov = iov; message.msg_iovlen = 1; message.msg_flags = 0; message.msg_control = cmsgbuf; message.msg_controllen = CMSG_SPACE(fd_count*sizeof(int)); cmsg = CMSG_FIRSTHDR(&message); assert(cmsg != NULL); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; cmsg->cmsg_len = CMSG_LEN(fd_count * sizeof(int)); fdptr = (int *)CMSG_DATA(cmsg); for (i = 0; i < fd_count; i++) { fdptr[i] = fds[i]; } /* Send message length and fds */ while ((rc = sendmsg(fd, &message, 0)) < message.msg_iov[0].iov_len) { if (rc < 0 && (errno == EAGAIN || errno == EINTR)) { continue; } else if (rc < 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED; goto sendmsg_failed; } message.msg_iov[0].iov_base = ((char *)message.msg_iov[0].iov_base) + rc; message.msg_iov[0].iov_len -= rc; message.msg_control = NULL; message.msg_controllen = 0; } rc = GLOBUS_SUCCESS; sendmsg_failed: free(cmsgbuf); return rc; } /* globus_l_blocking_send_length_and_fds() */ /** * @brief Blocking writev * * Write an array of data to a file descriptor, looping and blocking until the * entire array is written or an error occurs. Note: this function * destructively modifies iov, so if there are pointers to data on the heap, * they must be retained elsewhere for proper memory management. * * @param fd * The file descriptor to write to. * @param iov * The array of struct iovec containing the data to write * @param iovcnt * Number of elements in the @a iov array. * * @return This function */ static int globus_l_blocking_writev( int fd, struct iovec * iov, int iovcnt) { int i, rc = 0, amt_written = 0, total; for (i = 0, total = 0; i < iovcnt; i++) { total += iov[i].iov_len; } do { rc = writev(fd, iov, iovcnt); if (rc < 0) { if (errno == EINTR || errno == EAGAIN) { globus_libc_usleep(10000); rc = 0; } else { break; } } else { amt_written += rc; for (i = 0; rc > 0 && i < iovcnt; i++) { if (rc > iov[i].iov_len) { rc -= iov[i].iov_len; iov[i].iov_base = ((char *) iov[i].iov_base) + iov[i].iov_len; iov[i].iov_len = 0; } else { iov[i].iov_len -= rc; iov[i].iov_base = ((char *) iov[i].iov_base) + rc; rc = 0; break; } } } } while (amt_written < total); return amt_written; } /* globus_l_blocking_writev() */ /** * Read a known-size message from a file descriptor, handling * partial reads, EINTR, and EAGAIN * * @param fd * File descriptor to read from * @param buf * Buffer (of at least @a len bytes) to read into. * @param len * Total expected amount of data to read into @a buffer. * * @return * This function returns the total number of bytes read into @a buffer. * This may be less than @a len if an unexpected error occurs while reading * the file descriptor. */ static int globus_l_blocking_read( int fd, void *buf, int len) { int amt_read = 0, rc; do { rc = read(fd, ((char *)buf)+amt_read, len-amt_read); if (rc < 0 && (errno == EINTR || errno == EAGAIN)) { globus_libc_usleep(10000); rc = 0; } else if (rc < 0) { break; } amt_read += rc; } while (amt_read < len && rc >= 0); return amt_read; } /* globus_l_blocking_read() */ /** * Remove a proxy named by a buffer in GSS_IMPEXP_MECH_SPECIFIC form * The token may not be NULL-terminated, so we will NULL-terminate explicitly * before trying to remove it. * * @param token * A GSSAPI cred token which is in GSS_IMPEXP_MECH_SPECIFIC form * X509_USER_PROXY=path-to-proxy * * @return void */ static void globus_l_remove_proxy( gss_buffer_t token) { char * p; char * q; size_t len; q = memchr(token->value, '=', token->length); if (q == NULL) { return; } len = token->length - (q - (char *) token->value); p = malloc(len); if (p == NULL) { return; } memcpy(p, q+1, len-1); p[len-1] = 0; (void) remove(p); free(p); } /* globus_l_remove_proxy() */ globus_gram_job_manager-15.8/PaxHeaders.31186/tg_gateway.c0000644000000000000000000000013214243161125021571 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653401832.166119199 30 ctime=1653404021.256746879 globus_gram_job_manager-15.8/tg_gateway.c0000664000175000017500000002470514243161125021742 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2014 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "gssapi.h" #include "globus_gram_protocol.h" #include "globus_gsi_credential.h" #if HAVE_LIBXML2 #include "libxml/parser.h" #include "libxml/xpath.h" #include "libxml/xpathInternals.h" #include "libxml/tree.h" #include "openssl/x509.h" static gss_OID_desc globus_l_saml_oid_desc = {11, (void *) "\x2B\x06\x01\x04\x01\x9B\x50\x01\x01\x01\x0C" }; gss_OID globus_saml_oid = &globus_l_saml_oid_desc; globus_bool_t globus_l_tg_saml_assertion_is_self_issued( gss_ctx_id_t ctx, const char * entity_id) { /* TODO: Process trusted authorities entities map */ return GLOBUS_TRUE; } /* globus_l_tg_saml_assertion_is_self_issued() */ #endif /* HAVE_LIBXML2 */ int globus_i_gram_get_tg_gateway_user( gss_ctx_id_t context, globus_gsi_cred_handle_t peer_cred, char ** gateway_user) { #if HAVE_LIBXML2 OM_uint32 maj_stat, min_stat; gss_buffer_set_t data_set; ASN1_UTF8STRING * asn1_str; char * assertion_string; unsigned char * p; long pl; xmlDocPtr doc; xmlXPathContextPtr xpath_ctx; xmlXPathObjectPtr xresult; int rc; ASN1_OBJECT * asn1_desired_object = NULL; int cert_count; int found_index; int chain_index; X509 *cert; X509_EXTENSION * extension; ASN1_OCTET_STRING *asn1_oct_string; STACK_OF(X509) *chain = NULL; *gateway_user = NULL; if (context == GSS_C_NO_CONTEXT && peer_cred != NULL) { globus_result_t result; /* This basically duplicates the gss_inquire_sec_context_by_oid(), but * instead uses a gsi credential object */ rc = GLOBUS_SUCCESS; asn1_desired_object = ASN1_OBJECT_new(); if (asn1_desired_object == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto no_extension_in_cred_chain; } asn1_desired_object->length = globus_l_saml_oid_desc.length; asn1_desired_object->data = globus_l_saml_oid_desc.elements; result = globus_gsi_cred_get_cert_chain(peer_cred, &chain); if (result != GLOBUS_SUCCESS) { char * msg; msg = globus_error_print_friendly( globus_error_peek(result)); globus_gram_protocol_error_7_hack_replace_message( msg); free(msg); rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; goto no_extension_in_cred_chain; } cert_count = sk_X509_num(chain); found_index = -1; for (chain_index = 0; chain_index < cert_count; chain_index++) { cert = sk_X509_value(chain, chain_index); found_index = X509_get_ext_by_OBJ(cert, asn1_desired_object, found_index); if (found_index >= 0) { extension = X509_get_ext(cert, found_index); if (extension == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; globus_gram_protocol_error_7_hack_replace_message( "Unable to extract SAML assertion extension from certificate chain"); goto no_extension_in_cred_chain; } asn1_oct_string = X509_EXTENSION_get_data(extension); if (asn1_oct_string == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; globus_gram_protocol_error_7_hack_replace_message( "Unable to extract SAML assertion extension from certificate chain"); goto no_extension_in_cred_chain; } p = asn1_oct_string->data; asn1_str = d2i_ASN1_UTF8STRING(NULL, (void *)&p, asn1_oct_string->length); if (asn1_str == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; globus_gram_protocol_error_7_hack_replace_message( "Unable to convert SAML assertion text from DER to UTF8"); goto no_extension_in_cred_chain; } assertion_string = malloc(asn1_str->length + 1); if (assertion_string == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto no_extension_in_cred_chain; } memcpy(assertion_string, asn1_str->data, asn1_str->length); assertion_string[asn1_str->length] = 0; break; } } if (chain_index == cert_count) { goto no_extension_in_cred_chain; } } else if (context == GSS_C_NO_CONTEXT) { rc = GLOBUS_SUCCESS; goto no_context; } else { maj_stat = gss_inquire_sec_context_by_oid( &min_stat, context, globus_saml_oid, &data_set); if (GSS_ERROR(maj_stat)) { globus_gram_protocol_error_7_hack_replace_message( "Error extracting SAML assertion"); rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; goto inquire_failed; } /* We'll process only the first SAML assertion bound in the X.509 chain */ if (data_set->count < 1) { rc = GLOBUS_SUCCESS; goto empty_data_set; } p = data_set->elements[0].value; pl = data_set->elements[0].length; /* Convert DER-Encoded string to UTF8 */ asn1_str = d2i_ASN1_UTF8STRING(NULL, (void *) &p, pl); if (!asn1_str) { globus_gram_protocol_error_7_hack_replace_message( "Error decoding SAML assertion"); rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; goto utfstring_failed; } assertion_string = malloc(asn1_str->length + 1); if (assertion_string == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto assertion_string_malloc_failed; } memcpy(assertion_string, asn1_str->data, asn1_str->length); assertion_string[asn1_str->length] = 0; } /* Parse SAML assertion */ doc = xmlParseDoc(BAD_CAST assertion_string); if (doc == NULL) { globus_gram_protocol_error_7_hack_replace_message( "Error parsing SAML assertion"); rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; goto parse_assertion_failed; } xmlXPathInit(); /* Use XPATH to extract Issuer */ xpath_ctx = xmlXPathNewContext(doc); if (xpath_ctx == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto xpath_ctx_init_failed; } rc = xmlXPathRegisterNs( xpath_ctx, (xmlChar *) "s", (xmlChar *) "urn:oasis:names:tc:SAML:1.0:assertion"); if (rc != 0) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED; goto xpath_register_ns_failed; } xresult = xmlXPathEvalExpression( (const xmlChar *) "string(/s:Assertion/@Issuer)", xpath_ctx); if (xresult == NULL) { globus_gram_protocol_error_7_hack_replace_message( "Error processing SAML assertion: no \"Issuer\" attribute"); rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; goto xpath_eval_issuer_failed; } if (! globus_l_tg_saml_assertion_is_self_issued( context, (const char *) xresult->stringval)) { /* Ignore non-self issued assertions */ rc = GLOBUS_SUCCESS; goto non_self_issued; } xmlXPathFreeObject(xresult); /* Use XPATH to extract the sender-vouches, self-issued, TG principal name * Subject attribute from the Assertion's AuthenticationStatement */ xresult = xmlXPathEvalExpression( (const xmlChar *) "string(/s:Assertion/s:AuthenticationStatement/s:Subject[string(s:SubjectConfirmation/s:ConfirmationMethod) = 'urn:oasis:names:tc:SAML:1.0:cm:sender-vouches' and s:NameIdentifier/@Format = 'http://teragrid.org/names/nameid-format/principalname']/s:NameIdentifier[1])", xpath_ctx); if (xresult == NULL) { globus_gram_protocol_error_7_hack_replace_message( "Error processing SAML assertion: no teragrid principal"); rc = GLOBUS_GRAM_PROTOCOL_ERROR_AUTHORIZATION; goto get_gateway_name_failed; } if (xresult != NULL && xresult->stringval != NULL && *(xresult->stringval) != 0) { *gateway_user = strdup((char *) xresult->stringval); } get_gateway_name_failed: non_self_issued: if (xresult != NULL) { xmlXPathFreeObject(xresult); } xpath_eval_issuer_failed: xpath_register_ns_failed: xmlXPathFreeContext(xpath_ctx); xpath_ctx_init_failed: xmlFreeDoc(doc); parse_assertion_failed: free(assertion_string); assertion_string_malloc_failed: ASN1_UTF8STRING_free(asn1_str); utfstring_failed: empty_data_set: gss_release_buffer_set(&min_stat, &data_set); inquire_failed: no_extension_in_cred_chain: no_context: if (asn1_desired_object != NULL) { ASN1_OBJECT_free(asn1_desired_object); } if (chain != NULL) { sk_X509_free(chain); } return rc; #else *gateway_user = NULL; return GLOBUS_SUCCESS; #endif /* HAVE_LIBXML2 */ } /* globus_i_gram_get_tg_gateway_user() */ globus_gram_job_manager-15.8/PaxHeaders.31186/globus_gram_streamer.c0000644000000000000000000000013114243161125023640 xustar000000000000000030 mtime=1653400149.360970101 30 atime=1653401831.570124812 29 ctime=1653404021.25874686 globus_gram_job_manager-15.8/globus_gram_streamer.c0000664000175000017500000006304314243161125024010 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * @file globus_gram_streamer.c * @brief GRAM File Streamer Application * * @details * The globus-gram-streamer program provides support for live file * streaming of stdout and stderr. It is intended to be run by the fork * job management module for cases where output streaming is required during * the execution of the job. It is started as an additional process by * the fork module and its pid is included along with the other pids that * must be monitored for the job to be complete. */ #include "globus_common.h" #include "globus_gass_transfer.h" #include "globus_gram_job_manager.h" #include "globus_symboltable.h" #include enum { STREAMER_MAX = 256 }; const off_t STREAMER_BLOCKSIZE = 4096; typedef enum { GLOBUS_GRAM_STREAM_NONE, GLOBUS_GRAM_STREAM_NEW, GLOBUS_GRAM_STREAM_ACTIVE, GLOBUS_GRAM_STREAM_RESTART, GLOBUS_GRAM_STREAM_RESTART_NEW, GLOBUS_GRAM_STREAM_FAIL, GLOBUS_GRAM_STREAM_DONE } globus_gram_stream_state_t; typedef struct { int fd; off_t sent; char * source; char * destination; globus_gass_transfer_request_t handle; globus_gram_stream_state_t state; int blocks; int last_sent; } globus_gram_stream_t; typedef struct { globus_mutex_t mutex; globus_cond_t cond; globus_gram_jobmanager_request_t request; globus_callback_handle_t local_poll_periodic; time_t remote_io_url_file_time; globus_gram_stream_t output_stream; globus_gram_stream_t error_stream; globus_callback_handle_t waitpids_poll_periodic; pid_t pids[STREAMER_MAX]; int pid_count; } globus_gram_streamer_monitor_t; static void globus_l_gram_streamer_request_ready( void * arg, globus_gass_transfer_request_t request); static void globus_l_gram_streamer_local_poll( void * arg); static int globus_l_gram_streamer_get_destinations( globus_gram_streamer_monitor_t * monitor); static int globus_l_gram_streamer_open_destination( globus_gram_streamer_monitor_t * monitor, globus_gram_stream_t * stream); static void globus_l_gram_streamer_waitpids( void * arg); int main( int argc, char ** argv) { int opt; globus_gram_streamer_monitor_t monitor; int rc; char local_path[16]; globus_result_t result; globus_reltime_t period; globus_module_descriptor_t * modules[] = { GLOBUS_COMMON_MODULE, GLOBUS_GASS_TRANSFER_MODULE, NULL }; globus_module_descriptor_t * failed_module; memset(&monitor, 0, sizeof(globus_gram_streamer_monitor_t)); globus_mutex_init(&monitor.request.mutex, NULL); globus_cond_init(&monitor.request.cond, NULL); while ((opt = getopt(argc, argv, "s:p:d:h")) != -1) { switch (opt) { case 's': monitor.request.job_state_file = optarg; /* * Assume that the remote I/O file will not be newer than the * current time */ monitor.remote_io_url_file_time = time(NULL); rc = globus_gram_job_manager_state_file_read(&monitor.request); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "%d:Error reading state file %s\n", rc, optarg); } break; case 'p': if ((monitor.pid_count+1) == STREAMER_MAX) { fprintf(stderr, "%d:Too many pids for streamer\n", GLOBUS_GRAM_PROTOCOL_ERROR_NO_RESOURCES); exit(EXIT_FAILURE); } monitor.pids[monitor.pid_count++] = (pid_t) strtol(optarg, NULL, 10); break; case 'd': rc = chdir(optarg); if (rc != 0) { int save_errno = errno; fprintf(stderr, "%d:Error accessing job state directory: %s (%d)\n", GLOBUS_GRAM_PROTOCOL_ERROR_BAD_DIRECTORY, strerror(save_errno), save_errno); exit(EXIT_FAILURE); } break; case 'h': printf("Usage: %s -s STATE-FILE -p pid [-p pid]...\n", argv[0]); exit(EXIT_SUCCESS); break; case '?': default: fprintf(stderr, "%d:Unknown option: %c\n", GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED, (char) opt); exit(EXIT_FAILURE); } } rc = globus_module_activate_array(modules, &failed_module); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "%d:Activation failed: %s %d\n", GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED, failed_module->module_name, rc); exit(EXIT_FAILURE); } strcpy(local_path, "stdout"); monitor.output_stream.fd = open(local_path, O_RDONLY); strcpy(local_path, "stderr"); monitor.error_stream.fd = open(local_path, O_RDONLY); rc = globus_mutex_init(&monitor.mutex, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "%d:Mutex init failed\n", GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED); exit(EXIT_FAILURE); } rc = globus_cond_init(&monitor.cond, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "%d:Mutex init failed\n", GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED); exit(EXIT_FAILURE); } globus_mutex_lock(&monitor.mutex); GlobusTimeReltimeSet(period, 5, 0); result = globus_callback_register_periodic( &monitor.local_poll_periodic, &globus_i_reltime_zero, &period, globus_l_gram_streamer_local_poll, &monitor); if (result != GLOBUS_SUCCESS) { char * errstr = globus_error_print_friendly(globus_error_peek(result)); fprintf(stderr, "%d:Initialization error: %s\n", GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED, errstr); free(errstr); exit(EXIT_FAILURE); } result = globus_callback_register_periodic( &monitor.waitpids_poll_periodic, &globus_i_reltime_zero, &period, globus_l_gram_streamer_waitpids, &monitor); if (result != GLOBUS_SUCCESS) { char * errstr = globus_error_print_friendly(globus_error_peek(result)); fprintf(stderr, "%d:Initialization error: %s\n", GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED, errstr); free(errstr); exit(EXIT_FAILURE); } rc = globus_l_gram_streamer_get_destinations( &monitor); if (rc != GLOBUS_SUCCESS) { exit(EXIT_FAILURE); } if (monitor.output_stream.fd != -1 && monitor.output_stream.destination != NULL) { rc = globus_l_gram_streamer_open_destination( &monitor, &monitor.output_stream); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "%d:Error opening stdout destination %s (%d)\n", GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT, monitor.output_stream.destination, rc); exit(EXIT_FAILURE); } monitor.output_stream.state = GLOBUS_GRAM_STREAM_NEW; } else { monitor.output_stream.state = GLOBUS_GRAM_STREAM_NONE; } if (monitor.error_stream.fd != -1 && monitor.error_stream.destination != NULL) { rc = globus_l_gram_streamer_open_destination( &monitor, &monitor.error_stream); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "%d:Error opening stderr destination %s (%d)\n", GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDERR, monitor.error_stream.destination, rc); exit(EXIT_FAILURE); } monitor.error_stream.state = GLOBUS_GRAM_STREAM_NEW; } else { monitor.error_stream.state = GLOBUS_GRAM_STREAM_NONE; } while (monitor.pid_count > 0 || (monitor.output_stream.state != GLOBUS_GRAM_STREAM_NONE && monitor.output_stream.state != GLOBUS_GRAM_STREAM_DONE && monitor.output_stream.state != GLOBUS_GRAM_STREAM_FAIL) || (monitor.error_stream.state != GLOBUS_GRAM_STREAM_NONE && monitor.error_stream.state != GLOBUS_GRAM_STREAM_DONE && monitor.error_stream.state != GLOBUS_GRAM_STREAM_FAIL)) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if (monitor.output_stream.state == GLOBUS_GRAM_STREAM_DONE) { printf("%s %s\n", monitor.output_stream.source, monitor.output_stream.destination); } if (monitor.error_stream.state == GLOBUS_GRAM_STREAM_DONE) { printf("%s %s\n", monitor.error_stream.source, monitor.error_stream.destination); } globus_mutex_unlock(&monitor.mutex); globus_module_deactivate(GLOBUS_GASS_TRANSFER_MODULE); globus_module_activate(GLOBUS_COMMON_MODULE); exit(EXIT_SUCCESS); } /* main() */ static void globus_l_gram_streamer_request_ready( void * arg, globus_gass_transfer_request_t request) { globus_gram_streamer_monitor_t * monitor = arg; globus_gram_stream_t * stream; globus_gass_transfer_request_status_t status; globus_mutex_lock(&monitor->mutex); stream = globus_gass_transfer_request_get_user_pointer(request); status = globus_gass_transfer_request_get_status(request); switch (status) { case GLOBUS_GASS_TRANSFER_REQUEST_INVALID: case GLOBUS_GASS_TRANSFER_REQUEST_STARTING: globus_gass_transfer_request_destroy(request); stream->state = GLOBUS_GRAM_STREAM_FAIL; globus_cond_signal(&monitor->cond); break; case GLOBUS_GASS_TRANSFER_REQUEST_FAILED: case GLOBUS_GASS_TRANSFER_REQUEST_DENIED: globus_gass_transfer_request_destroy(request); stream->state = GLOBUS_GRAM_STREAM_FAIL; globus_cond_signal(&monitor->cond); break; case GLOBUS_GASS_TRANSFER_REQUEST_REFERRED: globus_gass_transfer_request_destroy(request); stream->state = GLOBUS_GRAM_STREAM_DONE; globus_cond_signal(&monitor->cond); break; case GLOBUS_GASS_TRANSFER_REQUEST_DONE: globus_gass_transfer_request_destroy(request); stream->state = GLOBUS_GRAM_STREAM_DONE; globus_cond_signal(&monitor->cond); break; case GLOBUS_GASS_TRANSFER_REQUEST_PENDING: stream->state = GLOBUS_GRAM_STREAM_ACTIVE; break; default: fprintf(stderr, "%d:GASS Transfer returned invalid status: %d\n", GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED, (int) status); exit(EXIT_FAILURE); } globus_mutex_unlock(&monitor->mutex); } static void globus_l_gram_streamer_fail( void * arg, globus_gass_transfer_request_t request) { globus_gram_streamer_monitor_t * monitor = arg; globus_gram_stream_t * stream; globus_mutex_lock(&monitor->mutex); stream = globus_gass_transfer_request_get_user_pointer(request); stream->state = GLOBUS_GRAM_STREAM_RESTART_NEW; stream->sent = 0; stream->last_sent = GLOBUS_FALSE; lseek(stream->fd, 0, SEEK_SET); stream->handle = GLOBUS_NULL_HANDLE; globus_mutex_unlock(&monitor->mutex); } /* globus_l_gram_streamer_fail() */ static void globus_l_gram_streamer_data_callback( void * arg, globus_gass_transfer_request_t request, globus_byte_t * bytes, globus_size_t length, globus_bool_t last_data) { globus_gram_streamer_monitor_t * monitor = arg; globus_gram_stream_t * stream; globus_gass_transfer_request_status_t status; globus_mutex_lock(&monitor->mutex); stream = globus_gass_transfer_request_get_user_pointer(request); free(bytes); stream->blocks--; status = globus_gass_transfer_request_get_status(request); if (last_data && stream->blocks == 0) { switch (status) { case GLOBUS_GASS_TRANSFER_REQUEST_INVALID: case GLOBUS_GASS_TRANSFER_REQUEST_STARTING: case GLOBUS_GASS_TRANSFER_REQUEST_FAILED: case GLOBUS_GASS_TRANSFER_REQUEST_DENIED: case GLOBUS_GASS_TRANSFER_REQUEST_REFERRED: globus_gass_transfer_request_destroy(request); if (stream->state != GLOBUS_GRAM_STREAM_RESTART) { stream->state = GLOBUS_GRAM_STREAM_FAIL; globus_cond_signal(&monitor->cond); } break; case GLOBUS_GASS_TRANSFER_REQUEST_DONE: globus_gass_transfer_request_destroy(request); if (stream->state == GLOBUS_GRAM_STREAM_ACTIVE) { stream->state = GLOBUS_GRAM_STREAM_DONE; } globus_cond_signal(&monitor->cond); break; case GLOBUS_GASS_TRANSFER_REQUEST_PENDING: break; default: fprintf(stderr, "%d:GASS Transfer returned invalid status: %d\n", GLOBUS_GRAM_PROTOCOL_ERROR_MALLOC_FAILED, (int) status); exit(EXIT_FAILURE); } } globus_mutex_unlock(&monitor->mutex); } /* globus_l_gram_streamer_data_callback() */ static void globus_l_gram_streamer_local_poll( void * arg) { globus_gram_streamer_monitor_t * monitor = arg; int rc; struct stat st; unsigned char * data; off_t data_size; globus_size_t amt; globus_bool_t last_data; int i; char * save_state_file; globus_gram_stream_t * streams[] = { &monitor->output_stream, &monitor->error_stream, NULL }; globus_gram_stream_t * stream; globus_mutex_lock(&monitor->mutex); /* Check if remote_io_file has changed */ rc = stat("remote_io_file", &st); if (rc == 0) { if (st.st_mtime > monitor->remote_io_url_file_time) { /* Start the termination of the current output streams */ for (i = 0; streams[i] != NULL; i++) { stream = streams[i]; switch (stream->state) { case GLOBUS_GRAM_STREAM_NEW: case GLOBUS_GRAM_STREAM_ACTIVE: globus_gass_transfer_fail( stream->handle, globus_l_gram_streamer_fail, monitor); stream->state = GLOBUS_GRAM_STREAM_RESTART; break; case GLOBUS_GRAM_STREAM_FAIL: case GLOBUS_GRAM_STREAM_DONE: stream->state = GLOBUS_GRAM_STREAM_RESTART_NEW; stream->sent = 0; stream->last_sent = GLOBUS_FALSE; lseek(stream->fd, 0, SEEK_SET); stream->handle = GLOBUS_NULL_HANDLE; break; case GLOBUS_GRAM_STREAM_RESTART: case GLOBUS_GRAM_STREAM_RESTART_NEW: case GLOBUS_GRAM_STREAM_NONE: break; } } monitor->remote_io_url_file_time = st.st_mtime; /* Load new state file */ save_state_file = monitor->request.job_state_file; monitor->request.job_state_file = NULL; globus_gram_job_manager_request_free(&monitor->request); monitor->request.rsl = NULL; monitor->request.job_state_file = save_state_file; rc = globus_gram_job_manager_state_file_read(&monitor->request); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "%d:", rc); exit(EXIT_FAILURE); } if (monitor->output_stream.source != NULL) { free(monitor->output_stream.source); monitor->output_stream.source = NULL; } if (monitor->output_stream.destination != NULL) { free(monitor->output_stream.destination); monitor->output_stream.destination = NULL; } if (monitor->error_stream.source != NULL) { free(monitor->error_stream.source); monitor->error_stream.source = NULL; } if (monitor->error_stream.destination != NULL) { free(monitor->error_stream.destination); monitor->error_stream.destination = NULL; } /* Re-evaluate RSL */ rc = globus_l_gram_streamer_get_destinations( monitor); } } /* On the first poll after everything is ready to restart, we'll reload * state information and reopen the stream */ for (i = 0; streams[i] != NULL; i++) { stream = streams[i]; if (stream->state == GLOBUS_GRAM_STREAM_RESTART_NEW) { /* Re-open output stream */ if (stream->fd != -1 && stream->destination != NULL) { rc = globus_l_gram_streamer_open_destination( monitor, stream); if (rc == GLOBUS_SUCCESS) { stream->state = GLOBUS_GRAM_STREAM_NEW; } else { stream->state = GLOBUS_GRAM_STREAM_FAIL; } } else { stream->state = GLOBUS_GRAM_STREAM_DONE; } } } /* Only queue data if the transfer is alive */ for (i = 0; streams[i] != NULL; i++) { stream = streams[i]; if (stream->state == GLOBUS_GRAM_STREAM_ACTIVE && (fstat(stream->fd, &st) == 0)) { data_size = st.st_size - stream->sent; if (data_size > STREAMER_BLOCKSIZE) { data_size = STREAMER_BLOCKSIZE; } amt = 0; data = NULL; if (data_size > 0) { data = malloc((size_t) data_size); do { rc = read(stream->fd, data + amt, data_size - amt); if (rc < 0) { if (errno != EINTR) { break; } } else if (rc == 0) { break; } else { amt += rc; } } while (amt < data_size); } if (amt > 0 || ((monitor->pid_count == 0) && (!stream->last_sent))) { stream->sent += amt; stream->blocks++; last_data = (monitor->pid_count == 0) && (stream->sent == st.st_size); rc = globus_gass_transfer_send_bytes( stream->handle, (data == NULL) ? malloc(1) : data, amt, last_data, globus_l_gram_streamer_data_callback, monitor); switch (rc) { case GLOBUS_SUCCESS: stream->last_sent = last_data; break; case GLOBUS_GASS_TRANSFER_ERROR_NULL_POINTER: fprintf(stderr, "NULL pointer"); exit(EXIT_FAILURE); break; case GLOBUS_GASS_TRANSFER_ERROR_INVALID_USE: stream->last_sent = GLOBUS_TRUE; globus_gass_transfer_request_destroy(stream->handle); stream->state = GLOBUS_GRAM_STREAM_FAIL; break; case GLOBUS_GASS_TRANSFER_ERROR_NOT_INITIALIZED: fprintf(stderr, "Not initialized"); exit(EXIT_FAILURE); break; case GLOBUS_GASS_TRANSFER_REQUEST_FAILED: fprintf(stderr, "Failed "); exit(EXIT_FAILURE); } } } } globus_mutex_unlock(&monitor->mutex); } static int globus_l_gram_streamer_get_destinations( globus_gram_streamer_monitor_t * monitor) { globus_list_t * tmp; globus_gram_job_manager_staging_info_t * info; char * s; tmp = monitor->request.stage_stream_todo; while (tmp != NULL) { info = globus_list_first(tmp); tmp = globus_list_rest(tmp); if (monitor->output_stream.destination == NULL) { s = strstr(info->evaled_from, "/stdout"); if (s != NULL && strcmp(s, "/stdout") == 0) { monitor->output_stream.source = strdup(info->evaled_from); monitor->output_stream.destination = strdup(info->evaled_to); continue; } } if (monitor->error_stream.destination == NULL) { s = strstr(info->evaled_from, "/stderr"); if (s != NULL && strcmp(s, "/stderr") == 0) { monitor->error_stream.source = strdup(info->evaled_from); monitor->error_stream.destination = strdup(info->evaled_to); continue; } } } return 0; } static int globus_l_gram_streamer_open_destination( globus_gram_streamer_monitor_t * monitor, globus_gram_stream_t * stream) { globus_gass_transfer_requestattr_t attr; char scheme[16]; int i; int rc; for (i = 0; i < sizeof(scheme); i++) { if (stream->destination[i] == ':') { scheme[i] = 0; break; } else { scheme[i] = stream->destination[i]; } } scheme[15] = 0; rc = globus_gass_transfer_requestattr_init( &attr, scheme); if (rc != GLOBUS_SUCCESS) { return rc; } rc = globus_gass_transfer_register_append( &stream->handle, &attr, (char *) stream->destination, GLOBUS_GASS_TRANSFER_LENGTH_UNKNOWN, globus_l_gram_streamer_request_ready, monitor); if (rc == GLOBUS_SUCCESS) { (void) globus_gass_transfer_request_set_user_pointer( stream->handle, stream); } (void) globus_gass_transfer_requestattr_destroy(&attr); return rc; } /* globus_l_gram_streamer_open_destination() */ /** * @brief Determine if the job's processes are still running * * The globus_l_gram_streamer_waitpids() function is called periodically to * check whether the pids associated with this streamer are still running. * If they are all complete, globus_l_gram_streamer_waitpids() will signal * the main thread and disable this callback from being called again. */ static void globus_l_gram_streamer_waitpids( void * arg) { int i; globus_gram_streamer_monitor_t * monitor = arg; globus_mutex_lock(&monitor->mutex); for (i = 0; i < STREAMER_MAX; i++) { if (monitor->pids[i] == 0) { continue; } if (kill(monitor->pids[i], 0) == -1) { monitor->pids[i] = 0; monitor->pid_count--; } } if (monitor->pid_count == 0) { globus_cond_signal(&monitor->cond); globus_callback_unregister( monitor->waitpids_poll_periodic, NULL, NULL, NULL); } globus_mutex_unlock(&monitor->mutex); } /* globus_l_gram_streamer_waitpids */ globus_gram_job_manager-15.8/PaxHeaders.31186/main.c0000644000000000000000000000013214243161125020362 xustar000000000000000030 mtime=1653400149.360970101 30 atime=1653401831.614124398 30 ctime=1653404021.259746851 globus_gram_job_manager-15.8/main.c0000664000175000017500000010147614243161125020534 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2009 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @file main.c * @brief Resource Allocation Job Manager */ #include "globus_common.h" #include "gssapi.h" #include "globus_gss_assist.h" #include "globus_gsi_system_config.h" #include "globus_common.h" #include "globus_callout.h" #include "globus_gram_job_manager.h" #include "globus_gram_protocol.h" #include "globus_gass_cache.h" #include "globus_gram_jobmanager_callout_error.h" #include static int globus_l_gram_job_manager_activate(void); static int globus_l_gram_deactivate(void); static globus_result_t globus_l_gram_create_stack( const char * driver_name, globus_xio_stack_t * stack, globus_xio_driver_t * driver); static void reply_and_exit( globus_gram_job_manager_t * manager, int rc, char * gt3_failure_message); static void globus_l_gram_process_pending_restarts( void * arg); static void globus_l_gram_cputype_and_manufacturer( globus_gram_job_manager_config_t * config); static void globus_l_gram_lockcheck( void * arg); #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ int main( int argc, char ** argv) { int rc = GLOBUS_SUCCESS; int rc2 = GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED; globus_gram_job_manager_config_t config = {0}; globus_gram_job_manager_t manager = {0}; char * sleeptime_str = NULL; long sleeptime = 0; globus_bool_t debug_mode_service = GLOBUS_FALSE; globus_bool_t located_active_jm = GLOBUS_FALSE; int http_body_fd = -1; int context_fd = -1; gss_cred_id_t cred = GSS_C_NO_CREDENTIAL; OM_uint32 major_status, minor_status; pid_t forked_starter = 0; globus_bool_t cgi_invoked = GLOBUS_FALSE; int lock_tries_left = 10; if ((sleeptime_str = getenv("GLOBUS_JOB_MANAGER_SLEEP"))) { sleeptime = atoi(sleeptime_str); sleep(sleeptime); } if (getenv("GATEWAY_INTERFACE")) { cgi_invoked = GLOBUS_TRUE; } /* * Stdin and stdout point at socket to client * Make sure no buffering. * stderr may also, depending on the option in the grid-services */ setbuf(stdout,NULL); /* Don't export these to the perl scripts */ fcntl(STDIN_FILENO, F_SETFD, (int) 1); fcntl(STDOUT_FILENO, F_SETFD, (int) 1); fcntl(STDERR_FILENO, F_SETFD, (int) 1); /* * At least have minimal POSIX path for job environment via extra * environment values */ if(getenv("PATH") == NULL) { char * path; char default_path[] = "/usr/bin:/bin"; size_t pathlen; pathlen = confstr(_CS_PATH, NULL, (size_t) 0); if (pathlen < sizeof(default_path)) { pathlen = sizeof(default_path); } path = malloc(pathlen); path[0] = 0; (void) confstr(_CS_PATH, path, pathlen); if (path[0] == 0) { strncpy(path, default_path, pathlen); } setenv("PATH", path, 1); } /* Force non-threaded execution for now */ globus_thread_set_model(GLOBUS_THREAD_MODEL_NONE); /* Activate a common before parsing command-line so that * things work. Note that we can't activate everything yet because we might * set the GLOBUS_TCP_PORT_RANGE after parsing command-line args and we * need that set before activating XIO. */ rc = globus_module_activate(GLOBUS_COMMON_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error activating GLOBUS_COMMON_MODULE\n"); exit(1); } /* Parse command line options to get jobmanager configuration */ rc = globus_gram_job_manager_config_init(&config, argc, argv); if (rc != GLOBUS_SUCCESS) { reply_and_exit(NULL, rc, NULL); } globus_thread_key_create( &globus_i_gram_request_key, NULL); rc = globus_gram_job_manager_logging_init(&config); if (rc != GLOBUS_SUCCESS) { exit(1); } if (getenv("GRID_SECURITY_HTTP_BODY_FD") == NULL && !cgi_invoked) { debug_mode_service = GLOBUS_TRUE; } /* Set environment variables from configuration */ if(config.globus_location != NULL) { setenv("GLOBUS_LOCATION", config.globus_location, GLOBUS_TRUE); } if(config.tcp_port_range != NULL) { setenv("GLOBUS_TCP_PORT_RANGE", config.tcp_port_range, GLOBUS_TRUE); } if(config.tcp_source_range != NULL) { setenv("GLOBUS_TCP_SOURCE_RANGE", config.tcp_source_range, GLOBUS_TRUE); } /* Activate all of the modules we will be using */ rc = globus_l_gram_job_manager_activate(); if(rc != GLOBUS_SUCCESS) { exit(1); } /* * Get the delegated credential (or the default credential if we are * run without a client. Don't care about errors in the latter case. */ major_status = globus_gss_assist_acquire_cred( &minor_status, GSS_C_BOTH, &cred); if ((!debug_mode_service) && GSS_ERROR(major_status)) { globus_gss_assist_display_status( stderr, "Error acquiring security credential\n", major_status, minor_status, 0); exit(1); } if (cred != GSS_C_NO_CREDENTIAL) { unsigned long hash; char * newtag; rc = globus_gram_gsi_get_dn_hash( cred, &hash); if (rc == GLOBUS_SUCCESS) { newtag = globus_common_create_string("%s%s%lx", strcmp(config.service_tag, "untagged") == 0 ? "" : config.service_tag, strcmp(config.service_tag, "untagged") == 0 ? "" : ".", hash); free(config.service_tag); config.service_tag = newtag; } } /* * Remove delegated proxy from disk. */ if ((!debug_mode_service) && getenv("X509_USER_PROXY") != NULL) { remove(getenv("X509_USER_PROXY")); unsetenv("X509_USER_PROXY"); } /* Set up LRM-specific state based on our configuration. This will create * the job contact listener, start the SEG if needed, and open the log * file if needed. */ rc = globus_gram_job_manager_init(&manager, cred, &config); if(rc != GLOBUS_SUCCESS) { reply_and_exit(NULL, rc, manager.gt3_failure_message); } /* * Pull out file descriptor numbers for security context and job request * from the environment (set by the gatekeeper) */ if (cgi_invoked) { http_body_fd = 0; context_fd = -1; } else if (!debug_mode_service) { char * fd_env = getenv("GRID_SECURITY_HTTP_BODY_FD"); rc = sscanf(fd_env ? fd_env : "-1", "%d", &http_body_fd); if (rc != 1 || http_body_fd < 0) { fprintf(stderr, "Error locating http body fd\n"); exit(1); } fcntl(http_body_fd, F_SETFD, 1); fd_env = getenv("GRID_SECURITY_CONTEXT_FD"); rc = sscanf(fd_env ? fd_env : "-1", "%d", &context_fd); if (rc != 1 || context_fd < 0) { fprintf(stderr, "Error locating security context fd\n"); exit(1); } fcntl(context_fd, F_SETFD, 1); } /* Redirect stdin from /dev/null, we'll handle stdout after the reply is * sent */ if (!cgi_invoked) { freopen("/dev/null", "r", stdin); } /* Here we'll either become the active job manager to process all * jobs for this user/host/lrm combination, or we'll hand off the * file descriptors containing the info to the active job manager */ while (!located_active_jm) { /* We'll try to get the lock file associated with being the * active job manager here. If we get the OLD_JM_ALIVE error * somebody else has it */ rc = globus_gram_job_manager_startup_lock( &manager, &manager.lock_fd); if (rc == GLOBUS_SUCCESS) { /* We've acquired the lock. We will fork a new process to act like * all other job managers which don't have the lock, and continue * on in this process managing jobs for this LRM. Note that the * child process does not inherit the lock */ if (!debug_mode_service) { int save_errno = 0; /* We've acquired the manager lock */ forked_starter = fork(); save_errno = errno; if (forked_starter < 0) { if (sleeptime != 0) { sleep(sleeptime); } fprintf(stderr, "fork failed: %s", strerror(save_errno)); exit(1); } else if (forked_starter == 0) { /* We are the child process. We'll close our reference to * the lock and let the other process deal with jobs */ close(manager.lock_fd); manager.lock_fd = -1; } globus_logging_update_pid(); if (sleeptime != 0) { sleep(sleeptime); } } if (manager.lock_fd >= 0) { /* We hold the manager lock, so we'll store our credential, and * then, try to accept socket connections. If the socket * connections fail, we'll exit, and another process * will be forked to handle them. */ rc = globus_gram_job_manager_gsi_write_credential( NULL, cred, manager.cred_path); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "write cred failed\n"); exit(1); } if (!debug_mode_service) { close(http_body_fd); http_body_fd = -1; } /* Load existing jobs. Once we call startup_socket, * we have to be ready to accept jobs at any point. If a * restart command is processed before the jobs finish loading, * we'll give Condor-G the wrong code when two-phase commits are * requested. * We only handle errors later on, once we know we have the * socket. */ rc2 = globus_gram_job_manager_request_load_all( &manager); rc = globus_gram_job_manager_startup_socket_init( &manager, &manager.active_job_manager_handle, &manager.socket_fd); if (rc != GLOBUS_SUCCESS) { /* This releases our lock. Either the child process will * attempt to acquire the lock again or some another job * manager will acquire the lock */ exit(0); } assert(manager.socket_fd != -1); } } else if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_OLD_JM_ALIVE) { /* Some system error. Try again */ if (--lock_tries_left == 0) { reply_and_exit(NULL, rc, "Unable to create lock file"); } sleep(1); continue; } /* If manager.socket_fd != -1 then we are the main job manager for this * LRM. * We will restart all existing jobs and then allow the startup * socket to accept new jobs from other job managers. */ if (manager.socket_fd != -1) { /* Look up cputype/manufacturer if not known yet */ globus_l_gram_cputype_and_manufacturer(manager.config); GlobusTimeAbstimeGetCurrent(manager.usagetracker->jm_start_time); located_active_jm = GLOBUS_TRUE; if (rc2 == GLOBUS_GRAM_PROTOCOL_ERROR_GATEKEEPER_MISCONFIGURED) { if (forked_starter > 0) { kill(forked_starter, SIGTERM); forked_starter = 0; } reply_and_exit(NULL, rc, manager.gt3_failure_message); } if (context_fd != -1) { close(context_fd); context_fd = -1; } freopen("/dev/null", "a", stdout); /* At this point, seg_last_timestamp is the earliest last timestamp * for any pre-existing jobs. If that is 0, then we don't have any * existing jobs so we'll just ignore seg events prior to now. */ if (manager.seg_last_timestamp == 0) { manager.seg_last_timestamp = time(NULL); } /* Start off the SEG if we need it. */ if (config.seg_module != NULL || strcmp(config.jobmanager_type, "fork") == 0 || strcmp(config.jobmanager_type, "condor") == 0) { rc = globus_gram_job_manager_init_seg(&manager); /* TODO: If SEG load fails and load_all added some to the * job_id hash, they will need to be pushed into the state * machine so that polling fallback can happen. */ if (rc != GLOBUS_SUCCESS) { config.seg_module = NULL; } } /* GRAM-128: * Register a periodic event to process the GRAM jobs that were * reloaded from their job state files at job manager start time. * This will acquire and then release a reference to each job, * which, behind the scenes, will kick of the state machine * for that job if needed. */ if (!globus_list_empty(manager.pending_restarts)) { globus_reltime_t restart_period; GlobusTimeReltimeSet(restart_period, 1, 0); rc = globus_callback_register_periodic( &manager.pending_restart_handle, NULL, &restart_period, globus_l_gram_process_pending_restarts, &manager); } { globus_reltime_t expire_period; GlobusTimeReltimeSet(expire_period, 1, 0); rc = globus_callback_register_periodic( &manager.expiration_handle, NULL, &expire_period, globus_gram_job_manager_expire_old_jobs, &manager); } { globus_reltime_t lockcheck_period; GlobusTimeReltimeSet(lockcheck_period, 60, 0); rc = globus_callback_register_periodic( &manager.lockcheck_handle, NULL, &lockcheck_period, globus_l_gram_lockcheck, &manager); } { globus_reltime_t idlescript_period; GlobusTimeReltimeSet(idlescript_period, 60, 0); rc = globus_callback_register_periodic( &manager.idle_script_handle, NULL, &idlescript_period, globus_gram_script_close_idle, &manager); } } else if (http_body_fd >= 0) { /* If manager.socket_fd == -1 then we are either the child from the * fork or another process started somehow (either command-line * invocation or via a job submit). If we have a client, then we'll * send our fds to the job manager with the lock and let it process * the job. * * If this succeeds, we set located_active_jm and leave the loop. * Otherwise, we try again. */ if (context_fd >= 0) { rc = globus_gram_job_manager_starter_send( &manager, http_body_fd, context_fd, fileno(stdout), cred); } else { rc = globus_gram_job_manager_starter_send_v2( &manager, cred); } if (rc == GLOBUS_SUCCESS) { located_active_jm = GLOBUS_TRUE; close(http_body_fd); if (context_fd >= 0) { close(context_fd); } manager.done = GLOBUS_TRUE; } else { globus_libc_usleep(250000); } } else { /* We were started by hand, but another process is currently the * main job manager */ unsigned long realpid = 0; FILE * pidin = fopen(manager.pid_path, "r"); fscanf(pidin, "%lu", &realpid); fclose(pidin); fprintf(stderr, "Other job manager process with pid %lu running and processing jobs\n", realpid); exit(0); } } /* Ignore SIGCHILD, and automatically reap child processes. Because of the * fork() above to delegate to another job manager process, and the use of * sub-processes to invoke the perl modules, we create some other * processes. We don't care too much how they exit, so we'll just make sure * we don't create zombies out of them. */ { struct sigaction act; act.sa_handler = SIG_IGN; sigemptyset(&act.sa_mask); sigaddset(&act.sa_mask, SIGCHLD); #ifdef SA_NOCLDWAIT act.sa_flags = SA_NOCLDWAIT; #else /* This may leave zombies running on non-POSIX systems like Hurd */ act.sa_flags = 0; #endif sigaction(SIGCHLD, &act, NULL); } /* Enable log rotation via SIGUSR1 */ { struct sigaction act; act.sa_handler = globus_i_job_manager_log_rotate; sigemptyset(&act.sa_mask); sigaddset(&act.sa_mask, SIGUSR1); act.sa_flags = 0; sigaction(SIGUSR1, &act, NULL); } GlobusGramJobManagerLock(&manager); if (manager.socket_fd != -1 && globus_hashtable_empty(&manager.request_hash) && manager.grace_period_timer == GLOBUS_NULL_HANDLE) { globus_gram_job_manager_set_grace_period_timer(&manager); } /* For the active job manager, this will block until all jobs have * terminated. For any other job manager, the monitor.done is set to * GLOBUS_TRUE and this falls right through. */ while (! manager.done) { GlobusGramJobManagerWait(&manager); } if (manager.expiration_handle != GLOBUS_NULL_HANDLE) { globus_callback_unregister(manager.expiration_handle, NULL, NULL, NULL); } if (manager.lockcheck_handle != GLOBUS_NULL_HANDLE) { globus_callback_unregister(manager.lockcheck_handle, NULL, NULL, NULL); } if (manager.idle_script_handle != GLOBUS_NULL_HANDLE) { globus_callback_unregister(manager.idle_script_handle, NULL, NULL, NULL); } GlobusGramJobManagerUnlock(&manager); globus_gram_job_manager_log( &manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.end " "level=DEBUG " "\n"); /* Clean-up to do if we are the active job manager only */ if (manager.socket_fd != -1) { globus_gram_job_manager_script_close_all(&manager); remove(manager.pid_path); remove(manager.cred_path); remove(manager.socket_path); remove(manager.lock_path); } globus_gram_job_manager_logging_destroy(); globus_gram_job_manager_destroy(&manager); globus_gram_job_manager_config_destroy(&config); rc = globus_l_gram_deactivate(); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "deactivation failed with rc=%d\n", rc); exit(1); } /* { const char * gk_jm_id_var = "GATEKEEPER_JM_ID"; const char * gk_jm_id = getenv(gk_jm_id_var); globus_gram_job_manager_request_acct( request, "%s %s JM exiting\n", gk_jm_id_var, gk_jm_id ? gk_jm_id : "none"); } */ return(0); } /* main() */ #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * Activate all globus modules used by the job manager * * Attempts to activate all of the modules used by the job manager. In the * case of an error, a diagnostic message is printed to stderr. * * @retval GLOBUS_SUCCESS * Success * @retval all other * A module failed to activate */ static int globus_l_gram_job_manager_activate(void) { int rc; globus_result_t result; globus_module_descriptor_t * modules[] = { GLOBUS_COMMON_MODULE, GLOBUS_CALLOUT_MODULE, GLOBUS_GSI_SYSCONFIG_MODULE, GLOBUS_GSI_GSSAPI_MODULE, GLOBUS_GSI_GSS_ASSIST_MODULE, GLOBUS_GRAM_JOBMANAGER_CALLOUT_ERROR_MODULE, GLOBUS_XIO_MODULE, GLOBUS_GRAM_PROTOCOL_MODULE, GLOBUS_GASS_CACHE_MODULE, NULL }; globus_module_descriptor_t * failed_module = NULL; rc = globus_module_activate_array(modules, &failed_module); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error (%d) activating %s\n", rc, failed_module->module_name); goto activate_failed; } result = globus_l_gram_create_stack( "file", &globus_i_gram_job_manager_file_stack, &globus_i_gram_job_manager_file_driver); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_FAILURE; goto stack_init_failed; } result = globus_l_gram_create_stack( "popen", &globus_i_gram_job_manager_popen_stack, &globus_i_gram_job_manager_popen_driver); if (result != GLOBUS_SUCCESS) { rc = GLOBUS_FAILURE; goto destroy_file_stack; } if (rc != GLOBUS_SUCCESS) { destroy_file_stack: globus_xio_stack_destroy(globus_i_gram_job_manager_file_stack); globus_xio_driver_unload(globus_i_gram_job_manager_file_driver); stack_init_failed: activate_failed: ; } return rc; } /* globus_l_gram_job_manager_activate() */ static int globus_l_gram_deactivate(void) { (void) globus_xio_stack_destroy( globus_i_gram_job_manager_file_stack); (void) globus_xio_stack_destroy( globus_i_gram_job_manager_popen_stack); globus_xio_driver_unload(globus_i_gram_job_manager_file_driver); globus_xio_driver_unload(globus_i_gram_job_manager_popen_driver); return globus_module_deactivate_all(); } /* globus_l_gram_deactivate(void) */ static globus_result_t globus_l_gram_create_stack( const char * driver_name, globus_xio_stack_t * stack, globus_xio_driver_t * driver) { globus_result_t result; result = globus_xio_driver_load( driver_name, driver); if (result != GLOBUS_SUCCESS) { goto driver_load_failed; } result = globus_xio_stack_init(stack, NULL); if (result != GLOBUS_SUCCESS) { goto stack_init_failed; } result = globus_xio_stack_push_driver( *stack, *driver); if (result != GLOBUS_SUCCESS) { goto driver_push_failed; } if (result != GLOBUS_SUCCESS) { driver_push_failed: globus_xio_stack_destroy(*stack); *stack = NULL; stack_init_failed: globus_xio_driver_unload(*driver); *driver = NULL; driver_load_failed: ; } return result; } /* globus_l_gram_create_stack() */ static void reply_and_exit( globus_gram_job_manager_t * manager, int rc, char * gt3_failure_message) { int myrc; int context_fd; gss_ctx_id_t response_context = GSS_C_NO_CONTEXT; char * fd_env; fd_env = getenv("GRID_SECURITY_CONTEXT_FD"); myrc = sscanf(fd_env ? fd_env : "-1", "%d", &context_fd); if (myrc == 1 && context_fd >= 0) { myrc = globus_gram_job_manager_import_sec_context( NULL, context_fd, &response_context); } globus_gram_job_manager_reply( NULL, manager, rc, NULL, 1, response_context, gt3_failure_message); exit(0); } /* reply_and_exit() */ static void globus_l_gram_process_pending_restarts( void * arg) { globus_gram_job_manager_t * manager = arg; void * key; char gramid[64]; int i; int rc; int restarted=0; globus_gram_jobmanager_request_t * request; GlobusGramJobManagerLock(manager); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.process_pending_restarts.start " "level=DEBUG " "pending_restarts=%d " "\n", globus_list_size(manager->pending_restarts)); GlobusGramJobManagerUnlock(manager); for (i = 0; i < 20; i++) { GlobusGramJobManagerLock(manager); if (manager->pending_restarts == NULL) { GlobusGramJobManagerUnlock(manager); break; } key = globus_list_first(manager->pending_restarts); globus_assert(key != NULL); strncpy(gramid, key, sizeof(gramid)); gramid[sizeof(gramid) - 1] = '\0'; GlobusGramJobManagerUnlock(manager); /* * This call below will remove the job from the list when it * reloads it and start the state machine. */ rc = globus_gram_job_manager_add_reference( manager, gramid, "restart job", &request); /* If this fails, then removing the reference will allow it * to potentially hit negative counts */ if (rc == GLOBUS_SUCCESS) { restarted++; /* XXX: What if this fails? */ rc = globus_gram_job_manager_remove_reference( manager, gramid, "restart job"); } } GlobusGramJobManagerLock(manager); globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_DEBUG, "event=gram.process_pending_restarts.end " "level=DEBUG " "processed=%d " "pending_restarts=%d " "\n", restarted, globus_list_size(manager->pending_restarts)); if (manager->pending_restarts == NULL) { globus_callback_unregister( manager->pending_restart_handle, NULL, NULL, NULL); manager->pending_restart_handle = GLOBUS_NULL_HANDLE; GlobusGramJobManagerUnlock(manager); return; } GlobusGramJobManagerUnlock(manager); } static void globus_l_gram_cputype_and_manufacturer( globus_gram_job_manager_config_t * config) { char *config_guess_path = NULL; FILE *config_guess = NULL; char config_guessbuf[32]; char *hyphen, *hyphen2; if (config->globus_host_manufacturer == NULL || config->globus_host_cputype == NULL) { /* No config.guess-$hostname yet */ globus_eval_path( "${datadir}/globus/config.guess", &config_guess_path); if (config_guess_path != NULL) { config_guess = popen(config_guess_path, "r"); if (config_guess != NULL) { if (fgets(config_guessbuf, sizeof(config_guessbuf), config_guess) != NULL) { hyphen = strchr(config_guessbuf, '-'); if (config->globus_host_cputype == NULL && hyphen) { *hyphen = '\0'; config->globus_host_cputype = strdup(config_guessbuf); } hyphen++; hyphen2 = strchr(hyphen, '-'); if (config->globus_host_manufacturer == NULL && hyphen2) { *hyphen2 = '\0'; config->globus_host_manufacturer = strdup(hyphen); } } pclose(config_guess); } free(config_guess_path); } } } static void globus_l_gram_lockcheck( void * arg) { globus_gram_job_manager_t * manager = arg; struct stat lockfile_stat = {0}, lockfd_stat = {0}; int lockfile_errno = 0, lockfd_errno = 0; int rc; char *msg1 = NULL, *msg2 = NULL, *msg3 = NULL; errno = 0; rc = stat(manager->lock_path, &lockfile_stat); if (rc < 0) { msg1 = "Cannot stat lockfile"; lockfile_errno = errno; } rc = fstat(manager->lock_fd, &lockfd_stat); if (rc < 0) { lockfd_errno = errno; msg2 = "Cannot stat lockfd"; } if (msg1 == NULL && msg2 == NULL) { if (lockfd_stat.st_ino != lockfile_stat.st_ino) { msg3 = "Lockfile replaced"; } } if (msg1 != NULL || msg2 != NULL || msg3 != NULL) { goto fatal; } return; fatal: globus_gram_job_manager_log( manager, GLOBUS_GRAM_JOB_MANAGER_LOG_FATAL, "event=gram.jobmanager.end " "level=FATAL " "message=\"Lockfile sanity check failed, aborting\" " "lockfile=\"%s\" " "lockfile_inode=%ld " "lockfile_errno=%d " "lockfile_message=\"%s\" " "lockfd=%d " "lockfd_inode=%ld " "lockfd_errno=%d " "lockfd_message=\"%s\" " "%s%s%s" "%s%s%s" "%s%s%s" "\n", manager->lock_path, (long int) lockfile_stat.st_ino, lockfile_errno, strerror(lockfile_errno), manager->lock_fd, (long int) lockfd_stat.st_ino, lockfd_errno, strerror(lockfile_errno), (msg1 != NULL) ? "msg1=\"" : "", (msg1 != NULL) ? msg1 : "", (msg1 != NULL) ? "\" " : "", (msg2 != NULL) ? "msg2=\"" : "", (msg2 != NULL) ? msg2 : "", (msg2 != NULL) ? "\" " : "", (msg3 != NULL) ? "msg3=\"" : "", (msg3 != NULL) ? msg3 : "", (msg3 != NULL) ? "\" " : ""); abort(); } /* globus_l_gram_lockcheck() */ #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ globus_gram_job_manager-15.8/PaxHeaders.31186/lock_test.c0000644000000000000000000000013214243161125021425 xustar000000000000000030 mtime=1653400149.360970101 30 atime=1653401831.587124652 30 ctime=1653404021.261746832 globus_gram_job_manager-15.8/lock_test.c0000664000175000017500000000375014243161125021573 0ustar00johndoejohndoe00000000000000#include "globus_common.h" #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd; int rc; struct flock fl; pid_t pid; int child_status; if (argc != 2) { fprintf(stderr, "Usage: %s lock-file-path\n", argv[0]); rc = EXIT_FAILURE; goto arg_failed; } fd = open(argv[1], O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR); if (fd < 0) { perror("open"); rc = EXIT_FAILURE; goto open_failed; } fl.l_start = 0; fl.l_len = 0; fl.l_pid = 0; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; rc = fcntl(fd, F_SETLKW, &fl); if (rc < 0) { perror("fcntl"); rc = EXIT_FAILURE; goto fcntl_failed; } pid = fork(); if (pid < 0) { perror("fork"); rc = EXIT_FAILURE; goto fork_failed; } else if (pid == 0) { errno=0; fl.l_start = 0; fl.l_len = 0; fl.l_pid = 0; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; rc = fcntl(fd,F_SETLK, &fl); if (rc == 0 || (errno != EACCES && errno != EAGAIN)) { perror("fcntl"); rc = EXIT_FAILURE; goto child_lock_failed; } else { rc = 0; rc = EXIT_SUCCESS; } } else { pid = wait(&child_status); if (pid < 0) { perror("wait"); rc = EXIT_FAILURE; goto wait_failed; } else { rc = EXIT_SUCCESS; } } wait_failed: child_lock_failed: fork_failed: fcntl_failed: close(fd); remove(argv[1]); open_failed: arg_failed: exit(rc); } globus_gram_job_manager-15.8/PaxHeaders.31186/globus-gram-job-manager.rvf0000644000000000000000000000013214243161125024410 xustar000000000000000030 mtime=1653400149.353970172 30 atime=1653400149.353970172 30 ctime=1653404021.271746736 globus_gram_job_manager-15.8/globus-gram-job-manager.rvf0000664000175000017500000003367214243161125024564 0ustar00johndoejohndoe00000000000000# RSL Validation Information for the base RSL supported by the job # manager Attribute: directory Description: "Specifies the path of the directory the jobmanager will use as the default directory for the requested job." Default: $(HOME) ValidWhen: GLOBUS_GRAM_JOB_SUBMIT DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: executable Description: "The name of the executable file to run on the remote machine. If the value is a GASS URL, the file is transferred to the remote gass cache before executing the job and removed after the job has terminated." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT RequiredWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: arguments Description: "The command line arguments for the executable. Use quotes, if a space is required in a single argument." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: stdin Description: "The name of the file to be used as standard input for the executable on the remote machine. If the value is a GASS URL, the file is transferred to the remote gass cache before executing the job and removed after the job has terminated." Default: "/dev/null" ValidWhen: GLOBUS_GRAM_JOB_SUBMIT DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: stdout Description: "The name of the remote file to store the standard output from the job. If the value is a GASS URL, the standard output from the job is transferred dynamically during the execution of the job. There are two accepted forms of this value. It can consist of a single destination: stdout = URL, or a sequence of destinations: stdout = (DESTINATION) (DESTINATION). In the latter case, the DESTINATION may itself be a URL or a sequence of an x-gass-cache URL followed by a cache tag." Default: "/dev/null" ValidWhen: GLOBUS_GRAM_JOB_SUBMIT GLOBUS_GRAM_JOB_MANAGER_RESTART GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: stderr Description: "The name of the remote file to store the standard error from the job. If the value is a GASS URL, the standard error from the job is transferred dynamically during the execution of the job. There are two accepted forms of this value. It can consist of a single destination: stderr = URL, or a sequence of destinations: stderr = (DESTINATION) (DESTINATION). In the latter case, the DESTINATION may itself be a URL or a sequence of an x-gass-cache URL followed by a cache tag." Default: "/dev/null" ValidWhen: GLOBUS_GRAM_JOB_SUBMIT GLOBUS_GRAM_JOB_MANAGER_RESTART GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: count Description: "The number of executions of the executable." Default: 1 ValidWhen: GLOBUS_GRAM_JOB_SUBMIT DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: environment Description: "The environment variables that will be defined for the executable in addition to default set that is given to the job by the jobmanager." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: max_time Description: "The maximum walltime or cputime for a single execution of the executable. Walltime or cputime is selected by the GRAM scheduler being interfaced. The units is in minutes. The value will go through an atoi() conversion in order to get an integer." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: max_wall_time Description: "Explicitly set the maximum walltime for a single execution of the executable. The units is in minutes. The value will go through an atoi() conversion in order to get an integer. If the GRAM scheduler cannot set walltime, then an error will be returned. " ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: max_cpu_time Description: "Explicitly set the maximum cputime for a single execution of the executable. The units is in minutes. The value will go through an atoi() conversion in order to get an integer. If the GRAM scheduler cannot set cputime, then an error will be returned." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: job_type Description: "This specifies how the jobmanager should start the job. Possible values are single (even if the count > 1, only start 1 process or thread), multiple (start count processes or threads), mpi (use the appropriate method (e.g. mpirun) to start a program compiled with a vendor-provided MPI library. Program is started with count nodes), and condor (starts condor jobs in the \"condor\" universe.)" Values: single multiple mpi condor Default: multiple ValidWhen: GLOBUS_GRAM_JOB_SUBMIT DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: gram_my_job Description: "Obsolete and ignored." Values: collective independent Default: collective ValidWhen: GLOBUS_GRAM_JOB_SUBMIT DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: queue Description: "Target the job to a queue (class) name as defined by the scheduler at the defined (remote) resource." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: project Description: "Target the job to be allocated to a project account as defined by the scheduler at the defined (remote) resource." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: host_count Description: "Only applies to clusters of SMP computers, such as newer IBM SP systems. Defines the number of nodes (\"pizza boxes\") to distribute the \"count\" processes across." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: dry_run Description: "If dryrun = yes then the jobmanager will not submit the job for execution and will return success." Default: no Values: yes no ValidWhen: GLOBUS_GRAM_JOB_SUBMIT DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: min_memory Description: "Explicitly set the minimum amount of memory for a single execution of the executable. The units is in Megabytes. The value will go through an atoi() conversion in order to get an integer. If the GRAM scheduler cannot set minMemory, then an error will be returned." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: max_memory Description: "Explicitly set the maximum amount of memory for a single execution of the executable. The units is in Megabytes. The value will go through an atoi() conversion in order to get an integer. If the GRAM scheduler cannot set maxMemory, then an error will be returned." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: save_state Description: "Causes the jobmanager to save it's job state information to a persistent file on disk. If the job manager exits or is suspended, the client can later start up a new job manager which can continue monitoring the job." Values: yes no ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: two_phase Description: "Use a two-phase commit for job submission and completion. The job manager will respond to the initial job request with a WAITING_FOR_COMMIT error. It will then wait for a signal from the client before doing the actual job submission. The integer supplied is the number of seconds the job manager should wait before timing out. If the job manager times out before receiving the commit signal, or if a client issues a cancel signal, the job manager will clean up the job's files and exit, sending a callback with the job status as GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED. After the job manager sends a DONE or FAILED callback, it will wait for a commit signal from the client. If it receives one, it cleans up and exits as usual. If it times out and save_state was enabled, it will leave all of the job's files in place and exit (assuming the client is down and will attempt a job restart later). The timeoutvalue can be extended via a signal. When one of the following errors occurs, the job manager does not delete the job state file when it exits: GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT, GLOBUS_GRAM_PROTOCOL_ERROR_TTL_EXPIRED, GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED, GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_EXPIRED. In these cases, it can not be restarted, so the job manager will not wait for the commit signal after sending the FAILED callback" ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: remote_io_url Description: "Writes the given value (a URL base string) to a file, and adds the path to that file to the environment through the GLOBUS_REMOTE_IO_URL environment variable. If this is specified as part of a job restart RSL, the job manager will update the file's contents. This is intended for jobs that want to access files via GASS, but the URL of the GASS server has changed due to a GASS server restart." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT GLOBUS_GRAM_JOB_MANAGER_RESTART GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE Attribute: scratch_dir Description: "Specifies the location to create a scratch subdirectory in. A SCRATCH_DIRECTORY RSL substitution will be filled with the name of the directory which is created." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: rsl_substitution Description: "Specifies a list of values which can be substituted into other rsl attributes' values through the $(SUBSTITUTION) mechanism." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT GLOBUS_GRAM_JOB_MANAGER_RESTART Attribute: restart Description: "Start a new job manager, but instead of submitting a new job, start managing an existing job. The job manager will search for the job state file created by the original job manager. If it finds the file and successfully reads it, it will become the new manager of the job, sending callbacks on status and streaming stdout/err if appropriate. It will fail if it detects that the old jobmanager is still alive (via a timestamp in the state file). If stdout or stderr was being streamed over the network, new stdout and stderr attributes can be specified in the restart RSL and the jobmanager will stream to the new locations (useful when output is going to a GASS server started by the client that's listening on a dynamic port, and the client was restarted). The new job manager will return a new contact string that should be used to communicate with it. If a jobmanager is restarted multiple times, any of the previous contact strings can be given for the restart attribute." RequiredWhen: GLOBUS_GRAM_JOB_MANAGER_RESTART ValidWhen: GLOBUS_GRAM_JOB_MANAGER_RESTART Attribute: stdout_position Description: "Specifies where in the file remote output streaming should be restarted from. Must be 0." ValidWhen: GLOBUS_GRAM_JOB_MANAGER_RESTART GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE Values: 0 Attribute: stderr_position Description: "Specifies where in the file remote standard error streaming should be restarted from. Must be 0." ValidWhen: GLOBUS_GRAM_JOB_MANAGER_RESTART GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE Values: 0 Attribute: file_stage_in Description: "Specifies a list of (\"remote URL\" \"local file\") pairs which indicate files to be staged to the nodes which will run the job." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: file_stage_in_shared Description: "Specifies a list of (\"remote URL\" \"local file\") pairs which indicate files to be staged into the cache. A symlink from the cache to the \"local file\" path will be made." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: file_stage_out Description: "Specifies a list of (\"local file\" \"remote URL\") pairs which indicate files to be staged from the job to a GASS-compatible file server." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: file_clean_up Description: "Specifies a list of files which will be removed after the job is completed." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: gass_cache Description: Specifies location to override the GASS cache location. ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: proxy_timeout Description: "Obsolete and ignored. Now a job-manager-wide setting." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT GLOBUS_GRAM_JOB_MANAGER_RESTART Attribute: library_path Description: "Specifies a list of paths to be appended to the system-specific library path environment variables." Default: $(GLOBUS_LOCATION)/lib DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: username Description: Verify that the job is running as this user. ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: restartcontacts Description: "When restarting, use job state callback contacts from the original request. Internally generated." ValidWhen: GLOBUS_GRAM_JOB_MANAGER_RESTART Values: yes no Default: no DefaultWhen: GLOBUS_GRAM_JOB_MANAGER_RESTART Publish: false Attribute: savejobdescription Description: "Save a copy of the job description to $HOME" ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Values: yes no Default: no DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: loglevel Description: "Override the default log level for this job. The value of this attribute consists of a combination of the strings FATAL, ERROR, WARN, INFO, DEBUG, TRACE joined by the | character" ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Attribute: logpattern Description: "Override the default log path pattern for this job. The value of this attribute is a string (potentially containing RSL substitutions) that is evaluated to the path to write the log to. If the resulting string contains the string $(DATE) (or any other RSL substitution), it will be reevaluated at log time." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT # default value is 4 hours Attribute: expiration Description: "Time (in seconds) after a a job fails to receive a two-phase commit end signal before it is cleaned up." ValidWhen: GLOBUS_GRAM_JOB_SUBMIT Default: 14400 DefaultWhen: GLOBUS_GRAM_JOB_SUBMIT globus_gram_job_manager-15.8/PaxHeaders.31186/globus-personal-gatekeeper.txt0000644000000000000000000000013214243161125025261 xustar000000000000000030 mtime=1653400149.354970162 30 atime=1653400149.354970162 30 ctime=1653404021.274746708 globus_gram_job_manager-15.8/globus-personal-gatekeeper.txt0000664000175000017500000001362014243161125025424 0ustar00johndoejohndoe00000000000000[[gram5-cmd-globus-personal-gatekeeper]] GLOBUS-PERSONAL-GATEKEEPER(1) ============================= :doctype: manpage :man source: Grid Community Toolkit :man version: 6 :man manual: Grid Community Toolkit Manual :man software: Grid Community Toolkit NAME ---- globus-personal-gatekeeper - Manage a user's personal gatekeeper daemon SYNOPSIS -------- *globus-personal-gatekeeper* [-help ] [-usage ] [-version ] [-versions ] [-list ] [-directory 'CONTACT'] == Description == The *globus-personal-gatekeeper* command is a utility which manages a gatekeeper and job manager service for a single user. Depending on the command-line arguments it will operate in one of several modes. In the first set of arguments indicated in the synopsis, the program provides information about the *globus-personal-gatekeeper* command or about instances of the *globus-personal-gatekeeper* that are running currently. The second set of arguments indicated in the synopsis provide control over starting a new *globus-personal-gatekeeper* instance. The final set of arguments provide control for terminating one or more *globus-personal-gatekeeper* instances. The '-start' mode will create a new subdirectory of $HOME/.globus and write the configuration files needed to start a and write the configuration files needed to start a *globus-gatekeeper* daemon which will invoke the *globus-job-manager* service when new authenticated connections are made to its service port. The *globus-personal-gatekeeper* then exits, printing the contact string for the new gatekeeper prefixed by GRAM contact: to standard output. In addition to the arguments described above, any arguments described in *globus-job-manager(8)* can be appended to the command-line and will be added to the job manager configuration for the service started by the *globus-gatekeeper*. The new *globus-gatekeeper* will continue to run in the background until killed by invoking *globus-personal-gatekeeper* with the '-kill' or '-killall' argument. When killed, it will kill the *globus-gatekeeper* and *globus-job-manager* processes, remove state files and configuration data, and then exit. Jobs which are running when the personal gatekeeper is killed will continue to run, but their job directory will be destroyed so they may fail in the LRM. The full set of command-line options to *globus-personal-gatekeeper* consists of: *-help, -usage*:: Print command-line option summary and exit *-version*:: Print software version *-versions*:: Print software version including DiRT information *-list*:: Print a list of all currently running personal gatekeepers. These entries will be printed one per line. *-directory 'CONTACT'*:: Print the configuration directory for the personal gatekeeper with the contact string 'CONTACT'. *-debug*:: Print additional debugging information when starting a personal gatekeeper. This option is ignored in other modes. *-start*:: Start a new personal gatekeeper process. *-jmtype 'LRM'*:: Use 'LRM' as the local resource manager interface. If not provided when starting a personal gatekeeper, the job manager will use the default fork LRM. *-auditdir 'AUDIT_DIRECTORY'*:: Write audit report files to 'AUDIT_DIRECTORY'. If not provided, the job manager will not write any audit files. *-port 'PORT'*:: Listen for gatekeeper TCP/IP connections on the port 'PORT'. If not provided, the gatekeeper will let the operating system choose. *-log[='DIRECTORY']*:: Write job manager log files to 'DIRECTORY'. If 'DIRECTORY' is omitted, the default of $HOME will be used. If this option is not present, the job manager will not write any log files. will be used. If this option is not present, the job manager will not write any log files. *-seg*:: Try to use the SEG mechanism to receive job state change information, instead of polling for these. These require either the system administrator or the user to run an instance of the *globus-job-manager-event-generator* program for the LRM specified by the '-jmtype' option. *-acctfile 'ACCOUNTING_FILE'*:: Write gatekeeper accounting entries to 'ACCOUNTING_FILE'. If not provided, no accounting records are written. EXAMPLES -------- This example shows the output when starting a new personal gatekeeper which will schedule jobs via the lsf LRM, with debugging enabled. ============================================================================== % globus-personal-gatekeeper -start -jmtype lsf verifying setup... done. GRAM contact: personal-grid.example.org:57846:/DC=org/DC=example/CN=Joe User ============================================================================== This example shows the output when listing the current active personal gatekeepers. ============================================================================== % globus-personal-gatekeeper -list personal-grid.example.org:57846:/DC=org/DC=example/CN=Joe User ============================================================================== This example shows the output when querying the configuration directory for the above personal gatekeeper. gatekeepers. ============================================================================== % globus-personal-gatekeeper -directory "personal-grid.example.org:57846:/DC=org/DC=example/CN=Joe User" /home/juser/.globus/.personal-gatekeeper.personal-grid.example.org.1337 ============================================================================== ============================================================================== % globus-personal-gatekeeper -kill "personal-grid.example.org:57846:/DC=org/DC=example/CN=Joe User" killing gatekeeper: "personal-grid.example.org:57846:/DC=org/DC=example/CN=Joe User" ============================================================================== SEE ALSO -------- globusrun(1), globus-job-manager(8), globus-gatekeeper(8) AUTHOR ------ Copyright (C) 1999-2016 University of Chicago globus_gram_job_manager-15.8/PaxHeaders.31186/globus-job-manager.txt0000644000000000000000000000013214243161125023506 xustar000000000000000030 mtime=1653400149.354970162 30 atime=1653400149.354970162 30 ctime=1653404021.277746679 globus_gram_job_manager-15.8/globus-job-manager.txt0000664000175000017500000003164314243161125023656 0ustar00johndoejohndoe00000000000000[[gram5-cmd-globus-job-manager]] GLOBUS-JOB-MANAGER(8) ===================== :doctype: manpage :man source: Grid Community Toolkit :man version: 6 :man manual: Grid Community Toolkit Manual :man software: Grid Community Toolkit NAME ---- globus-job-manager - Execute and monitor jobs SYNOPSIS -------- **globus-job-manager** -type 'LRM' [-conf 'CONFIG_PATH'] [-help] [-globus-host-manufacturer 'MANUFACTURER'] [-globus-host-cputype 'CPUTYPE'] [-globus-host-osname 'OSNAME'] [-globus-host-osversion 'OSVERSION'] [-globus-gatekeeper-host 'HOST'] [-globus-gatekeeper-port 'PORT'] [-globus-gatekeeper-subject 'SUBJECT'] [-home 'GLOBUS_LOCATION'] [-target-globus-location 'TARGET_GLOBUS_LOCATION'] [-condor-arch 'ARCH'] [-condor-os 'OS'] [-history 'HISTORY_DIRECTORY'] [-scratch-dir-base 'SCRATCH_DIRECTORY'] [-enable-syslog] [-stdio-log 'LOG_DIRECTORY'] [-log-pattern 'PATTERN'] [-log-levels 'LEVELS'] [-state-file-dir 'STATE_DIRECTORY'] [-globus-tcp-port-range 'PORT_RANGE'] [-globus-tcp-source-range 'SOURCE_RANGE'] [-x509-cert-dir 'TRUSTED_CERTIFICATE_DIRECTORY'] [-cache-location 'GASS_CACHE_DIRECTORY'] [-k] [-extra-envvars 'VAR=VAL,...'] [-seg-module 'SEG_MODULE'] [-audit-directory 'AUDIT_DIRECTORY'] [-globus-toolkit-version 'TOOLKIT_VERSION'] [-disable-streaming] [-service-tag 'SERVICE_TAG'] DESCRIPTION ----------- The **globus-job-manager** program is a servivce which starts and controls GRAM jobs which are executed by a local resource management system, such as LSF or Condor. The **globus-job-manager** program is typically started by the **globus-gatekeeper** program and not directly by a user. It runs until all jobs it is managing have terminated or its delegated credentials have expired. Typically, users interact with the **globus-job-manager** program via client applications such as **globusrun**, **globus-job-submit**, or tools such as CoG jglobus or Condor-G. The full set of command-line options to **globus-job-manager** consists of: **-help**:: Display a help message to standard error and exit **-type 'LRM'**:: Execute jobs using the local resource manager named 'LRM'. **-conf 'CONFIG_PATH'**:: Read additional command-line arguments from the file 'CONFIG_PATH'. If present, this must be the first command-line argument to the **globus-job-manager** program. **-globus-host-manufacturer 'MANUFACTURER'**:: Indicate the manufacturer of the system which the jobs will execute on. This parameter sets the value of the $(GLOBUS_HOST_MANUFACTURER) RSL substitution to 'MANUFACTURER' **-globus-host-cputype 'CPUTYPE'**:: Indicate the CPU type of the system which the jobs will execute on. This parameter sets the value of the $(GLOBUS_HOST_CPUTYPE) RSL substitution to 'CPUTYPE' **-globus-host-osname 'OSNAME'**:: Indicate the operating system type of the system which the jobs will execute on. This parameter sets the value of the $(GLOBUS_HOST_OSNAME) RSL substitution to 'OSNAME' **-globus-host-osversion 'OSVERSION'**:: Indicate the operating system version of the system which the jobs will execute on. This parameter sets the value of the $(GLOBUS_HOST_OSVERSION) RSL substitution to 'OSVERSION' **-globus-gatekeeper-host 'HOST'**:: Indicate the host name of the machine which the job was submitted to. This parameter sets the value of the $(GLOBUS_GATEKEEPER_HOST) RSL substitution to 'HOST' **-globus-gatekeeper-port 'PORT'**:: Indicate the TCP port number of gatekeeper to which jobs are submitted to. This parameter sets the value of the $(GLOBUS_GATEKEEPER_PORT) RSL substitution to 'PORT' **-globus-gatekeeper-subject 'SUBJECT'**:: Indicate the X.509 identity of the gatekeeper to which jobs are submitted to. This parameter sets the value of the $(GLOBUS_GATEKEEPER_SUBJECT) RSL substitution to 'SUBJECT' **-home 'GLOBUS_LOCATION'**:: Indicate the path where the Grid Community Toolkit(r) is installed on the service node. This is used by the job manager to locate its support and configuration files. **-target-globus-location 'TARGET_GLOBUS_LOCATION'**:: Indicate the path where the Grid Community Toolkit(r) is installed on the execution host. If this is omitted, the value specified as a parameter to '-home' is used. This parameter sets the value of the $(GLOBUS_LOCATION) RSL substitution to 'TARGET_GLOBUS_LOCATION' **-history 'HISTORY_DIRECTORY'**:: Configure the job manager to write job history files to 'HISTORY_DIRECTORY'. These files are described in the FILES section below. **-scratch-dir-base 'SCRATCH_DIRECTORY'**:: Configure the job manager to use 'SCRATCH_DIRECTORY' as the default scratch directory root if a relative path is specified in the job RSL's scratch_dir attribute. **-enable-syslog**:: Configure the job manager to write log messages via syslog. Logging is further controlled by the argument to the '-log-levels' parameter described below. **-log-pattern 'PATTERN'**:: Configure the job manager to write log messages to files named by the string 'PATTERN'. The 'PATTERN' string may contain job-independent RSL substitutions such as $(HOME), $(LOGNAME), etc, as well as the special RSL substition $(DATE) which will be resolved at log time to the date in YYYYMMDD form. **-stdio-log 'LOG_DIRECTORY'**:: Configure the job manager to write log messages to files in the 'LOG_DIRECTORY' directory. This is a backward-compatible parameter, equivalent to '-log-pattern '. **-log-levels 'LEVELS'**:: Configure the job manager to write log messages of certain levels to syslog and/or log files. The available log levels are FATAL, ERROR, WARN, INFO, DEBUG, and TRACE. Multiple values can be combined with the | character. The default value of logging when enabled is FATAL|ERROR. **-state-file-dir 'STATE_DIRECTORY'**:: Configure the job manager to write state files to 'STATE_DIRECTORY'. If not specified, the job manager uses the default of $GLOBUS_LOCATION/tmp/gram_job_state/. This directory must be writable by all users and be on a file system which supports POSIX advisory file locks. . This directory must be writable by all users and be on a file system which supports POSIX advisory file locks. **-globus-tcp-port-range 'PORT_RANGE'**:: Configure the job manager to restrict its TCP/IP communication to use ports in the range described by 'PORT_RANGE'. This value is also made available in the job environment via the GLOBUS_TCP_PORT_RANGE environment variable. **-globus-tcp-source-range 'SOURCE_RANGE'**:: Configure the job manager to restrict its TCP/IP communication to use source ports in the range described by 'SOURCE_RANGE'. This value is also made available in the job environment via the GLOBUS_TCP_SOURCE_RANGE environment variable. **-x509-cert-dir 'TRUSTED_CERTIFICATE_DIRECTORY'**:: Configure the job manager to search 'TRUSTED_CERTIFICATE_DIRECTORY' for its list of trusted CA certificates and their signing policies. This value is also made available in the job environment via the X509_CERT_DIR environment variable. **-cache-location 'GASS_CACHE_DIRECTORY'**:: Configure the job manager to use the path 'GASS_CACHE_DIRECTORY' for its temporary GASS-cache files. This value is also made available in the job environment via the GLOBUS_GASS_CACHE_DEFAULT environment variable. **-k**:: Configure the job manager to assume it is using Kerberos for authentication instead of X.509 certificates. This disables some certificate-specific processing in the job manager. **-extra-envvars 'VAR=VAL,...'**:: Configure the job manager to define a set of environment variables in the job environment beyond those defined in the base job environment. The format of the parameter to this argument is a comma-separated sequence of VAR=VAL pairs, where VAR is the variable name and VAL is the variable's value. If the value is not specified, then the value of the variable in the job manager's environment is used. This option may be present multiple times on the command-line or the job manager configuration file to append multiple environment settings. **-seg-module 'SEG_MODULE'**:: Configure the job manager to use the schedule event generator module named by 'SEG_MODULE' to detect job state changes events from the local resource manager, in place of the less efficient polling operations used in GT2. To use this, one instance of the **globus-job-manager-event-generator** must be running to process events for the LRM into a generic format that the job manager can parse. **-audit-directory 'AUDIT_DIRECTORY'**:: Configure the job manager to write audit records to the directory named by 'AUDIT_DIRECTORY'. This records can be loaded into a database using the **globus-gram-audit** program. **-globus-toolkit-version 'TOOLKIT_VERSION'**:: Configure the job manager to use 'TOOLKIT_VERSION' as the version for audit and usage stats records. **-service-tag 'SERVICE_TAG'**:: Configure the job manager to use 'SERVICE_TAG' as a unique identifier to allow multiple GRAM instances to use the same job state directories without interfering with each other's jobs. If not set, the value untagged will be used. **-disable-streaming**:: Configure the job manager to disable file streaming. This is propagated to the LRM script interface but has no effect in GRAM5. **-condor-arch 'ARCH'**:: Set the architecture specification for condor jobs to be 'ARCH' in job classified ads generated by the GRAM5 codnor LRM script. This is required for the condor LRM but ignored for all others. **-condor-os 'OS'**:: Set the operating system specification for condor jobs to be 'OS' in job classified ads generated by the GRAM5 codnor LRM script. This is required for the condor LRM but ignored for all others. == Environment == If the following variables affect the execution of **globus-job-manager** **HOME**:: User's home directory. **LOGNAME**:: User's name. **JOBMANAGER_SYSLOG_ID**:: String to prepend to syslog audit messages. **JOBMANAGER_SYSLOG_FAC**:: Facility to log syslog audit messages as. **JOBMANAGER_SYSLOG_LVL**:: Priority level to use for syslog audit messages. **GATEKEEPER_JM_ID**:: Job manager ID to be used in syslog audit records. **GATEKEEPER_PEER**:: Peer information to be used in syslog audit records **GLOBUS_ID**:: Credential information to be used in syslog audit records **GLOBUS_JOB_MANAGER_SLEEP**:: Time (in seconds) to sleep when the job manager is started. [For debugging purposes only] **GRID_SECURITY_HTTP_BODY_FD**:: File descriptor of an open file which contains the initial job request and to which the initial job reply should be sent. This file descriptor is inherited from the **globus-gatekeeper**. **X509_USER_PROXY**:: Path to the X.509 user proxy which was delegated by the client to the **globus-gatekeeper** program to be used by the job manager. **GRID_SECURITY_CONTEXT_FD**:: File descriptor containing an exported security context that the job manager should use to reply to the client which submitted the job. **GLOBUS_TCP_PORT_RANGE**:: Default range of allowed TCP ports to listen on. The '-globus-tcp-port-range' command-line option overrides this. **GLOBUS_TCP_SOURCE_RANGE**:: Default range of allowed TCP ports to bind to. The '-globus-tcp-source-range' command-line option overrides this. == Files == **$HOME/.globus/job/HOSTNAME/LRM.TAG.red**:: Job manager delegated user credential. **$HOME/.globus/job/HOSTNAME/LRM.TAG.lock**:: Job manager state lock file. **$HOME/.globus/job/HOSTNAME/LRM.TAG.pid**:: Job manager pid file. **$HOME/.globus/job/HOSTNAME/LRM.TAG.sock**:: Job manager socket for inter-job manager communications. **$HOME/.globus/job/HOSTNAME/JOB_ID/**:: Job-specific state directory. **$HOME/.globus/job/HOSTNAME/JOB_ID/stdin**:: Standard input which has been staged from a remote URL. **$HOME/.globus/job/HOSTNAME/JOB_ID/stdout**:: Standard output which will be staged from a remote URL. **$HOME/.globus/job/HOSTNAME/JOB_ID/stderr**:: Standard error which will be staged from a remote URL. **$HOME/.globus/job/HOSTNAME/JOB_ID/x509_user_proxy**:: Job-specific delegated credential. **$GLOBUS_LOCATION/tmp/gram_job_state/job.HOSTNAME.JOB_ID**:: Job state file. **$GLOBUS_LOCATION/tmp/gram_job_state/job.HOSTNAME.JOB_ID.lock**:: Job state lock file. In most cases this will be a symlink to the job manager lock file. **$GLOBUS_LOCATION/etc/globus-job-manager.conf**:: Default location of the global job manager configuration file. **$GLOBUS_LOCATION/etc/grid-services/jobmanager-LRM**:: Default location of the LRM-specific gatekeeper configuration file. **$GLOBUS_LOCATION/etc/globus/gram/job--manager.rvf**:: Default location of the site-specific job manager RSL validation file. **$GLOBUS_LOCATION/etc/globus/gram/lrm.rvf**:: Default location of the site-specific job manager RSL validation file for the named lrm. SEE ALSO -------- globusrun(1), globus-gatekeeper(8), globus-personal-gatekeeper(1), globus-gram-audit(8) AUTHOR ------ Copyright (C) 1999-2016 University of Chicago globus_gram_job_manager-15.8/PaxHeaders.31186/rsl.txt0000644000000000000000000000013214243161125020633 xustar000000000000000030 mtime=1653400149.361970091 30 atime=1653400149.360970101 30 ctime=1653404021.283746622 globus_gram_job_manager-15.8/rsl.txt0000664000175000017500000002404214243161125020776 0ustar00johndoejohndoe00000000000000RSL(5) ====== :doctype: manpage :man source: Grid Community Toolkit :man version: 6 :man manual: Grid Community Toolkit Manual :man software: Grid Community Toolkit NAME ---- rsl - GRAM5 RSL Attributes DESCRIPTION ----------- *arguments*:: The command line arguments for the executable. Use quotes, if a space is required in a single argument. *count*:: The number of executions of the executable. [Default: 1] *directory*:: Specifies the path of the directory the jobmanager will use as the default directory for the requested job. [Default: $(HOME)] *dry_run*:: If dryrun = yes then the jobmanager will not submit the job for execution and will return success. [Default: no] *environment*:: The environment variables that will be defined for the executable in addition to default set that is given to the job by the jobmanager. *executable*:: The name of the executable file to run on the remote machine. If the value is a GASS URL, the file is transferred to the remote gass cache before executing the job and removed after the job has terminated. *expiration*:: Time (in seconds) after a a job fails to receive a two-phase commit end signal before it is cleaned up. [Default: 14400] *file_clean_up*:: Specifies a list of files which will be removed after the job is completed. *file_stage_in*:: Specifies a list of ("remote URL" "local file") pairs which indicate files to be staged to the nodes which will run the job. *file_stage_in_shared*:: Specifies a list of ("remote URL" "local file") pairs which indicate files to be staged into the cache. A symlink from the cache to the "local file" path will be made. *file_stage_out*:: Specifies a list of ("local file" "remote URL") pairs which indicate files to be staged from the job to a GASS-compatible file server. *gass_cache*:: Specifies location to override the GASS cache location. *gram_my_job*:: Obsolete and ignored. [Default: collective] *host_count*:: Only applies to clusters of SMP computers, such as newer IBM SP systems. Defines the number of nodes ("pizza boxes") to distribute the "count" processes across. *job_type*:: This specifies how the jobmanager should start the job. Possible values are single (even if the count > 1, only start 1 process or thread), multiple (start count processes or threads), mpi (use the appropriate method (e.g. mpirun) to start a program compiled with a vendor-provided MPI library. Program is started with count nodes), and condor (starts condor jobs in the "condor" universe.) [Default: multiple] *library_path*:: Specifies a list of paths to be appended to the system-specific library path environment variables. [Default: $(GLOBUS_LOCATION)/lib] *loglevel*:: Override the default log level for this job. The value of this attribute consists of a combination of the strings FATAL, ERROR, WARN, INFO, DEBUG, TRACE joined by the | character *logpattern*:: Override the default log path pattern for this job. The value of this attribute is a string (potentially containing RSL substitutions) that is evaluated to the path to write the log to. If the resulting string contains the string $(DATE) (or any other RSL substitution), it will be reevaluated at log time. *max_cpu_time*:: Explicitly set the maximum cputime for a single execution of the executable. The units is in minutes. The value will go through an atoi() conversion in order to get an integer. If the GRAM scheduler cannot set cputime, then an error will be returned. *max_memory*:: Explicitly set the maximum amount of memory for a single execution of the executable. The units is in Megabytes. The value will go through an atoi() conversion in order to get an integer. If the GRAM scheduler cannot set maxMemory, then an error will be returned. *max_time*:: The maximum walltime or cputime for a single execution of the executable. Walltime or cputime is selected by the GRAM scheduler being interfaced. The units is in minutes. The value will go through an atoi() conversion in order to get an integer. *max_wall_time*:: Explicitly set the maximum walltime for a single execution of the executable. The units is in minutes. The value will go through an atoi() conversion in order to get an integer. If the GRAM scheduler cannot set walltime, then an error will be returned. *min_memory*:: Explicitly set the minimum amount of memory for a single execution of the executable. The units is in Megabytes. The value will go through an atoi() conversion in order to get an integer. If the GRAM scheduler cannot set minMemory, then an error will be returned. *project*:: Target the job to be allocated to a project account as defined by the scheduler at the defined (remote) resource. *proxy_timeout*:: Obsolete and ignored. Now a job-manager-wide setting. *queue*:: Target the job to a queue (class) name as defined by the scheduler at the defined (remote) resource. *remote_io_url*:: Writes the given value (a URL base string) to a file, and adds the path to that file to the environment through the GLOBUS_REMOTE_IO_URL environment variable. If this is specified as part of a job restart RSL, the job manager will update the file's contents. This is intended for jobs that want to access files via GASS, but the URL of the GASS server has changed due to a GASS server restart. *restart*:: Start a new job manager, but instead of submitting a new job, start managing an existing job. The job manager will search for the job state file created by the original job manager. If it finds the file and successfully reads it, it will become the new manager of the job, sending callbacks on status and streaming stdout/err if appropriate. It will fail if it detects that the old jobmanager is still alive (via a timestamp in the state file). If stdout or stderr was being streamed over the network, new stdout and stderr attributes can be specified in the restart RSL and the jobmanager will stream to the new locations (useful when output is going to a GASS server started by the client that's listening on a dynamic port, and the client was restarted). The new job manager will return a new contact string that should be used to communicate with it. If a jobmanager is restarted multiple times, any of the previous contact strings can be given for the restart attribute. *rsl_substitution*:: Specifies a list of values which can be substituted into other rsl attributes' values through the $(SUBSTITUTION) mechanism. *save_state*:: Causes the jobmanager to save it's job state information to a persistent file on disk. If the job manager exits or is suspended, the client can later start up a new job manager which can continue monitoring the job. *savejobdescription*:: Save a copy of the job description to $HOME [Default: no] *scratch_dir*:: Specifies the location to create a scratch subdirectory in. A SCRATCH_DIRECTORY RSL substitution will be filled with the name of the directory which is created. *stderr*:: The name of the remote file to store the standard error from the job. If the value is a GASS URL, the standard error from the job is transferred dynamically during the execution of the job. There are two accepted forms of this value. It can consist of a single destination: stderr = URL, or a sequence of destinations: stderr = (DESTINATION) (DESTINATION). In the latter case, the DESTINATION may itself be a URL or a sequence of an x-gass-cache URL followed by a cache tag. [Default: /dev/null] *stderr_position*:: Specifies where in the file remote standard error streaming should be restarted from. Must be 0. *stdin*:: The name of the file to be used as standard input for the executable on the remote machine. If the value is a GASS URL, the file is transferred to the remote gass cache before executing the job and removed after the job has terminated. [Default: /dev/null] *stdout*:: The name of the remote file to store the standard output from the job. If the value is a GASS URL, the standard output from the job is transferred dynamically during the execution of the job. There are two accepted forms of this value. It can consist of a single destination: stdout = URL, or a sequence of destinations: stdout = (DESTINATION) (DESTINATION). In the latter case, the DESTINATION may itself be a URL or a sequence of an x-gass-cache URL followed by a cache tag. [Default: /dev/null] *stdout_position*:: Specifies where in the file remote output streaming should be restarted from. Must be 0. *two_phase*:: Use a two-phase commit for job submission and completion. The job manager will respond to the initial job request with a WAITING_FOR_COMMIT error. It will then wait for a signal from the client before doing the actual job submission. The integer supplied is the number of seconds the job manager should wait before timing out. If the job manager times out before receiving the commit signal, or if a client issues a cancel signal, the job manager will clean up the job's files and exit, sending a callback with the job status as GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED. After the job manager sends a DONE or FAILED callback, it will wait for a commit signal from the client. If it receives one, it cleans up and exits as usual. If it times out and save_state was enabled, it will leave all of the job's files in place and exit (assuming the client is down and will attempt a job restart later). The timeoutvalue can be extended via a signal. When one of the following errors occurs, the job manager does not delete the job state file when it exits: GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT, GLOBUS_GRAM_PROTOCOL_ERROR_TTL_EXPIRED, GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED, GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_EXPIRED. In these cases, it can not be restarted, so the job manager will not wait for the commit signal after sending the FAILED callback *username*:: Verify that the job is running as this user. AUTHOR ------ Copyright (C) 1999-2016 University of Chicago globus_gram_job_manager-15.8/PaxHeaders.31186/globus-personal-gatekeeper.10000644000000000000000000000013214243161125024602 xustar000000000000000030 mtime=1653400149.354970162 30 atime=1653400149.354970162 30 ctime=1653404021.286746593 globus_gram_job_manager-15.8/globus-personal-gatekeeper.10000664000175000017500000001577214243161125024757 0ustar00johndoejohndoe00000000000000'\" t .\" Title: globus-personal-gatekeeper .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 03/31/2018 .\" Manual: Grid Community Toolkit Manual .\" Source: Grid Community Toolkit 6 .\" Language: English .\" .TH "GLOBUS\-PERSONAL\-GA" "1" "03/31/2018" "Grid Community Toolkit 6" "Grid Community Toolkit Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" globus-personal-gatekeeper \- Manage a user\*(Aqs personal gatekeeper daemon .SH "SYNOPSIS" .sp \fBglobus\-personal\-gatekeeper\fR [\-help ] [\-usage ] [\-version ] [\-versions ] [\-list ] [\-directory \fICONTACT\fR] .SH "DESCRIPTION" .sp The \fBglobus\-personal\-gatekeeper\fR command is a utility which manages a gatekeeper and job manager service for a single user\&. Depending on the command\-line arguments it will operate in one of several modes\&. In the first set of arguments indicated in the synopsis, the program provides information about the \fBglobus\-personal\-gatekeeper\fR command or about instances of the \fBglobus\-personal\-gatekeeper\fR that are running currently\&. The second set of arguments indicated in the synopsis provide control over starting a new \fBglobus\-personal\-gatekeeper\fR instance\&. The final set of arguments provide control for terminating one or more \fBglobus\-personal\-gatekeeper\fR instances\&. .sp The \fI\-start\fR mode will create a new subdirectory of $HOME/\&.globus and write the configuration files needed to start a and write the configuration files needed to start a \fBglobus\-gatekeeper\fR daemon which will invoke the \fBglobus\-job\-manager\fR service when new authenticated connections are made to its service port\&. The \fBglobus\-personal\-gatekeeper\fR then exits, printing the contact string for the new gatekeeper prefixed by GRAM contact: to standard output\&. In addition to the arguments described above, any arguments described in \fBglobus\-job\-manager(8)\fR can be appended to the command\-line and will be added to the job manager configuration for the service started by the \fBglobus\-gatekeeper\fR\&. .sp The new \fBglobus\-gatekeeper\fR will continue to run in the background until killed by invoking \fBglobus\-personal\-gatekeeper\fR with the \fI\-kill\fR or \fI\-killall\fR argument\&. When killed, it will kill the \fBglobus\-gatekeeper\fR and \fBglobus\-job\-manager\fR processes, remove state files and configuration data, and then exit\&. Jobs which are running when the personal gatekeeper is killed will continue to run, but their job directory will be destroyed so they may fail in the LRM\&. .sp The full set of command\-line options to \fBglobus\-personal\-gatekeeper\fR consists of: .PP \fB\-help, \-usage\fR .RS 4 Print command\-line option summary and exit .RE .PP \fB\-version\fR .RS 4 Print software version .RE .PP \fB\-versions\fR .RS 4 Print software version including DiRT information .RE .PP \fB\-list\fR .RS 4 Print a list of all currently running personal gatekeepers\&. These entries will be printed one per line\&. .RE .PP \fB\-directory \fR\fB\fICONTACT\fR\fR .RS 4 Print the configuration directory for the personal gatekeeper with the contact string \fICONTACT\fR\&. .RE .PP \fB\-debug\fR .RS 4 Print additional debugging information when starting a personal gatekeeper\&. This option is ignored in other modes\&. .RE .PP \fB\-start\fR .RS 4 Start a new personal gatekeeper process\&. .RE .PP \fB\-jmtype \fR\fB\fILRM\fR\fR .RS 4 Use \fILRM\fR as the local resource manager interface\&. If not provided when starting a personal gatekeeper, the job manager will use the default fork LRM\&. .RE .PP \fB\-auditdir \fR\fB\fIAUDIT_DIRECTORY\fR\fR .RS 4 Write audit report files to \fIAUDIT_DIRECTORY\fR\&. If not provided, the job manager will not write any audit files\&. .RE .PP \fB\-port \fR\fB\fIPORT\fR\fR .RS 4 Listen for gatekeeper TCP/IP connections on the port \fIPORT\fR\&. If not provided, the gatekeeper will let the operating system choose\&. .RE .PP \fB\-log[=\fR\fB\fIDIRECTORY\fR\fR\fB]\fR .RS 4 Write job manager log files to \fIDIRECTORY\fR\&. If \fIDIRECTORY\fR is omitted, the default of $HOME will be used\&. If this option is not present, the job manager will not write any log files\&. will be used\&. If this option is not present, the job manager will not write any log files\&. .RE .PP \fB\-seg\fR .RS 4 Try to use the SEG mechanism to receive job state change information, instead of polling for these\&. These require either the system administrator or the user to run an instance of the \fBglobus\-job\-manager\-event\-generator\fR program for the LRM specified by the \fI\-jmtype\fR option\&. .RE .PP \fB\-acctfile \fR\fB\fIACCOUNTING_FILE\fR\fR .RS 4 Write gatekeeper accounting entries to \fIACCOUNTING_FILE\fR\&. If not provided, no accounting records are written\&. .RE .SH "EXAMPLES" .sp This example shows the output when starting a new personal gatekeeper which will schedule jobs via the lsf LRM, with debugging enabled\&. .sp .if n \{\ .RS 4 .\} .nf % globus\-personal\-gatekeeper \-start \-jmtype lsf .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf verifying setup\&.\&.\&. done\&. GRAM contact: personal\-grid\&.example\&.org:57846:/DC=org/DC=example/CN=Joe User .fi .if n \{\ .RE .\} .sp This example shows the output when listing the current active personal gatekeepers\&. .sp .if n \{\ .RS 4 .\} .nf % globus\-personal\-gatekeeper \-list personal\-grid\&.example\&.org:57846:/DC=org/DC=example/CN=Joe User .fi .if n \{\ .RE .\} .sp This example shows the output when querying the configuration directory for the above personal gatekeeper\&. gatekeepers\&. .sp .if n \{\ .RS 4 .\} .nf % globus\-personal\-gatekeeper \-directory "personal\-grid\&.example\&.org:57846:/DC=org/DC=example/CN=Joe User" /home/juser/\&.globus/\&.personal\-gatekeeper\&.personal\-grid\&.example\&.org\&.1337 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf % globus\-personal\-gatekeeper \-kill "personal\-grid\&.example\&.org:57846:/DC=org/DC=example/CN=Joe User" killing gatekeeper: "personal\-grid\&.example\&.org:57846:/DC=org/DC=example/CN=Joe User" .fi .if n \{\ .RE .\} .SH "SEE ALSO" .sp globusrun(1), globus\-job\-manager(8), globus\-gatekeeper(8) .SH "AUTHOR" .sp Copyright \(co 1999\-2016 University of Chicago globus_gram_job_manager-15.8/PaxHeaders.31186/rsl.50000644000000000000000000000013214243161125020160 xustar000000000000000030 mtime=1653400149.360970101 30 atime=1653400149.360970101 30 ctime=1653404021.288746574 globus_gram_job_manager-15.8/rsl.50000664000175000017500000002734114243161125020330 0ustar00johndoejohndoe00000000000000'\" t .\" Title: rsl .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 03/31/2018 .\" Manual: Grid Community Toolkit Manual .\" Source: Grid Community Toolkit 6 .\" Language: English .\" .TH "RSL" "5" "03/31/2018" "Grid Community Toolkit 6" "Grid Community Toolkit Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" rsl \- GRAM5 RSL Attributes .SH "DESCRIPTION" .PP \fBarguments\fR .RS 4 The command line arguments for the executable\&. Use quotes, if a space is required in a single argument\&. .RE .PP \fBcount\fR .RS 4 The number of executions of the executable\&. [Default: 1] .RE .PP \fBdirectory\fR .RS 4 Specifies the path of the directory the jobmanager will use as the default directory for the requested job\&. [Default: $(HOME)] .RE .PP \fBdry_run\fR .RS 4 If dryrun = yes then the jobmanager will not submit the job for execution and will return success\&. [Default: no] .RE .PP \fBenvironment\fR .RS 4 The environment variables that will be defined for the executable in addition to default set that is given to the job by the jobmanager\&. .RE .PP \fBexecutable\fR .RS 4 The name of the executable file to run on the remote machine\&. If the value is a GASS URL, the file is transferred to the remote gass cache before executing the job and removed after the job has terminated\&. .RE .PP \fBexpiration\fR .RS 4 Time (in seconds) after a a job fails to receive a two\-phase commit end signal before it is cleaned up\&. [Default: 14400] .RE .PP \fBfile_clean_up\fR .RS 4 Specifies a list of files which will be removed after the job is completed\&. .RE .PP \fBfile_stage_in\fR .RS 4 Specifies a list of ("remote URL" "local file") pairs which indicate files to be staged to the nodes which will run the job\&. .RE .PP \fBfile_stage_in_shared\fR .RS 4 Specifies a list of ("remote URL" "local file") pairs which indicate files to be staged into the cache\&. A symlink from the cache to the "local file" path will be made\&. .RE .PP \fBfile_stage_out\fR .RS 4 Specifies a list of ("local file" "remote URL") pairs which indicate files to be staged from the job to a GASS\-compatible file server\&. .RE .PP \fBgass_cache\fR .RS 4 Specifies location to override the GASS cache location\&. .RE .PP \fBgram_my_job\fR .RS 4 Obsolete and ignored\&. [Default: collective] .RE .PP \fBhost_count\fR .RS 4 Only applies to clusters of SMP computers, such as newer IBM SP systems\&. Defines the number of nodes ("pizza boxes") to distribute the "count" processes across\&. .RE .PP \fBjob_type\fR .RS 4 This specifies how the jobmanager should start the job\&. Possible values are single (even if the count > 1, only start 1 process or thread), multiple (start count processes or threads), mpi (use the appropriate method (e\&.g\&. mpirun) to start a program compiled with a vendor\-provided MPI library\&. Program is started with count nodes), and condor (starts condor jobs in the "condor" universe\&.) [Default: multiple] .RE .PP \fBlibrary_path\fR .RS 4 Specifies a list of paths to be appended to the system\-specific library path environment variables\&. [Default: $(GLOBUS_LOCATION)/lib] .RE .PP \fBloglevel\fR .RS 4 Override the default log level for this job\&. The value of this attribute consists of a combination of the strings FATAL, ERROR, WARN, INFO, DEBUG, TRACE joined by the | character .RE .PP \fBlogpattern\fR .RS 4 Override the default log path pattern for this job\&. The value of this attribute is a string (potentially containing RSL substitutions) that is evaluated to the path to write the log to\&. If the resulting string contains the string $(DATE) (or any other RSL substitution), it will be reevaluated at log time\&. .RE .PP \fBmax_cpu_time\fR .RS 4 Explicitly set the maximum cputime for a single execution of the executable\&. The units is in minutes\&. The value will go through an atoi() conversion in order to get an integer\&. If the GRAM scheduler cannot set cputime, then an error will be returned\&. .RE .PP \fBmax_memory\fR .RS 4 Explicitly set the maximum amount of memory for a single execution of the executable\&. The units is in Megabytes\&. The value will go through an atoi() conversion in order to get an integer\&. If the GRAM scheduler cannot set maxMemory, then an error will be returned\&. .RE .PP \fBmax_time\fR .RS 4 The maximum walltime or cputime for a single execution of the executable\&. Walltime or cputime is selected by the GRAM scheduler being interfaced\&. The units is in minutes\&. The value will go through an atoi() conversion in order to get an integer\&. .RE .PP \fBmax_wall_time\fR .RS 4 Explicitly set the maximum walltime for a single execution of the executable\&. The units is in minutes\&. The value will go through an atoi() conversion in order to get an integer\&. If the GRAM scheduler cannot set walltime, then an error will be returned\&. .RE .PP \fBmin_memory\fR .RS 4 Explicitly set the minimum amount of memory for a single execution of the executable\&. The units is in Megabytes\&. The value will go through an atoi() conversion in order to get an integer\&. If the GRAM scheduler cannot set minMemory, then an error will be returned\&. .RE .PP \fBproject\fR .RS 4 Target the job to be allocated to a project account as defined by the scheduler at the defined (remote) resource\&. .RE .PP \fBproxy_timeout\fR .RS 4 Obsolete and ignored\&. Now a job\-manager\-wide setting\&. .RE .PP \fBqueue\fR .RS 4 Target the job to a queue (class) name as defined by the scheduler at the defined (remote) resource\&. .RE .PP \fBremote_io_url\fR .RS 4 Writes the given value (a URL base string) to a file, and adds the path to that file to the environment through the GLOBUS_REMOTE_IO_URL environment variable\&. If this is specified as part of a job restart RSL, the job manager will update the file\(cqs contents\&. This is intended for jobs that want to access files via GASS, but the URL of the GASS server has changed due to a GASS server restart\&. .RE .PP \fBrestart\fR .RS 4 Start a new job manager, but instead of submitting a new job, start managing an existing job\&. The job manager will search for the job state file created by the original job manager\&. If it finds the file and successfully reads it, it will become the new manager of the job, sending callbacks on status and streaming stdout/err if appropriate\&. It will fail if it detects that the old jobmanager is still alive (via a timestamp in the state file)\&. If stdout or stderr was being streamed over the network, new stdout and stderr attributes can be specified in the restart RSL and the jobmanager will stream to the new locations (useful when output is going to a GASS server started by the client that\(cqs listening on a dynamic port, and the client was restarted)\&. The new job manager will return a new contact string that should be used to communicate with it\&. If a jobmanager is restarted multiple times, any of the previous contact strings can be given for the restart attribute\&. .RE .PP \fBrsl_substitution\fR .RS 4 Specifies a list of values which can be substituted into other rsl attributes\*(Aq values through the $(SUBSTITUTION) mechanism\&. .RE .PP \fBsave_state\fR .RS 4 Causes the jobmanager to save it\(cqs job state information to a persistent file on disk\&. If the job manager exits or is suspended, the client can later start up a new job manager which can continue monitoring the job\&. .RE .PP \fBsavejobdescription\fR .RS 4 Save a copy of the job description to $HOME [Default: no] .RE .PP \fBscratch_dir\fR .RS 4 Specifies the location to create a scratch subdirectory in\&. A SCRATCH_DIRECTORY RSL substitution will be filled with the name of the directory which is created\&. .RE .PP \fBstderr\fR .RS 4 The name of the remote file to store the standard error from the job\&. If the value is a GASS URL, the standard error from the job is transferred dynamically during the execution of the job\&. There are two accepted forms of this value\&. It can consist of a single destination: stderr = URL, or a sequence of destinations: stderr = (DESTINATION) (DESTINATION)\&. In the latter case, the DESTINATION may itself be a URL or a sequence of an x\-gass\-cache URL followed by a cache tag\&. [Default: /dev/null] .RE .PP \fBstderr_position\fR .RS 4 Specifies where in the file remote standard error streaming should be restarted from\&. Must be 0\&. .RE .PP \fBstdin\fR .RS 4 The name of the file to be used as standard input for the executable on the remote machine\&. If the value is a GASS URL, the file is transferred to the remote gass cache before executing the job and removed after the job has terminated\&. [Default: /dev/null] .RE .PP \fBstdout\fR .RS 4 The name of the remote file to store the standard output from the job\&. If the value is a GASS URL, the standard output from the job is transferred dynamically during the execution of the job\&. There are two accepted forms of this value\&. It can consist of a single destination: stdout = URL, or a sequence of destinations: stdout = (DESTINATION) (DESTINATION)\&. In the latter case, the DESTINATION may itself be a URL or a sequence of an x\-gass\-cache URL followed by a cache tag\&. [Default: /dev/null] .RE .PP \fBstdout_position\fR .RS 4 Specifies where in the file remote output streaming should be restarted from\&. Must be 0\&. .RE .PP \fBtwo_phase\fR .RS 4 Use a two\-phase commit for job submission and completion\&. The job manager will respond to the initial job request with a WAITING_FOR_COMMIT error\&. It will then wait for a signal from the client before doing the actual job submission\&. The integer supplied is the number of seconds the job manager should wait before timing out\&. If the job manager times out before receiving the commit signal, or if a client issues a cancel signal, the job manager will clean up the job\(cqs files and exit, sending a callback with the job status as GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED\&. After the job manager sends a DONE or FAILED callback, it will wait for a commit signal from the client\&. If it receives one, it cleans up and exits as usual\&. If it times out and save_state was enabled, it will leave all of the job\(cqs files in place and exit (assuming the client is down and will attempt a job restart later)\&. The timeoutvalue can be extended via a signal\&. When one of the following errors occurs, the job manager does not delete the job state file when it exits: GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT, GLOBUS_GRAM_PROTOCOL_ERROR_TTL_EXPIRED, GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED, GLOBUS_GRAM_PROTOCOL_ERROR_USER_PROXY_EXPIRED\&. In these cases, it can not be restarted, so the job manager will not wait for the commit signal after sending the FAILED callback .RE .PP \fBusername\fR .RS 4 Verify that the job is running as this user\&. .RE .SH "AUTHOR" .sp Copyright \(co 1999\-2016 University of Chicago globus_gram_job_manager-15.8/PaxHeaders.31186/globus-job-manager.80000644000000000000000000000013214243161125023036 xustar000000000000000030 mtime=1653400149.353970172 30 atime=1653400149.353970172 30 ctime=1653404021.291746545 globus_gram_job_manager-15.8/globus-job-manager.80000664000175000017500000003665014243161125023211 0ustar00johndoejohndoe00000000000000'\" t .\" Title: globus-job-manager .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 12/06/2018 .\" Manual: Grid Community Toolkit Manual .\" Source: Grid Community Toolkit 6 .\" Language: English .\" .TH "GLOBUS\-JOB\-MANAGER" "8" "12/06/2018" "Grid Community Toolkit 6" "Grid Community Toolkit Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" globus-job-manager \- Execute and monitor jobs .SH "SYNOPSIS" .sp \fBglobus\-job\-manager\fR \-type \fILRM\fR [\-conf \fICONFIG_PATH\fR] [\-help] [\-globus\-host\-manufacturer \fIMANUFACTURER\fR] [\-globus\-host\-cputype \fICPUTYPE\fR] [\-globus\-host\-osname \fIOSNAME\fR] [\-globus\-host\-osversion \fIOSVERSION\fR] [\-globus\-gatekeeper\-host \fIHOST\fR] [\-globus\-gatekeeper\-port \fIPORT\fR] [\-globus\-gatekeeper\-subject \fISUBJECT\fR] [\-home \fIGLOBUS_LOCATION\fR] [\-target\-globus\-location \fITARGET_GLOBUS_LOCATION\fR] [\-condor\-arch \fIARCH\fR] [\-condor\-os \fIOS\fR] [\-history \fIHISTORY_DIRECTORY\fR] [\-scratch\-dir\-base \fISCRATCH_DIRECTORY\fR] [\-enable\-syslog] [\-stdio\-log \fILOG_DIRECTORY\fR] [\-log\-pattern \fIPATTERN\fR] [\-log\-levels \fILEVELS\fR] [\-state\-file\-dir \fISTATE_DIRECTORY\fR] [\-globus\-tcp\-port\-range \fIPORT_RANGE\fR] [\-globus\-tcp\-source\-range \fISOURCE_RANGE\fR] [\-x509\-cert\-dir \fITRUSTED_CERTIFICATE_DIRECTORY\fR] [\-cache\-location \fIGASS_CACHE_DIRECTORY\fR] [\-k] [\-extra\-envvars \fIVAR=VAL,\&...\fR] [\-seg\-module \fISEG_MODULE\fR] [\-audit\-directory \fIAUDIT_DIRECTORY\fR] [\-globus\-toolkit\-version \fITOOLKIT_VERSION\fR] [\-disable\-streaming] [\-service\-tag \fISERVICE_TAG\fR] .SH "DESCRIPTION" .sp The \fBglobus\-job\-manager\fR program is a servivce which starts and controls GRAM jobs which are executed by a local resource management system, such as LSF or Condor\&. The \fBglobus\-job\-manager\fR program is typically started by the \fBglobus\-gatekeeper\fR program and not directly by a user\&. It runs until all jobs it is managing have terminated or its delegated credentials have expired\&. .sp Typically, users interact with the \fBglobus\-job\-manager\fR program via client applications such as \fBglobusrun\fR, \fBglobus\-job\-submit\fR, or tools such as CoG jglobus or Condor\-G\&. .sp The full set of command\-line options to \fBglobus\-job\-manager\fR consists of: .PP \fB\-help\fR .RS 4 Display a help message to standard error and exit .RE .PP \fB\-type \fR\fB\fILRM\fR\fR .RS 4 Execute jobs using the local resource manager named \fILRM\fR\&. .RE .PP \fB\-conf \fR\fB\fICONFIG_PATH\fR\fR .RS 4 Read additional command\-line arguments from the file \fICONFIG_PATH\fR\&. If present, this must be the first command\-line argument to the \fBglobus\-job\-manager\fR program\&. .RE .PP \fB\-globus\-host\-manufacturer \fR\fB\fIMANUFACTURER\fR\fR .RS 4 Indicate the manufacturer of the system which the jobs will execute on\&. This parameter sets the value of the $(GLOBUS_HOST_MANUFACTURER) RSL substitution to \fIMANUFACTURER\fR .RE .PP \fB\-globus\-host\-cputype \fR\fB\fICPUTYPE\fR\fR .RS 4 Indicate the CPU type of the system which the jobs will execute on\&. This parameter sets the value of the $(GLOBUS_HOST_CPUTYPE) RSL substitution to \fICPUTYPE\fR .RE .PP \fB\-globus\-host\-osname \fR\fB\fIOSNAME\fR\fR .RS 4 Indicate the operating system type of the system which the jobs will execute on\&. This parameter sets the value of the $(GLOBUS_HOST_OSNAME) RSL substitution to \fIOSNAME\fR .RE .PP \fB\-globus\-host\-osversion \fR\fB\fIOSVERSION\fR\fR .RS 4 Indicate the operating system version of the system which the jobs will execute on\&. This parameter sets the value of the $(GLOBUS_HOST_OSVERSION) RSL substitution to \fIOSVERSION\fR .RE .PP \fB\-globus\-gatekeeper\-host \fR\fB\fIHOST\fR\fR .RS 4 Indicate the host name of the machine which the job was submitted to\&. This parameter sets the value of the $(GLOBUS_GATEKEEPER_HOST) RSL substitution to \fIHOST\fR .RE .PP \fB\-globus\-gatekeeper\-port \fR\fB\fIPORT\fR\fR .RS 4 Indicate the TCP port number of gatekeeper to which jobs are submitted to\&. This parameter sets the value of the $(GLOBUS_GATEKEEPER_PORT) RSL substitution to \fIPORT\fR .RE .PP \fB\-globus\-gatekeeper\-subject \fR\fB\fISUBJECT\fR\fR .RS 4 Indicate the X\&.509 identity of the gatekeeper to which jobs are submitted to\&. This parameter sets the value of the $(GLOBUS_GATEKEEPER_SUBJECT) RSL substitution to \fISUBJECT\fR .RE .PP \fB\-home \fR\fB\fIGLOBUS_LOCATION\fR\fR .RS 4 Indicate the path where the Grid Community Toolkit(r) is installed on the service node\&. This is used by the job manager to locate its support and configuration files\&. .RE .PP \fB\-target\-globus\-location \fR\fB\fITARGET_GLOBUS_LOCATION\fR\fR .RS 4 Indicate the path where the Grid Community Toolkit(r) is installed on the execution host\&. If this is omitted, the value specified as a parameter to \fI\-home\fR is used\&. This parameter sets the value of the $(GLOBUS_LOCATION) RSL substitution to \fITARGET_GLOBUS_LOCATION\fR .RE .PP \fB\-history \fR\fB\fIHISTORY_DIRECTORY\fR\fR .RS 4 Configure the job manager to write job history files to \fIHISTORY_DIRECTORY\fR\&. These files are described in the FILES section below\&. .RE .PP \fB\-scratch\-dir\-base \fR\fB\fISCRATCH_DIRECTORY\fR\fR .RS 4 Configure the job manager to use \fISCRATCH_DIRECTORY\fR as the default scratch directory root if a relative path is specified in the job RSL\(cqs scratch_dir attribute\&. .RE .PP \fB\-enable\-syslog\fR .RS 4 Configure the job manager to write log messages via syslog\&. Logging is further controlled by the argument to the \fI\-log\-levels\fR parameter described below\&. .RE .PP \fB\-log\-pattern \fR\fB\fIPATTERN\fR\fR .RS 4 Configure the job manager to write log messages to files named by the string \fIPATTERN\fR\&. The \fIPATTERN\fR string may contain job\-independent RSL substitutions such as $(HOME), $(LOGNAME), etc, as well as the special RSL substition $(DATE) which will be resolved at log time to the date in YYYYMMDD form\&. .RE .PP \fB\-stdio\-log \fR\fB\fILOG_DIRECTORY\fR\fR .RS 4 Configure the job manager to write log messages to files in the \fILOG_DIRECTORY\fR directory\&. This is a backward\-compatible parameter, equivalent to \*(Aq\-log\-pattern \*(Aq\&. .RE .PP \fB\-log\-levels \fR\fB\fILEVELS\fR\fR .RS 4 Configure the job manager to write log messages of certain levels to syslog and/or log files\&. The available log levels are FATAL, ERROR, WARN, INFO, DEBUG, and TRACE\&. Multiple values can be combined with the | character\&. The default value of logging when enabled is FATAL|ERROR\&. .RE .PP \fB\-state\-file\-dir \fR\fB\fISTATE_DIRECTORY\fR\fR .RS 4 Configure the job manager to write state files to \fISTATE_DIRECTORY\fR\&. If not specified, the job manager uses the default of $GLOBUS_LOCATION/tmp/gram_job_state/\&. This directory must be writable by all users and be on a file system which supports POSIX advisory file locks\&. \&. This directory must be writable by all users and be on a file system which supports POSIX advisory file locks\&. .RE .PP \fB\-globus\-tcp\-port\-range \fR\fB\fIPORT_RANGE\fR\fR .RS 4 Configure the job manager to restrict its TCP/IP communication to use ports in the range described by \fIPORT_RANGE\fR\&. This value is also made available in the job environment via the GLOBUS_TCP_PORT_RANGE environment variable\&. .RE .PP \fB\-globus\-tcp\-source\-range \fR\fB\fISOURCE_RANGE\fR\fR .RS 4 Configure the job manager to restrict its TCP/IP communication to use source ports in the range described by \fISOURCE_RANGE\fR\&. This value is also made available in the job environment via the GLOBUS_TCP_SOURCE_RANGE environment variable\&. .RE .PP \fB\-x509\-cert\-dir \fR\fB\fITRUSTED_CERTIFICATE_DIRECTORY\fR\fR .RS 4 Configure the job manager to search \fITRUSTED_CERTIFICATE_DIRECTORY\fR for its list of trusted CA certificates and their signing policies\&. This value is also made available in the job environment via the X509_CERT_DIR environment variable\&. .RE .PP \fB\-cache\-location \fR\fB\fIGASS_CACHE_DIRECTORY\fR\fR .RS 4 Configure the job manager to use the path \fIGASS_CACHE_DIRECTORY\fR for its temporary GASS\-cache files\&. This value is also made available in the job environment via the GLOBUS_GASS_CACHE_DEFAULT environment variable\&. .RE .PP \fB\-k\fR .RS 4 Configure the job manager to assume it is using Kerberos for authentication instead of X\&.509 certificates\&. This disables some certificate\-specific processing in the job manager\&. .RE .PP \fB\-extra\-envvars \fR\fB\fIVAR=VAL,\&...\fR\fR .RS 4 Configure the job manager to define a set of environment variables in the job environment beyond those defined in the base job environment\&. The format of the parameter to this argument is a comma\-separated sequence of VAR=VAL pairs, where VAR is the variable name and VAL is the variable\(cqs value\&. If the value is not specified, then the value of the variable in the job manager\(cqs environment is used\&. This option may be present multiple times on the command\-line or the job manager configuration file to append multiple environment settings\&. .RE .PP \fB\-seg\-module \fR\fB\fISEG_MODULE\fR\fR .RS 4 Configure the job manager to use the schedule event generator module named by \fISEG_MODULE\fR to detect job state changes events from the local resource manager, in place of the less efficient polling operations used in GT2\&. To use this, one instance of the \fBglobus\-job\-manager\-event\-generator\fR must be running to process events for the LRM into a generic format that the job manager can parse\&. .RE .PP \fB\-audit\-directory \fR\fB\fIAUDIT_DIRECTORY\fR\fR .RS 4 Configure the job manager to write audit records to the directory named by \fIAUDIT_DIRECTORY\fR\&. This records can be loaded into a database using the \fBglobus\-gram\-audit\fR program\&. .RE .PP \fB\-globus\-toolkit\-version \fR\fB\fITOOLKIT_VERSION\fR\fR .RS 4 Configure the job manager to use \fITOOLKIT_VERSION\fR as the version for audit and usage stats records\&. .RE .PP \fB\-service\-tag \fR\fB\fISERVICE_TAG\fR\fR .RS 4 Configure the job manager to use \fISERVICE_TAG\fR as a unique identifier to allow multiple GRAM instances to use the same job state directories without interfering with each other\(cqs jobs\&. If not set, the value untagged will be used\&. .RE .PP \fB\-disable\-streaming\fR .RS 4 Configure the job manager to disable file streaming\&. This is propagated to the LRM script interface but has no effect in GRAM5\&. .RE .PP \fB\-condor\-arch \fR\fB\fIARCH\fR\fR .RS 4 Set the architecture specification for condor jobs to be \fIARCH\fR in job classified ads generated by the GRAM5 codnor LRM script\&. This is required for the condor LRM but ignored for all others\&. .RE .PP \fB\-condor\-os \fR\fB\fIOS\fR\fR .RS 4 Set the operating system specification for condor jobs to be \fIOS\fR in job classified ads generated by the GRAM5 codnor LRM script\&. This is required for the condor LRM but ignored for all others\&. .RE .SH "ENVIRONMENT" .sp If the following variables affect the execution of \fBglobus\-job\-manager\fR .PP \fBHOME\fR .RS 4 User\(cqs home directory\&. .RE .PP \fBLOGNAME\fR .RS 4 User\(cqs name\&. .RE .PP \fBJOBMANAGER_SYSLOG_ID\fR .RS 4 String to prepend to syslog audit messages\&. .RE .PP \fBJOBMANAGER_SYSLOG_FAC\fR .RS 4 Facility to log syslog audit messages as\&. .RE .PP \fBJOBMANAGER_SYSLOG_LVL\fR .RS 4 Priority level to use for syslog audit messages\&. .RE .PP \fBGATEKEEPER_JM_ID\fR .RS 4 Job manager ID to be used in syslog audit records\&. .RE .PP \fBGATEKEEPER_PEER\fR .RS 4 Peer information to be used in syslog audit records .RE .PP \fBGLOBUS_ID\fR .RS 4 Credential information to be used in syslog audit records .RE .PP \fBGLOBUS_JOB_MANAGER_SLEEP\fR .RS 4 Time (in seconds) to sleep when the job manager is started\&. [For debugging purposes only] .RE .PP \fBGRID_SECURITY_HTTP_BODY_FD\fR .RS 4 File descriptor of an open file which contains the initial job request and to which the initial job reply should be sent\&. This file descriptor is inherited from the \fBglobus\-gatekeeper\fR\&. .RE .PP \fBX509_USER_PROXY\fR .RS 4 Path to the X\&.509 user proxy which was delegated by the client to the \fBglobus\-gatekeeper\fR program to be used by the job manager\&. .RE .PP \fBGRID_SECURITY_CONTEXT_FD\fR .RS 4 File descriptor containing an exported security context that the job manager should use to reply to the client which submitted the job\&. .RE .PP \fBGLOBUS_TCP_PORT_RANGE\fR .RS 4 Default range of allowed TCP ports to listen on\&. The \fI\-globus\-tcp\-port\-range\fR command\-line option overrides this\&. .RE .PP \fBGLOBUS_TCP_SOURCE_RANGE\fR .RS 4 Default range of allowed TCP ports to bind to\&. The \fI\-globus\-tcp\-source\-range\fR command\-line option overrides this\&. .RE .SH "FILES" .PP \fB$HOME/\&.globus/job/HOSTNAME/LRM\&.TAG\&.red\fR .RS 4 Job manager delegated user credential\&. .RE .PP \fB$HOME/\&.globus/job/HOSTNAME/LRM\&.TAG\&.lock\fR .RS 4 Job manager state lock file\&. .RE .PP \fB$HOME/\&.globus/job/HOSTNAME/LRM\&.TAG\&.pid\fR .RS 4 Job manager pid file\&. .RE .PP \fB$HOME/\&.globus/job/HOSTNAME/LRM\&.TAG\&.sock\fR .RS 4 Job manager socket for inter\-job manager communications\&. .RE .PP \fB$HOME/\&.globus/job/HOSTNAME/JOB_ID/\fR .RS 4 Job\-specific state directory\&. .RE .PP \fB$HOME/\&.globus/job/HOSTNAME/JOB_ID/stdin\fR .RS 4 Standard input which has been staged from a remote URL\&. .RE .PP \fB$HOME/\&.globus/job/HOSTNAME/JOB_ID/stdout\fR .RS 4 Standard output which will be staged from a remote URL\&. .RE .PP \fB$HOME/\&.globus/job/HOSTNAME/JOB_ID/stderr\fR .RS 4 Standard error which will be staged from a remote URL\&. .RE .PP \fB$HOME/\&.globus/job/HOSTNAME/JOB_ID/x509_user_proxy\fR .RS 4 Job\-specific delegated credential\&. .RE .PP \fB$GLOBUS_LOCATION/tmp/gram_job_state/job\&.HOSTNAME\&.JOB_ID\fR .RS 4 Job state file\&. .RE .PP \fB$GLOBUS_LOCATION/tmp/gram_job_state/job\&.HOSTNAME\&.JOB_ID\&.lock\fR .RS 4 Job state lock file\&. In most cases this will be a symlink to the job manager lock file\&. .RE .PP \fB$GLOBUS_LOCATION/etc/globus\-job\-manager\&.conf\fR .RS 4 Default location of the global job manager configuration file\&. .RE .PP \fB$GLOBUS_LOCATION/etc/grid\-services/jobmanager\-LRM\fR .RS 4 Default location of the LRM\-specific gatekeeper configuration file\&. .RE .PP \fB$GLOBUS_LOCATION/etc/globus/gram/job\(emmanager\&.rvf\fR .RS 4 Default location of the site\-specific job manager RSL validation file\&. .RE .PP \fB$GLOBUS_LOCATION/etc/globus/gram/lrm\&.rvf\fR .RS 4 Default location of the site\-specific job manager RSL validation file for the named lrm\&. .RE .SH "SEE ALSO" .sp globusrun(1), globus\-gatekeeper(8), globus\-personal\-gatekeeper(1), globus\-gram\-audit(8) .SH "AUTHOR" .sp Copyright \(co 1999\-2016 University of Chicago globus_gram_job_manager-15.8/PaxHeaders.31186/GLOBUS_LICENSE0000644000000000000000000000013214243161125021352 xustar000000000000000030 mtime=1653400149.353970172 30 atime=1653400149.353970172 30 ctime=1653404021.295746507 globus_gram_job_manager-15.8/GLOBUS_LICENSE0000664000175000017500000002367614243161125021531 0ustar00johndoejohndoe00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS globus_gram_job_manager-15.8/PaxHeaders.31186/rvf0000644000000000000000000000013214243170565020022 xustar000000000000000030 mtime=1653404021.394745563 30 atime=1653404023.058729694 30 ctime=1653404021.394745563 globus_gram_job_manager-15.8/rvf/0000775000175000017500000000000014243170565020240 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453022141 xustar000000000000000030 mtime=1653400875.240640783 30 atime=1653401385.001596969 30 ctime=1653404021.342746059 globus_gram_job_manager-15.8/rvf/Makefile.in0000664000175000017500000007103714243162453022312 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ sbin_PROGRAMS = globus-rvf-check$(EXEEXT) subdir = rvf DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/globus-rvf-edit.in globus_i_rvf_scanner.c \ globus_i_rvf_parser.h globus_i_rvf_parser.c \ $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = globus-rvf-edit CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libglobus_rvf_la_LIBADD = am_libglobus_rvf_la_OBJECTS = globus_i_rvf_scanner.lo \ globus_i_rvf_parser.lo libglobus_rvf_la_OBJECTS = $(am_libglobus_rvf_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(sbindir)" \ "$(DESTDIR)$(man8dir)" PROGRAMS = $(sbin_PROGRAMS) am_globus_rvf_check_OBJECTS = globus_rvf_check.$(OBJEXT) globus_rvf_check_OBJECTS = $(am_globus_rvf_check_OBJECTS) am__DEPENDENCIES_1 = globus_rvf_check_DEPENDENCIES = libglobus_rvf.la $(am__DEPENDENCIES_1) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(sbin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) AM_V_LEX = $(am__v_LEX_@AM_V@) am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) am__v_LEX_0 = @echo " LEX " $@; am__v_LEX_1 = YLWRAP = $(top_srcdir)/build-aux/ylwrap am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = SOURCES = $(libglobus_rvf_la_SOURCES) $(globus_rvf_check_SOURCES) DIST_SOURCES = $(libglobus_rvf_la_SOURCES) $(globus_rvf_check_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libglobus_rvf.la sbin_SCRIPTS = globus-rvf-edit man_MANS = globus-rvf-edit.8 globus-rvf-check.8 AM_YFLAGS = -d BUILT_SOURCES = globus_i_rvf_parser.c globus_i_rvf_parser.h globus_i_rvf_scanner.c globus_i_rvf_scanner.h AM_CPPFLAGS = $(PACKAGE_DEP_CFLAGS) -DYY_NO_INPUT -I$(top_srcdir) libglobus_rvf_la_SOURCES = \ globus_i_rvf_scanner.l \ globus_i_rvf_parser.y \ globus_i_rvf.h \ globus_rvf_parser.h globus_rvf_check_SOURCES = globus_rvf_check.c globus_rvf_check_LDADD = \ libglobus_rvf.la $(PACKAGE_DEP_LIBS) EXTRA_DIST = $(man_MANS) \ globus-rvf-edit.txt \ globus-rvf-check.txt \ globus_i_rvf_scanner.c \ globus_i_rvf_scanner.h \ globus_i_rvf_parser.c \ globus_i_rvf_parser.h @BUILD_MANPAGES_TRUE@SUFFIXES = .txt .8 @BUILD_MANPAGES_TRUE@MAINTAINERCLEANFILES = $(man_MANS) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .txt .8 .c .l .lo .o .obj .y $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign rvf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign rvf/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): globus-rvf-edit: $(top_builddir)/config.status $(srcdir)/globus-rvf-edit.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } globus_i_rvf_parser.h: globus_i_rvf_parser.c @if test ! -f $@; then rm -f globus_i_rvf_parser.c; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) globus_i_rvf_parser.c; else :; fi libglobus_rvf.la: $(libglobus_rvf_la_OBJECTS) $(libglobus_rvf_la_DEPENDENCIES) $(EXTRA_libglobus_rvf_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libglobus_rvf_la_OBJECTS) $(libglobus_rvf_la_LIBADD) $(LIBS) install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sbindir)" && rm -f $$files clean-sbinPROGRAMS: @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list globus-rvf-check$(EXEEXT): $(globus_rvf_check_OBJECTS) $(globus_rvf_check_DEPENDENCIES) $(EXTRA_globus_rvf_check_DEPENDENCIES) @rm -f globus-rvf-check$(EXEEXT) $(AM_V_CCLD)$(LINK) $(globus_rvf_check_OBJECTS) $(globus_rvf_check_LDADD) $(LIBS) install-sbinSCRIPTS: $(sbin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(sbindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_i_rvf_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_i_rvf_scanner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globus_rvf_check.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .l.c: $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man8: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man8dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.8[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) installdirs: for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f globus_i_rvf_parser.c -rm -f globus_i_rvf_parser.h -rm -f globus_i_rvf_scanner.c -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-sbinPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-sbinPROGRAMS install-sbinSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-sbinPROGRAMS \ uninstall-sbinSCRIPTS uninstall-man: uninstall-man8 .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-sbinPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man8 \ install-pdf install-pdf-am install-ps install-ps-am \ install-sbinPROGRAMS install-sbinSCRIPTS install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-man \ uninstall-man8 uninstall-sbinPROGRAMS uninstall-sbinSCRIPTS @BUILD_MANPAGES_TRUE@.txt.8: @BUILD_MANPAGES_TRUE@ $(A2X) -d manpage -f manpage $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/Makefile.am0000644000000000000000000000013114243161125022122 xustar000000000000000030 mtime=1653400149.361970091 30 atime=1653400875.184641337 29 ctime=1653404021.34474604 globus_gram_job_manager-15.8/rvf/Makefile.am0000664000175000017500000000160214243161125022263 0ustar00johndoejohndoe00000000000000noinst_LTLIBRARIES = libglobus_rvf.la sbin_PROGRAMS = globus-rvf-check sbin_SCRIPTS = globus-rvf-edit man_MANS = globus-rvf-edit.8 globus-rvf-check.8 AM_YFLAGS = -d BUILT_SOURCES = globus_i_rvf_parser.c globus_i_rvf_parser.h globus_i_rvf_scanner.c globus_i_rvf_scanner.h AM_CPPFLAGS = $(PACKAGE_DEP_CFLAGS) -DYY_NO_INPUT -I$(top_srcdir) libglobus_rvf_la_SOURCES = \ globus_i_rvf_scanner.l \ globus_i_rvf_parser.y \ globus_i_rvf.h \ globus_rvf_parser.h globus_rvf_check_SOURCES = globus_rvf_check.c globus_rvf_check_LDADD = \ libglobus_rvf.la $(PACKAGE_DEP_LIBS) EXTRA_DIST = $(man_MANS) \ globus-rvf-edit.txt \ globus-rvf-check.txt \ globus_i_rvf_scanner.c \ globus_i_rvf_scanner.h \ globus_i_rvf_parser.c \ globus_i_rvf_parser.h if BUILD_MANPAGES SUFFIXES = .txt .8 .txt.8: $(A2X) -d manpage -f manpage $< MAINTAINERCLEANFILES = $(man_MANS) endif globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus-rvf-edit.in0000644000000000000000000000013114243161125023427 xustar000000000000000030 mtime=1653400149.361970091 30 atime=1653401384.981597167 29 ctime=1653404021.34574603 globus_gram_job_manager-15.8/rvf/globus-rvf-edit.in0000664000175000017500000000750114243161125023574 0ustar00johndoejohndoe00000000000000#! /bin/sh # # Copyright 1999-2012 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # prefix="${GLOBUS_LOCATION-@prefix@}" exec_prefix="@exec_prefix@" sbindir="@sbindir@" bindir="@bindir@" sysconfdir="@sysconfdir@" PATH=${bindir}:${sbindir}:${PATH} checker="globus-rvf-check" usage() { echo "Usage: $(basename $0) -s|-l LRM|-f PATH" } while getopts "vhsl:f:" i; do case $i in s) path="${sysconfdir}/globus/gram/job-manager.rvf" ;; l) path="${sysconfdir}/globus/gram/${OPTARG}.rvf" ;; f) path="$OPTARG" ;; h) usage exit 0 ;; v) verbose=1 ;; *) usage exit 1 ;; esac done if [ -z "$path" ]; then usage exit 1 fi if ! command -v "$checker" > /dev/null; then echo "Configuration error: Missing $checker" 1>&2 exit 1 fi if [ ! -w "$(dirname $path)" ]; then echo "Permission denied: unable to write to $(dirname $path)" 1>&2 exit 1 fi cleanup_tmp() { if [ -n "$tmpdir" ] && [ -d "$tmpdir" ]; then rm -rf "$tmpdir" fi } trap "cleanup_tmp" 0 tmpdir="$(mktemp -d -t globus-rvf-edit.XXXXXX)" if [ $? != 0 ]; then tmpdir="${TMPDIR-/tmp}/globus-rvf-edit.$$" mkdir "$tmpdir" if [ $? != 0 ]; then echo "Unable to create temporary directory" 1>&2 exit 1 fi fi tmpfile="${tmpdir}/rvf.temp" if [ -r $path ]; then cp "$path" "${tmpfile}" else cat < "${tmpfile}" # # $(basename $path) # # RVF Record Format consists of the following without the leading # # Records are separated by blank lines # # Attribute: RSL-attribute-name # Description: "Description string" # string describing the attribute, within # # quotes, " must be escaped as \" # Default: "default value" # default value is an RSL value string # DefaultWhen: when-value # space-delimited sequence of zero or more # # of # # GLOBUS_GRAM_JOB_SUBMIT # # GLOBUS_GRAM_JOB_MANAGER_RESTART # # GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE # ValidWhen: when-value # same as DefaultWhen values # RequiredWhen: when-value # same as DefaultWhen values # Values: # space-delimited sequence of legal values # # for the rsl attribute (e.g. "yes no" # Publish: # valid values true or false, indicating # # whether # # scripts/create-rsl-documentation.pl will # # generate doc for this attribute # EOF fi while true; do ${VISUAL:-vi} "${tmpfile}" if [ $? != 0 ]; then echo "Error editing temp file" 1>&2 exit 1 fi "${checker}" ${vebose:+"-d"} "${tmpfile}" if [ $? != 0 ]; then printf "Edit again [yn]: " read answer if [ "$answer" != "y" ] && [ "$answer" != "Y" ]; then exit 1 fi else break fi done if [ -f "$path.bak" ]; then rm -f "$path.bak" fi if [ -f "$path" ]; then mv "$path" "$path.bak" fi mv "$tmpfile" "$path" globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_i_rvf_scanner.c0000644000000000000000000000013114243161125024423 xustar000000000000000029 mtime=1653400149.36397007 30 atime=1653401831.749123126 30 ctime=1653404021.347746011 globus_gram_job_manager-15.8/rvf/globus_i_rvf_scanner.c0000664000175000017500000026350514243161125024600 0ustar00johndoejohndoe00000000000000#line 2 "globus_i_rvf_scanner.c" #line 4 "globus_i_rvf_scanner.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void* yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yyg->yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yyg->yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE globus_i_rvf_restart(yyin ,yyscanner ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires * access to the local variable yy_act. Since yyless() is a macro, it would break * existing scanners that call yyless() from OUTSIDE globus_i_rvf_lex. * One obvious solution it to make yy_act a global. I tried that, and saw * a 5% performance hit in a non-yylineno scanner, because yy_act is * normally declared as a register variable-- so it is not worth it. */ #define YY_LESS_LINENO(n) \ do { \ yy_size_t yyl;\ for ( yyl = n; yyl < yyleng; ++yyl )\ if ( yytext[yyl] == '\n' )\ --yylineno;\ }while(0) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = yyg->yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via globus_i_rvf_restart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] void globus_i_rvf_restart (FILE *input_file ,yyscan_t yyscanner ); void globus_i_rvf__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); YY_BUFFER_STATE globus_i_rvf__create_buffer (FILE *file,int size ,yyscan_t yyscanner ); void globus_i_rvf__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void globus_i_rvf__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void globus_i_rvf_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); void globus_i_rvf_pop_buffer_state (yyscan_t yyscanner ); static void globus_i_rvf_ensure_buffer_stack (yyscan_t yyscanner ); static void globus_i_rvf__load_buffer_state (yyscan_t yyscanner ); static void globus_i_rvf__init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); #define YY_FLUSH_BUFFER globus_i_rvf__flush_buffer(YY_CURRENT_BUFFER ,yyscanner) YY_BUFFER_STATE globus_i_rvf__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); YY_BUFFER_STATE globus_i_rvf__scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); YY_BUFFER_STATE globus_i_rvf__scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); void *globus_i_rvf_alloc (yy_size_t ,yyscan_t yyscanner ); void *globus_i_rvf_realloc (void *,yy_size_t ,yyscan_t yyscanner ); void globus_i_rvf_free (void * ,yyscan_t yyscanner ); #define yy_new_buffer globus_i_rvf__create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ globus_i_rvf_ensure_buffer_stack (yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ globus_i_rvf__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ globus_i_rvf_ensure_buffer_stack (yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ globus_i_rvf__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) #define globus_i_rvf_wrap(n) 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; typedef int yy_state_type; #define yytext_ptr yytext_r static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); static int yy_get_next_buffer (yyscan_t yyscanner ); static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; #define YY_NUM_RULES 28 #define YY_END_OF_BUFFER 29 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[715] = { 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 29, 27, 12, 13, 27, 27, 27, 27, 27, 27, 11, 19, 18, 2, 19, 19, 19, 24, 12, 24, 25, 24, 24, 24, 24, 26, 27, 12, 0, 1, 0, 0, 0, 0, 0, 19, 2, 19, 19, 19, 24, 24, 12, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 17, 24, 24, 20, 0, 0, 0, 0, 0, 0, 0, 0, 19, 24, 20, 20, 0, 0, 0, 0, 0, 0, 0, 10, 19, 24, 0, 0, 4, 0, 7, 0, 0, 19, 24, 0, 0, 0, 0, 0, 0, 19, 24, 0, 3, 0, 0, 0, 9, 19, 24, 0, 0, 0, 0, 19, 24, 0, 5, 6, 0, 19, 24, 0, 8, 19, 24, 0, 19, 24, 0, 19, 24, 0, 19, 24, 0, 19, 24, 0, 19, 19, 24, 24, 0, 0, 19, 19, 24, 24, 0, 0, 19, 19, 24, 24, 0, 0, 19, 19, 24, 24, 0, 0, 19, 19, 24, 24, 0, 0, 19, 14, 24, 21, 0, 21, 19, 14, 24, 21, 0, 21, 19, 19, 24, 21, 24, 0, 21, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 15, 19, 19, 23, 24, 24, 23, 0, 0, 15, 19, 19, 23, 24, 24, 23, 0, 0, 19, 19, 19, 23, 24, 24, 24, 23, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 16, 19, 24, 22, 24, 0, 22, 0, 19, 16, 19, 24, 22, 24, 0, 22, 0, 19, 19, 19, 24, 22, 24, 24, 0, 22, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 19, 24, 24, 24, 24, 0, 0, 0, 0, 19, 19, 19, 19, 24, 24, 24, 24, 0, 0, 0, 0, 19, 19, 19, 19, 24, 24, 24, 24, 0, 0, 0, 0, 19, 19, 19, 19, 24, 24, 24, 24, 0, 0, 0, 0, 19, 19, 19, 19, 24, 24, 24, 24, 0, 0, 0, 0, 19, 19, 19, 14, 24, 24, 24, 21, 0, 0, 0, 21, 19, 19, 19, 14, 24, 24, 24, 21, 0, 0, 0, 21, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 19, 24, 24, 24, 24, 0, 0, 0, 0, 19, 19, 19, 19, 19, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 19, 15, 19, 19, 19, 24, 23, 24, 24, 24, 0, 23, 0, 0, 0, 19, 15, 19, 19, 19, 24, 23, 24, 24, 24, 0, 23, 0, 0, 0, 19, 19, 19, 19, 24, 24, 24, 24, 0, 0, 0, 0, 19, 19, 19, 19, 19, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 19, 19, 19, 16, 24, 24, 24, 22, 0, 0, 0, 22, 19, 19, 19, 16, 24, 24, 24, 22, 0, 0, 0, 22, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 19, 24, 24, 24, 24, 0, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 19, 19, 24, 24, 24, 0, 0, 0, 19, 24, 0, 19, 24, 0, 19, 24, 0, 19, 24, 0, 19, 24, 0, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 1, 1, 1, 1, 29, 1, 1, 30, 1, 31, 32, 33, 34, 35, 36, 1, 37, 38, 1, 1, 39, 1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[50] = { 0, 1, 1, 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[722] = { 0, 0, 47, 2, 7, 15, 33, 63, 69, 12, 81, 20, 28, 38, 53, 1153, 1154, 1150, 1154, 1148, 1, 18, 13, 51, 56, 1154, 0, 1154, 0, 1133, 1118, 1104, 1118, 94, 98, 1154, 16, 73, 59, 64, 1154, 1129, 1143, 1141, 1154, 34, 92, 99, 81, 93, 0, 0, 1123, 1103, 1094, 1111, 107, 110, 116, 91, 77, 139, 97, 96, 100, 1119, 110, 107, 134, 131, 124, 134, 1130, 1092, 1101, 145, 128, 126, 1127, 144, 132, 140, 149, 150, 156, 158, 1108, 1098, 0, 151, 154, 189, 1106, 168, 169, 163, 170, 172, 168, 174, 1107, 173, 201, 203, 1106, 173, 182, 189, 197, 198, 198, 1154, 1099, 184, 1098, 196, 194, 198, 1154, 214, 214, 1114, 216, 1113, 215, 222, 222, 212, 222, 1102, 223, 1101, 1154, 216, 227, 239, 1154, 1116, 248, 1115, 235, 238, 228, 1103, 46, 1102, 1154, 1154, 239, 1089, 235, 1088, 1154, 1101, 240, 1100, 1095, 251, 1094, 1105, 258, 1104, 1081, 243, 1080, 264, 265, 266, 1102, 1082, 263, 267, 1100, 1080, 1086, 1096, 262, 266, 1084, 1094, 1094, 1082, 278, 268, 1092, 1080, 1084, 1081, 285, 284, 1082, 1079, 1082, 1067, 289, 276, 1080, 1065, 1066, 1086, 279, 301, 1064, 9, 1056, 304, 280, 309, 1055, 313, 296, 1067, 300, 329, 304, 304, 332, 1066, 1071, 1056, 1060, 314, 311, 317, 1068, 1053, 1057, 1052, 1065, 1066, 315, 331, 339, 1049, 1062, 1063, 1045, 1054, 1042, 323, 334, 324, 1042, 1051, 1039, 1057, 1043, 1038, 344, 335, 330, 1054, 1040, 1035, 1035, 1027, 1026, 333, 336, 340, 1032, 1024, 1023, 1027, 1025, 1037, 332, 345, 354, 1024, 1022, 1034, 1044, 1024, 1021, 373, 351, 355, 379, 1022, 1019, 375, 1031, 1033, 383, 369, 380, 387, 1029, 1031, 1020, 1029, 1017, 390, 377, 384, 379, 402, 1017, 1026, 1014, 1011, 1005, 999, 381, 370, 387, 1008, 1002, 996, 1017, 1013, 1007, 399, 400, 398, 1014, 1010, 1004, 993, 1016, 997, 392, 420, 404, 990, 423, 995, 990, 418, 1005, 406, 434, 424, 988, 437, 1003, 980, 992, 978, 412, 441, 417, 422, 977, 453, 989, 975, 991, 983, 440, 432, 428, 444, 989, 981, 441, 977, 991, 991, 971, 446, 452, 460, 445, 973, 987, 987, 967, 985, 965, 971, 981, 465, 450, 458, 470, 981, 961, 967, 977, 966, 959, 975, 963, 462, 459, 475, 466, 962, 955, 971, 959, 946, 945, 961, 958, 456, 463, 477, 481, 942, 941, 957, 954, 952, 954, 955, 940, 482, 484, 489, 476, 948, 950, 951, 936, 940, 936, 935, 955, 483, 479, 486, 514, 936, 932, 931, 517, 945, 945, 921, 512, 499, 515, 494, 524, 942, 942, 918, 527, 917, 928, 508, 504, 517, 518, 915, 926, 515, 527, 913, 931, 916, 530, 520, 541, 531, 537, 910, 928, 913, 930, 910, 919, 910, 923, 529, 536, 547, 540, 556, 925, 905, 914, 905, 918, 908, 918, 905, 899, 908, 538, 560, 551, 548, 557, 903, 913, 900, 894, 903, 910, 898, 907, 907, 893, 567, 561, 570, 568, 562, 905, 893, 902, 902, 888, 894, 891, 875, 881, 873, 571, 566, 558, 569, 564, 889, 886, 870, 876, 868, 886, 871, 583, 870, 868, 591, 579, 585, 581, 586, 882, 867, 587, 866, 864, 866, 886, 880, 860, 864, 590, 614, 611, 595, 601, 861, 623, 876, 856, 860, 850, 621, 860, 870, 867, 598, 629, 610, 625, 626, 846, 635, 856, 866, 863, 621, 865, 853, 863, 623, 628, 631, 634, 627, 862, 850, 860, 855, 840, 851, 848, 837, 642, 636, 643, 644, 637, 850, 835, 846, 843, 832, 832, 845, 843, 828, 841, 640, 657, 659, 649, 664, 827, 840, 838, 823, 836, 821, 830, 821, 841, 651, 653, 654, 682, 817, 826, 817, 687, 832, 818, 807, 679, 672, 667, 665, 695, 829, 815, 804, 697, 810, 802, 679, 683, 675, 690, 808, 800, 692, 804, 802, 816, 801, 692, 694, 680, 693, 800, 798, 812, 797, 800, 796, 809, 704, 702, 717, 797, 793, 806, 805, 789, 798, 718, 705, 714, 802, 786, 795, 802, 801, 787, 725, 728, 716, 799, 798, 783, 773, 772, 746, 712, 715, 710, 750, 750, 742, 760, 745, 743, 731, 723, 724, 756, 741, 739, 743, 730, 742, 751, 739, 697, 576, 748, 514, 413, 733, 242, 227, 745, 140, 1154, 777, 781, 785, 789, 793, 796, 800 } ; static yyconst flex_int16_t yy_def[722] = { 0, 715, 715, 715, 715, 716, 716, 717, 717, 715, 715, 715, 715, 715, 715, 714, 714, 714, 714, 718, 714, 714, 714, 714, 714, 714, 719, 714, 720, 719, 719, 719, 721, 721, 721, 714, 721, 721, 721, 721, 714, 714, 714, 718, 714, 714, 714, 714, 714, 714, 719, 720, 719, 719, 719, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 714, 714, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 714, 714, 714, 714, 714, 719, 721, 721, 721, 714, 714, 714, 714, 714, 714, 714, 714, 719, 721, 714, 714, 714, 714, 714, 714, 714, 719, 721, 714, 714, 714, 714, 714, 714, 719, 721, 714, 714, 714, 714, 714, 714, 719, 721, 714, 714, 714, 714, 719, 721, 714, 714, 714, 714, 719, 721, 714, 714, 719, 721, 714, 719, 721, 714, 719, 721, 714, 719, 721, 714, 719, 721, 714, 719, 719, 721, 721, 714, 714, 719, 719, 721, 721, 714, 714, 719, 719, 721, 721, 714, 714, 719, 719, 721, 721, 714, 714, 719, 719, 721, 721, 714, 714, 719, 719, 721, 721, 714, 714, 719, 719, 721, 721, 714, 714, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 719, 721, 721, 721, 721, 721, 714, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 719, 721, 721, 721, 721, 714, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 719, 719, 721, 721, 721, 714, 714, 714, 719, 721, 714, 719, 721, 714, 719, 721, 714, 719, 721, 714, 719, 721, 714, 0, 714, 714, 714, 714, 714, 714, 714 } ; static yyconst flex_int16_t yy_nxt[1204] = { 0, 714, 17, 18, 17, 19, 714, 20, 25, 17, 21, 209, 209, 25, 17, 40, 35, 17, 18, 27, 28, 22, 17, 23, 35, 41, 45, 24, 29, 46, 17, 20, 35, 62, 21, 17, 18, 27, 28, 47, 17, 18, 22, 19, 23, 56, 29, 45, 24, 17, 18, 30, 19, 46, 20, 17, 18, 21, 19, 66, 47, 31, 48, 49, 150, 33, 34, 35, 22, 30, 23, 33, 34, 35, 24, 56, 36, 55, 20, 31, 66, 21, 36, 17, 40, 35, 48, 49, 56, 22, 63, 23, 37, 56, 41, 24, 57, 58, 37, 38, 61, 58, 56, 70, 67, 38, 56, 69, 64, 39, 71, 55, 57, 58, 80, 39, 68, 75, 61, 58, 56, 64, 63, 56, 70, 56, 56, 56, 67, 56, 59, 69, 71, 79, 59, 76, 56, 68, 80, 56, 60, 61, 58, 81, 60, 56, 59, 77, 82, 84, 83, 620, 59, 89, 79, 56, 60, 56, 94, 93, 85, 91, 60, 95, 96, 97, 98, 81, 56, 99, 82, 83, 84, 90, 56, 59, 105, 101, 107, 94, 56, 85, 93, 56, 95, 60, 106, 96, 97, 91, 98, 102, 103, 99, 108, 109, 110, 113, 111, 115, 105, 107, 56, 102, 103, 102, 103, 116, 106, 119, 117, 118, 120, 56, 122, 108, 109, 110, 56, 111, 115, 124, 125, 126, 127, 128, 132, 140, 116, 130, 56, 117, 56, 119, 118, 120, 133, 134, 612, 148, 135, 136, 124, 125, 126, 56, 138, 141, 127, 128, 132, 140, 56, 142, 146, 144, 157, 147, 152, 133, 134, 135, 136, 148, 56, 154, 163, 713, 141, 56, 176, 160, 56, 166, 183, 146, 142, 56, 147, 152, 56, 182, 168, 170, 172, 188, 189, 56, 169, 171, 173, 56, 56, 177, 56, 56, 56, 56, 194, 195, 200, 201, 206, 207, 207, 56, 205, 56, 56, 56, 212, 213, 213, 56, 56, 216, 216, 211, 56, 218, 219, 223, 214, 221, 222, 230, 217, 224, 225, 56, 56, 213, 213, 56, 216, 216, 231, 232, 56, 239, 56, 240, 214, 56, 56, 217, 56, 241, 248, 249, 250, 257, 56, 56, 259, 258, 266, 275, 56, 56, 56, 56, 56, 56, 56, 56, 267, 277, 56, 56, 268, 276, 285, 56, 56, 284, 284, 281, 286, 295, 56, 287, 287, 56, 56, 293, 293, 296, 290, 297, 297, 305, 293, 293, 304, 314, 294, 306, 56, 56, 298, 313, 56, 294, 297, 297, 56, 322, 56, 56, 56, 323, 56, 56, 324, 298, 56, 315, 331, 56, 329, 56, 332, 332, 333, 335, 335, 56, 56, 56, 340, 338, 343, 56, 352, 56, 341, 341, 711, 345, 345, 56, 351, 341, 341, 361, 56, 342, 362, 56, 346, 56, 353, 56, 342, 345, 345, 56, 359, 367, 374, 56, 363, 56, 360, 368, 346, 375, 364, 373, 56, 376, 385, 56, 56, 56, 386, 387, 388, 56, 397, 56, 399, 398, 400, 56, 409, 56, 56, 56, 411, 56, 56, 410, 56, 56, 412, 422, 421, 56, 423, 424, 434, 433, 56, 56, 56, 444, 56, 435, 56, 56, 56, 56, 432, 56, 436, 436, 56, 440, 440, 710, 445, 56, 446, 211, 436, 436, 56, 440, 440, 452, 453, 56, 454, 455, 482, 214, 460, 461, 217, 456, 457, 56, 56, 462, 56, 56, 467, 56, 469, 463, 470, 56, 468, 472, 471, 497, 56, 56, 56, 473, 483, 484, 485, 56, 486, 56, 498, 56, 56, 499, 501, 500, 512, 515, 56, 56, 514, 513, 56, 528, 516, 708, 527, 56, 56, 56, 529, 56, 56, 56, 530, 56, 531, 56, 56, 56, 56, 56, 56, 539, 542, 544, 543, 549, 424, 540, 56, 545, 56, 550, 546, 557, 56, 56, 558, 558, 559, 56, 56, 560, 561, 553, 56, 563, 563, 56, 571, 572, 56, 558, 558, 573, 290, 586, 574, 563, 563, 56, 56, 588, 294, 56, 579, 580, 584, 585, 298, 587, 589, 590, 56, 599, 56, 56, 601, 56, 56, 602, 56, 600, 603, 56, 613, 56, 56, 614, 626, 56, 615, 56, 56, 56, 616, 424, 625, 627, 56, 636, 56, 624, 56, 56, 628, 628, 56, 637, 56, 632, 632, 658, 338, 56, 56, 638, 56, 628, 628, 632, 632, 56, 644, 645, 56, 647, 646, 707, 342, 56, 346, 56, 56, 648, 649, 652, 653, 543, 659, 56, 657, 56, 56, 56, 56, 666, 667, 668, 675, 677, 676, 56, 684, 56, 56, 685, 686, 693, 694, 56, 695, 56, 543, 56, 56, 56, 56, 56, 616, 706, 700, 703, 56, 56, 56, 709, 616, 56, 712, 56, 56, 705, 56, 704, 702, 701, 620, 548, 56, 699, 612, 538, 698, 697, 56, 696, 692, 56, 16, 16, 16, 16, 26, 26, 26, 26, 32, 32, 32, 32, 43, 43, 43, 43, 50, 691, 50, 51, 690, 51, 51, 55, 55, 689, 55, 688, 687, 683, 682, 681, 680, 679, 678, 674, 673, 672, 671, 670, 669, 665, 664, 663, 662, 661, 660, 548, 656, 655, 654, 538, 651, 650, 643, 642, 641, 640, 639, 635, 634, 633, 631, 630, 629, 624, 623, 622, 621, 428, 620, 619, 618, 617, 420, 612, 611, 610, 609, 608, 607, 606, 605, 604, 598, 597, 596, 595, 594, 593, 592, 591, 583, 582, 581, 578, 577, 576, 575, 570, 569, 568, 567, 566, 565, 564, 562, 556, 555, 554, 553, 552, 551, 428, 548, 547, 541, 420, 538, 537, 536, 535, 534, 533, 532, 526, 525, 524, 523, 522, 521, 520, 519, 518, 517, 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 496, 495, 494, 493, 492, 491, 490, 489, 488, 487, 481, 480, 479, 478, 477, 476, 475, 474, 466, 465, 464, 459, 458, 451, 450, 449, 448, 447, 443, 442, 441, 439, 438, 437, 432, 431, 430, 429, 428, 427, 426, 425, 420, 419, 418, 417, 416, 415, 414, 413, 408, 407, 406, 405, 404, 403, 402, 401, 396, 395, 394, 393, 392, 391, 390, 389, 384, 383, 382, 381, 380, 379, 378, 377, 372, 371, 370, 369, 366, 365, 358, 357, 356, 355, 354, 350, 349, 348, 347, 344, 339, 337, 336, 334, 330, 329, 328, 327, 326, 325, 321, 320, 319, 318, 317, 316, 312, 311, 310, 309, 308, 307, 303, 302, 301, 300, 299, 292, 291, 289, 288, 283, 282, 281, 280, 279, 278, 274, 273, 272, 271, 270, 269, 265, 264, 263, 262, 261, 260, 256, 255, 254, 253, 252, 251, 247, 246, 245, 244, 243, 242, 238, 237, 236, 235, 234, 233, 229, 228, 227, 226, 220, 215, 210, 208, 205, 204, 203, 202, 199, 198, 197, 196, 193, 192, 191, 190, 187, 186, 185, 184, 181, 180, 179, 178, 175, 174, 167, 165, 164, 162, 161, 159, 158, 156, 155, 153, 151, 149, 145, 143, 139, 137, 131, 129, 123, 121, 114, 112, 104, 88, 100, 92, 88, 87, 86, 78, 56, 74, 73, 72, 44, 42, 65, 56, 54, 53, 52, 44, 42, 714, 15, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714 } ; static yyconst flex_int16_t yy_chk[1204] = { 0, 0, 1, 1, 3, 1, 0, 1, 3, 4, 1, 203, 203, 4, 9, 9, 9, 5, 5, 5, 5, 1, 11, 1, 11, 9, 20, 1, 5, 21, 12, 1, 12, 36, 1, 6, 6, 6, 6, 22, 13, 13, 1, 13, 1, 36, 6, 20, 1, 2, 2, 5, 2, 21, 2, 14, 14, 2, 14, 45, 22, 5, 23, 24, 144, 7, 7, 7, 2, 6, 2, 8, 8, 8, 2, 144, 7, 37, 2, 6, 45, 2, 8, 10, 10, 10, 23, 24, 38, 2, 38, 2, 7, 39, 10, 2, 33, 33, 8, 7, 34, 34, 37, 48, 46, 8, 60, 47, 39, 7, 49, 56, 57, 57, 67, 8, 46, 62, 58, 58, 59, 60, 59, 33, 48, 63, 62, 34, 46, 64, 33, 47, 49, 66, 34, 63, 56, 46, 67, 57, 33, 61, 61, 68, 34, 58, 57, 64, 69, 71, 70, 713, 58, 75, 66, 77, 57, 76, 80, 79, 71, 77, 58, 81, 82, 83, 84, 68, 61, 85, 69, 70, 71, 76, 75, 61, 93, 89, 95, 80, 89, 71, 79, 90, 81, 61, 94, 82, 83, 90, 84, 91, 91, 85, 96, 97, 98, 101, 99, 105, 93, 95, 101, 102, 102, 103, 103, 106, 94, 109, 107, 108, 110, 113, 113, 96, 97, 98, 91, 99, 105, 115, 116, 117, 119, 120, 124, 133, 106, 122, 102, 107, 103, 109, 108, 110, 125, 126, 711, 142, 127, 128, 115, 116, 117, 122, 130, 134, 119, 120, 124, 133, 130, 135, 140, 138, 154, 141, 148, 125, 126, 127, 128, 142, 150, 150, 160, 710, 134, 154, 170, 157, 163, 163, 177, 140, 135, 138, 141, 148, 157, 176, 165, 166, 167, 182, 183, 160, 165, 166, 167, 176, 170, 171, 166, 177, 171, 183, 188, 189, 194, 195, 200, 201, 201, 195, 205, 182, 200, 206, 206, 207, 207, 189, 188, 209, 209, 205, 194, 210, 210, 214, 207, 212, 212, 221, 209, 215, 215, 212, 201, 213, 213, 214, 216, 216, 222, 223, 207, 230, 222, 231, 213, 221, 230, 216, 223, 232, 239, 240, 241, 248, 239, 241, 250, 249, 257, 266, 213, 250, 231, 266, 257, 240, 249, 258, 258, 268, 232, 259, 259, 267, 276, 248, 267, 275, 275, 281, 277, 285, 276, 278, 278, 268, 277, 284, 284, 286, 281, 287, 287, 295, 293, 293, 294, 305, 284, 296, 285, 305, 287, 304, 275, 293, 297, 297, 294, 313, 296, 286, 304, 314, 284, 295, 315, 297, 306, 306, 322, 293, 329, 322, 323, 323, 324, 326, 326, 315, 313, 314, 331, 329, 333, 324, 342, 331, 332, 332, 708, 335, 335, 340, 340, 341, 341, 351, 342, 332, 352, 323, 335, 343, 343, 333, 341, 345, 345, 352, 350, 356, 362, 351, 353, 332, 350, 356, 345, 363, 353, 361, 341, 364, 373, 353, 364, 361, 374, 375, 376, 374, 385, 362, 387, 386, 388, 397, 397, 375, 386, 363, 399, 385, 398, 398, 373, 388, 400, 410, 409, 376, 411, 412, 422, 421, 387, 412, 399, 433, 422, 423, 400, 409, 421, 410, 432, 423, 424, 424, 411, 428, 428, 707, 434, 435, 435, 432, 436, 436, 433, 440, 440, 443, 443, 444, 444, 445, 467, 436, 449, 449, 440, 446, 446, 424, 434, 450, 445, 446, 454, 455, 455, 450, 456, 436, 454, 458, 457, 482, 467, 454, 457, 458, 468, 469, 470, 468, 471, 482, 483, 470, 456, 484, 486, 485, 497, 500, 469, 485, 499, 498, 484, 513, 501, 705, 512, 471, 486, 514, 514, 483, 498, 501, 515, 516, 516, 513, 497, 500, 515, 499, 512, 524, 527, 529, 528, 534, 530, 524, 528, 529, 530, 534, 531, 542, 529, 531, 543, 543, 544, 542, 527, 545, 546, 553, 545, 548, 548, 557, 557, 559, 546, 558, 558, 560, 553, 572, 561, 563, 563, 559, 544, 574, 558, 543, 567, 567, 571, 571, 563, 573, 575, 575, 571, 584, 560, 561, 586, 572, 558, 587, 573, 585, 588, 574, 599, 585, 588, 600, 614, 599, 601, 584, 586, 587, 602, 603, 613, 615, 602, 625, 613, 624, 614, 615, 616, 616, 600, 626, 601, 620, 620, 648, 624, 603, 627, 627, 626, 628, 628, 632, 632, 625, 635, 635, 637, 637, 636, 704, 628, 648, 632, 616, 636, 638, 638, 641, 641, 646, 649, 638, 647, 646, 649, 647, 628, 657, 658, 659, 666, 668, 667, 658, 675, 657, 667, 676, 677, 684, 685, 686, 686, 684, 693, 668, 685, 677, 659, 666, 694, 703, 695, 700, 694, 695, 675, 706, 712, 676, 709, 700, 693, 702, 709, 701, 699, 698, 697, 696, 703, 692, 691, 690, 689, 688, 712, 687, 683, 706, 715, 715, 715, 715, 716, 716, 716, 716, 717, 717, 717, 717, 718, 718, 718, 718, 719, 682, 719, 720, 681, 720, 720, 721, 721, 680, 721, 679, 678, 674, 673, 672, 671, 670, 669, 665, 664, 663, 662, 661, 660, 656, 655, 654, 653, 652, 651, 650, 645, 644, 643, 642, 640, 639, 634, 633, 631, 630, 629, 623, 622, 621, 619, 618, 617, 612, 611, 610, 609, 608, 607, 606, 605, 604, 598, 597, 596, 595, 594, 593, 592, 591, 590, 589, 583, 582, 581, 580, 579, 578, 577, 576, 570, 569, 568, 566, 565, 564, 562, 556, 555, 554, 552, 551, 550, 549, 547, 541, 540, 539, 538, 537, 536, 535, 533, 532, 526, 525, 523, 522, 521, 520, 519, 518, 517, 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 496, 495, 494, 493, 492, 491, 490, 489, 488, 487, 481, 480, 479, 478, 477, 476, 475, 474, 473, 472, 466, 465, 464, 463, 462, 461, 460, 459, 453, 452, 451, 448, 447, 442, 441, 439, 438, 437, 431, 430, 429, 427, 426, 425, 420, 419, 418, 417, 416, 415, 414, 413, 408, 407, 406, 405, 404, 403, 402, 401, 396, 395, 394, 393, 392, 391, 390, 389, 384, 383, 382, 381, 380, 379, 378, 377, 372, 371, 370, 369, 368, 367, 366, 365, 360, 359, 358, 357, 355, 354, 349, 348, 347, 346, 344, 339, 338, 337, 336, 334, 330, 328, 327, 325, 321, 320, 319, 318, 317, 316, 312, 311, 310, 309, 308, 307, 303, 302, 301, 300, 299, 298, 292, 291, 290, 289, 288, 283, 282, 280, 279, 274, 273, 272, 271, 270, 269, 265, 264, 263, 262, 261, 260, 256, 255, 254, 253, 252, 251, 247, 246, 245, 244, 243, 242, 238, 237, 236, 235, 234, 233, 229, 228, 227, 226, 225, 224, 220, 219, 218, 217, 211, 208, 204, 202, 199, 198, 197, 196, 193, 192, 191, 190, 187, 186, 185, 184, 181, 180, 179, 178, 175, 174, 173, 172, 169, 168, 164, 162, 161, 159, 158, 156, 155, 153, 151, 149, 145, 143, 139, 137, 131, 129, 123, 121, 114, 112, 104, 100, 92, 87, 86, 78, 74, 73, 72, 65, 55, 54, 53, 52, 43, 42, 41, 32, 31, 30, 29, 19, 17, 15, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714 } ; /* Table of booleans, true if rule could match eol. */ static yyconst flex_int32_t yy_rule_can_match_eol[29] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, }; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "globus_i_rvf_scanner.l" #line 2 "globus_i_rvf_scanner.l" /* * Copyright 1999-2012 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_rvf_parser.h" #include "globus_i_rvf.h" #include "globus_i_rvf_parser.h" #line 977 "globus_i_rvf_scanner.c" #define INITIAL 0 #define DELIMITER 1 #define VALUE 2 #define QUOTED 3 #define QUOTED_WHENVAL 4 #define QUOTE_END 5 #define VALUE_END 6 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* Holds the entire state of the reentrant scanner. */ struct yyguts_t { /* User-defined. Not touched by flex. */ YY_EXTRA_TYPE yyextra_r; /* The rest are the same as the globals declared in the non-reentrant scanner. */ FILE *yyin_r, *yyout_r; size_t yy_buffer_stack_top; /**< index of top of stack. */ size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; yy_size_t yy_n_chars; yy_size_t yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; int yy_did_buffer_switch_on_eof; int yy_start_stack_ptr; int yy_start_stack_depth; int *yy_start_stack; yy_state_type yy_last_accepting_state; char* yy_last_accepting_cpos; int yylineno_r; int yy_flex_debug_r; char *yytext_r; int yy_more_flag; int yy_more_len; YYSTYPE * yylval_r; YYLTYPE * yylloc_r; }; /* end struct yyguts_t */ static int yy_init_globals (yyscan_t yyscanner ); /* This must go here because YYSTYPE and YYLTYPE are included * from bison output in section 1.*/ # define yylval yyg->yylval_r # define yylloc yyg->yylloc_r int globus_i_rvf_lex_init (yyscan_t* scanner); int globus_i_rvf_lex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int globus_i_rvf_lex_destroy (yyscan_t yyscanner ); int globus_i_rvf_get_debug (yyscan_t yyscanner ); void globus_i_rvf_set_debug (int debug_flag ,yyscan_t yyscanner ); YY_EXTRA_TYPE globus_i_rvf_get_extra (yyscan_t yyscanner ); void globus_i_rvf_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); FILE *globus_i_rvf_get_in (yyscan_t yyscanner ); void globus_i_rvf_set_in (FILE * in_str ,yyscan_t yyscanner ); FILE *globus_i_rvf_get_out (yyscan_t yyscanner ); void globus_i_rvf_set_out (FILE * out_str ,yyscan_t yyscanner ); yy_size_t globus_i_rvf_get_leng (yyscan_t yyscanner ); char *globus_i_rvf_get_text (yyscan_t yyscanner ); int globus_i_rvf_get_lineno (yyscan_t yyscanner ); void globus_i_rvf_set_lineno (int line_number ,yyscan_t yyscanner ); YYSTYPE * globus_i_rvf_get_lval (yyscan_t yyscanner ); void globus_i_rvf_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); YYLTYPE *globus_i_rvf_get_lloc (yyscan_t yyscanner ); void globus_i_rvf_set_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int globus_i_rvf_wrap (yyscan_t yyscanner ); #else extern int globus_i_rvf_wrap (yyscan_t yyscanner ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (yyscan_t yyscanner ); #else static int input (yyscan_t yyscanner ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int globus_i_rvf_lex \ (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner); #define YY_DECL int globus_i_rvf_lex \ (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; #line 56 "globus_i_rvf_scanner.l" #line 1225 "globus_i_rvf_scanner.c" yylval = yylval_param; yylloc = yylloc_param; if ( !yyg->yy_init ) { yyg->yy_init = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! yyg->yy_start ) yyg->yy_start = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { globus_i_rvf_ensure_buffer_stack (yyscanner); YY_CURRENT_BUFFER_LVALUE = globus_i_rvf__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); } globus_i_rvf__load_buffer_state(yyscanner ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = yyg->yy_c_buf_p; /* Support of yytext. */ *yy_cp = yyg->yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yyg->yy_start; yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 715 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 1154 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) { yy_size_t yyl; for ( yyl = 0; yyl < yyleng; ++yyl ) if ( yytext[yyl] == '\n' ) do{ yylineno++; yycolumn=0; }while(0) ; } do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yyg->yy_hold_char; yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; case 1: /* rule 1 can match eol */ *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 58 "globus_i_rvf_scanner.l" { return RVF_TOKEN_COMMENT; } YY_BREAK case 2: YY_RULE_SETUP #line 62 "globus_i_rvf_scanner.l" { BEGIN(VALUE_END); return RVF_TOKEN_COMMENT; } YY_BREAK case 3: YY_RULE_SETUP #line 67 "globus_i_rvf_scanner.l" { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_ATTRIBUTE; return RVF_TOKEN_ATTRIBUTE; } YY_BREAK case 4: YY_RULE_SETUP #line 72 "globus_i_rvf_scanner.l" { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_DEFAULT; return RVF_TOKEN_DEFAULT; } YY_BREAK case 5: YY_RULE_SETUP #line 77 "globus_i_rvf_scanner.l" { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_DEFAULTWHEN; return RVF_TOKEN_DEFAULTWHEN; } YY_BREAK case 6: YY_RULE_SETUP #line 82 "globus_i_rvf_scanner.l" { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_DESCRIPTION; return RVF_TOKEN_DESCRIPTION; } YY_BREAK case 7: YY_RULE_SETUP #line 87 "globus_i_rvf_scanner.l" { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_PUBLISH; return RVF_TOKEN_PUBLISH; } YY_BREAK case 8: YY_RULE_SETUP #line 92 "globus_i_rvf_scanner.l" { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_REQUIREDWHEN; return RVF_TOKEN_REQUIREDWHEN; } YY_BREAK case 9: YY_RULE_SETUP #line 98 "globus_i_rvf_scanner.l" { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_VALIDWHEN; return RVF_TOKEN_VALIDWHEN; } YY_BREAK case 10: YY_RULE_SETUP #line 104 "globus_i_rvf_scanner.l" { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_VALUES; return RVF_TOKEN_VALUES; } YY_BREAK case 11: YY_RULE_SETUP #line 110 "globus_i_rvf_scanner.l" { BEGIN(VALUE); return RVF_TOKEN_ASPECT_DELIMITER; } YY_BREAK case 12: YY_RULE_SETUP #line 115 "globus_i_rvf_scanner.l" { ; } YY_BREAK case 13: /* rule 13 can match eol */ YY_RULE_SETUP #line 119 "globus_i_rvf_scanner.l" { BEGIN(INITIAL); return RVF_TOKEN_NEWLINE; } YY_BREAK case 14: *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp = yy_bp + 22; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 125 "globus_i_rvf_scanner.l" { return RVF_TOKEN_SUBMIT; } YY_BREAK case 15: *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp = yy_bp + 31; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 129 "globus_i_rvf_scanner.l" { return RVF_TOKEN_RESTART; } YY_BREAK case 16: *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp = yy_bp + 36; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 134 "globus_i_rvf_scanner.l" { return RVF_TOKEN_STDIO_UPDATE; } YY_BREAK case 17: YY_RULE_SETUP #line 138 "globus_i_rvf_scanner.l" { yylval->bool_value = (strstr(yytext, "true") != NULL); return RVF_TOKEN_BOOL; } YY_BREAK case 18: YY_RULE_SETUP #line 144 "globus_i_rvf_scanner.l" { BEGIN(QUOTED); return RVF_TOKEN_QUOTE; } YY_BREAK case 19: YY_RULE_SETUP #line 149 "globus_i_rvf_scanner.l" { BEGIN(VALUE_END); yylval->value.value_type = RVF_STRINGVAL; yylval->value.string_value = strdup(yytext); return RVF_TOKEN_TEXT; } YY_BREAK case 20: /* rule 20 can match eol */ YY_RULE_SETUP #line 156 "globus_i_rvf_scanner.l" { yylval->bool_value = (strstr(yytext, "true") != NULL); BEGIN(QUOTE_END); return RVF_TOKEN_BOOL; } YY_BREAK case 21: /* rule 21 can match eol */ *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp = yy_bp + 22; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 161 "globus_i_rvf_scanner.l" { BEGIN(QUOTED_WHENVAL); return RVF_TOKEN_SUBMIT; } YY_BREAK case 22: /* rule 22 can match eol */ *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp = yy_bp + 36; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 167 "globus_i_rvf_scanner.l" { BEGIN(QUOTED_WHENVAL); return RVF_TOKEN_STDIO_UPDATE; } YY_BREAK case 23: /* rule 23 can match eol */ *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp = yy_bp + 31; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 173 "globus_i_rvf_scanner.l" { BEGIN(QUOTED_WHENVAL); return RVF_TOKEN_STDIO_UPDATE; } YY_BREAK case 24: /* rule 24 can match eol */ YY_RULE_SETUP #line 179 "globus_i_rvf_scanner.l" { int len = strlen(yytext); int i,j; yylval->value.value_type = RVF_STRINGVAL; yylval->value.string_value = malloc(len+1); if (yylval->value.string_value == NULL) { return RVF_TOKEN_ERROR; } for (i = 0, j = 0; i < len; i++) { if (yytext[i] == '\\' && yytext[i+1] == '"') { i++; yylval->value.string_value[j++] = '"'; } else { yylval->value.string_value[j++] = yytext[i]; } } yylval->value.string_value[j] = '\0'; BEGIN(QUOTE_END); return RVF_TOKEN_TEXT; } YY_BREAK case 25: YY_RULE_SETUP #line 206 "globus_i_rvf_scanner.l" { BEGIN(VALUE_END); return RVF_TOKEN_QUOTE; } YY_BREAK case 26: /* rule 26 can match eol */ YY_RULE_SETUP #line 211 "globus_i_rvf_scanner.l" { ; } YY_BREAK case 27: /* rule 27 can match eol */ YY_RULE_SETUP #line 215 "globus_i_rvf_scanner.l" { return RVF_TOKEN_ERROR; } YY_BREAK case 28: YY_RULE_SETUP #line 216 "globus_i_rvf_scanner.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 1604 "globus_i_rvf_scanner.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DELIMITER): case YY_STATE_EOF(VALUE): case YY_STATE_EOF(QUOTED): case YY_STATE_EOF(QUOTED_WHENVAL): case YY_STATE_EOF(QUOTE_END): case YY_STATE_EOF(VALUE_END): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yyg->yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * globus_i_rvf_lex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( yyscanner ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++yyg->yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yyg->yy_c_buf_p; goto yy_find_action; } } else switch ( yy_get_next_buffer( yyscanner ) ) { case EOB_ACT_END_OF_FILE: { yyg->yy_did_buffer_switch_on_eof = 0; if ( globus_i_rvf_wrap(yyscanner ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! yyg->yy_did_buffer_switch_on_eof ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( yyscanner ); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yyg->yy_c_buf_p = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; yy_current_state = yy_get_previous_state( yyscanner ); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of globus_i_rvf_lex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = yyg->yytext_ptr; register int number_to_move, i; int ret_val; if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) (yyg->yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ globus_i_rvf_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), yyg->yy_n_chars, num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } if ( yyg->yy_n_chars == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; globus_i_rvf_restart(yyin ,yyscanner); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) globus_i_rvf_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } yyg->yy_n_chars += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (yyscan_t yyscanner) { register yy_state_type yy_current_state; register char *yy_cp; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_current_state = yyg->yy_start; for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 715 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) { register int yy_is_jam; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ register char *yy_cp = yyg->yy_c_buf_p; register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 715 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 714); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (yyscan_t yyscanner) #else static int input (yyscan_t yyscanner) #endif { int c; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; *yyg->yy_c_buf_p = yyg->yy_hold_char; if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) /* This was really a NUL. */ *yyg->yy_c_buf_p = '\0'; else { /* need more input */ yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; ++yyg->yy_c_buf_p; switch ( yy_get_next_buffer( yyscanner ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ globus_i_rvf_restart(yyin ,yyscanner); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( globus_i_rvf_wrap(yyscanner ) ) return 0; if ( ! yyg->yy_did_buffer_switch_on_eof ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(yyscanner); #else return input(yyscanner); #endif } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + offset; break; } } } c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ yyg->yy_hold_char = *++yyg->yy_c_buf_p; if ( c == '\n' ) do{ yylineno++; yycolumn=0; }while(0) ; return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * @param yyscanner The scanner object. * @note This function does not reset the start condition to @c INITIAL . */ void globus_i_rvf_restart (FILE * input_file , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! YY_CURRENT_BUFFER ){ globus_i_rvf_ensure_buffer_stack (yyscanner); YY_CURRENT_BUFFER_LVALUE = globus_i_rvf__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); } globus_i_rvf__init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); globus_i_rvf__load_buffer_state(yyscanner ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * @param yyscanner The scanner object. */ void globus_i_rvf__switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* TODO. We should be able to replace this entire function body * with * globus_i_rvf_pop_buffer_state(); * globus_i_rvf_push_buffer_state(new_buffer); */ globus_i_rvf_ensure_buffer_stack (yyscanner); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } YY_CURRENT_BUFFER_LVALUE = new_buffer; globus_i_rvf__load_buffer_state(yyscanner ); /* We don't actually know whether we did this switch during * EOF (globus_i_rvf_wrap()) processing, but the only time this flag * is looked at is after globus_i_rvf_wrap() is called, so it's safe * to go ahead and always set it. */ yyg->yy_did_buffer_switch_on_eof = 1; } static void globus_i_rvf__load_buffer_state (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; yyg->yy_hold_char = *yyg->yy_c_buf_p; } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * @param yyscanner The scanner object. * @return the allocated buffer state. */ YY_BUFFER_STATE globus_i_rvf__create_buffer (FILE * file, int size , yyscan_t yyscanner) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) globus_i_rvf_alloc(sizeof( struct yy_buffer_state ) ,yyscanner ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in globus_i_rvf__create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) globus_i_rvf_alloc(b->yy_buf_size + 2 ,yyscanner ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in globus_i_rvf__create_buffer()" ); b->yy_is_our_buffer = 1; globus_i_rvf__init_buffer(b,file ,yyscanner); return b; } /** Destroy the buffer. * @param b a buffer created with globus_i_rvf__create_buffer() * @param yyscanner The scanner object. */ void globus_i_rvf__delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) globus_i_rvf_free((void *) b->yy_ch_buf ,yyscanner ); globus_i_rvf_free((void *) b ,yyscanner ); } #ifndef __cplusplus extern int isatty (int ); #endif /* __cplusplus */ /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a globus_i_rvf_restart() or at EOF. */ static void globus_i_rvf__init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) { int oerrno = errno; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; globus_i_rvf__flush_buffer(b ,yyscanner); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then globus_i_rvf__init_buffer was _probably_ * called from globus_i_rvf_restart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * @param yyscanner The scanner object. */ void globus_i_rvf__flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) globus_i_rvf__load_buffer_state(yyscanner ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * @param yyscanner The scanner object. */ void globus_i_rvf_push_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (new_buffer == NULL) return; globus_i_rvf_ensure_buffer_stack(yyscanner); /* This block is copied from globus_i_rvf__switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) yyg->yy_buffer_stack_top++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from globus_i_rvf__switch_to_buffer. */ globus_i_rvf__load_buffer_state(yyscanner ); yyg->yy_did_buffer_switch_on_eof = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * @param yyscanner The scanner object. */ void globus_i_rvf_pop_buffer_state (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!YY_CURRENT_BUFFER) return; globus_i_rvf__delete_buffer(YY_CURRENT_BUFFER ,yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; if (yyg->yy_buffer_stack_top > 0) --yyg->yy_buffer_stack_top; if (YY_CURRENT_BUFFER) { globus_i_rvf__load_buffer_state(yyscanner ); yyg->yy_did_buffer_switch_on_eof = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void globus_i_rvf_ensure_buffer_stack (yyscan_t yyscanner) { yy_size_t num_to_alloc; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!yyg->yy_buffer_stack) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; yyg->yy_buffer_stack = (struct yy_buffer_state**)globus_i_rvf_alloc (num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); if ( ! yyg->yy_buffer_stack ) YY_FATAL_ERROR( "out of dynamic memory in globus_i_rvf_ensure_buffer_stack()" ); memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); yyg->yy_buffer_stack_max = num_to_alloc; yyg->yy_buffer_stack_top = 0; return; } if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = yyg->yy_buffer_stack_max + grow_size; yyg->yy_buffer_stack = (struct yy_buffer_state**)globus_i_rvf_realloc (yyg->yy_buffer_stack, num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); if ( ! yyg->yy_buffer_stack ) YY_FATAL_ERROR( "out of dynamic memory in globus_i_rvf_ensure_buffer_stack()" ); /* zero only the new slots.*/ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); yyg->yy_buffer_stack_max = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE globus_i_rvf__scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) globus_i_rvf_alloc(sizeof( struct yy_buffer_state ) ,yyscanner ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in globus_i_rvf__scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; globus_i_rvf__switch_to_buffer(b ,yyscanner ); return b; } /** Setup the input buffer state to scan a string. The next call to globus_i_rvf_lex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * @param yyscanner The scanner object. * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * globus_i_rvf__scan_bytes() instead. */ YY_BUFFER_STATE globus_i_rvf__scan_string (yyconst char * yystr , yyscan_t yyscanner) { return globus_i_rvf__scan_bytes(yystr,strlen(yystr) ,yyscanner); } /** Setup the input buffer state to scan the given bytes. The next call to globus_i_rvf_lex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE globus_i_rvf__scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) globus_i_rvf_alloc(n ,yyscanner ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in globus_i_rvf__scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = globus_i_rvf__scan_buffer(buf,n ,yyscanner); if ( ! b ) YY_FATAL_ERROR( "bad buffer in globus_i_rvf__scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ yyg->yy_hold_char = *yyg->yy_c_buf_p; \ *yyg->yy_c_buf_p = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the user-defined data for this scanner. * @param yyscanner The scanner object. */ YY_EXTRA_TYPE globus_i_rvf_get_extra (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyextra; } /** Get the current line number. * @param yyscanner The scanner object. */ int globus_i_rvf_get_lineno (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (! YY_CURRENT_BUFFER) return 0; return yylineno; } /** Get the current column number. * @param yyscanner The scanner object. */ int globus_i_rvf_get_column (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (! YY_CURRENT_BUFFER) return 0; return yycolumn; } /** Get the input stream. * @param yyscanner The scanner object. */ FILE *globus_i_rvf_get_in (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyin; } /** Get the output stream. * @param yyscanner The scanner object. */ FILE *globus_i_rvf_get_out (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyout; } /** Get the length of the current token. * @param yyscanner The scanner object. */ yy_size_t globus_i_rvf_get_leng (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyleng; } /** Get the current token. * @param yyscanner The scanner object. */ char *globus_i_rvf_get_text (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yytext; } /** Set the user-defined data. This data is never touched by the scanner. * @param user_defined The data to be associated with this scanner. * @param yyscanner The scanner object. */ void globus_i_rvf_set_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyextra = user_defined ; } /** Set the current line number. * @param line_number * @param yyscanner The scanner object. */ void globus_i_rvf_set_lineno (int line_number , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* lineno is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) yy_fatal_error( "globus_i_rvf_set_lineno called with no buffer" , yyscanner); yylineno = line_number; } /** Set the current column. * @param line_number * @param yyscanner The scanner object. */ void globus_i_rvf_set_column (int column_no , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* column is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) yy_fatal_error( "globus_i_rvf_set_column called with no buffer" , yyscanner); yycolumn = column_no; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * @param yyscanner The scanner object. * @see globus_i_rvf__switch_to_buffer */ void globus_i_rvf_set_in (FILE * in_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyin = in_str ; } void globus_i_rvf_set_out (FILE * out_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyout = out_str ; } int globus_i_rvf_get_debug (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yy_flex_debug; } void globus_i_rvf_set_debug (int bdebug , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_flex_debug = bdebug ; } /* Accessor methods for yylval and yylloc */ YYSTYPE * globus_i_rvf_get_lval (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yylval; } void globus_i_rvf_set_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yylval = yylval_param; } YYLTYPE *globus_i_rvf_get_lloc (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yylloc; } void globus_i_rvf_set_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yylloc = yylloc_param; } /* User-visible API */ /* globus_i_rvf_lex_init is special because it creates the scanner itself, so it is * the ONLY reentrant function that doesn't take the scanner as the last argument. * That's why we explicitly handle the declaration, instead of using our macros. */ int globus_i_rvf_lex_init(yyscan_t* ptr_yy_globals) { if (ptr_yy_globals == NULL){ errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t) globus_i_rvf_alloc ( sizeof( struct yyguts_t ), NULL ); if (*ptr_yy_globals == NULL){ errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); return yy_init_globals ( *ptr_yy_globals ); } /* globus_i_rvf_lex_init_extra has the same functionality as globus_i_rvf_lex_init, but follows the * convention of taking the scanner as the last argument. Note however, that * this is a *pointer* to a scanner, as it will be allocated by this call (and * is the reason, too, why this function also must handle its own declaration). * The user defined value in the first argument will be available to globus_i_rvf_alloc in * the yyextra field. */ int globus_i_rvf_lex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) { struct yyguts_t dummy_yyguts; globus_i_rvf_set_extra (yy_user_defined, &dummy_yyguts); if (ptr_yy_globals == NULL){ errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t) globus_i_rvf_alloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); if (*ptr_yy_globals == NULL){ errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); globus_i_rvf_set_extra (yy_user_defined, *ptr_yy_globals); return yy_init_globals ( *ptr_yy_globals ); } static int yy_init_globals (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* Initialization is the same as for the non-reentrant scanner. * This function is called from globus_i_rvf_lex_destroy(), so don't allocate here. */ yyg->yy_buffer_stack = 0; yyg->yy_buffer_stack_top = 0; yyg->yy_buffer_stack_max = 0; yyg->yy_c_buf_p = (char *) 0; yyg->yy_init = 0; yyg->yy_start = 0; yyg->yy_start_stack_ptr = 0; yyg->yy_start_stack_depth = 0; yyg->yy_start_stack = NULL; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = (FILE *) 0; yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * globus_i_rvf_lex_init() */ return 0; } /* globus_i_rvf_lex_destroy is for both reentrant and non-reentrant scanners. */ int globus_i_rvf_lex_destroy (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ globus_i_rvf__delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); YY_CURRENT_BUFFER_LVALUE = NULL; globus_i_rvf_pop_buffer_state(yyscanner); } /* Destroy the stack itself. */ globus_i_rvf_free(yyg->yy_buffer_stack ,yyscanner); yyg->yy_buffer_stack = NULL; /* Destroy the start condition stack. */ globus_i_rvf_free(yyg->yy_start_stack ,yyscanner ); yyg->yy_start_stack = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * globus_i_rvf_lex() is called, initialization will occur. */ yy_init_globals( yyscanner); /* Destroy the main struct (reentrant only). */ globus_i_rvf_free ( yyscanner , yyscanner ); yyscanner = NULL; return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *globus_i_rvf_alloc (yy_size_t size , yyscan_t yyscanner) { return (void *) malloc( size ); } void *globus_i_rvf_realloc (void * ptr, yy_size_t size , yyscan_t yyscanner) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void globus_i_rvf_free (void * ptr , yyscan_t yyscanner) { free( (char *) ptr ); /* see globus_i_rvf_realloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 216 "globus_i_rvf_scanner.l" globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_i_rvf_parser.h0000644000000000000000000000013214243161125024274 xustar000000000000000030 mtime=1653400149.362970081 30 atime=1653401831.694123644 30 ctime=1653404021.348746002 globus_gram_job_manager-15.8/rvf/globus_i_rvf_parser.h0000664000175000017500000000751414243161125024444 0ustar00johndoejohndoe00000000000000/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { RVF_TOKEN_ERROR = 258, RVF_TOKEN_COMMENT = 259, RVF_TOKEN_NEWLINE = 260, RVF_TOKEN_QUOTE = 261, RVF_TOKEN_ATTRIBUTE = 262, RVF_TOKEN_DEFAULT = 263, RVF_TOKEN_DEFAULTWHEN = 264, RVF_TOKEN_DESCRIPTION = 265, RVF_TOKEN_PUBLISH = 266, RVF_TOKEN_REQUIREDWHEN = 267, RVF_TOKEN_VALIDWHEN = 268, RVF_TOKEN_VALUES = 269, RVF_TOKEN_TEXT = 270, RVF_TOKEN_ASPECT_DELIMITER = 271, RVF_TOKEN_SUBMIT = 272, RVF_TOKEN_RESTART = 273, RVF_TOKEN_STDIO_UPDATE = 274, RVF_TOKEN_BOOL = 275 }; #endif /* Tokens. */ #define RVF_TOKEN_ERROR 258 #define RVF_TOKEN_COMMENT 259 #define RVF_TOKEN_NEWLINE 260 #define RVF_TOKEN_QUOTE 261 #define RVF_TOKEN_ATTRIBUTE 262 #define RVF_TOKEN_DEFAULT 263 #define RVF_TOKEN_DEFAULTWHEN 264 #define RVF_TOKEN_DESCRIPTION 265 #define RVF_TOKEN_PUBLISH 266 #define RVF_TOKEN_REQUIREDWHEN 267 #define RVF_TOKEN_VALIDWHEN 268 #define RVF_TOKEN_VALUES 269 #define RVF_TOKEN_TEXT 270 #define RVF_TOKEN_ASPECT_DELIMITER 271 #define RVF_TOKEN_SUBMIT 272 #define RVF_TOKEN_RESTART 273 #define RVF_TOKEN_STDIO_UPDATE 274 #define RVF_TOKEN_BOOL 275 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 74 "globus_i_rvf_parser.y" { int aspect_name; globus_bool_t bool_value; globus_rvf_record_t record; globus_i_rvf_aspect_t aspect; struct { enum {RVF_STRINGVAL, RVF_WHENVAL, RVF_BOOLVAL, RVF_EMPTYVAL } value_type; char *string_value; int when_value; globus_bool_t bool_value; } value; globus_list_t * validation_file; } /* Line 1529 of yacc.c. */ #line 104 "globus_i_rvf_parser.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_i_rvf_parser.c0000644000000000000000000000013214243161125024267 xustar000000000000000030 mtime=1653400149.362970081 30 atime=1653401831.644124115 30 ctime=1653404021.350745983 globus_gram_job_manager-15.8/rvf/globus_i_rvf_parser.c0000664000175000017500000020606514243161125024441 0ustar00johndoejohndoe00000000000000/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 1 /* Substitute the variable and function names. */ #define yyparse globus_i_rvf_parse #define yylex globus_i_rvf_lex #define yyerror globus_i_rvf_error #define yylval globus_i_rvf_lval #define yychar globus_i_rvf_char #define yydebug globus_i_rvf_debug #define yynerrs globus_i_rvf_nerrs #define yylloc globus_i_rvf_lloc /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { RVF_TOKEN_ERROR = 258, RVF_TOKEN_COMMENT = 259, RVF_TOKEN_NEWLINE = 260, RVF_TOKEN_QUOTE = 261, RVF_TOKEN_ATTRIBUTE = 262, RVF_TOKEN_DEFAULT = 263, RVF_TOKEN_DEFAULTWHEN = 264, RVF_TOKEN_DESCRIPTION = 265, RVF_TOKEN_PUBLISH = 266, RVF_TOKEN_REQUIREDWHEN = 267, RVF_TOKEN_VALIDWHEN = 268, RVF_TOKEN_VALUES = 269, RVF_TOKEN_TEXT = 270, RVF_TOKEN_ASPECT_DELIMITER = 271, RVF_TOKEN_SUBMIT = 272, RVF_TOKEN_RESTART = 273, RVF_TOKEN_STDIO_UPDATE = 274, RVF_TOKEN_BOOL = 275 }; #endif /* Tokens. */ #define RVF_TOKEN_ERROR 258 #define RVF_TOKEN_COMMENT 259 #define RVF_TOKEN_NEWLINE 260 #define RVF_TOKEN_QUOTE 261 #define RVF_TOKEN_ATTRIBUTE 262 #define RVF_TOKEN_DEFAULT 263 #define RVF_TOKEN_DEFAULTWHEN 264 #define RVF_TOKEN_DESCRIPTION 265 #define RVF_TOKEN_PUBLISH 266 #define RVF_TOKEN_REQUIREDWHEN 267 #define RVF_TOKEN_VALIDWHEN 268 #define RVF_TOKEN_VALUES 269 #define RVF_TOKEN_TEXT 270 #define RVF_TOKEN_ASPECT_DELIMITER 271 #define RVF_TOKEN_SUBMIT 272 #define RVF_TOKEN_RESTART 273 #define RVF_TOKEN_STDIO_UPDATE 274 #define RVF_TOKEN_BOOL 275 /* Copy the first part of user declarations. */ #line 1 "globus_i_rvf_parser.y" /* * Copyright 1999-2012 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_protocol_constants.h" #include "globus_rsl_assist.h" #include "globus_rvf_parser.h" #include "globus_i_rvf.h" #include "globus_i_rvf_parser.h" #include "globus_i_rvf_scanner.h" int globus_i_rvf_error(YYLTYPE * lloc, globus_list_t **output, void * scanner, char * str); static const globus_rvf_record_t empty_record = { NULL, NULL, NULL, NULL, -1, -1, -1, -1 }; static const globus_i_rvf_aspect_t empty_aspect = { 0 }; static int globus_l_rvf_debug = 0; static void globus_l_rvf_validation_record_destroy( globus_rvf_record_t * record); static void globus_l_rvf_records_destroy(globus_list_t *records); static int globus_l_rvf_attr_match( void * datum, void * args); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 74 "globus_i_rvf_parser.y" { int aspect_name; globus_bool_t bool_value; globus_rvf_record_t record; globus_i_rvf_aspect_t aspect; struct { enum {RVF_STRINGVAL, RVF_WHENVAL, RVF_BOOLVAL, RVF_EMPTYVAL } value_type; char *string_value; int when_value; globus_bool_t bool_value; } value; globus_list_t * validation_file; } /* Line 193 of yacc.c. */ #line 217 "globus_i_rvf_parser.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 242 "globus_i_rvf_parser.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; YYLTYPE yyls; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 7 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 51 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 21 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 17 /* YYNRULES -- Number of rules. */ #define YYNRULES 43 /* YYNRULES -- Number of states. */ #define YYNSTATES 51 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 275 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 7, 9, 11, 15, 17, 19, 20, 22, 25, 27, 30, 33, 36, 38, 40, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 67, 69, 70, 72, 74, 76, 77, 79, 81, 83, 86, 88, 90, 92, 94, 96 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 22, 0, -1, 25, 23, 25, -1, 25, -1, 1, -1, 23, 26, 24, -1, 24, -1, 28, -1, -1, 26, -1, 5, 26, -1, 5, -1, 4, 5, -1, 29, 28, -1, 27, 28, -1, 27, -1, 29, -1, 30, 31, 32, 37, -1, 7, -1, 8, -1, 10, -1, 14, -1, 9, -1, 13, -1, 12, -1, 11, -1, 16, -1, 6, 33, 6, -1, 34, -1, -1, 35, -1, 20, -1, 15, -1, -1, 35, -1, 20, -1, 15, -1, 36, 35, -1, 36, -1, 17, -1, 18, -1, 19, -1, 5, -1, 4, 5, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 131, 131, 211, 213, 218, 231, 248, 256, 258, 261, 262, 265, 268, 299, 302, 305, 335, 406, 406, 406, 406, 407, 407, 407, 408, 413, 416, 419, 422, 427, 431, 435, 439, 444, 448, 452, 458, 462, 467, 471, 475, 481, 482 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "RVF_TOKEN_ERROR", "RVF_TOKEN_COMMENT", "RVF_TOKEN_NEWLINE", "RVF_TOKEN_QUOTE", "RVF_TOKEN_ATTRIBUTE", "RVF_TOKEN_DEFAULT", "RVF_TOKEN_DEFAULTWHEN", "RVF_TOKEN_DESCRIPTION", "RVF_TOKEN_PUBLISH", "RVF_TOKEN_REQUIREDWHEN", "RVF_TOKEN_VALIDWHEN", "RVF_TOKEN_VALUES", "RVF_TOKEN_TEXT", "RVF_TOKEN_ASPECT_DELIMITER", "RVF_TOKEN_SUBMIT", "RVF_TOKEN_RESTART", "RVF_TOKEN_STDIO_UPDATE", "RVF_TOKEN_BOOL", "$accept", "validation_file", "records", "record", "optional_record_separator", "record_separator", "comment", "aspect_list", "aspect", "aspect_name", "aspect_delimiter", "aspect_value", "quoted_value", "unquoted_value", "when_value_list", "when_value", "end_of_aspect", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 21, 22, 22, 22, 23, 23, 24, 25, 25, 26, 26, 27, 28, 28, 28, 28, 29, 30, 30, 30, 30, 30, 30, 30, 30, 31, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 35, 35, 36, 36, 36, 37, 37 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 1, 1, 3, 1, 1, 0, 1, 2, 1, 2, 2, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, 1, 1, 1, 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 4, 11, 0, 3, 9, 10, 1, 0, 18, 19, 22, 20, 25, 24, 23, 21, 8, 6, 15, 7, 16, 0, 12, 2, 9, 14, 13, 26, 29, 5, 33, 36, 39, 40, 41, 35, 0, 28, 34, 38, 32, 31, 0, 30, 0, 42, 17, 37, 27, 43 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 3, 17, 18, 4, 5, 19, 20, 21, 22, 29, 37, 43, 38, 39, 40, 47 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -30 static const yytype_int8 yypact[] = { 9, -30, 7, 28, 35, -30, -30, -30, 25, -30, -30, -30, -30, -30, -30, -30, -30, 7, -30, 35, -30, 35, 16, -30, -30, 35, -30, -30, -30, 18, -30, -14, -30, -30, -30, -30, -30, 3, -30, -30, 8, -30, -30, 34, -30, 29, -30, -30, -30, -30, -30 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -30, -30, -30, 26, 24, -2, -30, 10, -30, -30, -30, -30, -30, -30, -29, -30, -30 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -9 static const yytype_int8 yytable[] = { 6, 41, 44, 33, 34, 35, 42, 45, 46, -8, 1, 48, 2, -8, 2, 25, -8, -8, -8, -8, -8, -8, -8, -8, 31, 33, 34, 35, 7, 26, 23, 27, 28, 32, 50, 33, 34, 35, 36, 8, 49, 24, 9, 10, 11, 12, 13, 14, 15, 16, 0, 30 }; static const yytype_int8 yycheck[] = { 2, 15, 31, 17, 18, 19, 20, 4, 5, 0, 1, 40, 5, 4, 5, 17, 7, 8, 9, 10, 11, 12, 13, 14, 6, 17, 18, 19, 0, 19, 5, 21, 16, 15, 5, 17, 18, 19, 20, 4, 6, 17, 7, 8, 9, 10, 11, 12, 13, 14, -1, 25 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 1, 5, 22, 25, 26, 26, 0, 4, 7, 8, 9, 10, 11, 12, 13, 14, 23, 24, 27, 28, 29, 30, 5, 25, 26, 28, 28, 16, 31, 24, 6, 15, 17, 18, 19, 20, 32, 34, 35, 36, 15, 20, 33, 35, 4, 5, 37, 35, 6, 5 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (&yylloc, output, scanner, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, &yylloc, scanner) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, Location, output, scanner); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, globus_list_t ** output, void * scanner) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, output, scanner) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; YYLTYPE const * const yylocationp; globus_list_t ** output; void * scanner; #endif { if (!yyvaluep) return; YYUSE (yylocationp); YYUSE (output); YYUSE (scanner); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, globus_list_t ** output, void * scanner) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, output, scanner) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; YYLTYPE const * const yylocationp; globus_list_t ** output; void * scanner; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); YY_LOCATION_PRINT (yyoutput, *yylocationp); YYFPRINTF (yyoutput, ": "); yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, output, scanner); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, globus_list_t ** output, void * scanner) #else static void yy_reduce_print (yyvsp, yylsp, yyrule, output, scanner) YYSTYPE *yyvsp; YYLTYPE *yylsp; int yyrule; globus_list_t ** output; void * scanner; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , &(yylsp[(yyi + 1) - (yynrhs)]) , output, scanner); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, yylsp, Rule, output, scanner); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, globus_list_t ** output, void * scanner) #else static void yydestruct (yymsg, yytype, yyvaluep, yylocationp, output, scanner) const char *yymsg; int yytype; YYSTYPE *yyvaluep; YYLTYPE *yylocationp; globus_list_t ** output; void * scanner; #endif { YYUSE (yyvaluep); YYUSE (yylocationp); YYUSE (output); YYUSE (scanner); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { case 15: /* "RVF_TOKEN_TEXT" */ #line 118 "globus_i_rvf_parser.y" { if ((yyvaluep->value).value_type == RVF_STRINGVAL && (yyvaluep->value).string_value != NULL) { free((yyvaluep->value).string_value); } }; #line 1208 "globus_i_rvf_parser.c" break; case 23: /* "records" */ #line 126 "globus_i_rvf_parser.y" { globus_l_rvf_records_destroy((yyvaluep->validation_file)); }; #line 1213 "globus_i_rvf_parser.c" break; case 24: /* "record" */ #line 125 "globus_i_rvf_parser.y" { globus_l_rvf_validation_record_destroy(&(yyvaluep->record)); }; #line 1218 "globus_i_rvf_parser.c" break; case 28: /* "aspect_list" */ #line 125 "globus_i_rvf_parser.y" { globus_l_rvf_validation_record_destroy(&(yyvaluep->record)); }; #line 1223 "globus_i_rvf_parser.c" break; case 32: /* "aspect_value" */ #line 118 "globus_i_rvf_parser.y" { if ((yyvaluep->value).value_type == RVF_STRINGVAL && (yyvaluep->value).string_value != NULL) { free((yyvaluep->value).string_value); } }; #line 1233 "globus_i_rvf_parser.c" break; case 33: /* "quoted_value" */ #line 118 "globus_i_rvf_parser.y" { if ((yyvaluep->value).value_type == RVF_STRINGVAL && (yyvaluep->value).string_value != NULL) { free((yyvaluep->value).string_value); } }; #line 1243 "globus_i_rvf_parser.c" break; case 34: /* "unquoted_value" */ #line 118 "globus_i_rvf_parser.y" { if ((yyvaluep->value).value_type == RVF_STRINGVAL && (yyvaluep->value).string_value != NULL) { free((yyvaluep->value).string_value); } }; #line 1253 "globus_i_rvf_parser.c" break; case 35: /* "when_value_list" */ #line 118 "globus_i_rvf_parser.y" { if ((yyvaluep->value).value_type == RVF_STRINGVAL && (yyvaluep->value).string_value != NULL) { free((yyvaluep->value).string_value); } }; #line 1263 "globus_i_rvf_parser.c" break; case 36: /* "when_value" */ #line 118 "globus_i_rvf_parser.y" { if ((yyvaluep->value).value_type == RVF_STRINGVAL && (yyvaluep->value).string_value != NULL) { free((yyvaluep->value).string_value); } }; #line 1273 "globus_i_rvf_parser.c" break; default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (globus_list_t ** output, void * scanner); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (globus_list_t ** output, void * scanner) #else int yyparse (output, scanner) globus_list_t ** output; void * scanner; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /* Location data for the look-ahead symbol. */ YYLTYPE yylloc; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE *yyls = yylsa; YYLTYPE *yylsp; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[2]; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; yylsp = yyls; #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = 1; yylloc.first_column = yylloc.last_column = 0; #endif goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; YYLTYPE *yyls1 = yyls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yyls1, yysize * sizeof (*yylsp), &yystacksize); yyls = yyls1; yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); YYSTACK_RELOCATE (yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; *++yylsp = yylloc; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; /* Default location. */ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 131 "globus_i_rvf_parser.y" { while (!globus_list_empty((yyvsp[(2) - (3)].validation_file))) { globus_list_t * node; globus_rvf_record_t *record; record = globus_list_remove(&(yyvsp[(2) - (3)].validation_file), (yyvsp[(2) - (3)].validation_file)); if (record->attribute == NULL) { globus_l_rvf_validation_record_destroy(record); free(record); continue; } node = globus_list_search_pred( *output, globus_l_rvf_attr_match, record->attribute); if (node) { /* * Validation record already exists; override changed * values. */ globus_rvf_record_t * old_record; old_record = globus_list_first(node); if(record->description) { if(old_record->description) { free(old_record->description); } old_record->description = record->description; record->description = NULL; } if(record->default_value) { if(old_record->default_value) { free(old_record->default_value); } old_record->default_value = record->default_value; record->default_value = NULL; } if(record->enumerated_values) { if(old_record->enumerated_values) { free(old_record->enumerated_values); } old_record->enumerated_values = record->enumerated_values; record->enumerated_values = NULL; } if(record->required_when != -1) { old_record->required_when = record->required_when; } if(record->default_when != -1) { old_record->default_when = record->default_when; } if(record->valid_when != -1) { old_record->valid_when = record->valid_when; } if(record->publishable != -1) { old_record->publishable = record->publishable; } free(record); record = GLOBUS_NULL; } else { globus_list_insert(output, record); } } } break; case 3: #line 211 "globus_i_rvf_parser.y" { } break; case 4: #line 213 "globus_i_rvf_parser.y" { return 1; } break; case 5: #line 218 "globus_i_rvf_parser.y" { globus_rvf_record_t * record; record = malloc(sizeof(globus_rvf_record_t)); if (record == NULL) { YYERROR; } *record = (yyvsp[(3) - (3)].record); (yyval.validation_file) = (yyvsp[(1) - (3)].validation_file); globus_list_insert(&(yyval.validation_file), record); } break; case 6: #line 231 "globus_i_rvf_parser.y" { globus_rvf_record_t * record; (yyval.validation_file) = NULL; record = malloc(sizeof(globus_rvf_record_t)); if (record == NULL) { YYERROR; } *record = (yyvsp[(1) - (1)].record); globus_list_insert(&(yyval.validation_file), record); } break; case 7: #line 248 "globus_i_rvf_parser.y" { if ((yyvsp[(1) - (1)].record).attribute != NULL) { globus_rsl_assist_string_canonicalize((yyval.record).attribute); } (yyval.record) = (yyvsp[(1) - (1)].record); } break; case 13: #line 268 "globus_i_rvf_parser.y" { (yyval.record) = (yyvsp[(2) - (2)].record); switch ((yyvsp[(1) - (2)].aspect).aspect) { case RVF_TOKEN_ATTRIBUTE: (yyval.record).attribute = (yyvsp[(1) - (2)].aspect).string_value; break; case RVF_TOKEN_DEFAULT: (yyval.record).default_value = (yyvsp[(1) - (2)].aspect).string_value; break; case RVF_TOKEN_DEFAULTWHEN: (yyval.record).default_when = (yyvsp[(1) - (2)].aspect).when_value; break; case RVF_TOKEN_DESCRIPTION: (yyval.record).description = (yyvsp[(1) - (2)].aspect).string_value; break; case RVF_TOKEN_PUBLISH: (yyval.record).publishable = (yyvsp[(1) - (2)].aspect).bool_value; break; case RVF_TOKEN_REQUIREDWHEN: (yyval.record).required_when = (yyvsp[(1) - (2)].aspect).when_value; break; case RVF_TOKEN_VALIDWHEN: (yyval.record).valid_when = (yyvsp[(1) - (2)].aspect).when_value; break; case RVF_TOKEN_VALUES: (yyval.record).enumerated_values = (yyvsp[(1) - (2)].aspect).string_value; break; } } break; case 14: #line 299 "globus_i_rvf_parser.y" { (yyval.record) = (yyvsp[(2) - (2)].record); } break; case 15: #line 302 "globus_i_rvf_parser.y" { (yyval.record) = empty_record; } break; case 16: #line 305 "globus_i_rvf_parser.y" { (yyval.record) = empty_record; switch ((yyvsp[(1) - (1)].aspect).aspect) { case RVF_TOKEN_ATTRIBUTE: (yyval.record).attribute = (yyvsp[(1) - (1)].aspect).string_value; break; case RVF_TOKEN_DEFAULT: (yyval.record).default_value = (yyvsp[(1) - (1)].aspect).string_value; break; case RVF_TOKEN_DEFAULTWHEN: (yyval.record).default_when = (yyvsp[(1) - (1)].aspect).when_value; break; case RVF_TOKEN_DESCRIPTION: (yyval.record).description = (yyvsp[(1) - (1)].aspect).string_value; break; case RVF_TOKEN_PUBLISH: (yyval.record).publishable = (yyvsp[(1) - (1)].aspect).bool_value; break; case RVF_TOKEN_REQUIREDWHEN: (yyval.record).required_when = (yyvsp[(1) - (1)].aspect).when_value; break; case RVF_TOKEN_VALIDWHEN: (yyval.record).valid_when = (yyvsp[(1) - (1)].aspect).when_value; break; } } break; case 17: #line 335 "globus_i_rvf_parser.y" { (yyval.aspect) = empty_aspect; switch ((yyvsp[(1) - (4)].aspect_name)) { case RVF_TOKEN_ATTRIBUTE: case RVF_TOKEN_DEFAULT: case RVF_TOKEN_DESCRIPTION: case RVF_TOKEN_VALUES: if ((yyvsp[(3) - (4)].value).value_type == RVF_STRINGVAL) { (yyval.aspect).aspect = (yyvsp[(1) - (4)].aspect_name); (yyval.aspect).string_value = (yyvsp[(3) - (4)].value).string_value; } else if ((yyvsp[(3) - (4)].value).value_type == RVF_EMPTYVAL) { (yyval.aspect).aspect = (yyvsp[(1) - (4)].aspect_name); (yyval.aspect).string_value = NULL; } else { YYERROR; } break; case RVF_TOKEN_DEFAULTWHEN: case RVF_TOKEN_VALIDWHEN: case RVF_TOKEN_REQUIREDWHEN: if ((yyvsp[(3) - (4)].value).value_type == RVF_WHENVAL) { (yyval.aspect).aspect = (yyvsp[(1) - (4)].aspect_name); (yyval.aspect).when_value = (yyvsp[(3) - (4)].value).when_value; } else if ((yyvsp[(3) - (4)].value).value_type == RVF_EMPTYVAL) { (yyval.aspect).aspect = (yyvsp[(1) - (4)].aspect_name); (yyval.aspect).when_value = 0; } else { if ((yyvsp[(3) - (4)].value).value_type == RVF_STRINGVAL && (yyvsp[(3) - (4)].value).string_value != NULL) { free((yyvsp[(3) - (4)].value).string_value); (yyvsp[(3) - (4)].value).string_value = NULL; } YYERROR; } break; case RVF_TOKEN_PUBLISH: if ((yyvsp[(3) - (4)].value).value_type == RVF_BOOLVAL) { (yyval.aspect).aspect = (yyvsp[(1) - (4)].aspect_name); (yyval.aspect).bool_value = (yyvsp[(3) - (4)].value).bool_value; } else { if ((yyvsp[(3) - (4)].value).value_type == RVF_STRINGVAL && (yyvsp[(3) - (4)].value).string_value != NULL) { free((yyvsp[(3) - (4)].value).string_value); (yyvsp[(3) - (4)].value).string_value = NULL; } YYERROR; } break; } } break; case 25: #line 408 "globus_i_rvf_parser.y" { (yyval.aspect_name) = (yyvsp[(1) - (1)].aspect_name); } break; case 27: #line 416 "globus_i_rvf_parser.y" { (yyval.value) = (yyvsp[(2) - (3)].value); } break; case 28: #line 419 "globus_i_rvf_parser.y" { (yyval.value) = (yyvsp[(1) - (1)].value); } break; case 29: #line 422 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_EMPTYVAL; } break; case 30: #line 427 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_WHENVAL; (yyval.value).when_value = (yyvsp[(1) - (1)].value).when_value; } break; case 31: #line 431 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_BOOLVAL; (yyval.value).bool_value = (yyvsp[(1) - (1)].bool_value); } break; case 32: #line 435 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_STRINGVAL; (yyval.value).string_value = (yyvsp[(1) - (1)].value).string_value; } break; case 33: #line 439 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_EMPTYVAL; } break; case 34: #line 444 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_WHENVAL; (yyval.value).when_value = (yyvsp[(1) - (1)].value).when_value; } break; case 35: #line 448 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_BOOLVAL; (yyval.value).bool_value = (yyvsp[(1) - (1)].bool_value); } break; case 36: #line 452 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_STRINGVAL; (yyval.value).string_value = (yyvsp[(1) - (1)].value).string_value; } break; case 37: #line 458 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_WHENVAL; (yyval.value).when_value = (yyvsp[(1) - (2)].value).when_value | (yyvsp[(2) - (2)].value).when_value; } break; case 38: #line 462 "globus_i_rvf_parser.y" { (yyval.value) = (yyvsp[(1) - (1)].value); } break; case 39: #line 467 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_WHENVAL; (yyval.value).when_value = 1; } break; case 40: #line 471 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_WHENVAL; (yyval.value).when_value = 2; } break; case 41: #line 475 "globus_i_rvf_parser.y" { (yyval.value).value_type = RVF_WHENVAL; (yyval.value).when_value = 4; } break; case 43: #line 482 "globus_i_rvf_parser.y" { } break; /* Line 1267 of yacc.c. */ #line 2022 "globus_i_rvf_parser.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; *++yylsp = yyloc; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (&yylloc, output, scanner, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (&yylloc, output, scanner, yymsg); } else { yyerror (&yylloc, output, scanner, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } yyerror_range[0] = yylloc; if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, &yylloc, output, scanner); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; yyerror_range[0] = yylsp[1-yylen]; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yyerror_range[0] = *yylsp; yydestruct ("Error: popping", yystos[yystate], yyvsp, yylsp, output, scanner); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; yyerror_range[1] = yylloc; /* Using YYLLOC is tempting, but would change the location of the look-ahead. YYLOC is available though. */ YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); *++yylsp = yyloc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (&yylloc, output, scanner, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, output, scanner); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, yylsp, output, scanner); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 484 "globus_i_rvf_parser.y" typedef struct globus_rvf_extra_s { char * buf; char * path; char * err; } globus_rvf_extra_t; int globus_i_rvf_error(YYLTYPE * lloc, globus_list_t **output, void * scanner, char * str) { globus_rvf_extra_t * extra; extra = globus_i_rvf_get_extra(scanner); extra->err = globus_common_create_string( "unable to parse %s at line %d (token starting with <<<%.15s>>>) %s", extra->path ? extra->path : "string", globus_i_rvf_get_lineno(scanner), globus_i_rvf_get_text(scanner), str); return 0; } static int globus_l_rvf_attr_match( void * datum, void * args) { globus_rvf_record_t * tmp = datum; return (strcmp(tmp->attribute, args) == 0); } /* globus_l_rvf_attr_match() */ static void globus_l_rvf_validation_record_destroy( globus_rvf_record_t * record) { if (record->attribute) { free(record->attribute); } if (record->description) { free(record->description); } if (record->default_value) { free(record->default_value); } if (record->enumerated_values) { free(record->enumerated_values); } } static void globus_l_rvf_records_destroy(globus_list_t *records) { globus_list_t * l = records; while (!globus_list_empty(l)) { globus_rvf_record_t * record; record = globus_list_remove(&l, l); globus_l_rvf_validation_record_destroy(record); } } /* globus_l_rvf_records_destroy() */ /* Public API of the parser: pass in a path, return a list of * rsl validation records. if an error occurs, returns a non-zero value * and sets errstr */ int globus_rvf_parse_file( char * path, globus_list_t **out, char ** errstr) { FILE * f = fopen(path, "r"); void * scanner; int rc; globus_rvf_extra_t extra; if (f == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_VALIDATION_FILE; *errstr = globus_common_create_string( "the job manager could not open the RSL attribute validation file \"%s\"", path ? path : "NULL"); return rc; } extra.buf = NULL; extra.path = path; extra.err = NULL; *errstr = NULL; globus_i_rvf_lex_init(&scanner); globus_i_rvf_set_extra(&extra, scanner); globus_i_rvf_set_debug(globus_l_rvf_debug, scanner); globus_i_rvf_set_in(f, scanner); rc = globus_i_rvf_parse(out, scanner); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_VALIDATION_FILE; *errstr = extra.err; } globus_i_rvf_lex_destroy(scanner); fclose(f); return rc; } /* globus_rvf_parse_file() */ /* Public API of the parser: pass in a path, return a list of * rsl validation records. if an error occurs, returns a non-zero value * and sets errstr */ int globus_rvf_parse_string( char * buffer, globus_list_t **out, char ** errstr) { void * scanner; int rc; globus_rvf_extra_t extra; YY_BUFFER_STATE lexbuf; extra.buf = buffer; extra.path = NULL; extra.err = NULL; *errstr = NULL; globus_i_rvf_lex_init(&scanner); globus_i_rvf_set_extra(&extra, scanner); globus_i_rvf_set_debug(globus_l_rvf_debug, scanner); lexbuf = globus_i_rvf__scan_string(buffer, scanner); rc = globus_i_rvf_parse(out, scanner); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_VALIDATION_FILE; *errstr = extra.err; } globus_i_rvf__delete_buffer(lexbuf, scanner); globus_i_rvf_lex_destroy(scanner); return rc; } /* globus_rvf_parse_string() */ globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_i_rvf_scanner.l0000644000000000000000000000012714243161125024441 xustar000000000000000029 mtime=1653400149.36397007 29 atime=1653400149.36397007 29 ctime=1653404021.36674583 globus_gram_job_manager-15.8/rvf/globus_i_rvf_scanner.l0000664000175000017500000001251014243161125024575 0ustar00johndoejohndoe00000000000000%{ /* * Copyright 1999-2012 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_rvf_parser.h" #include "globus_i_rvf.h" #include "globus_i_rvf_parser.h" %} COMMENT_CHAR "#" COMMENT ({COMMENT_CHAR}[^\n]*) NEWLINE [\n] WHITESPACE [ \t\r]+ WHITESPACE_OR_NEWLINE [ \n\t\r]+ ASPECT_DELIMITER [:] QUOTE ["] BOOL "true"|"false" UNQUOTED_TEXT ([^"# \r\t\n][^\n#]*) QUOTED_TEXT ([\\]["]|[^"])* SUBMIT "GLOBUS_GRAM_JOB_SUBMIT" RESTART "GLOBUS_GRAM_JOB_MANAGER_RESTART" STDIO_UPDATE "GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE" WHEN_VALUE {SUBMIT}|{RESTART}|{STDIO_UPDATE} WHEN_TRAIL (({WHITESPACE}({WHEN_VALUE}{WHITESPACE})*)|(({WHITESPACE}{WHEN_VALUE})*))? QUOTED_WHEN_TRAIL ({WHITESPACE_OR_NEWLINE}({WHEN_VALUE}{WHITESPACE_OR_NEWLINE})*({WHEN_VALUE}?{WHITESPACE_OR_NEWLINE}?))? QUOTED_BOOL ({WHITESPACE}|{NEWLINE})*{BOOL}({WHITESPACE}|{NEWLINE})* %x DELIMITER VALUE QUOTED QUOTED_WHENVAL QUOTE_END VALUE_END %option reentrant %option prefix="globus_i_rvf_" %option outfile="globus_i_rvf_scanner.c" %option header-file="globus_i_rvf_scanner.h" %option nodefault %option yylineno %option noyywrap %option nounput %option bison-bridge %option bison-locations %% {COMMENT}/"\n" { return RVF_TOKEN_COMMENT; } {COMMENT} { BEGIN(VALUE_END); return RVF_TOKEN_COMMENT; } (?i:Attribute) { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_ATTRIBUTE; return RVF_TOKEN_ATTRIBUTE; } (?i:Default) { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_DEFAULT; return RVF_TOKEN_DEFAULT; } (?i:DefaultWhen) { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_DEFAULTWHEN; return RVF_TOKEN_DEFAULTWHEN; } (?i:Description) { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_DESCRIPTION; return RVF_TOKEN_DESCRIPTION; } (?i:Publish) { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_PUBLISH; return RVF_TOKEN_PUBLISH; } (?i:RequiredWhen) { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_REQUIREDWHEN; return RVF_TOKEN_REQUIREDWHEN; } (?i:ValidWhen) { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_VALIDWHEN; return RVF_TOKEN_VALIDWHEN; } (?i:Values) { BEGIN(DELIMITER); yylval->aspect_name = RVF_TOKEN_VALUES; return RVF_TOKEN_VALUES; } {ASPECT_DELIMITER} { BEGIN(VALUE); return RVF_TOKEN_ASPECT_DELIMITER; } <*>{WHITESPACE} { ; } {NEWLINE} { BEGIN(INITIAL); return RVF_TOKEN_NEWLINE; } {SUBMIT}/{WHEN_TRAIL} { return RVF_TOKEN_SUBMIT; } {RESTART}/{WHEN_TRAIL} { return RVF_TOKEN_RESTART; } {STDIO_UPDATE}/{WHEN_TRAIL} { return RVF_TOKEN_STDIO_UPDATE; } {BOOL} { yylval->bool_value = (strstr(yytext, "true") != NULL); return RVF_TOKEN_BOOL; } {QUOTE} { BEGIN(QUOTED); return RVF_TOKEN_QUOTE; } {UNQUOTED_TEXT} { BEGIN(VALUE_END); yylval->value.value_type = RVF_STRINGVAL; yylval->value.string_value = strdup(yytext); return RVF_TOKEN_TEXT; } {QUOTED_BOOL} { yylval->bool_value = (strstr(yytext, "true") != NULL); BEGIN(QUOTE_END); return RVF_TOKEN_BOOL; } {SUBMIT}/{QUOTED_WHEN_TRAIL} { BEGIN(QUOTED_WHENVAL); return RVF_TOKEN_SUBMIT; } {STDIO_UPDATE}/{QUOTED_WHEN_TRAIL} { BEGIN(QUOTED_WHENVAL); return RVF_TOKEN_STDIO_UPDATE; } {RESTART}/{QUOTED_WHEN_TRAIL} { BEGIN(QUOTED_WHENVAL); return RVF_TOKEN_STDIO_UPDATE; } {QUOTED_TEXT} { int len = strlen(yytext); int i,j; yylval->value.value_type = RVF_STRINGVAL; yylval->value.string_value = malloc(len+1); if (yylval->value.string_value == NULL) { return RVF_TOKEN_ERROR; } for (i = 0, j = 0; i < len; i++) { if (yytext[i] == '\\' && yytext[i+1] == '"') { i++; yylval->value.string_value[j++] = '"'; } else { yylval->value.string_value[j++] = yytext[i]; } } yylval->value.string_value[j] = '\0'; BEGIN(QUOTE_END); return RVF_TOKEN_TEXT; } {QUOTE} { BEGIN(VALUE_END); return RVF_TOKEN_QUOTE; } {NEWLINE} { ; } <*>.|{NEWLINE} { return RVF_TOKEN_ERROR; } globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_i_rvf_parser.y0000644000000000000000000000013214243161125024315 xustar000000000000000030 mtime=1653400149.362970081 30 atime=1653400149.362970081 30 ctime=1653404021.373745763 globus_gram_job_manager-15.8/rvf/globus_i_rvf_parser.y0000664000175000017500000004073614243161125024470 0ustar00johndoejohndoe00000000000000%{ /* * Copyright 1999-2012 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_protocol_constants.h" #include "globus_rsl_assist.h" #include "globus_rvf_parser.h" #include "globus_i_rvf.h" #include "globus_i_rvf_parser.h" #include "globus_i_rvf_scanner.h" int globus_i_rvf_error(YYLTYPE * lloc, globus_list_t **output, void * scanner, char * str); static const globus_rvf_record_t empty_record = { NULL, NULL, NULL, NULL, -1, -1, -1, -1 }; static const globus_i_rvf_aspect_t empty_aspect = { 0 }; static int globus_l_rvf_debug = 0; static void globus_l_rvf_validation_record_destroy( globus_rvf_record_t * record); static void globus_l_rvf_records_destroy(globus_list_t *records); static int globus_l_rvf_attr_match( void * datum, void * args); %} %pure-parser %error-verbose %locations %parse-param { globus_list_t ** output } %parse-param { void * scanner } %lex-param { void * scanner } %debug %file-prefix="globus_i_rvf_" %name-prefix="globus_i_rvf_" %output="globus_i_rvf_parser.c" %start validation_file %union { int aspect_name; globus_bool_t bool_value; globus_rvf_record_t record; globus_i_rvf_aspect_t aspect; struct { enum {RVF_STRINGVAL, RVF_WHENVAL, RVF_BOOLVAL, RVF_EMPTYVAL } value_type; char *string_value; int when_value; globus_bool_t bool_value; } value; globus_list_t * validation_file; } %token RVF_TOKEN_ERROR RVF_TOKEN_COMMENT RVF_TOKEN_NEWLINE RVF_TOKEN_QUOTE /* Separate records by having a newline between them */ /* String value for some RVF aspects */ /* Aspect Name Tokens */ %token RVF_TOKEN_ATTRIBUTE %token RVF_TOKEN_DEFAULT %token RVF_TOKEN_DEFAULTWHEN %token RVF_TOKEN_DESCRIPTION %token RVF_TOKEN_PUBLISH %token RVF_TOKEN_REQUIREDWHEN %token RVF_TOKEN_VALIDWHEN %token RVF_TOKEN_VALUES %token RVF_TOKEN_TEXT /* Delimiter between aspect name and value */ %token RVF_TOKEN_ASPECT_DELIMITER /* When values */ %token RVF_TOKEN_SUBMIT %token RVF_TOKEN_RESTART %token RVF_TOKEN_STDIO_UPDATE %token RVF_TOKEN_BOOL %type records %type record %type aspect_list %type aspect %type aspect_name %type aspect_value quoted_value unquoted_value when_value when_value_list %destructor { if ($$.value_type == RVF_STRINGVAL && $$.string_value != NULL) { free($$.string_value); } } RVF_TOKEN_TEXT aspect_value quoted_value unquoted_value when_value when_value_list %destructor { globus_l_rvf_validation_record_destroy(&$$); } record aspect_list %destructor { globus_l_rvf_records_destroy($$); } records %% validation_file: optional_record_separator records optional_record_separator { while (!globus_list_empty($2)) { globus_list_t * node; globus_rvf_record_t *record; record = globus_list_remove(&$2, $2); if (record->attribute == NULL) { globus_l_rvf_validation_record_destroy(record); free(record); continue; } node = globus_list_search_pred( *output, globus_l_rvf_attr_match, record->attribute); if (node) { /* * Validation record already exists; override changed * values. */ globus_rvf_record_t * old_record; old_record = globus_list_first(node); if(record->description) { if(old_record->description) { free(old_record->description); } old_record->description = record->description; record->description = NULL; } if(record->default_value) { if(old_record->default_value) { free(old_record->default_value); } old_record->default_value = record->default_value; record->default_value = NULL; } if(record->enumerated_values) { if(old_record->enumerated_values) { free(old_record->enumerated_values); } old_record->enumerated_values = record->enumerated_values; record->enumerated_values = NULL; } if(record->required_when != -1) { old_record->required_when = record->required_when; } if(record->default_when != -1) { old_record->default_when = record->default_when; } if(record->valid_when != -1) { old_record->valid_when = record->valid_when; } if(record->publishable != -1) { old_record->publishable = record->publishable; } free(record); record = GLOBUS_NULL; } else { globus_list_insert(output, record); } } } | optional_record_separator { } | error { return 1; } records: records record_separator record { globus_rvf_record_t * record; record = malloc(sizeof(globus_rvf_record_t)); if (record == NULL) { YYERROR; } *record = $3; $$ = $1; globus_list_insert(&$$, record); } | record { globus_rvf_record_t * record; $$ = NULL; record = malloc(sizeof(globus_rvf_record_t)); if (record == NULL) { YYERROR; } *record = $1; globus_list_insert(&$$, record); } record: aspect_list { if ($1.attribute != NULL) { globus_rsl_assist_string_canonicalize($$.attribute); } $$ = $1; } optional_record_separator: /* empty */ | record_separator record_separator: RVF_TOKEN_NEWLINE record_separator | RVF_TOKEN_NEWLINE comment: RVF_TOKEN_COMMENT RVF_TOKEN_NEWLINE aspect_list: aspect aspect_list { $$ = $2; switch ($1.aspect) { case RVF_TOKEN_ATTRIBUTE: $$.attribute = $1.string_value; break; case RVF_TOKEN_DEFAULT: $$.default_value = $1.string_value; break; case RVF_TOKEN_DEFAULTWHEN: $$.default_when = $1.when_value; break; case RVF_TOKEN_DESCRIPTION: $$.description = $1.string_value; break; case RVF_TOKEN_PUBLISH: $$.publishable = $1.bool_value; break; case RVF_TOKEN_REQUIREDWHEN: $$.required_when = $1.when_value; break; case RVF_TOKEN_VALIDWHEN: $$.valid_when = $1.when_value; break; case RVF_TOKEN_VALUES: $$.enumerated_values = $1.string_value; break; } } | comment aspect_list { $$ = $2; } | comment { $$ = empty_record; } | aspect { $$ = empty_record; switch ($1.aspect) { case RVF_TOKEN_ATTRIBUTE: $$.attribute = $1.string_value; break; case RVF_TOKEN_DEFAULT: $$.default_value = $1.string_value; break; case RVF_TOKEN_DEFAULTWHEN: $$.default_when = $1.when_value; break; case RVF_TOKEN_DESCRIPTION: $$.description = $1.string_value; break; case RVF_TOKEN_PUBLISH: $$.publishable = $1.bool_value; break; case RVF_TOKEN_REQUIREDWHEN: $$.required_when = $1.when_value; break; case RVF_TOKEN_VALIDWHEN: $$.valid_when = $1.when_value; break; } } aspect: aspect_name aspect_delimiter aspect_value end_of_aspect { $$ = empty_aspect; switch ($1) { case RVF_TOKEN_ATTRIBUTE: case RVF_TOKEN_DEFAULT: case RVF_TOKEN_DESCRIPTION: case RVF_TOKEN_VALUES: if ($3.value_type == RVF_STRINGVAL) { $$.aspect = $1; $$.string_value = $3.string_value; } else if ($3.value_type == RVF_EMPTYVAL) { $$.aspect = $1; $$.string_value = NULL; } else { YYERROR; } break; case RVF_TOKEN_DEFAULTWHEN: case RVF_TOKEN_VALIDWHEN: case RVF_TOKEN_REQUIREDWHEN: if ($3.value_type == RVF_WHENVAL) { $$.aspect = $1; $$.when_value = $3.when_value; } else if ($3.value_type == RVF_EMPTYVAL) { $$.aspect = $1; $$.when_value = 0; } else { if ($3.value_type == RVF_STRINGVAL && $3.string_value != NULL) { free($3.string_value); $3.string_value = NULL; } YYERROR; } break; case RVF_TOKEN_PUBLISH: if ($3.value_type == RVF_BOOLVAL) { $$.aspect = $1; $$.bool_value = $3.bool_value; } else { if ($3.value_type == RVF_STRINGVAL && $3.string_value != NULL) { free($3.string_value); $3.string_value = NULL; } YYERROR; } break; } } aspect_name: RVF_TOKEN_ATTRIBUTE | RVF_TOKEN_DEFAULT | RVF_TOKEN_DESCRIPTION | RVF_TOKEN_VALUES | RVF_TOKEN_DEFAULTWHEN | RVF_TOKEN_VALIDWHEN | RVF_TOKEN_REQUIREDWHEN | RVF_TOKEN_PUBLISH { $$ = $1; } aspect_delimiter: RVF_TOKEN_ASPECT_DELIMITER aspect_value: RVF_TOKEN_QUOTE quoted_value RVF_TOKEN_QUOTE { $$ = $2; } | unquoted_value { $$ = $1; } | /* empty */ { $$.value_type = RVF_EMPTYVAL; } quoted_value: when_value_list { $$.value_type = RVF_WHENVAL; $$.when_value = $1.when_value; } | RVF_TOKEN_BOOL { $$.value_type = RVF_BOOLVAL; $$.bool_value = $1; } | RVF_TOKEN_TEXT { $$.value_type = RVF_STRINGVAL; $$.string_value = $1.string_value; } | /* empty */ { $$.value_type = RVF_EMPTYVAL; } unquoted_value: when_value_list { $$.value_type = RVF_WHENVAL; $$.when_value = $1.when_value; } | RVF_TOKEN_BOOL { $$.value_type = RVF_BOOLVAL; $$.bool_value = $1; } | RVF_TOKEN_TEXT { $$.value_type = RVF_STRINGVAL; $$.string_value = $1.string_value; } when_value_list: when_value when_value_list { $$.value_type = RVF_WHENVAL; $$.when_value = $1.when_value | $2.when_value; } | when_value { $$ = $1; } when_value: RVF_TOKEN_SUBMIT { $$.value_type = RVF_WHENVAL; $$.when_value = 1; } | RVF_TOKEN_RESTART { $$.value_type = RVF_WHENVAL; $$.when_value = 2; } | RVF_TOKEN_STDIO_UPDATE { $$.value_type = RVF_WHENVAL; $$.when_value = 4; } end_of_aspect: RVF_TOKEN_NEWLINE | RVF_TOKEN_COMMENT RVF_TOKEN_NEWLINE { } %% typedef struct globus_rvf_extra_s { char * buf; char * path; char * err; } globus_rvf_extra_t; int globus_i_rvf_error(YYLTYPE * lloc, globus_list_t **output, void * scanner, char * str) { globus_rvf_extra_t * extra; extra = globus_i_rvf_get_extra(scanner); extra->err = globus_common_create_string( "unable to parse %s at line %d (token starting with <<<%.15s>>>) %s", extra->path ? extra->path : "string", globus_i_rvf_get_lineno(scanner), globus_i_rvf_get_text(scanner), str); return 0; } static int globus_l_rvf_attr_match( void * datum, void * args) { globus_rvf_record_t * tmp = datum; return (strcmp(tmp->attribute, args) == 0); } /* globus_l_rvf_attr_match() */ static void globus_l_rvf_validation_record_destroy( globus_rvf_record_t * record) { if (record->attribute) { free(record->attribute); } if (record->description) { free(record->description); } if (record->default_value) { free(record->default_value); } if (record->enumerated_values) { free(record->enumerated_values); } } static void globus_l_rvf_records_destroy(globus_list_t *records) { globus_list_t * l = records; while (!globus_list_empty(l)) { globus_rvf_record_t * record; record = globus_list_remove(&l, l); globus_l_rvf_validation_record_destroy(record); } } /* globus_l_rvf_records_destroy() */ /* Public API of the parser: pass in a path, return a list of * rsl validation records. if an error occurs, returns a non-zero value * and sets errstr */ int globus_rvf_parse_file( char * path, globus_list_t **out, char ** errstr) { FILE * f = fopen(path, "r"); void * scanner; int rc; globus_rvf_extra_t extra; if (f == NULL) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_VALIDATION_FILE; *errstr = globus_common_create_string( "the job manager could not open the RSL attribute validation file \"%s\"", path ? path : "NULL"); return rc; } extra.buf = NULL; extra.path = path; extra.err = NULL; *errstr = NULL; globus_i_rvf_lex_init(&scanner); globus_i_rvf_set_extra(&extra, scanner); globus_i_rvf_set_debug(globus_l_rvf_debug, scanner); globus_i_rvf_set_in(f, scanner); rc = globus_i_rvf_parse(out, scanner); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_VALIDATION_FILE; *errstr = extra.err; } globus_i_rvf_lex_destroy(scanner); fclose(f); return rc; } /* globus_rvf_parse_file() */ /* Public API of the parser: pass in a path, return a list of * rsl validation records. if an error occurs, returns a non-zero value * and sets errstr */ int globus_rvf_parse_string( char * buffer, globus_list_t **out, char ** errstr) { void * scanner; int rc; globus_rvf_extra_t extra; YY_BUFFER_STATE lexbuf; extra.buf = buffer; extra.path = NULL; extra.err = NULL; *errstr = NULL; globus_i_rvf_lex_init(&scanner); globus_i_rvf_set_extra(&extra, scanner); globus_i_rvf_set_debug(globus_l_rvf_debug, scanner); lexbuf = globus_i_rvf__scan_string(buffer, scanner); rc = globus_i_rvf_parse(out, scanner); if (rc != GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_READING_VALIDATION_FILE; *errstr = extra.err; } globus_i_rvf__delete_buffer(lexbuf, scanner); globus_i_rvf_lex_destroy(scanner); return rc; } /* globus_rvf_parse_string() */ globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_i_rvf.h0000644000000000000000000000013214243161125022720 xustar000000000000000030 mtime=1653400149.361970091 30 atime=1653401831.632124228 30 ctime=1653404021.377745725 globus_gram_job_manager-15.8/rvf/globus_i_rvf.h0000664000175000017500000000151614243161125023064 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2014 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_I_RVF_H #define GLOBUS_I_RVF_H #include "globus_common.h" typedef struct { int aspect; char *string_value; int when_value; globus_bool_t bool_value; } globus_i_rvf_aspect_t; #endif /* GLOBUS_I_RVF_H */ globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_rvf_parser.h0000644000000000000000000000013114243161125023763 xustar000000000000000029 mtime=1653400149.36497006 30 atime=1653401831.665123917 30 ctime=1653404021.381745687 globus_gram_job_manager-15.8/rvf/globus_rvf_parser.h0000664000175000017500000000673214243161125024135 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2014 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GLOBUS_RVF_PARSER_H #define GLOBUS_RVF_PARSER_H 1 #include "globus_common.h" #ifdef __cplusplus extern "C" { #endif #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL /** * @defgroup globus_gram_job_manager_rsl_validation RSL Validation * @brief RSL Validation * RSL Validation * * Validates that a request's RSL contains only valid parameters, and that * all required parameters are defined. * * RSL Validation operates on an RSL, and one or more validation files. * The format of the validation files is defined in the * @ref globus_gram_job_manager_rsl_validation_file * section of the manual. */ /** * RSL Validation Record * @ingroup globus_gram_job_manager_rsl_validation * * Contains Information parsed from the validation file about a single * RSL parameter. */ typedef struct { /** The name of the RSL attribute this record refers to. */ char * attribute; /** * A textual description of the RSL parameter. This is not * used other than for debugging the parser. */ char * description; /** * Default value of the parameter to be inserted in the RSL * if the parameter is not present. */ char * default_value; /** * String containing an enumeration of legal values for the * RSL parameter. For example, for the grammyjob parameter, this * would be "collective independent". */ char * enumerated_values; /** * Bitwise or of values of the * globus_i_gram_job_manager_validation_when_t values, indicated * when, if ever, this RSL parameter is required. */ int required_when; /** * Bitwise or of values of the * globus_i_gram_job_manager_validation_when_t values, indicated * when, if ever, this RSL parameter's default value should be * inserted into the RSL. */ int default_when; /** * Bitwise or of values of the * globus_i_gram_job_manager_validation_when_t values, indicated * when, if ever, this RSL parameter is valid. */ int valid_when; /** * Boolean indicating whether this attribute should be published * in the MDS. */ globus_bool_t publishable; } globus_rvf_record_t; extern int globus_rvf_parse_file( char * rvf_path, globus_list_t ** out_attr_list, char ** error_string); extern int globus_rvf_parse_string( char * rvf_string, globus_list_t ** out_attr_list, char ** error_string); #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */ #ifdef __cplusplus } #endif #endif /* GLOBUS_RVF_PARSER_H */ globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_rvf_check.c0000644000000000000000000000013114243161125023537 xustar000000000000000029 mtime=1653400149.36497006 30 atime=1653401831.811122542 30 ctime=1653404021.383745668 globus_gram_job_manager-15.8/rvf/globus_rvf_check.c0000664000175000017500000001155014243161125023703 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2012 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_rvf_parser.h" #include #include static void globus_l_free_record(void *value) { globus_rvf_record_t *record = value; if (record->attribute) { free(record->attribute); } if (record->description) { free(record->description); } if (record->default_value) { free(record->default_value); } if (record->enumerated_values) { free(record->enumerated_values); } free(record); } static void print_string_value(char * aspect, char * value) { printf("%s: ", aspect); if (strchr(value, '\n') != NULL) { putchar('"'); while (*value) { if (*value == '"') { putchar('\\'); } putchar(*value); value++; } putchar('"'); putchar('\n'); } else { printf("%s\n", value); } } static void print_when_value(char * aspect, int value) { printf("%s: ", aspect); if (value > 0) { if (value & 1) { printf("GLOBUS_GRAM_JOB_SUBMIT "); } if (value & 2) { printf("GLOBUS_GRAM_JOB_MANAGER_RESTART "); } if (value & 4) { printf("GLOBUS_GRAM_JOB_MANAGER_STDIO_UPDATE "); } } putchar('\n'); } static void print_bool_value(char * aspect, int value) { printf("%s: %s\n", aspect, value ? "true" : "false"); } int main(int argc, char * argv[]) { int i; int rc = 0; int dump=0; globus_module_activate(GLOBUS_COMMON_MODULE); for (i = 1; i < argc; i++) { if ((strcmp(argv[i], "-h") == 0) || (strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-help") == 0)) { printf("Usage: %s [-d|-help] RVF-FILE-PATH...\n", basename(argv[0])); goto done; } else if (strcmp(argv[i], "-d") == 0) { dump = 1; } else { break; } } for (; i < argc; i++) { int local_rc; globus_list_t *l=0; char * err; local_rc = globus_rvf_parse_file( argv[i], &l, &err); if (local_rc == 0) { if (dump) { globus_list_t * tmp; printf("# Parsed results from %s\n", argv[i]); tmp = l; for (tmp = l; tmp != NULL; tmp = globus_list_rest(tmp)) { globus_rvf_record_t *r; r = globus_list_first(tmp); print_string_value("Attribute", r->attribute); if (r->description) { print_string_value("Description", r->description); } if (r->default_value) { print_string_value("Default", r->default_value); } if (r->enumerated_values) { print_string_value("Values", r->enumerated_values); } if (r->required_when != -1) { print_when_value("RequiredWhen", r->required_when); } if (r->default_when != -1) { print_when_value("DefaultWhen", r->default_when); } if (r->valid_when != -1) { print_when_value("ValidWhen", r->valid_when); } print_bool_value("Publish", r->publishable); printf("\n"); } } else { printf("%s: ok [%d record%s]\n", argv[i], (int)globus_list_size(l), (int)globus_list_size(l)>1 ? "s" : ""); } globus_list_destroy_all(l, globus_l_free_record); } else { printf("%s\n", err); free(err); rc |= local_rc; } } done: globus_module_deactivate(GLOBUS_COMMON_MODULE); return rc; } globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus-rvf-edit.80000644000000000000000000000013214243161125023171 xustar000000000000000030 mtime=1653400149.361970091 30 atime=1653400149.361970091 30 ctime=1653404021.385745649 globus_gram_job_manager-15.8/rvf/globus-rvf-edit.80000664000175000017500000000526014243161125023335 0ustar00johndoejohndoe00000000000000'\" t .\" Title: globus-rvf-edit .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 12/17/2018 .\" Manual: Grid Community Toolkit Manual .\" Source: Grid Community Toolkit 6 .\" Language: English .\" .TH "GLOBUS\-RVF\-EDIT" "8" "12/17/2018" "Grid Community Toolkit 6" "Grid Community Toolkit Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" globus-rvf-edit \- Edit a GRAM5 RSL validation file .SH "SYNOPSIS" .sp \fBglobus\-rvf\-edit\fR \-h | \-s | \-l \fILRM\fR | \-f \fIPATH\fR .SH "DESCRIPTION" .sp The \fBglobus\-rvf\-edit\fR command is a utility which opens the default editor on a specified RSL validation file, and then, when editing completes, runs the command is a utility which opens the default editor on a specified RSL validation file, and then, when editing completes, runs the \fBglobus\-rvf\-check\fR command to verify that the RVF file syntax is correct\&. If a parse error occurs, the user will be given an option to rerun the editor or discard the modifications\&. command to verify that the RVF file syntax is correct\&. If a parse error occurs, the user will be given an option to rerun the editor or discard the modifications\&. .sp The full set of command\-line options to \fBglobus\-rvf\-edit\fR consists of: consists of: .PP \fB\-h\fR .RS 4 Print command\-line option summary and exit .RE .PP \fB\-s\fR .RS 4 Edit of the site\-specific RVF file, which provides override values applicable to all LRMs installed on the system\&. .RE .PP \fB\-l \fR\fB\fILRM\fR\fR .RS 4 Edit the site\-specific LRM overrides for the LRM named by the \fILRM\fR parameter to the option\&. .RE .PP \fB\-f \fR\fB\fIPATH\fR\fR .RS 4 Edit the RVF file located at \fIPATH\fR .RE .SH "SEE ALSO" .sp globus\-rvf\-check(8) .SH "AUTHOR" .sp Copyright \(co 1999\-2016 University of Chicago globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus-rvf-check.80000644000000000000000000000013114243161125023320 xustar000000000000000030 mtime=1653400149.361970091 30 atime=1653400149.361970091 29 ctime=1653404021.38874562 globus_gram_job_manager-15.8/rvf/globus-rvf-check.80000664000175000017500000000551214243161125023465 0ustar00johndoejohndoe00000000000000'\" t .\" Title: globus-rvf-check .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 12/17/2018 .\" Manual: Grid Community Toolkit Manual .\" Source: Grid Community Toolkit 6 .\" Language: English .\" .TH "GLOBUS\-RVF\-CHECK" "8" "12/17/2018" "Grid Community Toolkit 6" "Grid Community Toolkit Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" globus-rvf-check \- Edit a GRAM5 RSL validation file .SH "SYNOPSIS" .sp \fBglobus\-rvf\-check\fR \-h | \-help | \-\-help | \-d .SH "DESCRIPTION" .sp The \fBglobus\-rvf\-check\fR command is a utility which checks the syntax of a RSL validation file, and prints out parse errors when encountered\&. It can also parse the RVF file contents and then dump file\(cqs contents to stdout, after canonicalizing values and quoting\&. The exit code of command is a utility which checks the syntax of a RSL validation file, and prints out parse errors when encountered\&. It can also parse the RVF file contents and then dump file\(cqs contents to stdout, after canonicalizing values and quoting\&. The exit code of \fBglobus\-rvf\-check\fR is 0 if all files specified on the command line exist and have no parse errors\&. is 0 if all files specified on the command line exist and have no parse errors\&. .sp The full set of command\-line options to \fBglobus\-rvf\-check\fR consists of: consists of: .PP \fB\-h, \-help, \-\-help\fR .RS 4 Print command\-line option summary and exit .RE .PP \fB\-d\fR .RS 4 Dump the RVF contents to stdout\&. In the output, Each file which is parsed will be prefixed by an RVF comment which contains the input filename\&. If not specified, \fBglobus\-rvf\-check\fR just prints a diagnostic message to standard output indicating whether the file could be parsed\&. just prints a diagnostic message to standard output indicating whether the file could be parsed\&. .RE .SH "SEE ALSO" .sp globus\-rvf\-edit(8) .SH "AUTHOR" .sp Copyright \(co 1999\-2016 University of Chicago globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus-rvf-edit.txt0000644000000000000000000000013214243161125023641 xustar000000000000000030 mtime=1653400149.361970091 30 atime=1653400149.361970091 30 ctime=1653404021.390745601 globus_gram_job_manager-15.8/rvf/globus-rvf-edit.txt0000664000175000017500000000304214243161125024001 0ustar00johndoejohndoe00000000000000[[gram5-cmd-globus-rvf-edit]] GLOBUS-RVF-EDIT(8) ================== :doctype: manpage :man source: Grid Community Toolkit :man version: 6 :man manual: Grid Community Toolkit Manual :man software: Grid Community Toolkit NAME ---- globus-rvf-edit - Edit a GRAM5 RSL validation file SYNOPSIS -------- **++globus-rvf-edit++** -h | -s | -l 'LRM' | -f 'PATH' == Description == The **++globus-rvf-edit++** command is a utility which opens the default editor on a specified RSL validation file, and then, when editing completes, runs the command is a utility which opens the default editor on a specified RSL validation file, and then, when editing completes, runs the **++globus-rvf-check++** command to verify that the RVF file syntax is correct. If a parse error occurs, the user will be given an option to rerun the editor or discard the modifications. command to verify that the RVF file syntax is correct. If a parse error occurs, the user will be given an option to rerun the editor or discard the modifications. The full set of command-line options to **++globus-rvf-edit++** consists of: consists of: *-h*:: Print command-line option summary and exit *-s*:: Edit of the site-specific RVF file, which provides override values applicable to all LRMs installed on the system. *-l 'LRM'*:: Edit the site-specific LRM overrides for the LRM named by the 'LRM' parameter to the option. *-f 'PATH'*:: Edit the RVF file located at 'PATH' SEE ALSO -------- globus-rvf-check(8) AUTHOR ------ Copyright (C) 1999-2016 University of Chicago globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus-rvf-check.txt0000644000000000000000000000013214243161125023771 xustar000000000000000030 mtime=1653400149.361970091 30 atime=1653400149.361970091 30 ctime=1653404021.393745573 globus_gram_job_manager-15.8/rvf/globus-rvf-check.txt0000664000175000017500000000335314243161125024136 0ustar00johndoejohndoe00000000000000[[gram5-cmd-globus-rvf-check]] GLOBUS-RVF-CHECK(8) =================== :doctype: manpage :man source: Grid Community Toolkit :man version: 6 :man manual: Grid Community Toolkit Manual :man software: Grid Community Toolkit NAME ---- globus-rvf-check - Edit a GRAM5 RSL validation file SYNOPSIS -------- *globus-rvf-check* -h | -help | --help | -d DESCRIPTION ----------- The *globus-rvf-check* command is a utility which checks the syntax of a RSL validation file, and prints out parse errors when encountered. It can also parse the RVF file contents and then dump file's contents to stdout, after canonicalizing values and quoting. The exit code of command is a utility which checks the syntax of a RSL validation file, and prints out parse errors when encountered. It can also parse the RVF file contents and then dump file's contents to stdout, after canonicalizing values and quoting. The exit code of *globus-rvf-check* is 0 if all files specified on the command line exist and have no parse errors. is 0 if all files specified on the command line exist and have no parse errors. The full set of command-line options to *globus-rvf-check* consists of: consists of: *-h, -help, --help*:: Print command-line option summary and exit *-d*:: Dump the RVF contents to stdout. In the output, Each file which is parsed will be prefixed by an RVF comment which contains the input filename. If not specified, *globus-rvf-check* just prints a diagnostic message to standard output indicating whether the file could be parsed. just prints a diagnostic message to standard output indicating whether the file could be parsed. SEE ALSO -------- globus-rvf-edit(8) AUTHOR ------ Copyright (C) 1999-2016 University of Chicago globus_gram_job_manager-15.8/rvf/PaxHeaders.31186/globus_i_rvf_scanner.h0000644000000000000000000000013114243161125024430 xustar000000000000000029 mtime=1653400149.36397007 30 atime=1653401831.706123531 30 ctime=1653404021.395745554 globus_gram_job_manager-15.8/rvf/globus_i_rvf_scanner.h0000664000175000017500000002154314243161125024577 0ustar00johndoejohndoe00000000000000#ifndef globus_i_rvf_HEADER_H #define globus_i_rvf_HEADER_H 1 #define globus_i_rvf_IN_HEADER 1 #line 6 "globus_i_rvf_scanner.h" #line 8 "globus_i_rvf_scanner.h" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void* yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ void globus_i_rvf_restart (FILE *input_file ,yyscan_t yyscanner ); void globus_i_rvf__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); YY_BUFFER_STATE globus_i_rvf__create_buffer (FILE *file,int size ,yyscan_t yyscanner ); void globus_i_rvf__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void globus_i_rvf__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void globus_i_rvf_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); void globus_i_rvf_pop_buffer_state (yyscan_t yyscanner ); YY_BUFFER_STATE globus_i_rvf__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); YY_BUFFER_STATE globus_i_rvf__scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); YY_BUFFER_STATE globus_i_rvf__scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); void *globus_i_rvf_alloc (yy_size_t ,yyscan_t yyscanner ); void *globus_i_rvf_realloc (void *,yy_size_t ,yyscan_t yyscanner ); void globus_i_rvf_free (void * ,yyscan_t yyscanner ); #define globus_i_rvf_wrap(n) 1 #define YY_SKIP_YYWRAP #define yytext_ptr yytext_r #ifdef YY_HEADER_EXPORT_START_CONDITIONS #define INITIAL 0 #define DELIMITER 1 #define VALUE 2 #define QUOTED 3 #define QUOTED_WHENVAL 4 #define QUOTE_END 5 #define VALUE_END 6 #endif #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif int globus_i_rvf_lex_init (yyscan_t* scanner); int globus_i_rvf_lex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int globus_i_rvf_lex_destroy (yyscan_t yyscanner ); int globus_i_rvf_get_debug (yyscan_t yyscanner ); void globus_i_rvf_set_debug (int debug_flag ,yyscan_t yyscanner ); YY_EXTRA_TYPE globus_i_rvf_get_extra (yyscan_t yyscanner ); void globus_i_rvf_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); FILE *globus_i_rvf_get_in (yyscan_t yyscanner ); void globus_i_rvf_set_in (FILE * in_str ,yyscan_t yyscanner ); FILE *globus_i_rvf_get_out (yyscan_t yyscanner ); void globus_i_rvf_set_out (FILE * out_str ,yyscan_t yyscanner ); yy_size_t globus_i_rvf_get_leng (yyscan_t yyscanner ); char *globus_i_rvf_get_text (yyscan_t yyscanner ); int globus_i_rvf_get_lineno (yyscan_t yyscanner ); void globus_i_rvf_set_lineno (int line_number ,yyscan_t yyscanner ); YYSTYPE * globus_i_rvf_get_lval (yyscan_t yyscanner ); void globus_i_rvf_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); YYLTYPE *globus_i_rvf_get_lloc (yyscan_t yyscanner ); void globus_i_rvf_set_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int globus_i_rvf_wrap (yyscan_t yyscanner ); #else extern int globus_i_rvf_wrap (yyscan_t yyscanner ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int globus_i_rvf_lex \ (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner); #define YY_DECL int globus_i_rvf_lex \ (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) #endif /* !YY_DECL */ /* yy_get_previous_state - get the state just before the EOB char was reached */ #undef YY_NEW_FILE #undef YY_FLUSH_BUFFER #undef yy_set_bol #undef yy_new_buffer #undef yy_set_interactive #undef YY_DO_BEFORE_ACTION #ifdef YY_DECL_IS_OURS #undef YY_DECL_IS_OURS #undef YY_DECL #endif #line 216 "globus_i_rvf_scanner.l" #line 348 "globus_i_rvf_scanner.h" #undef globus_i_rvf_IN_HEADER #endif /* globus_i_rvf_HEADER_H */ globus_gram_job_manager-15.8/PaxHeaders.31186/scripts0000644000000000000000000000013214243170565020714 xustar000000000000000030 mtime=1653404021.436745163 30 atime=1653404023.058729694 30 ctime=1653404021.436745163 globus_gram_job_manager-15.8/scripts/0000775000175000017500000000000014243170565021132 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/scripts/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453023033 xustar000000000000000030 mtime=1653400875.276640427 30 atime=1653401384.955597424 30 ctime=1653404021.432745201 globus_gram_job_manager-15.8/scripts/Makefile.in0000664000175000017500000003211214243162453023173 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = scripts DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = create_rsl_documentation.pl all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign scripts/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/scripts/PaxHeaders.31186/Makefile.am0000644000000000000000000000013114243161125023014 xustar000000000000000029 mtime=1653400149.36497006 30 atime=1653400875.250640684 30 ctime=1653404021.434745182 globus_gram_job_manager-15.8/scripts/Makefile.am0000664000175000017500000000005114243161125023152 0ustar00johndoejohndoe00000000000000EXTRA_DIST = create_rsl_documentation.pl globus_gram_job_manager-15.8/scripts/PaxHeaders.31186/create_rsl_documentation.pl0000644000000000000000000000013014243161125026370 xustar000000000000000029 mtime=1653400149.36497006 29 atime=1653400149.36497006 30 ctime=1653404021.442745105 globus_gram_job_manager-15.8/scripts/create_rsl_documentation.pl0000664000175000017500000001004214243161125026530 0ustar00johndoejohndoe00000000000000#! /usr/bin/env perl if ($ARGV[0] eq '-x') { shift(@ARGV); %values = &read_input(); &print_xml(%values); } elsif ($ARGV[0] eq '-a') { shift(@ARGV); %values = &read_input(); &print_asciidoc(%values); } else { %values = &read_input(); &print_html(%values); } sub print_html { print < rsl 5 University of Chicago rsl GRAM5 RSL Attributes Description EOF foreach(sort keys %values) { my $shortname; my $default_value = ""; $shortname = lc($_); $shortname =~ s/_//g; next if($values{$_}{Publish} eq "false"); if (exists $values{$_}{Default}) { $default_value = " [Default: " . $values{$_}{Default} . "]"; } print < $_ $values{$_}{Description}$default_value EOF } print < EOF } sub print_asciidoc { print <]"; } print <) { s/#.*//; if($_ ne "\n") { $record .= $_; } else { &insert_record(\%result, $record); $record = ""; } } &insert_record(\%result, $record); return %result; } sub insert_record { my $hash = shift; my $data = shift; my %result; my $attribute; my $value; my $in_multiline = 0; foreach (split(/\n/, $data)) { if($in_multiline) { $value .= $_; if($value =~ m/[^\\]"/) { $value =~ s/\s+/ /g; $in_multiline = 0; $value =~ s/\\"/"/g; $value =~ s/^"//; $value =~ s/"$//; } else { next; } } else { ($attribute, $value) = split(/:/, $_, 2); if($value =~ m/^\s*".*[^"]$/) { # multiline value $in_multiline = 1; } elsif ($value =~ m/^\s*"[^"]*"$/) { $value =~ s/^\s*"/ /; $value =~ s/"$//; } $value =~ s/^\s*//; if($in_multiline) { if($value =~ m/[^\\]"/) { $value =~ s/\s+/ /g; $in_multiline = 0; $value =~ s/\\"/"/g; $value =~ s/^"//; $value =~ s/"$//; } } } $result{$attribute} = $value; } $attribute = $result{Attribute}; foreach (keys %result) { $hash->{$attribute}{$_} = $result{$_}; } } globus_gram_job_manager-15.8/PaxHeaders.31186/seg0000644000000000000000000000013214243170565020003 xustar000000000000000030 mtime=1653404021.487744676 30 atime=1653404023.058729694 30 ctime=1653404021.487744676 globus_gram_job_manager-15.8/seg/0000775000175000017500000000000014243170565020221 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/seg/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453022122 xustar000000000000000030 mtime=1653400875.325639942 30 atime=1653401385.021596771 30 ctime=1653404021.484744705 globus_gram_job_manager-15.8/seg/Makefile.in0000664000175000017500000005315214243162453022271 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = seg DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libglobus_seg_job_manager_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libglobus_seg_job_manager_la_OBJECTS = seg_job_manager_module.lo libglobus_seg_job_manager_la_OBJECTS = \ $(am_libglobus_seg_job_manager_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libglobus_seg_job_manager_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libglobus_seg_job_manager_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libglobus_seg_job_manager_la_SOURCES) DIST_SOURCES = $(libglobus_seg_job_manager_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Compiler flags AM_CPPFLAGS = $(PACKAGE_DEP_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/rvf \ $(XML_CPPFLAGS) \ -DGLOBUS_BUILTIN=1 lib_LTLIBRARIES = libglobus_seg_job_manager.la libglobus_seg_job_manager_la_SOURCES = seg_job_manager_module.c libglobus_seg_job_manager_la_LDFLAGS = -module -no-undefined -avoid-version libglobus_seg_job_manager_la_LIBADD = $(PACKAGE_DEP_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign seg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign seg/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libglobus_seg_job_manager.la: $(libglobus_seg_job_manager_la_OBJECTS) $(libglobus_seg_job_manager_la_DEPENDENCIES) $(EXTRA_libglobus_seg_job_manager_la_DEPENDENCIES) $(AM_V_CCLD)$(libglobus_seg_job_manager_la_LINK) -rpath $(libdir) $(libglobus_seg_job_manager_la_OBJECTS) $(libglobus_seg_job_manager_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seg_job_manager_module.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/seg/PaxHeaders.31186/Makefile.am0000644000000000000000000000013114243161125022103 xustar000000000000000029 mtime=1653400149.36497006 30 atime=1653400875.286640328 30 ctime=1653404021.485744695 globus_gram_job_manager-15.8/seg/Makefile.am0000664000175000017500000000066114243161125022250 0ustar00johndoejohndoe00000000000000# Compiler flags AM_CPPFLAGS = $(PACKAGE_DEP_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/rvf \ $(XML_CPPFLAGS) \ -DGLOBUS_BUILTIN=1 lib_LTLIBRARIES = libglobus_seg_job_manager.la libglobus_seg_job_manager_la_SOURCES = seg_job_manager_module.c libglobus_seg_job_manager_la_LDFLAGS = -module -no-undefined -avoid-version libglobus_seg_job_manager_la_LIBADD = $(PACKAGE_DEP_LIBS) globus_gram_job_manager-15.8/seg/PaxHeaders.31186/seg_job_manager_module.c0000644000000000000000000000013114243161125024662 xustar000000000000000029 mtime=1653400149.36597005 30 atime=1653401831.837122297 30 ctime=1653404021.487744676 globus_gram_job_manager-15.8/seg/seg_job_manager_module.c0000664000175000017500000006326114243161125025034 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_scheduler_event_generator.h" #include "globus_gram_protocol_constants.h" #include "version.h" #include /** * @file seg_job_manager_module.c * @brief Job Manager SEG Module */ #define SEG_JOB_MANAGER_DEBUG(level, message) \ GlobusDebugPrintf(SEG_JOB_MANAGER, level, message) #define JOB_MANAGER_SEG_SCHEDULER "JOB_MANAGER_SEG_SCHEDULER" #define JOB_MANAGER_SEG_LOG_PATH "JOB_MANAGER_SEG_LOG_PATH" /** * Debug levels: * If the environment variable SEG_JOB_MANAGER_DEBUG is set to a bitwise or * of these values, then a corresponding log message will be generated. */ typedef enum { /** * Information of function calls and exits */ SEG_JOB_MANAGER_DEBUG_INFO = (1<<0), /** * Warnings of things which may be bad. */ SEG_JOB_MANAGER_DEBUG_WARN = (1<<1), /** * Fatal errors. */ SEG_JOB_MANAGER_DEBUG_ERROR = (1<<2), /** * Details of function executions. */ SEG_JOB_MANAGER_DEBUG_TRACE = (1<<3) } globus_l_seg_job_manager_debug_level_t; enum { SEG_JOB_MANAGER_ERROR_UNKNOWN = 1, SEG_JOB_MANAGER_ERROR_OUT_OF_MEMORY, SEG_JOB_MANAGER_ERROR_BAD_PATH, SEG_JOB_MANAGER_ERROR_LOG_PERMISSIONS, SEG_JOB_MANAGER_ERROR_LOG_NOT_PRESENT, SEG_JOB_MANAGER_ERROR_LOG_EOF }; /** * State of the JOB_MANAGER log file parser. */ typedef struct { /** Path of the current log file being parsed */ char * path; /** Timestamp of when to start generating events from */ struct tm start_timestamp; /** Stdio file handle of the log file */ FILE * fp; /** Callback for periodic file polling */ globus_callback_handle_t callback; /** * Flag inidicating that this logfile isn't the one corresponding to * today, so and EOF on it should require us to close and open a newer * one */ globus_bool_t old_log; /** * Path to the directory where the JOB_MANAGER server log files are located */ char * log_dir; } globus_l_job_manager_logfile_state_t; static globus_mutex_t globus_l_job_manager_mutex; static globus_cond_t globus_l_job_manager_cond; static globus_bool_t shutdown_called; static int callback_count; GlobusDebugDefine(SEG_JOB_MANAGER); static int globus_l_job_manager_module_activate(void); static int globus_l_job_manager_module_deactivate(void); static void globus_l_job_manager_poll_callback( void * user_arg); static int globus_l_job_manager_parse_events( globus_l_job_manager_logfile_state_t * state); static void globus_l_job_manager_normalize_date( struct tm * tm); static int globus_l_job_manager_find_logfile( globus_l_job_manager_logfile_state_t * state); static globus_bool_t globus_l_time_is_newer( struct tm * value, struct tm * benchmark); static globus_bool_t globus_l_next_file_exists( globus_l_job_manager_logfile_state_t * state); GlobusExtensionDefineModule(globus_seg_job_manager) = { "globus_seg_job_manager", globus_l_job_manager_module_activate, globus_l_job_manager_module_deactivate, NULL, NULL, &local_version }; static int globus_l_job_manager_module_activate(void) { time_t timestamp_val; globus_l_job_manager_logfile_state_t * logfile_state; int rc; globus_reltime_t delay; globus_result_t result; char * scheduler; rc = globus_module_activate(GLOBUS_COMMON_MODULE); if (rc != GLOBUS_SUCCESS) { goto activate_common_failed; } rc = globus_mutex_init(&globus_l_job_manager_mutex, NULL); if (rc != GLOBUS_SUCCESS) { goto mutex_init_failed; } rc = globus_cond_init(&globus_l_job_manager_cond, NULL); if (rc != GLOBUS_SUCCESS) { goto cond_init_failed; } shutdown_called = GLOBUS_FALSE; callback_count = 0; GlobusDebugInit( SEG_JOB_MANAGER, SEG_JOB_MANAGER_DEBUG_INFO SEG_JOB_MANAGER_DEBUG_WARN SEG_JOB_MANAGER_DEBUG_ERROR SEG_JOB_MANAGER_DEBUG_TRACE); logfile_state = calloc(1, sizeof(globus_l_job_manager_logfile_state_t)); if (logfile_state == NULL) { goto calloc_state_failed; } /* Configuration info */ result = globus_scheduler_event_generator_get_timestamp(×tamp_val); if (result != GLOBUS_SUCCESS) { goto get_timestamp_failed; } if (timestamp_val != 0) { if (globus_libc_gmtime_r( ×tamp_val, &logfile_state->start_timestamp) == NULL) { goto gmtime_failed; } } scheduler = getenv(JOB_MANAGER_SEG_SCHEDULER); if (scheduler == NULL) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_ERROR, ("Error: %s not set\n", JOB_MANAGER_SEG_SCHEDULER)); result = GLOBUS_FAILURE; goto get_scheduler_failed; } if (getenv(JOB_MANAGER_SEG_LOG_PATH)) { logfile_state->log_dir = strdup(getenv(JOB_MANAGER_SEG_LOG_PATH)); } else { char * log_dir_pattern = globus_common_create_string( "${localstatedir}/lib/globus/globus-seg-%s", scheduler); globus_eval_path(log_dir_pattern, &logfile_state->log_dir); free(log_dir_pattern); } if (logfile_state->log_dir == NULL) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_ERROR, ("Error: out of memory\n")); goto get_path_failed; } /* Convert timestamp to filename */ rc = globus_l_job_manager_find_logfile(logfile_state); if (rc == GLOBUS_SUCCESS) { logfile_state->fp = fopen(logfile_state->path, "r"); if (logfile_state->fp == NULL) { rc = SEG_JOB_MANAGER_ERROR_OUT_OF_MEMORY; goto fopen_failed; } GlobusTimeReltimeSet(delay, 0, 0); } else if(rc == SEG_JOB_MANAGER_ERROR_LOG_NOT_PRESENT) { GlobusTimeReltimeSet(delay, 1, 0); } else { goto bad_log_path; } result = globus_callback_register_oneshot( &logfile_state->callback, &delay, globus_l_job_manager_poll_callback, logfile_state); if (result != GLOBUS_SUCCESS) { goto oneshot_failed; } callback_count++; return 0; oneshot_failed: if (logfile_state->fp) { fclose(logfile_state->fp); } fopen_failed: if (logfile_state->path) { free(logfile_state->path); } bad_log_path: free(logfile_state->log_dir); get_path_failed: get_scheduler_failed: get_timestamp_failed: gmtime_failed: free(logfile_state); calloc_state_failed: globus_cond_destroy(&globus_l_job_manager_cond); cond_init_failed: globus_mutex_destroy(&globus_l_job_manager_mutex); mutex_init_failed: globus_module_deactivate(GLOBUS_COMMON_MODULE); activate_common_failed: return 1; } /* globus_l_job_manager_module_activate() */ static int globus_l_job_manager_module_deactivate(void) { globus_mutex_lock(&globus_l_job_manager_mutex); shutdown_called = GLOBUS_TRUE; while (callback_count > 0) { globus_cond_wait(&globus_l_job_manager_cond, &globus_l_job_manager_mutex); } globus_mutex_unlock(&globus_l_job_manager_mutex); GlobusDebugDestroy(SEG_JOB_MANAGER); globus_module_deactivate(GLOBUS_COMMON_MODULE); return 0; } /** * Periodic poll of file to act like tail -f * * @param user_arg * Log file parsing state */ static void globus_l_job_manager_poll_callback( void * user_arg) { int rc; globus_l_job_manager_logfile_state_t * state = user_arg; globus_bool_t eof_hit = GLOBUS_FALSE; globus_reltime_t delay; globus_result_t result; time_t poll_time = time(NULL); struct tm poll_tm, *tm_result; struct stat stat; char * today; SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_INFO, ("globus_l_job_manager_poll_callback()\n")); globus_mutex_lock(&globus_l_job_manager_mutex); if (shutdown_called) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_INFO, ("polling while deactivating")); globus_mutex_unlock(&globus_l_job_manager_mutex); goto error; } globus_mutex_unlock(&globus_l_job_manager_mutex); if (state->fp != NULL) { /* Parse data */ SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_TRACE, ("parsing events\n")); rc = globus_l_job_manager_parse_events(state); if (rc == SEG_JOB_MANAGER_ERROR_LOG_EOF) { eof_hit = GLOBUS_TRUE; } } if (eof_hit) { tm_result = globus_libc_gmtime_r(&poll_time, &poll_tm); if (tm_result == NULL) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_WARN, ("Couldn't convert to gmtime\n")); } else { today = globus_common_create_string( "%s/%4d%02d%02d", state->log_dir, tm_result->tm_year+1900, tm_result->tm_mon+1, tm_result->tm_mday); if (today && (strcmp(today, state->path) != 0)) { /* New day... if new file exists and the old one hasn't changed since our * last poll, mark it as old */ if (globus_l_next_file_exists(state)) { rc = fstat(fileno(state->fp), &stat); if (rc != -1) { if (ftello(state->fp) == stat.st_size) { state->old_log = GLOBUS_TRUE; } } } } if (today) { free(today); } } } /* If end of log, close this logfile and look for a new one. Also, if * the current day's log doesn't exist yet, check for it */ if ((eof_hit && state->old_log) || state->fp == NULL) { if (state->fp) { fclose(state->fp); state->fp = NULL; state->start_timestamp.tm_mday++; state->start_timestamp.tm_hour = 0; state->start_timestamp.tm_min = 0; state->start_timestamp.tm_sec = 0; globus_l_job_manager_normalize_date(&state->start_timestamp); } rc = globus_l_job_manager_find_logfile(state); if (rc == GLOBUS_SUCCESS) { /* Opening a new logfile, run w/out delay */ state->fp = fopen(state->path, "r"); if (state->fp == NULL) { goto error; } eof_hit = GLOBUS_FALSE; GlobusTimeReltimeSet(delay, 0, 0); } else if (rc == SEG_JOB_MANAGER_ERROR_LOG_NOT_PRESENT) { /* Current day's logfile not present, wait a bit longer for * it to show up */ GlobusTimeReltimeSet(delay, 30, 0); eof_hit = GLOBUS_TRUE; } else { goto error; } } else if(eof_hit) { /* eof on current logfile, wait for new data */ GlobusTimeReltimeSet(delay, 2, 0); } else { /* still data available in current file, hurry up! */ GlobusTimeReltimeSet(delay, 0, 0); } result = globus_callback_register_oneshot( &state->callback, &delay, globus_l_job_manager_poll_callback, state); if (result != GLOBUS_SUCCESS) { goto error; } SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_INFO, ("globus_l_job_manager_poll_callback() exited with/success\n")); return; error: globus_mutex_lock(&globus_l_job_manager_mutex); if (shutdown_called) { callback_count--; if (callback_count == 0) { globus_cond_signal(&globus_l_job_manager_cond); } } globus_mutex_unlock(&globus_l_job_manager_mutex); SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_WARN, ("globus_l_job_manager_poll_callback() exited with/error\n")); return; } /* globus_l_job_manager_poll_callback() */ /** * Determine the next available JOB_MANAGER log file name from the * timestamp stored in the logfile state structure. * * @param state * JOB_MANAGER log state structure. The path field of the structure may be * modified by this function. * * @retval GLOBUS_SUCCESS * Name of an log file name has been found and the file exists. * @retval 1 * Something bad occurred. */ static int globus_l_job_manager_find_logfile( globus_l_job_manager_logfile_state_t * state) { struct tm * tm_result; struct tm tm_val; struct tm tm_now; globus_bool_t user_timestamp = GLOBUS_TRUE; time_t now; struct stat s; int rc; SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_INFO, ("globus_l_job_manager_find_logfile()\n")); if (state->path == NULL) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_TRACE, ("allocating path\n")); state->path = malloc(strlen(state->log_dir) + 10); if (state->path == NULL) { rc = SEG_JOB_MANAGER_ERROR_OUT_OF_MEMORY; goto error; } } now = time(NULL); tm_result = globus_libc_gmtime_r(&now, &tm_now); if (tm_result == NULL) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_WARN, ("localtime_r failed\n")); rc = SEG_JOB_MANAGER_ERROR_OUT_OF_MEMORY; goto error; } else { /* Get the first log message of the day */ tm_now.tm_sec = 0; tm_now.tm_min = 0; tm_now.tm_hour = 0; } if (state->start_timestamp.tm_sec == 0 && state->start_timestamp.tm_min == 0 && state->start_timestamp.tm_hour == 0 && state->start_timestamp.tm_mday == 0 && state->start_timestamp.tm_mon == 0 && state->start_timestamp.tm_year == 0) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_TRACE, ("no timestamp set, using current time\n")); memcpy(&state->start_timestamp, &tm_now, sizeof(struct tm)); user_timestamp = GLOBUS_FALSE; } memcpy(&tm_val, &state->start_timestamp, sizeof(struct tm)); tm_result = &tm_val; do { if (tm_result == NULL) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_WARN, ("couldn't get tm from timestmap\n")); rc = SEG_JOB_MANAGER_ERROR_OUT_OF_MEMORY; goto error; } if (tm_val.tm_year < tm_now.tm_year || (tm_val.tm_year == tm_now.tm_year && tm_val.tm_mon < tm_now.tm_mon) || (tm_val.tm_year == tm_now.tm_year && tm_val.tm_mon == tm_now.tm_mon && tm_val.tm_mday < tm_now.tm_mday)) { state->old_log = GLOBUS_TRUE; } else { state->old_log = GLOBUS_FALSE; } rc = sprintf(state->path, "%s/%4d%02d%02d", state->log_dir, tm_val.tm_year+1900, tm_val.tm_mon+1, tm_val.tm_mday); if (rc < 0) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_WARN, ("couldn't format date to string\n")); rc = SEG_JOB_MANAGER_ERROR_OUT_OF_MEMORY; goto error; } rc = stat(state->path, &s); if (rc < 0) { switch (errno) { case ENOENT: /* Doesn't exist, advance to the next day's log * for next try if we're not looking to the future. */ SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_ERROR, ("file %s doesn't exist\n", state->path)); /* Increment day by 1, then normalize to be a proper * struct tm without having tm_mday exceed what is valid * for the month. */ tm_val.tm_mday++; globus_l_job_manager_normalize_date(&tm_val); if (globus_l_time_is_newer(&tm_val, &tm_now)) { SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_ERROR, ("looking for file in the future!\n")); rc = SEG_JOB_MANAGER_ERROR_LOG_NOT_PRESENT; goto error; } /* Starting new log, get all messages in that file */ tm_val.tm_sec = 0; tm_val.tm_min = 0; tm_val.tm_hour = 0; memcpy(&state->start_timestamp, &tm_val, sizeof(struct tm)); break; case EACCES: SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_ERROR, ("permissions needed to access logfile %s\n", state->path)); /* Permission problem (fatal) */ rc = SEG_JOB_MANAGER_ERROR_LOG_PERMISSIONS; goto error; case ENOTDIR: #ifdef ELOOP case ELOOP: #endif case ENAMETOOLONG: /* broken path (fatal) */ SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_ERROR, ("broken path to logfile %s\n", state->path)); rc = SEG_JOB_MANAGER_ERROR_BAD_PATH; goto error; case EFAULT: SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_ERROR, ("bad pointer\n")); globus_assert(errno != EFAULT); case EINTR: case ENOMEM: /* low kernel mem */ /* try again later */ SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_WARN, ("going to have to retry stat()\n")); continue; default: SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_ERROR, ("unexpected errno\n")); rc = SEG_JOB_MANAGER_ERROR_UNKNOWN; goto error; } } } while ((rc != 0) && user_timestamp); if (rc != 0) { goto error; } SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_INFO, ("globus_l_job_manager_find_logfile() exits w/out error\n")); return 0; error: SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_WARN, ("globus_l_job_manager_find_logfile() exits w/error\n")); return rc; } /* globus_l_job_manager_find_logfile() */ static int globus_l_job_manager_parse_events( globus_l_job_manager_logfile_state_t * state) { int rc; int protocol_msg_type; time_t stamp; char jobid[129]; char nl[2]; int job_state; int exit_code; struct tm gmstamp, *gmstampp; fpos_t pos; SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_INFO, ("globus_l_job_manager_parse_events() called\n")); fgetpos(state->fp, &pos); while ((rc = fscanf(state->fp, "%d;%ld;%128[^;];%d;%d%1[\n]", &protocol_msg_type, &stamp, jobid, &job_state, &exit_code, nl)) > 4) { if (rc == 4 && fscanf(state->fp, "%1[\n]", nl) != 1) { goto bad_line; } if (protocol_msg_type != 1) { goto bad_line; } gmstampp = globus_libc_gmtime_r(&stamp, &gmstamp); if (gmstampp == NULL || globus_l_time_is_newer(&state->start_timestamp, &gmstamp)) { /* Ignore events that occur before our start timestamp */ goto bad_line; } switch(job_state) { case GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING: globus_scheduler_event_pending(stamp, jobid); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE: globus_scheduler_event_active(stamp, jobid); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE: globus_scheduler_event_done(stamp, jobid, exit_code); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED: globus_scheduler_event_failed(stamp, jobid, exit_code); break; default: goto bad_line; } bad_line: fgetpos(state->fp, &pos); } if (feof(state->fp)) { clearerr(state->fp); rc = SEG_JOB_MANAGER_ERROR_LOG_EOF; } else { rc = 0; } fsetpos(state->fp, &pos); SEG_JOB_MANAGER_DEBUG(SEG_JOB_MANAGER_DEBUG_INFO, ("globus_l_job_manager_parse_events() exits\n")); return rc; } /* globus_l_job_manager_parse_events() */ /* Leap year is year divisible by 4, unless divisibly by 100 and not by 400 */ #define IS_LEAP_YEAR(Y) \ (!(Y % 4)) && ((Y % 100) || !(Y % 400)) static void globus_l_job_manager_normalize_date( struct tm * tm) { int test_year; int overflow_days = 0; static int mday_max[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static int mday_leap_max[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; do { if (overflow_days > 0) { tm->tm_mday = overflow_days; tm->tm_mon++; } /* skipped to the next year */ if (tm->tm_mon == 12) { tm->tm_year++; tm->tm_mon = 0; } test_year = tm->tm_year + 1900; overflow_days = IS_LEAP_YEAR(test_year) ? tm->tm_mday - mday_leap_max[tm->tm_mon] : tm->tm_mday - mday_max[tm->tm_mon]; } while (overflow_days > 0); } static globus_bool_t globus_l_time_is_newer( struct tm * value, struct tm * benchmark) { if (value->tm_year < benchmark->tm_year) { return GLOBUS_FALSE; } else if (value->tm_year > benchmark->tm_year) { return GLOBUS_TRUE; } else if (value->tm_mon < benchmark->tm_mon) { return GLOBUS_FALSE; } else if (value->tm_mon > benchmark->tm_mon) { return GLOBUS_TRUE; } else if (value->tm_mday < benchmark->tm_mday) { return GLOBUS_FALSE; } else if (value->tm_mday > benchmark->tm_mday) { return GLOBUS_TRUE; } else if (value->tm_hour < benchmark->tm_hour) { return GLOBUS_FALSE; } else if (value->tm_hour > benchmark->tm_hour) { return GLOBUS_TRUE; } else if (value->tm_min < benchmark->tm_min) { return GLOBUS_FALSE; } else if (value->tm_min > benchmark->tm_min) { return GLOBUS_TRUE; } else if (value->tm_sec < benchmark->tm_sec) { return GLOBUS_FALSE; } else if (value->tm_sec > benchmark->tm_sec) { return GLOBUS_TRUE; } else { return GLOBUS_FALSE; } } /* globus_l_time_is_newer() */ static globus_bool_t globus_l_next_file_exists( globus_l_job_manager_logfile_state_t * state) { struct tm next_day; char * next_log; globus_bool_t file_exists = GLOBUS_FALSE; next_day = state->start_timestamp; next_day.tm_mday++; globus_l_job_manager_normalize_date(&next_day); next_day.tm_sec = 0; next_day.tm_min = 0; next_day.tm_hour = 0; next_log = globus_common_create_string( "%s/%4d%02d%02d", state->log_dir, next_day.tm_year+1900, next_day.tm_mon+1, next_day.tm_mday); if (access(next_log, R_OK) == 0) { file_exists = GLOBUS_TRUE; } free(next_log); return file_exists; } /* globus_l_next_file_exists() */ globus_gram_job_manager-15.8/PaxHeaders.31186/test0000644000000000000000000000013014243170565020202 xustar000000000000000029 mtime=1653404021.62474337 30 atime=1653404023.058729694 29 ctime=1653404021.62474337 globus_gram_job_manager-15.8/test/0000775000175000017500000000000014243170565020422 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453022323 xustar000000000000000030 mtime=1653400875.371639487 30 atime=1653401385.043596554 30 ctime=1653404021.520744362 globus_gram_job_manager-15.8/test/Makefile.in0000664000175000017500000005424514243162453022476 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/testcred.cnf.in $(srcdir)/gram-test-wrapper.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = testcred.cnf gram-test-wrapper CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = . client jobmanager @ENABLE_TESTS_TRUE@check_DATA = \ @ENABLE_TESTS_TRUE@ testcred.key \ @ENABLE_TESTS_TRUE@ testcred.cert \ @ENABLE_TESTS_TRUE@ testcred.cakey \ @ENABLE_TESTS_TRUE@ testcred.cacert \ @ENABLE_TESTS_TRUE@ testcred.link \ @ENABLE_TESTS_TRUE@ testcred.signing_policy \ @ENABLE_TESTS_TRUE@ testcred.srl @ENABLE_TESTS_TRUE@CLEANFILES = testcred.key testcred.cert testcred.cacert testcred.cakey testcred.srl @ENABLE_TESTS_TRUE@SUFFIXES = .key .req .cert .srl .link .signing_policy .cacert .cakey all: all-recursive .SUFFIXES: .SUFFIXES: .key .req .cert .srl .link .signing_policy .cacert .cakey .cnf $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): testcred.cnf: $(top_builddir)/config.status $(srcdir)/testcred.cnf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gram-test-wrapper: $(top_builddir)/config.status $(srcdir)/gram-test-wrapper.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_DATA) check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @ENABLE_TESTS_FALSE@clean-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool clean-local \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # Test CA @ENABLE_TESTS_TRUE@.cnf.cacert: @ENABLE_TESTS_TRUE@ umask 077; $(OPENSSL) req -passout pass:globus -subj "/CN=ca" -new -x509 -extensions v3_ca -keyout $*.cakey -out $@ -config $< @ENABLE_TESTS_TRUE@.cacert.cakey: @ENABLE_TESTS_TRUE@ : @ENABLE_TESTS_TRUE@.cacert.link: @ENABLE_TESTS_TRUE@ linkname="`$(OPENSSL) x509 -hash -noout -in $<`.0"; \ @ENABLE_TESTS_TRUE@ rm -f "$$linkname"; \ @ENABLE_TESTS_TRUE@ cp $< "$$linkname"; \ @ENABLE_TESTS_TRUE@ echo "$$linkname" > $@ @ENABLE_TESTS_TRUE@.link.signing_policy: @ENABLE_TESTS_TRUE@ linkname=`cat $<`; \ @ENABLE_TESTS_TRUE@ policyfile=$${linkname%.0}.signing_policy; \ @ENABLE_TESTS_TRUE@ echo "access_id_CA X509 '/CN=ca'" > $${policyfile}; \ @ENABLE_TESTS_TRUE@ echo "pos_rights globus CA:sign" >> $${policyfile}; \ @ENABLE_TESTS_TRUE@ echo "cond_subjects globus '\"/*\"'" >> $${policyfile}; \ @ENABLE_TESTS_TRUE@ echo $${policyfile} >> $@ @ENABLE_TESTS_TRUE@.signing_policy.srl: @ENABLE_TESTS_TRUE@ echo 01 > $@ # Test Cert/Key @ENABLE_TESTS_TRUE@.srl.key: @ENABLE_TESTS_TRUE@ umask 077; $(OPENSSL) genrsa -out $@ 2048 @ENABLE_TESTS_TRUE@.key.req: @ENABLE_TESTS_TRUE@ $(OPENSSL) req -subj "/CN=test" -new -key $< -out $@ -config $*.cnf @ENABLE_TESTS_TRUE@.req.cert: @ENABLE_TESTS_TRUE@ umask 022; $(OPENSSL) x509 -passin pass:globus -req -days 365 -in testcred.req -CA $*.cacert -CAkey $*.cakey -out $@ @ENABLE_TESTS_TRUE@clean-local: @ENABLE_TESTS_TRUE@ if [ -f testcred.link ]; then \ @ENABLE_TESTS_TRUE@ rm -f "$$(cat testcred.link)" testcred.link; \ @ENABLE_TESTS_TRUE@ fi @ENABLE_TESTS_TRUE@ if test -f testcred.signing_policy; then \ @ENABLE_TESTS_TRUE@ rm -f $$(cat testcred.signing_policy) testcred.signing_policy; \ @ENABLE_TESTS_TRUE@ fi @ENABLE_TESTS_TRUE@ rm -rf .globus # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/test/PaxHeaders.31186/Makefile.am0000644000000000000000000000013114243161125022304 xustar000000000000000029 mtime=1653400149.36597005 30 atime=1653400875.336639833 30 ctime=1653404021.522744342 globus_gram_job_manager-15.8/test/Makefile.am0000664000175000017500000000311014243161125022441 0ustar00johndoejohndoe00000000000000SUBDIRS = . client jobmanager if ENABLE_TESTS check_DATA = \ testcred.key \ testcred.cert \ testcred.cakey \ testcred.cacert \ testcred.link \ testcred.signing_policy \ testcred.srl # Test CA .cnf.cacert: umask 077; $(OPENSSL) req -passout pass:globus -subj "/CN=ca" -new -x509 -extensions v3_ca -keyout $*.cakey -out $@ -config $< .cacert.cakey: : .cacert.link: linkname="`$(OPENSSL) x509 -hash -noout -in $<`.0"; \ rm -f "$$linkname"; \ cp $< "$$linkname"; \ echo "$$linkname" > $@ .link.signing_policy: linkname=`cat $<`; \ policyfile=$${linkname%.0}.signing_policy; \ echo "access_id_CA X509 '/CN=ca'" > $${policyfile}; \ echo "pos_rights globus CA:sign" >> $${policyfile}; \ echo "cond_subjects globus '\"/*\"'" >> $${policyfile}; \ echo $${policyfile} >> $@ .signing_policy.srl: echo 01 > $@ # Test Cert/Key .srl.key: umask 077; $(OPENSSL) genrsa -out $@ 2048 .key.req: $(OPENSSL) req -subj "/CN=test" -new -key $< -out $@ -config $*.cnf .req.cert: umask 022; $(OPENSSL) x509 -passin pass:globus -req -days 365 -in testcred.req -CA $*.cacert -CAkey $*.cakey -out $@ CLEANFILES = testcred.key testcred.cert testcred.cacert testcred.cakey testcred.srl clean-local: if [ -f testcred.link ]; then \ rm -f "$$(cat testcred.link)" testcred.link; \ fi if test -f testcred.signing_policy; then \ rm -f $$(cat testcred.signing_policy) testcred.signing_policy; \ fi rm -rf .globus SUFFIXES = .key .req .cert .srl .link .signing_policy .cacert .cakey endif globus_gram_job_manager-15.8/test/PaxHeaders.31186/testcred.cnf.in0000644000000000000000000000013214243161125023163 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653401385.062596366 30 ctime=1653404021.524744323 globus_gram_job_manager-15.8/test/testcred.cnf.in0000664000175000017500000000450214243161125023325 0ustar00johndoejohndoe00000000000000HOME = . RANDFILE = $ENV::HOME/.rnd [ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = . # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number crlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem# The private key RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = default # use public key default MD preserve = no # keep passed DN ordering policy = policy_match # For the CA policy [ policy_match ] commonName = supplied # For the 'anything' policy # At this point in time, you must list all acceptable 'object' # types. [ policy_anything ] commonName = supplied #################################################################### [ req ] default_bits = 2048 default_md = sha256 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca string_mask = utf8only [ req_distinguished_name ] commonName = Common Name (eg, your name or your server\'s hostname) commonName_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = critical,CA:true [ crl_ext ] # CRL extensions. authorityKeyIdentifier=keyid:always globus_gram_job_manager-15.8/test/PaxHeaders.31186/gram-test-wrapper.in0000644000000000000000000000013114243161125024161 xustar000000000000000029 mtime=1653400149.36897002 30 atime=1653401385.404592982 30 ctime=1653404021.526744304 globus_gram_job_manager-15.8/test/gram-test-wrapper.in0000664000175000017500000000531614243161125024330 0ustar00johndoejohndoe00000000000000#! /bin/sh GATEKEEPER_PATH="@GATEKEEPER_PATH@" PATH="${GATEKEEPER_PATH:+$GATEKEEPER_PATH:}${PATH}" GRAM_CLIENT_TOOLS_PATH="@GRAM_CLIENT_TOOLS_PATH@" PATH="${GRAM_CLIENT_TOOLS_PATH:+$GRAM_CLIENT_TOOLS_PATH:}${PATH}" GASS_COPY_PATH="@GASS_COPY_PATH@" PATH="${GASS_COPY_PATH:+$GASS_COPY_PATH:}${PATH}" GASS_CACHE_PATH="@GASS_CACHE_PATH@" PATH="${GASS_CACHE_PATH:+$GASS_CACHE_PATH:}${PATH}" GRAM_JOB_MANAGER_SCRIPT_PATH="@GRAM_JOB_MANAGER_SCRIPT_PATH@" PATH="${GRAM_JOB_MANAGER_SCRIPT_PATH:+$GRAM_JOB_MANAGER_SCRIPT_PATH:}${PATH}" GSI_PROXY_UTILS_PATH="@GSI_PROXY_UTILS_PATH@" PATH="${GSI_PROXY_UTILS_PATH:+$GSI_PROXY_UTILS_PATH:}${PATH}" GSI_CERT_UTILS_PATH="@GSI_CERT_UTILS_PATH@" PATH="${GSI_CERT_UTILS_PATH:+$GSI_CERT_UTILS_PATH:}${PATH}" JOBMANAGER_PATH="@JOBMANAGER_PATH@" PATH="${JOBMANAGER_PATH:+$JOBMANAGER_PATH:}${PATH}" GRAM_JOB_MANAGER_SCRIPT_PERL5LIB="@GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@" PERL5LIB="${GRAM_JOB_MANAGER_SCRIPT_PERL5LIB:+${GRAM_JOB_MANAGER_SCRIPT_PERL5LIB}${PERL5LIB:+:}}${PERL5LIB}" GRAM_JOB_MANAGER_FORK_PERL5LIB="@GRAM_JOB_MANAGER_FORK_PERL5LIB@" PERL5LIB="${GRAM_JOB_MANAGER_FORK_PERL5LIB:+${GRAM_JOB_MANAGER_FORK_PERL5LIB}${PERL5LIB:+:}}${PERL5LIB}" GRAM_PROTOCOL_PERL5LIB="@GRAM_PROTOCOL_PERL5LIB@" PERL5LIB="${GRAM_PROTOCOL_PERL5LIB:+${GRAM_PROTOCOL_PERL5LIB}${PERL5LIB:+:}}${PERL5LIB}" COMMON_PERL5LIB="@COMMON_PERL5LIB@" PERL5LIB="${COMMON_PERL5LIB:+${COMMON_PERL5LIB}${PERL5LIB:+:}}${PERL5LIB}" export PATH if [ -n "$JOBMANAGER_PATH" ]; then export JOBMANAGER_PATH fi if [ -n "$PERL5LIB" ]; then export PERL5LIB fi grid-proxy-destroy 2>/dev/null || true if [ -n "$CONTACT_STRING" ]; then echo "# Using existing GRAM service at $CONTACT_STRING" else cachetmp="" cleanup() { if [ -n "$contact" ]; then globus-personal-gatekeeper -kill "$contact" > /dev/null 2>&1 fi if [ -n "$cachetmp" ]; then rm -rf "$cachetmp" fi } cachetmp="$(mktemp -d)" export GLOBUS_GASS_CACHE_DEFAULT="$cachetmp/$LOGNAME" echo "# Starting personal gatekeeper" contact="$(globus-personal-gatekeeper -start -cache-location "$cachetmp/\$(LOGNAME)" | sed -e 's/GRAM contact: //')" if [ "$?" != 0 ] || [ -z "$contact" ]; then exit 99 fi trap cleanup EXIT export CONTACT_STRING="$contact" fi # Perl scripts pass through, otherwise run the program under valgrind # conditionally if [ "${1##*.}" = "pl" ]; then "$@" else if [ -n "${VALGRIND}" ]; then valgrind="${VALGRIND+valgrind --log-file=VALGRIND-$(basename $1).log}" if [ -n "$VALGRIND_OPTIONS" ]; then valgrind="${valgrind} ${VALGRIND_OPTIONS}" fi $valgrind "$@" else "$@" fi fi rc=$? exit $rc globus_gram_job_manager-15.8/test/PaxHeaders.31186/client0000644000000000000000000000013214243170565021462 xustar000000000000000030 mtime=1653404021.621743398 30 atime=1653404023.059729684 30 ctime=1653404021.621743398 globus_gram_job_manager-15.8/test/client/0000775000175000017500000000000014243170565021700 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453023601 xustar000000000000000030 mtime=1653400875.480638408 30 atime=1653401385.087596118 30 ctime=1653404021.567743913 globus_gram_job_manager-15.8/test/client/Makefile.in0000664000175000017500000015454714243162453023762 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = failed-job-two-phase-commit$(EXEEXT) \ cancel-test$(EXEEXT) refresh-credentials-test$(EXEEXT) \ nonblocking-register-test$(EXEEXT) ping-test$(EXEEXT) \ register-callback-test$(EXEEXT) register-cancel-test$(EXEEXT) \ register-refresh-credentials-test$(EXEEXT) \ status-test$(EXEEXT) set-credentials-test$(EXEEXT) \ status-test$(EXEEXT) stdio-size-test$(EXEEXT) \ stdio-update-test$(EXEEXT) register-test$(EXEEXT) \ register-ping-test$(EXEEXT) two-phase-commit-test$(EXEEXT) \ job-status-with-info-test$(EXEEXT) \ register-version-test$(EXEEXT) \ restart-to-new-url-test$(EXEEXT) stdio-update-test$(EXEEXT) \ stdio-update-after-failure-test$(EXEEXT) \ local-stdio-size-test$(EXEEXT) version-test$(EXEEXT) TESTS = cancel-test$(EXEEXT) failed-job-two-phase-commit.pl \ nonblocking-register-test.pl ping-test.pl \ refresh-credentials-test$(EXEEXT) register-callback-test.pl \ register-cancel-test$(EXEEXT) register-ping-test.pl \ register-refresh-credentials-test$(EXEEXT) register-test.pl \ status-test$(EXEEXT) two-phase-commit-test.pl \ job-status-with-info-test$(EXEEXT) \ local-stdio-size-test$(EXEEXT) register-version-test$(EXEEXT) \ restart-to-new-url-test$(EXEEXT) set-credentials-test$(EXEEXT) \ stdio-size-test$(EXEEXT) \ stdio-update-after-failure-test$(EXEEXT) \ stdio-update-test$(EXEEXT) version-test$(EXEEXT) subdir = test/client DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = cancel_test_SOURCES = cancel-test.c cancel_test_OBJECTS = cancel-test.$(OBJEXT) cancel_test_LDADD = $(LDADD) am__DEPENDENCIES_1 = cancel_test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = failed_job_two_phase_commit_SOURCES = failed-job-two-phase-commit.c failed_job_two_phase_commit_OBJECTS = \ failed-job-two-phase-commit.$(OBJEXT) failed_job_two_phase_commit_LDADD = $(LDADD) failed_job_two_phase_commit_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) job_status_with_info_test_SOURCES = job-status-with-info-test.c job_status_with_info_test_OBJECTS = \ job-status-with-info-test.$(OBJEXT) job_status_with_info_test_LDADD = $(LDADD) job_status_with_info_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) local_stdio_size_test_SOURCES = local-stdio-size-test.c local_stdio_size_test_OBJECTS = local-stdio-size-test.$(OBJEXT) local_stdio_size_test_LDADD = $(LDADD) local_stdio_size_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) nonblocking_register_test_SOURCES = nonblocking-register-test.c nonblocking_register_test_OBJECTS = \ nonblocking-register-test.$(OBJEXT) nonblocking_register_test_LDADD = $(LDADD) nonblocking_register_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) ping_test_SOURCES = ping-test.c ping_test_OBJECTS = ping-test.$(OBJEXT) ping_test_LDADD = $(LDADD) ping_test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) refresh_credentials_test_SOURCES = refresh-credentials-test.c refresh_credentials_test_OBJECTS = refresh-credentials-test.$(OBJEXT) refresh_credentials_test_LDADD = $(LDADD) refresh_credentials_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) register_callback_test_SOURCES = register-callback-test.c register_callback_test_OBJECTS = register-callback-test.$(OBJEXT) register_callback_test_LDADD = $(LDADD) register_callback_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) register_cancel_test_SOURCES = register-cancel-test.c register_cancel_test_OBJECTS = register-cancel-test.$(OBJEXT) register_cancel_test_LDADD = $(LDADD) register_cancel_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) register_ping_test_SOURCES = register-ping-test.c register_ping_test_OBJECTS = register-ping-test.$(OBJEXT) register_ping_test_LDADD = $(LDADD) register_ping_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) register_refresh_credentials_test_SOURCES = \ register-refresh-credentials-test.c register_refresh_credentials_test_OBJECTS = \ register-refresh-credentials-test.$(OBJEXT) register_refresh_credentials_test_LDADD = $(LDADD) register_refresh_credentials_test_DEPENDENCIES = \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) register_test_SOURCES = register-test.c register_test_OBJECTS = register-test.$(OBJEXT) register_test_LDADD = $(LDADD) register_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) register_version_test_SOURCES = register-version-test.c register_version_test_OBJECTS = register-version-test.$(OBJEXT) register_version_test_LDADD = $(LDADD) register_version_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) restart_to_new_url_test_SOURCES = restart-to-new-url-test.c restart_to_new_url_test_OBJECTS = restart-to-new-url-test.$(OBJEXT) restart_to_new_url_test_LDADD = $(LDADD) restart_to_new_url_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) set_credentials_test_SOURCES = set-credentials-test.c set_credentials_test_OBJECTS = set-credentials-test.$(OBJEXT) set_credentials_test_LDADD = $(LDADD) set_credentials_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) status_test_SOURCES = status-test.c status_test_OBJECTS = status-test.$(OBJEXT) status_test_LDADD = $(LDADD) status_test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) stdio_size_test_SOURCES = stdio-size-test.c stdio_size_test_OBJECTS = stdio-size-test.$(OBJEXT) stdio_size_test_LDADD = $(LDADD) stdio_size_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) stdio_update_after_failure_test_SOURCES = \ stdio-update-after-failure-test.c stdio_update_after_failure_test_OBJECTS = \ stdio-update-after-failure-test.$(OBJEXT) stdio_update_after_failure_test_LDADD = $(LDADD) stdio_update_after_failure_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) stdio_update_test_SOURCES = stdio-update-test.c stdio_update_test_OBJECTS = stdio-update-test.$(OBJEXT) stdio_update_test_LDADD = $(LDADD) stdio_update_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) two_phase_commit_test_SOURCES = two-phase-commit-test.c two_phase_commit_test_OBJECTS = two-phase-commit-test.$(OBJEXT) two_phase_commit_test_LDADD = $(LDADD) two_phase_commit_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) version_test_SOURCES = version-test.c version_test_OBJECTS = version-test.$(OBJEXT) version_test_LDADD = $(LDADD) version_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = cancel-test.c failed-job-two-phase-commit.c \ job-status-with-info-test.c local-stdio-size-test.c \ nonblocking-register-test.c ping-test.c \ refresh-credentials-test.c register-callback-test.c \ register-cancel-test.c register-ping-test.c \ register-refresh-credentials-test.c register-test.c \ register-version-test.c restart-to-new-url-test.c \ set-credentials-test.c status-test.c stdio-size-test.c \ stdio-update-after-failure-test.c stdio-update-test.c \ two-phase-commit-test.c version-test.c DIST_SOURCES = cancel-test.c failed-job-two-phase-commit.c \ job-status-with-info-test.c local-stdio-size-test.c \ nonblocking-register-test.c ping-test.c \ refresh-credentials-test.c register-callback-test.c \ register-cancel-test.c register-ping-test.c \ register-refresh-credentials-test.c register-test.c \ register-version-test.c restart-to-new-url-test.c \ set-credentials-test.c status-test.c stdio-size-test.c \ stdio-update-after-failure-test.c stdio-update-test.c \ two-phase-commit-test.c version-test.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ check_SCRIPTS = \ failed-job-two-phase-commit.pl \ nonblocking-register-test.pl \ ping-test.pl \ register-callback-test.pl \ register-ping-test.pl \ register-test.pl \ two-phase-commit-test.pl LDADD = $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) $(PREOPEN_FORCE) $(CLIENT_TEST_PACKAGE_DEP_LIBS) -lltdl AM_CPPFLAGS = $(CLIENT_TEST_PACKAGE_DEP_CFLAGS) -I$(top_srcdir) @USE_CYGPATH_W_FALSE@X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" @USE_CYGPATH_W_TRUE@X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" @USE_CYGPATH_W_FALSE@X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" @USE_CYGPATH_W_TRUE@X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" @USE_CYGPATH_W_FALSE@X509_CERT_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" @USE_CYGPATH_W_FALSE@TEST_HOME_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../gram-test-wrapper EXTRA_DIST = $(check_SCRIPTS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/client/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/client/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list cancel-test$(EXEEXT): $(cancel_test_OBJECTS) $(cancel_test_DEPENDENCIES) $(EXTRA_cancel_test_DEPENDENCIES) @rm -f cancel-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cancel_test_OBJECTS) $(cancel_test_LDADD) $(LIBS) failed-job-two-phase-commit$(EXEEXT): $(failed_job_two_phase_commit_OBJECTS) $(failed_job_two_phase_commit_DEPENDENCIES) $(EXTRA_failed_job_two_phase_commit_DEPENDENCIES) @rm -f failed-job-two-phase-commit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(failed_job_two_phase_commit_OBJECTS) $(failed_job_two_phase_commit_LDADD) $(LIBS) job-status-with-info-test$(EXEEXT): $(job_status_with_info_test_OBJECTS) $(job_status_with_info_test_DEPENDENCIES) $(EXTRA_job_status_with_info_test_DEPENDENCIES) @rm -f job-status-with-info-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(job_status_with_info_test_OBJECTS) $(job_status_with_info_test_LDADD) $(LIBS) local-stdio-size-test$(EXEEXT): $(local_stdio_size_test_OBJECTS) $(local_stdio_size_test_DEPENDENCIES) $(EXTRA_local_stdio_size_test_DEPENDENCIES) @rm -f local-stdio-size-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(local_stdio_size_test_OBJECTS) $(local_stdio_size_test_LDADD) $(LIBS) nonblocking-register-test$(EXEEXT): $(nonblocking_register_test_OBJECTS) $(nonblocking_register_test_DEPENDENCIES) $(EXTRA_nonblocking_register_test_DEPENDENCIES) @rm -f nonblocking-register-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nonblocking_register_test_OBJECTS) $(nonblocking_register_test_LDADD) $(LIBS) ping-test$(EXEEXT): $(ping_test_OBJECTS) $(ping_test_DEPENDENCIES) $(EXTRA_ping_test_DEPENDENCIES) @rm -f ping-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ping_test_OBJECTS) $(ping_test_LDADD) $(LIBS) refresh-credentials-test$(EXEEXT): $(refresh_credentials_test_OBJECTS) $(refresh_credentials_test_DEPENDENCIES) $(EXTRA_refresh_credentials_test_DEPENDENCIES) @rm -f refresh-credentials-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(refresh_credentials_test_OBJECTS) $(refresh_credentials_test_LDADD) $(LIBS) register-callback-test$(EXEEXT): $(register_callback_test_OBJECTS) $(register_callback_test_DEPENDENCIES) $(EXTRA_register_callback_test_DEPENDENCIES) @rm -f register-callback-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(register_callback_test_OBJECTS) $(register_callback_test_LDADD) $(LIBS) register-cancel-test$(EXEEXT): $(register_cancel_test_OBJECTS) $(register_cancel_test_DEPENDENCIES) $(EXTRA_register_cancel_test_DEPENDENCIES) @rm -f register-cancel-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(register_cancel_test_OBJECTS) $(register_cancel_test_LDADD) $(LIBS) register-ping-test$(EXEEXT): $(register_ping_test_OBJECTS) $(register_ping_test_DEPENDENCIES) $(EXTRA_register_ping_test_DEPENDENCIES) @rm -f register-ping-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(register_ping_test_OBJECTS) $(register_ping_test_LDADD) $(LIBS) register-refresh-credentials-test$(EXEEXT): $(register_refresh_credentials_test_OBJECTS) $(register_refresh_credentials_test_DEPENDENCIES) $(EXTRA_register_refresh_credentials_test_DEPENDENCIES) @rm -f register-refresh-credentials-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(register_refresh_credentials_test_OBJECTS) $(register_refresh_credentials_test_LDADD) $(LIBS) register-test$(EXEEXT): $(register_test_OBJECTS) $(register_test_DEPENDENCIES) $(EXTRA_register_test_DEPENDENCIES) @rm -f register-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(register_test_OBJECTS) $(register_test_LDADD) $(LIBS) register-version-test$(EXEEXT): $(register_version_test_OBJECTS) $(register_version_test_DEPENDENCIES) $(EXTRA_register_version_test_DEPENDENCIES) @rm -f register-version-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(register_version_test_OBJECTS) $(register_version_test_LDADD) $(LIBS) restart-to-new-url-test$(EXEEXT): $(restart_to_new_url_test_OBJECTS) $(restart_to_new_url_test_DEPENDENCIES) $(EXTRA_restart_to_new_url_test_DEPENDENCIES) @rm -f restart-to-new-url-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(restart_to_new_url_test_OBJECTS) $(restart_to_new_url_test_LDADD) $(LIBS) set-credentials-test$(EXEEXT): $(set_credentials_test_OBJECTS) $(set_credentials_test_DEPENDENCIES) $(EXTRA_set_credentials_test_DEPENDENCIES) @rm -f set-credentials-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(set_credentials_test_OBJECTS) $(set_credentials_test_LDADD) $(LIBS) status-test$(EXEEXT): $(status_test_OBJECTS) $(status_test_DEPENDENCIES) $(EXTRA_status_test_DEPENDENCIES) @rm -f status-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(status_test_OBJECTS) $(status_test_LDADD) $(LIBS) stdio-size-test$(EXEEXT): $(stdio_size_test_OBJECTS) $(stdio_size_test_DEPENDENCIES) $(EXTRA_stdio_size_test_DEPENDENCIES) @rm -f stdio-size-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(stdio_size_test_OBJECTS) $(stdio_size_test_LDADD) $(LIBS) stdio-update-after-failure-test$(EXEEXT): $(stdio_update_after_failure_test_OBJECTS) $(stdio_update_after_failure_test_DEPENDENCIES) $(EXTRA_stdio_update_after_failure_test_DEPENDENCIES) @rm -f stdio-update-after-failure-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(stdio_update_after_failure_test_OBJECTS) $(stdio_update_after_failure_test_LDADD) $(LIBS) stdio-update-test$(EXEEXT): $(stdio_update_test_OBJECTS) $(stdio_update_test_DEPENDENCIES) $(EXTRA_stdio_update_test_DEPENDENCIES) @rm -f stdio-update-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(stdio_update_test_OBJECTS) $(stdio_update_test_LDADD) $(LIBS) two-phase-commit-test$(EXEEXT): $(two_phase_commit_test_OBJECTS) $(two_phase_commit_test_DEPENDENCIES) $(EXTRA_two_phase_commit_test_DEPENDENCIES) @rm -f two-phase-commit-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(two_phase_commit_test_OBJECTS) $(two_phase_commit_test_LDADD) $(LIBS) version-test$(EXEEXT): $(version_test_OBJECTS) $(version_test_DEPENDENCIES) $(EXTRA_version_test_DEPENDENCIES) @rm -f version-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(version_test_OBJECTS) $(version_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cancel-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/failed-job-two-phase-commit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job-status-with-info-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local-stdio-size-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonblocking-register-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ping-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refresh-credentials-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/register-callback-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/register-cancel-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/register-ping-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/register-refresh-credentials-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/register-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/register-version-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/restart-to-new-url-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set-credentials-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/status-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-size-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-update-after-failure-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-update-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two-phase-commit-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-test.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? cancel-test.log: cancel-test$(EXEEXT) @p='cancel-test$(EXEEXT)'; \ b='cancel-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) failed-job-two-phase-commit.pl.log: failed-job-two-phase-commit.pl @p='failed-job-two-phase-commit.pl'; \ b='failed-job-two-phase-commit.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) nonblocking-register-test.pl.log: nonblocking-register-test.pl @p='nonblocking-register-test.pl'; \ b='nonblocking-register-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ping-test.pl.log: ping-test.pl @p='ping-test.pl'; \ b='ping-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) refresh-credentials-test.log: refresh-credentials-test$(EXEEXT) @p='refresh-credentials-test$(EXEEXT)'; \ b='refresh-credentials-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) register-callback-test.pl.log: register-callback-test.pl @p='register-callback-test.pl'; \ b='register-callback-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) register-cancel-test.log: register-cancel-test$(EXEEXT) @p='register-cancel-test$(EXEEXT)'; \ b='register-cancel-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) register-ping-test.pl.log: register-ping-test.pl @p='register-ping-test.pl'; \ b='register-ping-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) register-refresh-credentials-test.log: register-refresh-credentials-test$(EXEEXT) @p='register-refresh-credentials-test$(EXEEXT)'; \ b='register-refresh-credentials-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) register-test.pl.log: register-test.pl @p='register-test.pl'; \ b='register-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) status-test.log: status-test$(EXEEXT) @p='status-test$(EXEEXT)'; \ b='status-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) two-phase-commit-test.pl.log: two-phase-commit-test.pl @p='two-phase-commit-test.pl'; \ b='two-phase-commit-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) job-status-with-info-test.log: job-status-with-info-test$(EXEEXT) @p='job-status-with-info-test$(EXEEXT)'; \ b='job-status-with-info-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) local-stdio-size-test.log: local-stdio-size-test$(EXEEXT) @p='local-stdio-size-test$(EXEEXT)'; \ b='local-stdio-size-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) register-version-test.log: register-version-test$(EXEEXT) @p='register-version-test$(EXEEXT)'; \ b='register-version-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) restart-to-new-url-test.log: restart-to-new-url-test$(EXEEXT) @p='restart-to-new-url-test$(EXEEXT)'; \ b='restart-to-new-url-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) set-credentials-test.log: set-credentials-test$(EXEEXT) @p='set-credentials-test$(EXEEXT)'; \ b='set-credentials-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) stdio-size-test.log: stdio-size-test$(EXEEXT) @p='stdio-size-test$(EXEEXT)'; \ b='stdio-size-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) stdio-update-after-failure-test.log: stdio-update-after-failure-test$(EXEEXT) @p='stdio-update-after-failure-test$(EXEEXT)'; \ b='stdio-update-after-failure-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) stdio-update-test.log: stdio-update-test$(EXEEXT) @p='stdio-update-test$(EXEEXT)'; \ b='stdio-update-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) version-test.log: version-test$(EXEEXT) @p='version-test$(EXEEXT)'; \ b='version-test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/Makefile.am0000644000000000000000000000013114243161125023562 xustar000000000000000029 mtime=1653400149.36597005 30 atime=1653400875.381639388 30 ctime=1653404021.568743904 globus_gram_job_manager-15.8/test/client/Makefile.am0000664000175000017500000000436714243161125023736 0ustar00johndoejohndoe00000000000000check_SCRIPTS = \ failed-job-two-phase-commit.pl \ nonblocking-register-test.pl \ ping-test.pl \ register-callback-test.pl \ register-ping-test.pl \ register-test.pl \ two-phase-commit-test.pl check_PROGRAMS = \ failed-job-two-phase-commit \ cancel-test \ refresh-credentials-test \ nonblocking-register-test \ ping-test \ register-callback-test \ register-cancel-test \ register-refresh-credentials-test \ status-test \ set-credentials-test \ status-test \ stdio-size-test \ stdio-update-test \ register-test \ register-ping-test \ two-phase-commit-test \ job-status-with-info-test \ register-version-test \ restart-to-new-url-test \ stdio-update-test \ stdio-update-after-failure-test \ local-stdio-size-test \ version-test TESTS = \ cancel-test \ failed-job-two-phase-commit.pl \ nonblocking-register-test.pl \ ping-test.pl \ refresh-credentials-test \ register-callback-test.pl \ register-cancel-test \ register-ping-test.pl \ register-refresh-credentials-test \ register-test.pl \ status-test \ two-phase-commit-test.pl \ job-status-with-info-test \ local-stdio-size-test \ register-version-test \ restart-to-new-url-test \ set-credentials-test \ stdio-size-test \ stdio-update-after-failure-test \ stdio-update-test \ version-test LDADD = $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) $(PREOPEN_FORCE) $(CLIENT_TEST_PACKAGE_DEP_LIBS) -lltdl AM_CPPFLAGS = $(CLIENT_TEST_PACKAGE_DEP_CFLAGS) -I$(top_srcdir) if USE_CYGPATH_W X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" else X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" X509_CERT_DIR = "$(abs_top_builddir)/test" TEST_HOME_DIR = "$(abs_top_builddir)/test" endif TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../gram-test-wrapper EXTRA_DIST = $(check_SCRIPTS) globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/cancel-test.c0000644000000000000000000000013114243161125024074 xustar000000000000000029 mtime=1653400149.36597005 30 atime=1653401831.880121893 30 ctime=1653404021.571743875 globus_gram_job_manager-15.8/test/client/cancel-test.c0000664000175000017500000001141614243161125024241 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" typedef struct { int state; int errorcode; globus_mutex_t mutex; globus_cond_t cond; } monitor_t; static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode); int main(int argc, char *argv[]) { char * callback_contact; char * job_contact; char * rm_contact; monitor_t monitor; int rc = 0; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..1\n"); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s resource-manager-contact\n", argv[0]); exit(1); } rc = globus_module_activate(GLOBUS_COMMON_MODULE); if(rc) { goto end; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_modules; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, "&(executable=/bin/sleep)(arguments=300)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error submitting job request %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if(monitor.state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE) { rc = globus_gram_client_job_cancel(job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error cancelling job %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; if(rc == GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED) { rc = GLOBUS_SUCCESS; } destroy_callback_contact: globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(callback_contact); free(callback_contact); free(job_contact); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_modules: globus_module_deactivate_all(); end: printf("%s - cancel-test\n", rc == 0 ? "ok" : "not ok"); return rc; } /* main() */ static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode) { monitor_t * monitor; monitor = arg; globus_mutex_lock(&monitor->mutex); monitor->state = state; monitor->errorcode = errorcode; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* gram_state_callback() */ globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/failed-job-two-phase-commit.c0000644000000000000000000000013114243161125027061 xustar000000000000000029 mtime=1653400149.36597005 30 atime=1653401831.894121761 30 ctime=1653404021.572743866 globus_gram_job_manager-15.8/test/client/failed-job-two-phase-commit.c0000664000175000017500000001657514243161125027241 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" #include #include #include const char * format = "&(executable=/bad/path/to/sh)(two_phase=%d)(save_state=yes)"; const char * restart_format = "&(restart=%s)"; typedef struct { char * callback_contact; char * job_contact; globus_mutex_t mutex; globus_cond_t cond; int job_status; int failure_code; int timeout; } monitor_t; static void globus_l_state_callback(void * callback_arg, char * job_contact, int state, int errorcode); int main(int argc, char *argv[]) { int rc = 1; monitor_t monitor; char * rsl; LTDL_SET_PRELOADED_SYMBOLS(); if (argc < 3 || ((monitor.timeout = atoi(argv[2])) < 0)) { fprintf(stderr, "Usage: %s RM-CONTACT TIMEOUT\n" " RM-CONTACT: resource manager contact\n" " TIMEOUT: two-phase commit timeout\n", argv[0]); goto error_exit; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure activating GLOBUS_GRAM_CLIENT_MODULE: %s\n", globus_gram_client_error_string(rc)); goto error_exit; } rsl = globus_common_create_string(format, monitor.timeout); if (rsl == NULL) { fprintf(stderr, "failure allocating rsl string\n"); goto deactivate_exit; } globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); monitor.job_contact = NULL; monitor.callback_contact = NULL; rc = globus_gram_client_callback_allow( globus_l_state_callback, &monitor, &monitor.callback_contact); if (rc != GLOBUS_SUCCESS || monitor.callback_contact == NULL) { fprintf(stderr, "failure allowing callbacks\n"); rc = -1; goto destroy_monitor_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( argv[1], rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED | GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, monitor.callback_contact, &monitor.job_contact); free(rsl); rsl = NULL; if (monitor.job_contact != NULL) { printf("%s\n", monitor.job_contact); } if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT) { if (rc == GLOBUS_SUCCESS) { fprintf(stderr, "job manager did not return " "GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT\n"); rc = -1; } else { fprintf(stderr, "failure submitting job request [%d]: %s\n", rc, globus_gram_client_error_string(rc)); } goto disallow_exit; } rc = 0; rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit signal: %s\n", globus_gram_client_error_string(rc)); goto disallow_exit; } /* Wait for job to fail */ while (monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = 0; sleep(monitor.timeout + 1); /* Submit restart job */ rsl = globus_common_create_string(restart_format, monitor.job_contact); if (rsl == NULL) { fprintf(stderr, "failure allocating rsl string\n"); goto deactivate_exit; } free(monitor.job_contact); monitor.job_contact = NULL; rc = globus_gram_client_job_request( argv[1], rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED | GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, monitor.callback_contact, &monitor.job_contact); free(rsl); rsl = NULL; if (monitor.job_contact != NULL) { printf("%s\n", monitor.job_contact); } if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT) { if (rc == GLOBUS_SUCCESS) { fprintf(stderr, "job manager did not return " "GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT\n"); rc = -1; } else { fprintf(stderr, "failure submitting job request [%d]: %s\n", rc, globus_gram_client_error_string(rc)); } goto disallow_exit; } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit signal: %s\n", globus_gram_client_error_string(rc)); goto disallow_exit; } monitor.job_status = 0; while (monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_END, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit end signal: %s\n", globus_gram_client_error_string(rc)); goto disallow_exit; } disallow_exit: if (monitor.job_contact != NULL) { globus_gram_client_job_contact_free(monitor.job_contact); } globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(monitor.callback_contact); destroy_monitor_exit: if (monitor.callback_contact != NULL) { free(monitor.callback_contact); } globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); if (rsl) { free(rsl); } deactivate_exit: globus_module_deactivate_all(); error_exit: return rc; } static void globus_l_state_callback( void * callback_arg, char * job_contact, int state, int errorcode) { monitor_t * monitor = callback_arg; globus_mutex_lock(&monitor->mutex); if (! strcmp(monitor->job_contact, job_contact)) { monitor->job_status = state; globus_cond_signal(&monitor->cond); } globus_mutex_unlock(&monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/job-status-with-info-test.c0000644000000000000000000000013114243161125026644 xustar000000000000000029 mtime=1653400149.36697004 30 atime=1653401831.908121629 30 ctime=1653404021.574743847 globus_gram_job_manager-15.8/test/client/job-status-with-info-test.c0000664000175000017500000001511214243161125027006 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_client.h" #include "globus_preload.h" #include "globus_gram_protocol.h" #define test_assert(assertion, message) \ if (!(assertion)) \ { \ printf("# %s:%d ", __FILE__, __LINE__); \ printf message; \ printf("\n"); \ return 1; \ } #define TEST_CASE(x) { #x, x } #define ARRAY_LEN(x) ((int) (sizeof(x)/sizeof(x[0]))) const char * rm_contact; struct test_case { char * name; int (*test_function)(void); }; struct monitor { globus_mutex_t mutex; globus_cond_t cond; globus_gram_protocol_job_state_t job_state; globus_gram_protocol_error_t protocol_error_code; volatile globus_bool_t done; }; static void info_callback( void * user_callback_arg, const char * job_contact, globus_gram_client_job_info_t * job_info) { struct monitor * monitor = user_callback_arg; if (monitor) { globus_mutex_lock(&monitor->mutex); monitor->job_state = job_info->job_state; monitor->protocol_error_code = job_info->protocol_error_code; monitor->done = GLOBUS_TRUE; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } } static int null_param_test(void) { int rc; rc = globus_gram_client_register_job_status_with_info( NULL, NULL /* can be NULL, optional param */, info_callback, NULL /* can be NULL, optional param */); test_assert(rc == GLOBUS_GRAM_PROTOCOL_ERROR_NULL_PARAMETER, ("Unexpected response to bad job contact \"%s\" (%d)", globus_gram_protocol_error_string(rc), rc)); rc = globus_gram_client_register_job_status_with_info( "https://example.org:1234/1234/134/", NULL /* can be NULL, optional param */, NULL, NULL /* can be NULL, optional param */); test_assert(rc == GLOBUS_GRAM_PROTOCOL_ERROR_NULL_PARAMETER, ("Unexpected response to bad info callback \"%s\" (%d)", globus_gram_protocol_error_string(rc), rc)); rc = GLOBUS_SUCCESS; return rc; } /* null_param_test() */ static int bad_contact_test(void) { int rc; struct monitor monitor; globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); monitor.done = GLOBUS_FALSE; monitor.job_state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED; monitor.protocol_error_code = GLOBUS_SUCCESS; rc = globus_gram_client_register_job_status_with_info( "https://grid.example.org:123/1234/1234/", NULL /* can be NULL, optional param */, info_callback, &monitor); test_assert(rc == GLOBUS_GRAM_PROTOCOL_ERROR_CONTACTING_JOB_MANAGER, ("Unexpected response to bad job contact \"%s\" (%d)", globus_gram_protocol_error_string(rc), rc)); rc = GLOBUS_SUCCESS; return rc; } /* bad_contact_test() */ static int job_status_with_info_test(void) { int rc; char * job_contact = NULL; struct monitor monitor; globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); monitor.done = GLOBUS_FALSE; monitor.job_state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED; monitor.protocol_error_code = GLOBUS_SUCCESS; rc = globus_gram_client_job_request( rm_contact, "&(executable=/bin/sleep)(arguments=60)", 0, NULL, &job_contact); test_assert(rc == GLOBUS_SUCCESS, ("Failed submitting sleep job because %s (%d)", globus_gram_protocol_error_string(rc), rc)); rc = globus_gram_client_register_job_status_with_info( job_contact, NULL, info_callback, &monitor); free(job_contact); test_assert(rc == GLOBUS_SUCCESS, ("Failed registering job_status because %s (%d)", globus_gram_protocol_error_string(rc), rc)); globus_mutex_lock(&monitor.mutex); while (!monitor.done) { globus_cond_wait(&monitor.cond, &monitor.mutex); } globus_mutex_unlock(&monitor.mutex); test_assert(monitor.protocol_error_code == GLOBUS_SUCCESS, ("Failed to determine job status because %s (%d)", globus_gram_protocol_error_string( monitor.protocol_error_code), monitor.protocol_error_code)); test_assert(monitor.job_state != 0, ("Failed to determine job status")); rc = GLOBUS_SUCCESS; return rc; } /* job_status_with_info_test() */ int main(int argc, char *argv[]) { struct test_case tests[] = { TEST_CASE(null_param_test), TEST_CASE(bad_contact_test), TEST_CASE(job_status_with_info_test) }; int i; int rc; int not_ok = 0; LTDL_SET_PRELOADED_SYMBOLS(); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s RM-CONTACT\n", argv[0]); return 1; } printf("1..%d\n", ARRAY_LEN(tests)); globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); for (i = 0; i < ARRAY_LEN(tests); i++) { rc = tests[i].test_function(); if (rc != 0) { not_ok++; printf("not ok # %s\n", tests[i].name); } else { printf("ok\n"); } } globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); return not_ok; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/local-stdio-size-test.c0000644000000000000000000000013114243161125026031 xustar000000000000000029 mtime=1653400149.36697004 30 atime=1653401831.921121506 30 ctime=1653404021.576743827 globus_gram_job_manager-15.8/test/client/local-stdio-size-test.c0000664000175000017500000001742414243161125026203 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_gass_server_ez.h" #include "globus_preload.h" #include #include #include #define STDOUT_SIZE "6" /*strlen("hello\n")*/ typedef struct { char * callback_contact; char * job_contact; globus_mutex_t mutex; globus_cond_t cond; int job_status; int failure_code; int stdout_size; } monitor_t; static void globus_l_state_callback(void * callback_arg, char * job_contact, int state, int errorcode); int main(int argc, char *argv[]) { int rc = 1; monitor_t monitor; char * gass_url; char * rsl; char * rm_contact; globus_gass_transfer_listener_t listener; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..1\n"); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s RM-CONTACT\n" " RM-CONTACT: resource manager contact\n", argv[0]); goto args_error; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure activating GLOBUS_GRAM_CLIENT_MODULE: %s\n", globus_gram_client_error_string(rc)); goto activate_common_failed; } rc = globus_module_activate(GLOBUS_GASS_SERVER_EZ_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure activating GLOBUS_GASS_SERVER_EZ_MODULE: %d\n", rc); goto activate_server_ez_failed; } rc = globus_gass_server_ez_init( &listener, NULL, "https", NULL, GLOBUS_GASS_SERVER_EZ_WRITE_ENABLE, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure inititializing gass server %d\n", rc); goto gass_server_ez_init_failed; } gass_url = globus_gass_transfer_listener_get_base_url(listener); if (gass_url == NULL) { fprintf(stderr, "failure getting gass url\n"); goto gass_server_get_url_failed; } globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); monitor.job_contact = NULL; monitor.callback_contact = NULL; rc = globus_gram_client_callback_allow( globus_l_state_callback, &monitor, &monitor.callback_contact); if (rc != GLOBUS_SUCCESS || monitor.callback_contact == NULL) { fprintf(stderr, "failure allowing callbacks\n"); rc = -1; goto allow_callback_failed; } rsl = globus_common_create_string( "&(executable=/bin/sh)" "(arguments=-c 'echo hello')" "(stdout=$(GLOBUS_CACHED_STDOUT))" "(save_state = yes)" "(two_phase=60)", gass_url); if (rsl == NULL) { fprintf(stderr, "Error creating rsl\n"); goto malloc_rsl_failed; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, monitor.callback_contact, &monitor.job_contact); if (monitor.job_contact != NULL) { globus_libc_fprintf(stderr, "job contact: %s\n", monitor.job_contact); } if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT) { if (rc == GLOBUS_SUCCESS) { fprintf(stderr, "job manager did not return " "GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT\n"); rc = -1; } else { fprintf(stderr, "failure submitting job request [%d]: %s\n", rc, globus_gram_client_error_string(rc)); } goto job_request_failed; } rc = 0; rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit signal: %s\n", globus_gram_client_error_string(rc)); goto commit_request_failed; } while (monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STDIO_SIZE, "0 0", NULL, NULL); if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_STDIO_SIZE) { fprintf(stderr, "job manager returned %d (%s) when I expected it to tell me " "the size was wrong", rc, globus_gram_client_error_string(rc)); rc = GLOBUS_FAILURE; goto incorrect_size_error; } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STDIO_SIZE, STDOUT_SIZE, NULL, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "job manager returned %d (%s) when I expected it to tell me " "the size is correct\n", rc, globus_gram_client_error_string(rc)); goto size_mismatch; } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_END, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit end signal: %s\n", globus_gram_client_error_string(rc)); goto commit_end_failed; } commit_end_failed: size_mismatch: incorrect_size_error: commit_request_failed: if (monitor.job_contact != NULL) { globus_gram_client_job_contact_free(monitor.job_contact); } job_request_failed: free(rsl); malloc_rsl_failed: allow_callback_failed: globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(monitor.callback_contact); if (monitor.callback_contact != NULL) { free(monitor.callback_contact); } globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); gass_server_get_url_failed: globus_gass_server_ez_shutdown(listener); gass_server_ez_init_failed: activate_server_ez_failed: activate_common_failed: globus_module_deactivate_all(); args_error: printf("%s # local-stdio-size-test \n", rc == 0 ? "ok" : "not ok"); return rc; } static void globus_l_state_callback( void * callback_arg, char * job_contact, int state, int errorcode) { monitor_t * monitor = callback_arg; globus_mutex_lock(&monitor->mutex); if (! strcmp(monitor->job_contact, job_contact)) { monitor->job_status = state; globus_cond_signal(&monitor->cond); } globus_mutex_unlock(&monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/nonblocking-register-test.c0000644000000000000000000000013114243161125026774 xustar000000000000000029 mtime=1653400149.36697004 30 atime=1653401831.935121375 30 ctime=1653404021.577743818 globus_gram_job_manager-15.8/test/client/nonblocking-register-test.c0000664000175000017500000002650414243161125027145 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" char * resource_manager_contact = 0; typedef struct { int state; int errorcode; globus_mutex_t mutex; globus_cond_t cond; int done_count; } monitor_t; static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode); static void nonblocking_callback( void * arg, globus_gram_protocol_error_t operation_failure_code, const char * job_contact, globus_gram_protocol_job_state_t job_state, globus_gram_protocol_error_t job_failure_code); /* submit a job without a callback contact, register a callback * contact, wait for job to terminate */ int test1() { char * callback_contact; char * job_contact; int rc; monitor_t monitor; rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_module; } memset(&monitor, 0, sizeof(monitor_t)); globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( resource_manager_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, GLOBUS_NULL, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Failed submitting job request because %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } rc = globus_gram_client_register_job_callback_registration( job_contact, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED| GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, callback_contact, GLOBUS_GRAM_CLIENT_NO_ATTR, nonblocking_callback, GLOBUS_NULL); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error registering callback contact because %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; destroy_callback_contact: globus_gram_client_callback_disallow(callback_contact); free(callback_contact); free(job_contact); globus_mutex_unlock(&monitor.mutex); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_module: globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); return rc; } /* submit a job with a callback contact, register another callback * contact (2x), wait for job to terminate */ int test2() { char * callback_contact[3]; char * job_contact; int rc; monitor_t monitor; rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_module; } memset(&monitor, 0, sizeof(monitor_t)); globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; monitor.done_count = 0; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact[0]); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact[1]); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact0; } rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact[2]); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact1; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( resource_manager_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact[0], &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Failed submitting job request because %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact1; } rc = globus_gram_client_register_job_callback_registration( job_contact, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED| GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, callback_contact[1], GLOBUS_GRAM_CLIENT_NO_ATTR, nonblocking_callback, GLOBUS_NULL); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error registering callback contact because %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact2; } rc = globus_gram_client_register_job_callback_registration( job_contact, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED| GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, callback_contact[2], GLOBUS_GRAM_CLIENT_NO_ATTR, nonblocking_callback, GLOBUS_NULL); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error registering callback contact because %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact2; } while(monitor.done_count < 3) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; destroy_callback_contact2: globus_gram_client_callback_disallow(callback_contact[2]); free(callback_contact[2]); destroy_callback_contact1: globus_gram_client_callback_disallow(callback_contact[1]); free(callback_contact[1]); destroy_callback_contact0: globus_gram_client_callback_disallow(callback_contact[0]); free(callback_contact[0]); free(job_contact); globus_mutex_unlock(&monitor.mutex); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_module: globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); return rc; } /* submit a job with a callback contact, unregister another bogus callback * contact, wait for job to terminate */ int test3() { char * callback_contact; char * job_contact; char * bad_callback_contact; int rc; monitor_t monitor; rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_module; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &bad_callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( resource_manager_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Failed submitting job request because %s.\n", globus_gram_client_error_string(rc)); goto destroy_bad_callback_contact; } rc = globus_gram_client_register_job_callback_unregistration( job_contact, bad_callback_contact, GLOBUS_GRAM_CLIENT_NO_ATTR, nonblocking_callback, GLOBUS_NULL); while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if(rc != GLOBUS_GRAM_PROTOCOL_ERROR_CLIENT_CONTACT_NOT_FOUND) { rc |= monitor.errorcode; } else { rc = 0; } free(job_contact); destroy_bad_callback_contact: globus_gram_client_callback_disallow(bad_callback_contact); free(bad_callback_contact); destroy_callback_contact: globus_gram_client_callback_disallow(callback_contact); free(callback_contact); globus_mutex_unlock(&monitor.mutex); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_module: globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); return rc; } int main(int argc, char *argv[]) { int rc = 0; int test_num = 0; int not_ok = 0; LTDL_SET_PRELOADED_SYMBOLS(); if(argc < 2) { fprintf(stderr, "Usage: %s resource-manager-contact [test number]\n", argv[0]); exit(1); } resource_manager_contact = argv[1]; if(argc > 2) { test_num = atoi(argv[2]); } rc = globus_module_activate(GLOBUS_COMMON_MODULE); if(rc) { not_ok |= rc; goto end; } if(test_num == 0 || test_num == 1) { rc = test1(); printf("%sok\n", rc ? "not " : ""); not_ok |= rc; } if(test_num == 0 || test_num == 2) { rc = test2(); printf("%sok\n", rc ? "not " : ""); not_ok |= rc; } if(test_num == 0 || test_num == 3) { rc = test3(); printf("%sok\n", rc ? "not " : ""); not_ok |= rc; } globus_module_deactivate_all(); end: return not_ok; } /* main() */ static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode) { nonblocking_callback(arg, 0, job_contact, state, errorcode); } /* gram_state_callback() */ static void nonblocking_callback( void * arg, globus_gram_protocol_error_t operation_failure_code, const char * job_contact, globus_gram_protocol_job_state_t job_state, globus_gram_protocol_error_t job_failure_code) { monitor_t * monitor; monitor = arg; if(!monitor) return; globus_mutex_lock(&monitor->mutex); monitor->state = job_state; monitor->errorcode = operation_failure_code ? operation_failure_code : job_failure_code; if(job_state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE || job_state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { monitor->done_count++; } globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* nonblocking_callback() */ globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/ping-test.c0000644000000000000000000000013114243161125023604 xustar000000000000000029 mtime=1653400149.36697004 30 atime=1653401831.948121252 30 ctime=1653404021.579743799 globus_gram_job_manager-15.8/test/client/ping-test.c0000664000175000017500000000253114243161125023747 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_client.h" #include "globus_preload.h" int main(int argc, char *argv[]) { int rc; LTDL_SET_PRELOADED_SYMBOLS(); rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error activating GRAM Client\n"); goto error_exit; } if(argc < 2) { rc = -1; fprintf(stderr, "Usage: %s rm_contact\n", argv[0]); goto deactivate_exit; } rc = globus_gram_client_ping(argv[1]); if(rc == GLOBUS_SUCCESS) { printf("Success pinging %s\n", argv[1]); } else { printf("Failed pinging %s because %s\n", argv[1], globus_gram_client_error_string(rc)); } deactivate_exit: globus_module_deactivate_all(); error_exit: return rc; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/refresh-credentials-test.c0000644000000000000000000000013014243161125026577 xustar000000000000000029 mtime=1653400149.36697004 29 atime=1653401831.96212112 30 ctime=1653404021.580743789 globus_gram_job_manager-15.8/test/client/refresh-credentials-test.c0000664000175000017500000000777414243161125026761 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" typedef struct { int state; int errorcode; globus_mutex_t mutex; globus_cond_t cond; } monitor_t; static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode); int main(int argc, char *argv[]) { char * rm_contact; char * callback_contact; char * job_contact; monitor_t monitor; int rc = 0; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..1\n"); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s resource-manager-contact\n", argv[0]); exit(1); } rc = globus_module_activate(GLOBUS_COMMON_MODULE); if(rc) { goto end; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_modules; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error submitting job request %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if(monitor.state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE) { rc = globus_gram_client_job_refresh_credentials( job_contact, GSS_C_NO_CREDENTIAL); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error refrehsing credentials: %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; destroy_callback_contact: globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(callback_contact); globus_libc_free(callback_contact); globus_libc_free(job_contact); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_modules: globus_module_deactivate_all(); end: printf("%s\n", rc == 0 ? "ok" : "not ok"); return rc; } /* main() */ static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode) { monitor_t * monitor; monitor = arg; globus_mutex_lock(&monitor->mutex); monitor->state = state; monitor->errorcode = errorcode; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* gram_state_callback() */ globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-callback-test.c0000644000000000000000000000013014243161125026224 xustar000000000000000029 mtime=1653400149.36697004 30 atime=1653401831.974121007 29 ctime=1653404021.58274377 globus_gram_job_manager-15.8/test/client/register-callback-test.c0000664000175000017500000002475114243161125026400 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" char * resource_manager_contact = 0; typedef struct { int state; int errorcode; globus_mutex_t mutex; globus_cond_t cond; int done_count; } monitor_t; static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode); /* submit a job without a callback contact, register a callback * contact, wait for job to terminate */ int test1() { char * callback_contact; char * job_contact; int rc; monitor_t monitor; rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto out; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( resource_manager_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, GLOBUS_NULL, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Failed submitting job request because %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } rc = globus_gram_client_job_callback_register( job_contact, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED| GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, callback_contact, &monitor.state, &monitor.errorcode); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error registering callback contact because %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; destroy_callback_contact: globus_gram_client_callback_disallow(callback_contact); globus_libc_free(callback_contact); globus_libc_free(job_contact); globus_mutex_unlock(&monitor.mutex); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); out: return rc; } /* submit a job with a callback contact, register another callback * contact (2x), wait for job to terminate */ int test2() { char * callback_contact[3]; char * job_contact; int rc; monitor_t monitor; rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto out; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; monitor.done_count = 0; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact[0]); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact[1]); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact0; } rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact[2]); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact1; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( resource_manager_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact[0], &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Failed submitting job request because %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact2; } rc = globus_gram_client_job_callback_register( job_contact, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED| GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, callback_contact[1], &monitor.state, &monitor.errorcode); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error registering callback contact because %s.\n", globus_gram_client_error_string(rc)); goto destroy_job_contact; } rc = globus_gram_client_job_callback_register( job_contact, GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED| GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE, callback_contact[2], &monitor.state, &monitor.errorcode); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error registering callback contact because %s.\n", globus_gram_client_error_string(rc)); goto destroy_job_contact; } while(monitor.done_count < 3) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; destroy_job_contact: globus_libc_free(job_contact); destroy_callback_contact2: globus_gram_client_callback_disallow(callback_contact[2]); globus_free(callback_contact[2]); destroy_callback_contact1: globus_gram_client_callback_disallow(callback_contact[1]); globus_free(callback_contact[1]); destroy_callback_contact0: globus_gram_client_callback_disallow(callback_contact[0]); globus_free(callback_contact[0]); globus_mutex_unlock(&monitor.mutex); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); out: return rc; } /* submit a job with a callback contact, unregister another bogus callback * contact, wait for job to terminate */ int test3() { char * callback_contact; char * job_contact; char * bad_callback_contact; int rc; monitor_t monitor; int bad_status; int bad_failure_code; rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto out; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &bad_callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( resource_manager_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Failed submitting job request because %s.\n", globus_gram_client_error_string(rc)); goto destroy_bad_callback_contact; } rc = globus_gram_client_job_callback_unregister( job_contact, bad_callback_contact, &bad_status, &bad_failure_code); while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if(rc != GLOBUS_GRAM_PROTOCOL_ERROR_CLIENT_CONTACT_NOT_FOUND) { rc |= monitor.errorcode; } else { rc = 0; } globus_libc_free(job_contact); destroy_bad_callback_contact: globus_gram_client_callback_disallow(bad_callback_contact); globus_libc_free(bad_callback_contact); destroy_callback_contact: globus_gram_client_callback_disallow(callback_contact); globus_libc_free(callback_contact); globus_mutex_unlock(&monitor.mutex); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); out: return rc; } int main(int argc, char *argv[]) { int rc = 0; int test_num = 0; int not_ok = 0; LTDL_SET_PRELOADED_SYMBOLS(); if(argc < 2) { fprintf(stderr, "Usage: %s resource-manager-contact [test number]\n", argv[0]); exit(1); } resource_manager_contact = argv[1]; if(argc > 2) { test_num = atoi(argv[2]); } rc = globus_module_activate(GLOBUS_COMMON_MODULE); if(rc) { not_ok |= rc; goto end; } if(test_num == 0 || test_num == 1) { rc = test1(); printf("%sok\n", rc ? "not " : ""); not_ok |= rc; } if(test_num == 0 || test_num == 2) { rc = test2(); printf("%sok\n", rc ? "not " : ""); not_ok |= rc; } if(test_num == 0 || test_num == 3) { rc = test3(); printf("%sok\n", rc ? "not " : ""); not_ok |= rc; } globus_module_deactivate_all(); end: return not_ok; } /* main() */ static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode) { monitor_t * monitor; monitor = arg; globus_mutex_lock(&monitor->mutex); monitor->state = state; monitor->errorcode = errorcode; if(state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE || state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { monitor->done_count++; } globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* gram_state_callback() */ globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-cancel-test.c0000644000000000000000000000013114243161125025716 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401831.987120885 30 ctime=1653404021.584743751 globus_gram_job_manager-15.8/test/client/register-cancel-test.c0000664000175000017500000001324114243161125026061 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" typedef struct { int state; int errorcode; globus_mutex_t mutex; globus_cond_t cond; } monitor_t; static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode); static void nonblocking_callback( void * arg, globus_gram_protocol_error_t operation_failure_code, const char * job_contact, globus_gram_protocol_job_state_t job_state, globus_gram_protocol_error_t job_failure_code); int main(int argc, char *argv[]) { char * rm_contact; char * callback_contact; char * job_contact; monitor_t monitor; int rc = 0; LTDL_SET_PRELOADED_SYMBOLS(); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s resource-manager-contact\n", argv[0]); exit(1); } printf("1..1\n"); rc = globus_module_activate(GLOBUS_COMMON_MODULE); if(rc) { goto end; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_modules; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, "&(executable=/bin/sleep)(arguments=300)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error submitting job request %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if(monitor.state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE) { rc = globus_gram_client_register_job_cancel( job_contact, GLOBUS_GRAM_CLIENT_NO_ATTR, nonblocking_callback, &monitor); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error cancelling job %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; if(rc == GLOBUS_GRAM_PROTOCOL_ERROR_USER_CANCELLED) { rc = GLOBUS_SUCCESS; } destroy_callback_contact: globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(callback_contact); globus_libc_free(callback_contact); globus_libc_free(job_contact); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_modules: globus_module_deactivate_all(); end: printf("%s 1 register-cancel-test\n", rc == 0 ? "ok" : "not ok"); return rc; } /* main() */ static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode) { nonblocking_callback(arg, 0, job_contact, state, errorcode); } /* gram_state_callback() */ static void nonblocking_callback( void * arg, globus_gram_protocol_error_t operation_failure_code, const char * job_contact, globus_gram_protocol_job_state_t job_state, globus_gram_protocol_error_t job_failure_code) { monitor_t * monitor; monitor = arg; globus_mutex_lock(&monitor->mutex); monitor->state = job_state; monitor->errorcode = operation_failure_code ? operation_failure_code : job_failure_code; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-ping-test.c0000644000000000000000000000013114243161125025426 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.001120753 30 ctime=1653404021.585743742 globus_gram_job_manager-15.8/test/client/register-ping-test.c0000664000175000017500000001044514243161125025574 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_client.h" #include "globus_preload.h" #include "gssapi.h" #include #include static void nonblocking_callback_func( void * user_callback_arg, globus_gram_protocol_error_t errorcode, const char * job_contact, globus_gram_protocol_job_state_t state, globus_gram_protocol_error_t job_failure_code); typedef struct { globus_mutex_t mutex; globus_cond_t cond; globus_bool_t done; int errorcode; int status; } my_monitor_t; int main(int argc, char ** argv) { int rc; char * rm_contact; my_monitor_t Monitor; gss_cred_id_t credential; globus_gram_client_attr_t attr; OM_uint32 major_status, minor_status; LTDL_SET_PRELOADED_SYMBOLS(); /* Retrieve relevant parameters from the command line */ if (argc < 2 || argc > 3) { /* invalid parameters passed */ printf("Usage: %s resource_manager_contact [credential path]\n", argv[0]); return(1); } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "ERROR: gram module activation failed\n"); return(1); } globus_gram_client_attr_init(&attr); if(argc == 3) { gss_buffer_desc buffer; buffer.value = globus_libc_malloc( strlen("X509_USER_PROXY=") + strlen(argv[2]) + 1); sprintf(buffer.value, "X509_USER_PROXY=%s", argv[2]); buffer.length = strlen(buffer.value); major_status = gss_import_cred( &minor_status, &credential, GSS_C_NO_OID, 1, &buffer, 0, NULL); if(major_status != GSS_S_COMPLETE) { fprintf(stderr, "ERROR: could not import cred from %s\n", argv[2]); return(1); } rc = globus_gram_client_attr_set_credential(attr, credential); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "ERROR: setting credential on attr\n"); return 1; } globus_free(buffer.value); } rm_contact = globus_libc_strdup(argv[1]); globus_mutex_init(&Monitor.mutex, (globus_mutexattr_t *) NULL); globus_cond_init(&Monitor.cond, (globus_condattr_t *) NULL); globus_mutex_lock(&Monitor.mutex); Monitor.done = GLOBUS_FALSE; Monitor.status = 0; Monitor.errorcode = 0; rc = globus_gram_client_register_ping(rm_contact, attr, nonblocking_callback_func, &Monitor); if(rc != GLOBUS_SUCCESS) { Monitor.errorcode = rc; Monitor.done = GLOBUS_TRUE; } while(!Monitor.done) { globus_cond_wait(&Monitor.cond, &Monitor.mutex); } globus_mutex_unlock(&Monitor.mutex); globus_mutex_destroy(&Monitor.mutex); globus_cond_destroy(&Monitor.cond); if(argc == 3) { gss_release_cred(&minor_status, &credential); } globus_gram_client_attr_destroy(&attr); /* Deactivate GRAM */ globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); return Monitor.errorcode; } static void nonblocking_callback_func( void * user_callback_arg, globus_gram_protocol_error_t errorcode, const char * job_contact, globus_gram_protocol_job_state_t state, globus_gram_protocol_error_t job_failure_code) { my_monitor_t * Monitor = (my_monitor_t *) user_callback_arg; globus_mutex_lock(&Monitor->mutex); Monitor->errorcode = errorcode; /* Monitor->job_failure_code = job_failure_code; */ Monitor->done = GLOBUS_TRUE; globus_cond_signal(&Monitor->cond); globus_mutex_unlock(&Monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-refresh-credentials-test.c0000644000000000000000000000013114243161125030422 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.014120631 30 ctime=1653404021.587743723 globus_gram_job_manager-15.8/test/client/register-refresh-credentials-test.c0000664000175000017500000001207114243161125030565 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" typedef struct { int state; int errorcode; globus_mutex_t mutex; globus_cond_t cond; globus_bool_t refresh_called; globus_gram_protocol_error_t refresh_result; } monitor_t; static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode); static void nonblocking_callback( void * arg, globus_gram_protocol_error_t error_code, const char * job_contact, globus_gram_protocol_job_state_t state, globus_gram_protocol_error_t job_failure_code); int main(int argc, char *argv[]) { char * rm_contact; char * callback_contact; char * job_contact; monitor_t monitor; int rc = 0; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..1\n"); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s resource-manager-contact\n", argv[0]); exit(1); } rc = globus_module_activate(GLOBUS_COMMON_MODULE); if(rc) { goto end; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_modules; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; monitor.refresh_called = GLOBUS_FALSE; monitor.refresh_result = 0; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error submitting job request %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if(monitor.state == GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE) { rc = globus_gram_client_register_job_refresh_credentials( job_contact, GSS_C_NO_CREDENTIAL, GLOBUS_GRAM_CLIENT_NO_ATTR, nonblocking_callback, &monitor); while(!monitor.refresh_called) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if(monitor.refresh_result != GLOBUS_SUCCESS) { fprintf(stderr, "Error refrehsing credentials: %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; destroy_callback_contact: globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(callback_contact); globus_libc_free(callback_contact); globus_libc_free(job_contact); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_modules: globus_module_deactivate_all(); end: printf("%s 1 register-refresh-credentials-test\n", rc == 0 ? "ok" : "not ok"); return rc; } /* main() */ static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode) { monitor_t * monitor; monitor = arg; globus_mutex_lock(&monitor->mutex); monitor->state = state; monitor->errorcode = errorcode; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* gram_state_callback() */ static void nonblocking_callback( void * arg, globus_gram_protocol_error_t error_code, const char * job_contact, globus_gram_protocol_job_state_t state, globus_gram_protocol_error_t job_failure_code) { monitor_t * monitor; monitor = arg; globus_mutex_lock(&monitor->mutex); monitor->refresh_called = GLOBUS_TRUE; monitor->refresh_result = error_code; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-test.c0000644000000000000000000000013114243161125024473 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.027120508 30 ctime=1653404021.588743713 globus_gram_job_manager-15.8/test/client/register-test.c0000664000175000017500000001442214243161125024640 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_client.h" #include "globus_preload.h" #include "gssapi.h" #include #include static void callback_func( void * user_callback_arg, char * job_contact, int state, int job_failure_code); static void nonblocking_callback_func( void * user_callback_arg, globus_gram_protocol_error_t errorcode, const char * job_contact, globus_gram_protocol_job_state_t state, globus_gram_protocol_error_t job_failure_code); typedef struct { globus_mutex_t mutex; globus_cond_t cond; globus_bool_t done; int errorcode; int status; char * job_contact; } my_monitor_t; int main(int argc, char ** argv) { int rc; char * callback_contact; char * rm_contact; char * specification; my_monitor_t Monitor; gss_cred_id_t credential; globus_gram_client_attr_t attr; int i; LTDL_SET_PRELOADED_SYMBOLS(); /* Retrieve relevant parameters from the command line */ if (argc < 3 || argc > 5) { /* invalid parameters passed */ printf("Usage: %s resource_manager_contact rsl_spec [-f] [credential path]\n", argv[0]); return(1); } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "ERROR: gram module activation failed\n"); return(1); } globus_gram_client_attr_init(&attr); for (i = 3; i < argc; i++) { if (strcmp(argv[i], "-f") == 0) { rc = globus_gram_client_attr_set_delegation_mode( attr, GLOBUS_XIO_GSI_DELEGATION_MODE_FULL); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "ERROR: setting full delegation mode on attr\n"); return 1; } } else { OM_uint32 major_status, minor_status; gss_buffer_desc buffer; buffer.value = globus_libc_malloc( strlen("X509_USER_PROXY=") + strlen(argv[3]) + 1); sprintf(buffer.value, "X509_USER_PROXY=%s", argv[3]); buffer.length = strlen(buffer.value); major_status = gss_import_cred( &minor_status, &credential, GSS_C_NO_OID, 1, &buffer, 0, NULL); if(major_status != GSS_S_COMPLETE) { fprintf(stderr, "ERROR: could not import cred from %s\n", argv[3]); return(1); } rc = globus_gram_client_attr_set_credential(attr, credential); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "ERROR: setting credential on attr\n"); return 1; } } } rm_contact = globus_libc_strdup(argv[1]); specification = globus_libc_strdup(argv[2]); globus_mutex_init(&Monitor.mutex, (globus_mutexattr_t *) NULL); globus_cond_init(&Monitor.cond, (globus_condattr_t *) NULL); globus_gram_client_callback_allow(callback_func, (void *) &Monitor, &callback_contact); globus_mutex_lock(&Monitor.mutex); Monitor.done = GLOBUS_FALSE; Monitor.job_contact = GLOBUS_NULL; Monitor.status = 0; Monitor.errorcode = 0; rc = globus_gram_client_register_job_request(rm_contact, specification, GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE| GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED, callback_contact, attr, nonblocking_callback_func, &Monitor); if(rc != GLOBUS_SUCCESS) { Monitor.errorcode = rc; Monitor.done = GLOBUS_TRUE; } while(!Monitor.done) { globus_cond_wait(&Monitor.cond, &Monitor.mutex); } globus_mutex_unlock(&Monitor.mutex); globus_mutex_destroy(&Monitor.mutex); globus_cond_destroy(&Monitor.cond); globus_gram_client_job_contact_free(Monitor.job_contact); globus_gram_client_attr_destroy(&attr); globus_gram_client_callback_disallow(callback_contact); globus_free(callback_contact); globus_free(rm_contact); globus_free(specification); /* Deactivate GRAM */ globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); return Monitor.errorcode; } static void callback_func(void * user_callback_arg, char * job_contact, int state, int errorcode) { nonblocking_callback_func(user_callback_arg, 0, job_contact, state, errorcode); } static void nonblocking_callback_func( void * user_callback_arg, globus_gram_protocol_error_t errorcode, const char * job_contact, globus_gram_protocol_job_state_t state, globus_gram_protocol_error_t job_failure_code) { my_monitor_t * Monitor = (my_monitor_t *) user_callback_arg; globus_mutex_lock(&Monitor->mutex); if(Monitor->job_contact == GLOBUS_NULL) { Monitor->job_contact = globus_libc_strdup(job_contact); } switch(state) { case GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED: Monitor->done = GLOBUS_TRUE; Monitor->errorcode = job_failure_code; globus_cond_signal(&Monitor->cond); break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE: Monitor->done = GLOBUS_TRUE; globus_cond_signal(&Monitor->cond); break; default: if(errorcode != 0) { Monitor->done = GLOBUS_TRUE; Monitor->errorcode = errorcode; } globus_cond_signal(&Monitor->cond); break; } globus_mutex_unlock(&Monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-version-test.c0000644000000000000000000000013114243161125026156 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.041120376 30 ctime=1653404021.590743694 globus_gram_job_manager-15.8/test/client/register-version-test.c0000664000175000017500000001477514243161125026336 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_client.h" #include "globus_preload.h" #include "globus_gram_protocol.h" #define test_assert(assertion, message) \ if (!(assertion)) \ { \ printf("# %s:%d ", __FILE__, __LINE__); \ printf message; \ printf("\n"); \ return 1; \ } #define TEST_CASE(x) { #x, x } #define ARRAY_LEN(x) ((int) (sizeof(x)/sizeof(x[0]))) const char * rm_contact; typedef struct { char * name; int (*test_function)(void); } test_case; struct monitor_s { globus_mutex_t mutex; globus_cond_t cond; globus_bool_t done; globus_bool_t versions_present; int failure_code; } monitor; static void info_callback( void * user_callback_arg, const char * job_contact, globus_gram_client_job_info_t * job_info) { struct monitor_s * m = user_callback_arg; globus_mutex_lock(&m->mutex); m->done = GLOBUS_TRUE; if (job_info->extensions != NULL && globus_hashtable_lookup(&job_info->extensions, "version") != NULL && globus_hashtable_lookup(&job_info->extensions, "toolkit-version") != NULL) { m->versions_present = GLOBUS_TRUE; } m->failure_code = job_info->protocol_error_code; globus_cond_signal(&m->cond); globus_mutex_unlock(&m->mutex); } /* info_callback() */ /* Check that passing null parameters to * globus_gram_client_register_get_jobmanager_version() don't cause crashes and * return reasonable error values. */ static int null_param_test(void) { int rc; rc = globus_gram_client_register_get_jobmanager_version( NULL, NULL /*optional attr*/, info_callback, NULL /* optional callback_arg*/); test_assert( rc == GLOBUS_GRAM_PROTOCOL_ERROR_NULL_PARAMETER, ("globus_gram_client_register_get_jobmanager_version() didn't return expected error: %d (%s)", rc, globus_gram_protocol_error_string(rc))); rc = globus_gram_client_register_get_jobmanager_version( rm_contact, NULL /*optional attr*/, NULL, NULL /* optional callback_arg*/); test_assert( rc == GLOBUS_GRAM_PROTOCOL_ERROR_NULL_PARAMETER, ("globus_gram_client_register_get_jobmanager_version() didn't return expected error: %d (%s)", rc, globus_gram_protocol_error_string(rc))); rc = GLOBUS_SUCCESS; return rc; } /* null_param_test() */ /* Check that passing bad contact string to * globus_gram_client_get_jobmanager_version() don't cause crashes and * returns a reasonable error value. */ static int bad_contact_test(void) { int rc; monitor.done = monitor.versions_present = GLOBUS_FALSE; monitor.failure_code = 0; rc = globus_gram_client_register_get_jobmanager_version( "grid.example.org:2119", NULL, info_callback, &monitor); test_assert( rc == GLOBUS_GRAM_PROTOCOL_ERROR_CONTACTING_JOB_MANAGER, ("globus_gram_client_register_get_jobmanager_version() didn't fail as expected: %d (%s)", rc, globus_gram_protocol_error_string(rc))); rc = GLOBUS_SUCCESS; return rc; } /* bad_contact_test() */ /* Check that using globus_gram_client_get_jobmanager_version() to talk * to the resource management contact specified on the command line yields * a response that can be parsed out to include the version and toolkit-version * attributes. */ static int version_test(void) { int rc; monitor.done = monitor.versions_present = GLOBUS_FALSE; monitor.failure_code = 0; rc = globus_gram_client_register_get_jobmanager_version( rm_contact, NULL, info_callback, &monitor); test_assert( rc == GLOBUS_SUCCESS, ("globus_gram_client_register_get_jobmanager_version() failed: %d (%s)", rc, globus_gram_protocol_error_string(rc))); globus_mutex_lock(&monitor.mutex); while (!monitor.done) { globus_cond_wait(&monitor.cond, &monitor.mutex); } globus_mutex_unlock(&monitor.mutex); test_assert( monitor.failure_code == GLOBUS_SUCCESS, ("globus_gram_client_register_get_jobmanager_version() callback indicated failure: %d (%s)", rc, globus_gram_protocol_error_string(rc))); test_assert( monitor.versions_present == GLOBUS_TRUE, ("globus_gram_client_register_get_jobmanager_version() callback didn't get version info")); return rc; } /* version_test() */ int main(int argc, char *argv[]) { test_case tests[] = { TEST_CASE(null_param_test), TEST_CASE(bad_contact_test), TEST_CASE(version_test) }; int i; int rc; int not_ok = 0; LTDL_SET_PRELOADED_SYMBOLS(); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s RM-CONTACT\n", argv[0]); return 1; } printf("1..%d\n", ARRAY_LEN(tests)); globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); for (i = 0; i < ARRAY_LEN(tests); i++) { rc = tests[i].test_function(); if (rc != 0) { not_ok++; printf("not ok # %s\n", tests[i].name); } else { printf("ok\n"); } } globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); return not_ok; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/restart-to-new-url-test.c0000644000000000000000000000013114243161125026342 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.055120244 30 ctime=1653404021.592743675 globus_gram_job_manager-15.8/test/client/restart-to-new-url-test.c0000664000175000017500000003543214243161125026513 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" #include "globus_gram_protocol.h" #include "globus_gass_transfer.h" static char * contact_string; typedef struct { char * test_name; int (*test_case)(void); } test_case_t; void test_l_old_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener); void test_l_new_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener); typedef struct { globus_mutex_t mutex; globus_cond_t cond; int status; int failure_code; globus_gass_transfer_listener_t old_listener; globus_gass_transfer_request_t old_request; globus_byte_t old_output[64]; globus_size_t old_output_len; globus_gass_transfer_listener_t new_listener; globus_gass_transfer_request_t new_request; globus_byte_t new_output[64]; globus_size_t new_output_len; } test_monitor_t; #define TEST_CASE(x) { #x, x } #define test_assert(a) if(!(a)) { fprintf(stderr, "%s:%d: Assertion %s failed", __func__, __LINE__, #a); return 1; } #define test_assert_gram_rc_equals(a, b) \ { \ int _a = (a); \ int _b = (b); \ if (_a != _b) \ { \ fprintf(stderr, "%s:%d: Expected rc = %d, got %d (%s)\n", \ __func__, __LINE__, \ _b, _a, \ globus_gram_protocol_error_string(_a)); \ return 1; \ } \ } /* GRAM-157: If Condor-G crashes and restarts, its GASS server will be listening on a new ephemeral port. This requires an update to the the stage-out URLs of all submitted jobs. Condor-G does this via a restart job request to the jobmanager. In the original job RSL, Condor-G defines an RSL substitution macro named GRIDMANAGER_GASS_URL, whose value is the URL of a GASS server it starts in the GAHP server. Whenever Condor-G sends a restart gram request, it includes an rsl_substitution attribute that sets GRIDMANAGER_GASS_URL to the current GASS URL. If a stage-out failure occurs, Condor attempts to stop and restart the job-manager, supplying the new GASS URL. In this respect, Condor still treats GRAM5 like GRAM2. But it appears the job-manager never re-evaluates the macros in the stage-out URLs. This means Condor-G can't recover from a client-side failure with GRAM5. */ static void test_l_gass_fail( void * callback_arg, globus_gass_transfer_request_t request) { return; } static void test_l_data_callback( void * arg, globus_gass_transfer_request_t request, globus_byte_t * bytes, globus_size_t length, globus_bool_t last_data) { test_monitor_t *monitor = arg; if (last_data) { globus_gass_transfer_request_destroy(request); return; } globus_gass_transfer_receive_bytes( request, bytes, sizeof(monitor->old_output), 1, test_l_data_callback, monitor); } static void test_l_old_accept_callback( void * callback_arg, globus_gass_transfer_request_t request) { test_monitor_t *monitor = callback_arg; int rc; globus_mutex_lock(&monitor->mutex); monitor->old_request = request; globus_mutex_unlock(&monitor->mutex); globus_gass_transfer_authorize( request, GLOBUS_GASS_TRANSFER_LENGTH_UNKNOWN); rc = globus_gass_transfer_receive_bytes( request, monitor->old_output, sizeof(monitor->old_output), 1, test_l_data_callback, monitor); rc = globus_gass_transfer_register_listen( monitor->old_listener, test_l_old_listener_callback, monitor); } static void test_l_new_accept_callback( void * callback_arg, globus_gass_transfer_request_t request) { test_monitor_t *monitor = callback_arg; int rc; globus_mutex_lock(&monitor->mutex); monitor->new_request = request; globus_mutex_unlock(&monitor->mutex); rc = globus_gass_transfer_authorize( request, GLOBUS_GASS_TRANSFER_LENGTH_UNKNOWN); rc = globus_gass_transfer_receive_bytes( request, monitor->new_output, sizeof(monitor->new_output), 1, test_l_data_callback, monitor); rc = globus_gass_transfer_register_listen( monitor->new_listener, test_l_new_listener_callback, monitor); } void test_l_old_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener) { int rc; globus_gass_transfer_request_t request; globus_gass_transfer_requestattr_t attr; globus_gass_transfer_requestattr_init(&attr, "https"); globus_gass_transfer_secure_requestattr_set_authorization( &attr, GLOBUS_GASS_TRANSFER_AUTHORIZE_SELF, "https"); rc = globus_gass_transfer_register_accept( &request, &attr, listener, test_l_old_accept_callback, callback_arg); globus_gass_transfer_requestattr_destroy(&attr); } /* test_l_old_listener_callback() */ void test_l_new_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener) { int rc; globus_gass_transfer_request_t request; globus_gass_transfer_requestattr_t attr; globus_gass_transfer_requestattr_init(&attr, "https"); globus_gass_transfer_secure_requestattr_set_authorization( &attr, GLOBUS_GASS_TRANSFER_AUTHORIZE_SELF, "https"); rc = globus_gass_transfer_register_accept( &request, &attr, listener, test_l_new_accept_callback, callback_arg); globus_gass_transfer_requestattr_destroy(&attr); } /* test_l_new_listener_callback() */ static void test_l_gram_callback( void * callback_arg, char * job_contact, int state, int errorcode) { test_monitor_t *monitor = callback_arg; globus_mutex_lock(&monitor->mutex); monitor->failure_code = errorcode; monitor->status = state; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* test_l_gram_callback() */ int test_restart_to_new_url(void) { char *old_listener_url, *new_listener_url; char *old_job_contact, *new_job_contact; int rc; char *callback_contact; char *old_rsl, *new_rsl; test_monitor_t monitor; const char rsl_spec[] = "&(executable=/bin/sh)" "(arguments=-c 'sleep 10; echo hello;')" "(two_phase=60)" "(save_state=yes)" "(rsl_substitution = (TEST_GASS_URL %s))" "(stdout = $(TEST_GASS_URL)/out)"; const char restart_rsl_spec[] = "&(restart=%s)" "(rsl_substitution = (TEST_GASS_URL %s))" "(stdout = $(TEST_GASS_URL)/out)"; globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); memset(monitor.old_output, 0, sizeof(monitor.old_output)); memset(monitor.new_output, 0, sizeof(monitor.new_output)); monitor.old_request = GLOBUS_NULL_HANDLE; monitor.new_request = GLOBUS_NULL_HANDLE; monitor.status = GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED; monitor.failure_code = 0; /* Create a pair of listeners and get their base URLs. The job will be * submitted with stdout directed to the first, then redirected to the * second via a restart job request */ rc = globus_gass_transfer_create_listener( &monitor.old_listener, NULL, "https"); test_assert(rc == GLOBUS_SUCCESS); test_assert(monitor.old_listener != GLOBUS_NULL_HANDLE); old_listener_url = globus_gass_transfer_listener_get_base_url( monitor.old_listener); test_assert(old_listener_url != NULL); rc = globus_gass_transfer_register_listen( monitor.old_listener, test_l_old_listener_callback, &monitor); test_assert(rc == GLOBUS_SUCCESS); rc = globus_gass_transfer_create_listener( &monitor.new_listener, NULL, "https"); test_assert(rc == GLOBUS_SUCCESS); test_assert(monitor.new_listener != GLOBUS_NULL_HANDLE); new_listener_url = globus_gass_transfer_listener_get_base_url( monitor.new_listener); test_assert(new_listener_url != NULL); rc = globus_gass_transfer_register_listen( monitor.new_listener, test_l_new_listener_callback, &monitor); test_assert(rc == GLOBUS_SUCCESS); old_rsl = globus_common_create_string(rsl_spec, old_listener_url); test_assert(old_rsl != NULL); /* Submit the job, do the two-phase commit, then submit a restart * request with the new stdout destination */ rc = globus_gram_client_callback_allow( test_l_gram_callback, &monitor, &callback_contact); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); test_assert(callback_contact != NULL); rc = globus_gram_client_job_request( contact_string, old_rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &old_job_contact); test_assert_gram_rc_equals(rc, GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT); test_assert(old_job_contact != NULL); rc = globus_gram_client_job_signal( old_job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &monitor.status, &monitor.failure_code); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); globus_mutex_lock(&monitor.mutex); while (monitor.status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); rc = globus_gram_client_job_signal( old_job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STOP_MANAGER, NULL, &monitor.status, &monitor.failure_code); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); while (monitor.status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if (monitor.old_request) { globus_gass_transfer_fail(monitor.old_request, test_l_gass_fail, NULL); monitor.old_request = GLOBUS_NULL_HANDLE; } test_assert(monitor.status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED); test_assert_gram_rc_equals( monitor.failure_code, GLOBUS_GRAM_PROTOCOL_ERROR_JM_STOPPED); new_rsl = globus_common_create_string( restart_rsl_spec, old_job_contact, new_listener_url); test_assert(new_rsl != NULL); rc = globus_gram_client_job_request( contact_string, new_rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &new_job_contact); test_assert_gram_rc_equals(rc, GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT); test_assert(new_job_contact != NULL); rc = globus_gram_client_job_signal( new_job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &monitor.status, &monitor.failure_code); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); /* Wait for job to complete. After it's done, check to see which * destination got stdout */ while (monitor.status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } globus_mutex_unlock(&monitor.mutex); rc = globus_gram_client_job_signal( new_job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_END, NULL, &monitor.status, &monitor.failure_code); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); if (monitor.new_output[0] == 0) { fprintf(stderr, "Didn't get expected output to new handle\n"); test_assert(strcmp((char *) monitor.new_output, "hello\n") == 0); } if (monitor.old_output[0] != 0) { fprintf(stderr, "Unexpected output to old handle: %s", monitor.old_output); test_assert(monitor.old_output[0] == 0); } return rc; } /* test_restart_to_new_url() */ int main(int argc, char *argv[]) { int i; int failed; test_case_t tests[] = { TEST_CASE(test_restart_to_new_url), {NULL, NULL} }; LTDL_SET_PRELOADED_SYMBOLS(); contact_string = getenv("CONTACT_STRING"); if (argc == 2) { contact_string = argv[1]; } if (contact_string == NULL) { fprintf(stderr, "Usage: %s CONTACT-STRING\n", argv[0]); exit(1); } printf("1..%d\n", (int) (sizeof(tests)/sizeof(tests[0]) - 1)); globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); globus_module_activate(GLOBUS_GASS_TRANSFER_MODULE); for (i = 0, failed = 0; tests[i].test_name != NULL; i++) { int rc = tests[i].test_case(); if (rc != 0) { printf("not "); failed++; } printf("ok # %s\n", tests[i].test_name); } globus_module_deactivate_all(); return failed; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/set-credentials-test.c0000644000000000000000000000013114243161125025735 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.070120103 30 ctime=1653404021.593743665 globus_gram_job_manager-15.8/test/client/set-credentials-test.c0000664000175000017500000001021214243161125026073 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2014 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" typedef struct { int state; int errorcode; globus_mutex_t mutex; globus_cond_t cond; } monitor_t; static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode); int main(int argc, char *argv[]) { char * rm_contact; char * callback_contact; char * job_contact; monitor_t monitor; int rc = 0; gss_cred_id_t cred; OM_uint32 maj_stat, min_stat; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..1\n"); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s resource-manager-contact\n", argv[0]); exit(1); } rc = globus_module_activate(GLOBUS_COMMON_MODULE); if(rc) { goto end; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_modules; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; maj_stat = globus_gss_assist_acquire_cred( &min_stat, GSS_C_BOTH, &cred); if (GSS_ERROR(maj_stat)) { char * status; globus_gss_assist_display_status_str( &status, "acquire_cred", maj_stat, min_stat, 0); fprintf(stderr, "%s\n", status); free(status); rc = 1; goto error_exit; } rc = globus_gram_client_set_credentials(cred); if (rc != 0) { fprintf(stderr, "Error setting credentials\n"); goto error_exit; } rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error submitting job request %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = monitor.errorcode; destroy_callback_contact: globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(callback_contact); globus_libc_free(callback_contact); globus_libc_free(job_contact); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_modules: globus_module_deactivate_all(); end: printf("%s 1 set-credentials-test\n", (rc == 0) ? "ok" : "not ok"); return rc; } /* main() */ static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode) { monitor_t * monitor; monitor = arg; globus_mutex_lock(&monitor->mutex); monitor->state = state; monitor->errorcode = errorcode; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* gram_state_callback() */ globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/status-test.c0000644000000000000000000000013114243161125024172 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.083119981 30 ctime=1653404021.595743646 globus_gram_job_manager-15.8/test/client/status-test.c0000664000175000017500000001315614243161125024342 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" typedef struct { int state; int errorcode; globus_mutex_t mutex; globus_cond_t cond; } monitor_t; static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode); int main(int argc, char *argv[]) { char * rm_contact; char * callback_contact; char * job_contact; monitor_t monitor; int rc = 0; int status = 0; int failure_code = 0; globus_abstime_t timeout; globus_abstime_t start_time; globus_abstime_t stop_time; globus_reltime_t delta; int calls=0; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..1\n"); rm_contact = getenv("CONTACT_STRING"); if(argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s resource-manager-contact\n", argv[0]); exit(1); } rc = globus_module_activate(GLOBUS_COMMON_MODULE); if(rc) { goto end; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if(rc) { goto disable_modules; } globus_mutex_init(&monitor.mutex ,GLOBUS_NULL); globus_cond_init(&monitor.cond, GLOBUS_NULL); monitor.state = GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING; rc = globus_gram_client_callback_allow(gram_state_callback, &monitor, &callback_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error creating callback contact %s.\n", globus_gram_client_error_string(rc)); goto error_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, "&(executable=/bin/sleep)(arguments=10)", GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, callback_contact, &job_contact); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error submitting job request %s.\n", globus_gram_client_error_string(rc)); goto destroy_callback_contact; } GlobusTimeAbstimeGetCurrent(start_time); while(monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE) { globus_mutex_unlock(&monitor.mutex); rc = globus_gram_client_job_status( job_contact, &status, &failure_code); calls++; globus_mutex_lock(&monitor.mutex); if(rc != GLOBUS_SUCCESS) { fprintf(stderr, "job status check failed because %s.\n", globus_gram_client_error_string(rc)); } if(rc != GLOBUS_SUCCESS && rc != GLOBUS_GRAM_PROTOCOL_ERROR_CONNECTION_FAILED && rc != GLOBUS_GRAM_PROTOCOL_ERROR_CONTACTING_JOB_MANAGER && rc != GLOBUS_GRAM_PROTOCOL_ERROR_PROTOCOL_FAILED && rc != GLOBUS_GRAM_PROTOCOL_ERROR_JOB_CONTACT_NOT_FOUND) { goto destroy_callback_contact; } GlobusTimeAbstimeSet(timeout, 0, 100); globus_cond_timedwait(&monitor.cond, &monitor.mutex, &timeout); } rc = monitor.errorcode; destroy_callback_contact: if(calls) { GlobusTimeAbstimeGetCurrent(stop_time); GlobusTimeAbstimeDiff(delta, start_time, stop_time); fprintf(stderr, "Made %d calls to status in %ld.%06ld seconds\n", calls, (long) delta.tv_sec, (long) delta.tv_usec); } globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(callback_contact); globus_libc_free(callback_contact); globus_libc_free(job_contact); error_exit: globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); disable_modules: globus_module_deactivate_all(); end: printf("%s 1 status-test\n", (rc == 0) ? "ok" : "not ok"); return rc; } /* main() */ static void gram_state_callback( void * arg, char * job_contact, int state, int errorcode) { monitor_t * monitor; monitor = arg; globus_mutex_lock(&monitor->mutex); monitor->state = state; monitor->errorcode = errorcode; globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* gram_state_callback() */ globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/stdio-size-test.c0000644000000000000000000000013114243161125024741 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.095119868 30 ctime=1653404021.596743637 globus_gram_job_manager-15.8/test/client/stdio-size-test.c0000664000175000017500000002105214243161125025103 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" #include "globus_gass_server_ez.h" #include #include #include #define STDOUT_SIZE "18" /*strlen("hello\nhello again\n")*/ typedef struct { char * callback_contact; char * job_contact; globus_mutex_t mutex; globus_cond_t cond; int job_status; int failure_code; int stdout_size; } monitor_t; static void globus_l_state_callback(void * callback_arg, char * job_contact, int state, int errorcode); int main(int argc, char *argv[]) { char *rm_contact; int rc = 1; monitor_t monitor; char * gass_url; char * rsl; globus_gass_transfer_listener_t listener; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..1\n"); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s RM-CONTACT\n" " RM-CONTACT: resource manager contact\n", argv[0]); goto args_error; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure activating GLOBUS_GRAM_CLIENT_MODULE: %s\n", globus_gram_client_error_string(rc)); goto activate_common_failed; } rc = globus_module_activate(GLOBUS_GASS_SERVER_EZ_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure activating GLOBUS_GASS_SERVER_EZ_MODULE: %d\n", rc); goto activate_server_ez_failed; } rc = globus_gass_server_ez_init( &listener, NULL, "https", NULL, GLOBUS_GASS_SERVER_EZ_WRITE_ENABLE, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure inititializing gass server %d\n", rc); goto gass_server_ez_init_failed; } gass_url = globus_gass_transfer_listener_get_base_url(listener); if (gass_url == NULL) { fprintf(stderr, "failure getting gass url\n"); goto gass_server_get_url_failed; } globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); monitor.job_contact = NULL; monitor.callback_contact = NULL; rc = globus_gram_client_callback_allow( globus_l_state_callback, &monitor, &monitor.callback_contact); if (rc != GLOBUS_SUCCESS || monitor.callback_contact == NULL) { fprintf(stderr, "failure allowing callbacks\n"); rc = -1; goto allow_callback_failed; } rsl = globus_common_create_string( "&(executable=/bin/sh)" "(arguments=-c '/bin/echo hello; /bin/sleep 30; /bin/echo hello again')" "(stdout=%s/dev/null)" "(save_state = yes)" "(two_phase=60)", gass_url); if (rsl == NULL) { fprintf(stderr, "Error creating rsl\n"); goto malloc_rsl_failed; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, monitor.callback_contact, &monitor.job_contact); if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT) { if (rc == GLOBUS_SUCCESS) { fprintf(stderr, "job manager did not return " "GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT\n"); rc = -1; } else { fprintf(stderr, "failure submitting job request [%d]: %s\n", rc, globus_gram_client_error_string(rc)); } goto job_request_failed; } rc = 0; rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit signal: %s\n", globus_gram_client_error_string(rc)); goto commit_request_failed; } if (monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STDIO_SIZE, STDOUT_SIZE, NULL, NULL); if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_STILL_STREAMING) { fprintf(stderr, "job manager returned %d (%s) when I expected it to still " "be streaming output\n", rc, globus_gram_client_error_string(rc)); if (rc == GLOBUS_SUCCESS) { rc = GLOBUS_GRAM_PROTOCOL_ERROR_STILL_STREAMING; } goto still_streaming_check_failed; } } while (monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STDIO_SIZE, STDOUT_SIZE, NULL, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "job manager returned %d (%s) when I expected it to still " "be streaming output\n", rc, globus_gram_client_error_string(rc)); goto still_streaming_check_failed2; } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STDIO_SIZE, "0", NULL, NULL); if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_STDIO_SIZE) { fprintf(stderr, "job manager returned %d (%s) when I expected it to give me " "an incorrect size error\n", rc, globus_gram_client_error_string(rc)); goto incorrect_size_error; } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_END, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit end signal: %s\n", globus_gram_client_error_string(rc)); goto commit_end_failed; } commit_end_failed: incorrect_size_error: still_streaming_check_failed2: still_streaming_check_failed: commit_request_failed: if (monitor.job_contact != NULL) { globus_gram_client_job_contact_free(monitor.job_contact); } job_request_failed: free(rsl); malloc_rsl_failed: allow_callback_failed: globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(monitor.callback_contact); if (monitor.callback_contact != NULL) { free(monitor.callback_contact); } globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); gass_server_get_url_failed: globus_gass_server_ez_shutdown(listener); gass_server_ez_init_failed: activate_server_ez_failed: activate_common_failed: globus_module_deactivate_all(); args_error: printf("%s 1 stdio-size-test\n", (rc == 0) ? "ok" : "not ok"); return rc; } static void globus_l_state_callback( void * callback_arg, char * job_contact, int state, int errorcode) { monitor_t * monitor = callback_arg; globus_mutex_lock(&monitor->mutex); if (! strcmp(monitor->job_contact, job_contact)) { monitor->job_status = state; globus_cond_signal(&monitor->cond); } globus_mutex_unlock(&monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/stdio-update-after-failure-test.c0000644000000000000000000000013114243161125027775 xustar000000000000000029 mtime=1653400149.36797003 30 atime=1653401832.109119736 30 ctime=1653404021.598743618 globus_gram_job_manager-15.8/test/client/stdio-update-after-failure-test.c0000664000175000017500000002323214243161125030141 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" #include "globus_gass_server_ez.h" #include #include #include #define STDOUT_SIZE "18" /*strlen("hello\nhello again\n")*/ typedef struct { char * callback_contact; char * job_contact; globus_mutex_t mutex; globus_cond_t cond; int job_status; int failure_code; int stdout_size; } monitor_t; static void globus_l_state_callback(void * callback_arg, char * job_contact, int state, int errorcode); int main(int argc, char *argv[]) { char *rm_contact; int rc = 1; monitor_t monitor; char * gass_url; char * rsl; char * old_job_contact; globus_gass_transfer_listener_t listener; int ignore_job_status = 0; int ignore_failure_code = 0; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..1\n"); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (rm_contact == NULL) { fprintf(stderr, "Usage: %s RM-CONTACT\n" " RM-CONTACT: resource manager contact\n", argv[0]); goto args_error; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure activating GLOBUS_GRAM_CLIENT_MODULE: %s\n", globus_gram_client_error_string(rc)); goto activate_common_failed; } rc = globus_module_activate(GLOBUS_GASS_SERVER_EZ_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure activating GLOBUS_GASS_SERVER_EZ_MODULE: %d\n", rc); goto activate_server_ez_failed; } rc = globus_gass_server_ez_init( &listener, NULL, "https", NULL, GLOBUS_GASS_SERVER_EZ_WRITE_ENABLE, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure inititializing gass server %d\n", rc); goto gass_server_ez_init_failed; } gass_url = globus_gass_transfer_listener_get_base_url(listener); if (gass_url == NULL) { fprintf(stderr, "failure getting gass url\n"); goto gass_server_get_url_failed; } globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); monitor.job_contact = NULL; monitor.callback_contact = NULL; rc = globus_gram_client_callback_allow( globus_l_state_callback, &monitor, &monitor.callback_contact); if (rc != GLOBUS_SUCCESS || monitor.callback_contact == NULL) { fprintf(stderr, "failure allowing callbacks\n"); rc = -1; goto allow_callback_failed; } rsl = globus_common_create_string( "&(executable=/bin/sh)" "(rsl_substitution = (GASS https://bad.example.org))" "(arguments=-c 'echo hello')" "(file_stage_out= (/etc/group $(GASS)/dev/null))" "(save_state = yes)" "(two_phase=60)"); if (rsl == NULL) { fprintf(stderr, "Error creating rsl\n"); goto malloc_rsl_failed; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( rm_contact, rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, monitor.callback_contact, &monitor.job_contact); fprintf(stderr, "job request result %d\n", rc); if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT) { if (rc == GLOBUS_SUCCESS) { fprintf(stderr, "job manager did not return " "GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT\n"); rc = -1; } else { fprintf(stderr, "failure submitting job request [%d]: %s\n", rc, globus_gram_client_error_string(rc)); } goto job_request_failed; } rc = 0; rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &ignore_job_status, &ignore_failure_code); fprintf(stderr, "job signal result %d\n", rc); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit signal: %s\n", globus_gram_client_error_string(rc)); goto commit_request_failed; } while (monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if (!(monitor.job_status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED && monitor.failure_code == GLOBUS_GRAM_PROTOCOL_ERROR_STAGE_OUT_FAILED)) { fprintf(stderr, "expected job to be failed with stage out failed\n"); goto unexpected_job_state; } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STOP_MANAGER, NULL, &monitor.job_status, &monitor.failure_code); fprintf(stderr, "stop manager result %d\n", rc); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Got %d trying to stop manager (status=%d, failure_code=%d)\n", rc, monitor.job_status, monitor.failure_code); goto unexpected_job_state; } free(rsl); old_job_contact = monitor.job_contact; monitor.job_contact = NULL; monitor.job_status = 0; monitor.failure_code = 0; rsl = globus_common_create_string( "&(restart=%s)" "(rsl_substitution = (GASS \"%s\"))", old_job_contact, gass_url); rc = globus_gram_client_job_request( rm_contact, rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, monitor.callback_contact, &monitor.job_contact); fprintf(stderr, "restart request result %d\n", rc); if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT) { if (rc == GLOBUS_SUCCESS) { fprintf(stderr, "job manager did not return " "GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT\n"); rc = -1; } else { fprintf(stderr, "failure submitting job request [%d]: %s\n", rc, globus_gram_client_error_string(rc)); } goto job_request_failed; } rc = 0; monitor.job_status = 0; monitor.failure_code = 0; rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &ignore_job_status, &ignore_failure_code); fprintf(stderr, "commit request result %d\n", rc); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "failure sending commit signal: %s\n", globus_gram_client_error_string(rc)); goto commit_request_failed; } while (monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } printf("monitor.job_status=%d\nmonitor.failure_code=%d\n", monitor.job_status, monitor.failure_code); rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_END, NULL, &ignore_job_status, &ignore_failure_code); fprintf(stderr, "commit request result %d\n", rc); unexpected_job_state: commit_request_failed: if (monitor.job_contact != NULL) { globus_gram_client_job_contact_free(monitor.job_contact); } job_request_failed: free(rsl); malloc_rsl_failed: allow_callback_failed: globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(monitor.callback_contact); if (monitor.callback_contact != NULL) { free(monitor.callback_contact); } globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); gass_server_get_url_failed: globus_gass_server_ez_shutdown(listener); gass_server_ez_init_failed: activate_server_ez_failed: activate_common_failed: globus_module_deactivate_all(); args_error: printf("%s # stdio-update-after-failure-test\n", rc == 0 ? "ok" : "not ok"); return rc; } static void globus_l_state_callback( void * callback_arg, char * job_contact, int state, int errorcode) { monitor_t * monitor = callback_arg; globus_mutex_lock(&monitor->mutex); if (! strcmp(monitor->job_contact, job_contact)) { fprintf(stderr, "callback:\nstate=%d\nerrorcode=%d\n\n", state, errorcode); monitor->job_status = state; monitor->failure_code = errorcode; globus_cond_signal(&monitor->cond); } globus_mutex_unlock(&monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/stdio-update-test.c0000644000000000000000000000013114243161125025251 xustar000000000000000029 mtime=1653400149.36897002 30 atime=1653401832.123119604 30 ctime=1653404021.600743599 globus_gram_job_manager-15.8/test/client/stdio-update-test.c0000664000175000017500000003436314243161125025424 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" #include "globus_gram_protocol.h" #include "globus_gass_transfer.h" static char * contact_string = NULL; typedef struct { char * test_name; int (*test_case)(void); } test_case_t; typedef struct { globus_mutex_t mutex; globus_cond_t cond; int status; int failure_code; globus_gass_transfer_listener_t old_listener; globus_gass_transfer_request_t old_request; unsigned char old_output[64]; globus_size_t old_output_len; globus_gass_transfer_listener_t new_listener; globus_gass_transfer_request_t new_request; unsigned char new_output[64]; globus_size_t new_output_len; } test_monitor_t; void test_l_old_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener); void test_l_new_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener); #define TEST_CASE(x) { #x, x } #define test_assert(a) if(!(a)) { fprintf(stderr, "%s:%d: Assertion %s failed", __func__, __LINE__, #a); return 1; } #define test_assert_gram_rc_equals(a, b) \ { \ int _a = (a); \ int _b = (b); \ if (_a != _b) \ { \ fprintf(stderr, "%s:%d: Expected rc = %d, got %d (%s)\n", \ __func__, __LINE__, \ _b, _a, \ globus_gram_protocol_error_string(_a)); \ return 1; \ } \ } static void test_l_gass_fail( void * callback_arg, globus_gass_transfer_request_t request) { return; } static void test_l_data_callback( void * arg, globus_gass_transfer_request_t request, globus_byte_t * bytes, globus_size_t length, globus_bool_t last_data) { test_monitor_t *monitor = arg; if (last_data) { globus_gass_transfer_request_destroy(request); return; } globus_gass_transfer_receive_bytes( request, bytes, sizeof(monitor->old_output), 1, test_l_data_callback, monitor); } static void test_l_old_accept_callback( void * callback_arg, globus_gass_transfer_request_t request) { test_monitor_t *monitor = callback_arg; int rc; globus_mutex_lock(&monitor->mutex); monitor->old_request = request; globus_mutex_unlock(&monitor->mutex); globus_gass_transfer_authorize( request, GLOBUS_GASS_TRANSFER_LENGTH_UNKNOWN); rc = globus_gass_transfer_receive_bytes( request, monitor->old_output, sizeof(monitor->old_output), 1, test_l_data_callback, monitor); rc = globus_gass_transfer_register_listen( monitor->old_listener, test_l_old_listener_callback, monitor); } static void test_l_new_accept_callback( void * callback_arg, globus_gass_transfer_request_t request) { test_monitor_t *monitor = callback_arg; int rc; globus_mutex_lock(&monitor->mutex); monitor->new_request = request; globus_mutex_unlock(&monitor->mutex); rc = globus_gass_transfer_authorize( request, GLOBUS_GASS_TRANSFER_LENGTH_UNKNOWN); rc = globus_gass_transfer_receive_bytes( request, monitor->new_output, sizeof(monitor->new_output), 1, test_l_data_callback, monitor); rc = globus_gass_transfer_register_listen( monitor->new_listener, test_l_new_listener_callback, monitor); } void test_l_old_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener) { int rc; globus_gass_transfer_request_t request; globus_gass_transfer_requestattr_t attr; globus_gass_transfer_requestattr_init(&attr, "https"); globus_gass_transfer_secure_requestattr_set_authorization( &attr, GLOBUS_GASS_TRANSFER_AUTHORIZE_SELF, "https"); rc = globus_gass_transfer_register_accept( &request, &attr, listener, test_l_old_accept_callback, callback_arg); globus_gass_transfer_requestattr_destroy(&attr); } /* test_l_old_listener_callback() */ void test_l_new_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener) { int rc; globus_gass_transfer_request_t request; globus_gass_transfer_requestattr_t attr; globus_gass_transfer_requestattr_init(&attr, "https"); globus_gass_transfer_secure_requestattr_set_authorization( &attr, GLOBUS_GASS_TRANSFER_AUTHORIZE_SELF, "https"); rc = globus_gass_transfer_register_accept( &request, &attr, listener, test_l_new_accept_callback, callback_arg); globus_gass_transfer_requestattr_destroy(&attr); } /* test_l_new_listener_callback() */ static void test_l_gram_callback( void * callback_arg, char * job_contact, int state, int errorcode) { test_monitor_t *monitor = callback_arg; globus_mutex_lock(&monitor->mutex); monitor->failure_code = errorcode; switch (monitor->status) { case GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED: monitor->status = state; break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN: if (state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED) { monitor->status = state; } case GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING: if (state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED && state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN) { monitor->status = state; } break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE: if (state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED && state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING && state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN) { monitor->status = state; } break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT: if (state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED && state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING && state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN && state != GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE) { monitor->status = state; } break; case GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED: case GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE: case GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL: case GLOBUS_GRAM_PROTOCOL_JOB_STATE_SUSPENDED: break; } globus_cond_signal(&monitor->cond); globus_mutex_unlock(&monitor->mutex); } /* test_l_gram_callback() */ /* Test Case: * Submit a job that generates output after a short time. * Before that output is generated, send a STDIO_UPDATE signal, to * direct the output to a different port. * Verify that the output arrives at the new port */ int test_stdio_update(void) { char *old_listener_url, *new_listener_url; char *old_job_contact; int rc; char *callback_contact; char *old_rsl, *new_rsl; test_monitor_t monitor; const char rsl_spec[] = "&(executable=/bin/sh)" "(arguments=-c 'sleep 30; echo hello;')" "(rsl_substitution = (TEST_GASS_URL %s))" "(stdout = $(TEST_GASS_URL)/out)"; const char stdio_update_rsl_spec[] = "&(stdout = %s/out)"; globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); memset(monitor.old_output, 0, sizeof(monitor.old_output)); memset(monitor.new_output, 0, sizeof(monitor.new_output)); monitor.old_request = GLOBUS_NULL_HANDLE; monitor.new_request = GLOBUS_NULL_HANDLE; monitor.status = GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED; monitor.failure_code = 0; /* Create a pair of listeners and get their base URLs. The job will be * submitted with stdout directed to the first, then redirected to the * second via a stdio update signal */ rc = globus_gass_transfer_create_listener( &monitor.old_listener, NULL, "https"); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); test_assert(monitor.old_listener != GLOBUS_NULL_HANDLE); old_listener_url = globus_gass_transfer_listener_get_base_url( monitor.old_listener); test_assert(old_listener_url != NULL); rc = globus_gass_transfer_register_listen( monitor.old_listener, test_l_old_listener_callback, &monitor); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); rc = globus_gass_transfer_create_listener( &monitor.new_listener, NULL, "https"); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); test_assert(monitor.new_listener != GLOBUS_NULL_HANDLE); new_listener_url = globus_gass_transfer_listener_get_base_url( monitor.new_listener); test_assert(new_listener_url != NULL); rc = globus_gass_transfer_register_listen( monitor.new_listener, test_l_new_listener_callback, &monitor); test_assert(rc == GLOBUS_SUCCESS); old_rsl = globus_common_create_string(rsl_spec, old_listener_url); test_assert(old_rsl != NULL); /* Submit the job, do the two-phase commit, then submit a restart * request with the new stdout destination */ rc = globus_gram_client_callback_allow( test_l_gram_callback, &monitor, &callback_contact); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); test_assert(callback_contact != NULL); rc = globus_gram_client_job_request( contact_string, old_rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED| GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_IN| GLOBUS_GRAM_PROTOCOL_JOB_STATE_PENDING| GLOBUS_GRAM_PROTOCOL_JOB_STATE_ACTIVE| GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT| GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE| GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED, callback_contact, &old_job_contact); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); test_assert(old_job_contact != NULL); globus_mutex_lock(&monitor.mutex); while (monitor.status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_UNSUBMITTED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } new_rsl = globus_common_create_string( stdio_update_rsl_spec, new_listener_url); test_assert(new_rsl != NULL); rc = globus_gram_client_job_signal( old_job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_STDIO_UPDATE, new_rsl, &monitor.status, &monitor.failure_code); test_assert_gram_rc_equals(rc, GLOBUS_SUCCESS); /* Wait for job to complete. After it's done, check to see which * destination got stdout */ while (monitor.status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if (monitor.old_request) { globus_gass_transfer_fail(monitor.old_request, test_l_gass_fail, NULL); } globus_mutex_unlock(&monitor.mutex); if (monitor.new_output[0] == 0) { fprintf(stderr, "Didn't get expected output to new handle\n"); test_assert(strcmp((char *) monitor.new_output, "hello\n") == 0); } if (monitor.old_output[0] != 0) { fprintf(stderr, "Unexpected output to old handle: %s", monitor.old_output); test_assert(monitor.old_output[0] == 0); } return rc; } /* test_stdio_update() */ int main(int argc, char *argv[]) { int i; int failed; test_case_t tests[] = { TEST_CASE(test_stdio_update), {NULL, NULL} }; LTDL_SET_PRELOADED_SYMBOLS(); printf("1..%d\n", (int) (sizeof(tests)/sizeof(tests[0]) - 1)); contact_string = getenv("CONTACT_STRING"); if (argc == 2) { contact_string = argv[1]; } if (contact_string == NULL) { fprintf(stderr, "Usage: %s CONTACT-STRING\n", argv[0]); exit(1); } globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); globus_module_activate(GLOBUS_GASS_TRANSFER_MODULE); for (i = 0, failed = 0; tests[i].test_name != NULL; i++) { int rc = tests[i].test_case(); if (rc != 0) { printf("not "); failed++; } printf("ok %s\n", tests[i].test_name); } globus_module_deactivate_all(); return failed; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/two-phase-commit-test.c0000644000000000000000000000013114243161125026044 xustar000000000000000029 mtime=1653400149.36897002 30 atime=1653401832.138119463 30 ctime=1653404021.601743589 globus_gram_job_manager-15.8/test/client/two-phase-commit-test.c0000664000175000017500000001464614243161125026221 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_common.h" #include "globus_gram_client.h" #include "globus_preload.h" #include #include #include const char * format = "&(executable=/bin/sh)(two_phase=%d)"; typedef struct { char * callback_contact; char * job_contact; globus_mutex_t mutex; globus_cond_t cond; enum { no_commit, no_commit_end, commit, late_commit_end } mode; int job_status; int failure_code; int timeout; } monitor_t; static void globus_l_state_callback(void * callback_arg, char * job_contact, int state, int errorcode); static globus_bool_t globus_l_get_mode(monitor_t * monitor, char * arg) { globus_bool_t ret = GLOBUS_TRUE; if (! strcmp(arg, "no-commit")) { monitor->mode = no_commit; } else if (! strcmp(arg, "no-commit-end")) { monitor->mode = no_commit_end; } else if (! strcmp(arg, "commit")) { monitor->mode = commit; } else if (! strcmp(arg, "late-commit-end")) { monitor->mode = late_commit_end; } else { ret = GLOBUS_FALSE; } return ret; } int main(int argc, char *argv[]) { int rc = 1; monitor_t monitor; char * rsl; LTDL_SET_PRELOADED_SYMBOLS(); if (argc < 4 || (!globus_l_get_mode(&monitor, argv[2])) || ((monitor.timeout = atoi(argv[3])) < 0)) { globus_libc_fprintf(stderr, "Usage: %s RM-CONTACT MODE SAVE_STATE TIMEOUT\n" " RM-CONTACT: resource manager contact\n" " MODE: no-commit|no-commit-end|commit|late-commit-end\n" " TIMEOUT: two-phase timeout in seconds\n", argv[0]); goto error_exit; } rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if (rc != GLOBUS_SUCCESS) { globus_libc_fprintf(stderr, "failure activating GLOBUS_GRAM_CLIENT_MODULE: %s\n", globus_gram_client_error_string(rc)); goto error_exit; } rsl = globus_common_create_string(format, monitor.timeout); if (rsl == NULL) { globus_libc_fprintf(stderr, "failure allocating rsl string\n"); goto deactivate_exit; } globus_mutex_init(&monitor.mutex, NULL); globus_cond_init(&monitor.cond, NULL); monitor.job_contact = NULL; monitor.callback_contact = NULL; rc = globus_gram_client_callback_allow( globus_l_state_callback, &monitor, &monitor.callback_contact); if (rc != GLOBUS_SUCCESS || monitor.callback_contact == NULL) { globus_libc_fprintf(stderr, "failure allowing callbacks\n"); rc = -1; goto destroy_monitor_exit; } globus_mutex_lock(&monitor.mutex); rc = globus_gram_client_job_request( argv[1], rsl, GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, monitor.callback_contact, &monitor.job_contact); if (monitor.job_contact != NULL) { globus_libc_printf("%s\n", monitor.job_contact); } if (rc != GLOBUS_GRAM_PROTOCOL_ERROR_WAITING_FOR_COMMIT) { if (rc == GLOBUS_SUCCESS) { globus_libc_fprintf(stderr, "job manager did not return " "GLOBUS_GRAM_PROTOCOL_ERROR_COMMIT_TIMED_OUT\n"); rc = -1; } else { globus_libc_fprintf(stderr, "failure submitting job request [%d]: %s\n", rc, globus_gram_client_error_string(rc)); } goto disallow_exit; } rc = 0; if (monitor.mode == no_commit) { goto disallow_exit; } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_REQUEST, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { globus_libc_fprintf(stderr, "failure sending commit signal: %s\n", globus_gram_client_error_string(rc)); goto disallow_exit; } while (monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE && monitor.job_status != GLOBUS_GRAM_PROTOCOL_JOB_STATE_FAILED) { globus_cond_wait(&monitor.cond, &monitor.mutex); } if (monitor.mode == no_commit_end) { rc = 0; goto disallow_exit; } else if (monitor.mode == late_commit_end) { rc = 0; sleep(monitor.timeout + 1); } rc = globus_gram_client_job_signal( monitor.job_contact, GLOBUS_GRAM_PROTOCOL_JOB_SIGNAL_COMMIT_END, NULL, &monitor.job_status, &monitor.failure_code); if (rc != GLOBUS_SUCCESS) { globus_libc_fprintf(stderr, "failure sending commit end signal: %s\n", globus_gram_client_error_string(rc)); goto disallow_exit; } disallow_exit: if (monitor.job_contact != NULL) { globus_gram_client_job_contact_free(monitor.job_contact); } globus_mutex_unlock(&monitor.mutex); globus_gram_client_callback_disallow(monitor.callback_contact); destroy_monitor_exit: if (monitor.callback_contact != NULL) { free(monitor.callback_contact); } globus_mutex_destroy(&monitor.mutex); globus_cond_destroy(&monitor.cond); free(rsl); deactivate_exit: globus_module_deactivate_all(); error_exit: return rc; } static void globus_l_state_callback( void * callback_arg, char * job_contact, int state, int errorcode) { monitor_t * monitor = callback_arg; globus_mutex_lock(&monitor->mutex); if (! strcmp(monitor->job_contact, job_contact)) { monitor->job_status = state; globus_cond_signal(&monitor->cond); } globus_mutex_unlock(&monitor->mutex); } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/version-test.c0000644000000000000000000000013114243161125024334 xustar000000000000000029 mtime=1653400149.36897002 30 atime=1653401832.152119331 30 ctime=1653404021.605743551 globus_gram_job_manager-15.8/test/client/version-test.c0000664000175000017500000001217514243161125024504 0ustar00johndoejohndoe00000000000000/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "globus_gram_client.h" #include "globus_preload.h" #include "globus_gram_protocol.h" #define test_assert(assertion, message) \ if (!(assertion)) \ { \ printf("# %s:%d ", __FILE__, __LINE__); \ printf message; \ printf("\n"); \ return 1; \ } #define TEST_CASE(x) { #x, x } #define ARRAY_LEN(x) ((int) (sizeof(x)/sizeof(x[0]))) const char * rm_contact; typedef struct { char * name; int (*test_function)(void); } test_case; /* Check that passing null parameters to * globus_gram_client_get_jobmanager_version() don't cause crashes and * return reasonable error values. */ static int null_param_test(void) { int rc; globus_hashtable_t extensions; rc = globus_gram_client_get_jobmanager_version( NULL, &extensions); test_assert( rc == GLOBUS_GRAM_PROTOCOL_ERROR_NULL_PARAMETER, ("globus_gram_client_get_jobmanager_version() didn't return expected error: %d (%s)", rc, globus_gram_protocol_error_string(rc))); rc = globus_gram_client_get_jobmanager_version( rm_contact, NULL); test_assert( rc == GLOBUS_GRAM_PROTOCOL_ERROR_NULL_PARAMETER, ("globus_gram_client_get_jobmanager_version() didn't return expected error: %d (%s)", rc, globus_gram_protocol_error_string(rc))); rc = GLOBUS_SUCCESS; return rc; } /* null_param_test() */ /* Check that passing bad contact string to * globus_gram_client_get_jobmanager_version() don't cause crashes and * returns a reasonable error value. */ static int bad_contact_test(void) { int rc; globus_hashtable_t extensions; rc = globus_gram_client_get_jobmanager_version( "grid.example.org:2119", &extensions); test_assert( rc == GLOBUS_GRAM_PROTOCOL_ERROR_CONTACTING_JOB_MANAGER, ("globus_gram_client_get_jobmanager_version() didn't return expected error: %d (%s)", rc, globus_gram_protocol_error_string(rc))); rc = GLOBUS_SUCCESS; return rc; } /* bad_contact_test() */ /* Check that using globus_gram_client_get_jobmanager_version() to talk * to the resource management contact specified on the command line yields * a response that can be parsed out to include the version and toolkit-version * attributes. */ static int version_test(void) { int rc; globus_gram_protocol_extension_t * extension; globus_hashtable_t extensions; rc = globus_gram_client_get_jobmanager_version( rm_contact, &extensions); test_assert( rc == GLOBUS_SUCCESS, ("globus_gram_client_get_jobmanager_version() failed: %d (%s)", rc, globus_gram_protocol_error_string(rc))); test_assert( extensions != NULL, ("globus_gram_client_get_jobmanager_version() returned empty extensions")); extension = globus_hashtable_lookup(&extensions, "toolkit-version"); test_assert( extension != NULL, ("toolkit-version attribute not present in response")); extension = globus_hashtable_lookup(&extensions, "version"); test_assert( extension != NULL, ("version attribute not present in response")); globus_gram_protocol_hash_destroy(&extensions); return rc; } /* version_test() */ int main(int argc, char *argv[]) { test_case tests[] = { TEST_CASE(null_param_test), TEST_CASE(bad_contact_test), TEST_CASE(version_test) }; int i; int rc; int not_ok = 0; LTDL_SET_PRELOADED_SYMBOLS(); rm_contact = getenv("CONTACT_STRING"); if (argc == 2) { rm_contact = argv[1]; } if (!rm_contact) { fprintf(stderr, "Usage: %s RM-CONTACT or set CONTACT_STRING\n", argv[0]); exit(EXIT_FAILURE); } printf("1..%d\n", ARRAY_LEN(tests)); globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); for (i = 0; i < ARRAY_LEN(tests); i++) { rc = tests[i].test_function(); if (rc != 0) { not_ok++; printf("not ok # %s\n", tests[i].name); } else { printf("ok\n"); } } globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); return not_ok; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/failed-job-two-phase-commit.pl0000644000000000000000000000013014243161125027251 xustar000000000000000029 mtime=1653400149.36697004 29 atime=1653400149.36597005 30 ctime=1653404021.610743503 globus_gram_job_manager-15.8/test/client/failed-job-two-phase-commit.pl0000775000175000017500000000605314243161125027423 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl # # Copyright 1999-2010 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Ping a valid and invalid gatekeeper contact. my $prefix; my $exec_prefix; my $sbindir; my $bindir; my $includedir; my $datarootdir; my $datadir; my $libdir; my $libexecdir; my $sysconfdir; my $sharedstatedir; my $localstatedir; my $perlmoduledir; BEGIN { $prefix = '@prefix@'; if ($ENV{GLOBUS_LOCATION}) { $prefix = $ENV{GLOBUS_LOCATION}; } $exec_prefix="@exec_prefix@"; $sbindir="@sbindir@"; $bindir="@bindir@"; $includedir="@includedir@"; $datarootdir="@datarootdir@"; $datadir="@datadir@"; $libdir="@libdir@"; $libexecdir="@libexecdir@"; $sysconfdir="@sysconfdir@"; $sharedstatedir="@sharedstatedir@"; $localstatedir="@localstatedir@"; $perlmoduledir="@perlmoduledir@"; unshift(@INC, $perlmoduledir); } use strict; use Test::More; use IO::File; use Globus::Core::Paths; my $test_exec = './failed-job-two-phase-commit'; if ($ENV{CONTACT_STRING} eq "") { die "CONTACT_STRING not set"; } my @tests; my @todo; my $testno=1; sub two_phase_test { my ($errors,$rc) = ("",0); my ($output); my $cache_cmd; my ($contact, $timeout) = @_; my $tag; my $valgrind = ""; if (exists $ENV{VALGRIND}) { $valgrind = "valgrind --log-file=VALGRIND-globus_gram_client_two_phase_commit_test" . $testno++ . ".log"; if (exists $ENV{VALGRIND_OPTIONS}) { $valgrind .= ' ' . $ENV{VALGRIND_OPTIONS}; } } my $fh = new IO::File( "$valgrind $test_exec \"$contact\" $timeout |"); $tag = <$fh>; sleep($timeout+5); $fh->close(); chomp($tag); $rc = $?>> 8; if ($rc != 0) { $errors .= "Test exited with $rc. "; } if($tag eq '') { $errors .= "Didn't get a real job id from the test.\n"; } else { sleep($timeout+5); my $cache_out = `$Globus::Core::Paths::bindir/globus-gass-cache -list -tag $tag`; chomp($cache_out); if($cache_out ne '') { $errors .= "Test left unexpected droppings in the cache:\n" . "$cache_out"; print STDERR `$Globus::Core::Paths::bindir/globus-gass-cache -cleanup-tag $tag`; } } ok($errors eq "", "$test_exec \"$contact\" $timeout"); } push(@tests, "two_phase_test('$ENV{CONTACT_STRING}','1');"); # Now that the tests are defined, set up the Test to deal with them. plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/nonblocking-register-test.pl0000644000000000000000000000013014243161125027164 xustar000000000000000029 mtime=1653400149.36697004 29 atime=1653400149.36697004 30 ctime=1653404021.612743484 globus_gram_job_manager-15.8/test/client/nonblocking-register-test.pl0000775000175000017500000000361014243161125027332 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl # # Copyright 1999-2010 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # use strict; use POSIX; use Test; my $test_exec = './nonblocking-register-test'; if ($ENV{CONTACT_STRING} eq "") { die "CONTACT_STRING not set"; } my @tests; my @todo; my $caseno=1; sub register_callback_test { my ($errors,$rc) = ("",0); my ($output); my ($contact, $test, $result) = @_; my $valgrind = ""; if (exists $ENV{VALGRIND}) { $valgrind = "valgrind --log-file=VALGRIND-nonblocking_register_test_" . $caseno++ . ".log"; if (exists $ENV{VALGRIND_OPTIONS}) { $valgrind .= ' ' . $ENV{VALGRIND_OPTIONS}; } } system("$valgrind $test_exec '$contact' $test >/dev/null"); $rc = $?>> 8; if($rc != $result) { $errors .= "Test exited with $rc. "; } if($errors eq "") { ok('success', 'success'); } else { ok($errors, 'success'); } } push(@tests, "register_callback_test('$ENV{CONTACT_STRING}', 1, 0);"); push(@tests, "register_callback_test('$ENV{CONTACT_STRING}X', 1, 7);"); push(@tests, "register_callback_test('$ENV{CONTACT_STRING}', 2, 0);"); push(@tests, "register_callback_test('$ENV{CONTACT_STRING}', 3, 0);"); # Now that the tests are defined, set up the Test to deal with them. plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/ping-test.pl0000644000000000000000000000013014243161125023774 xustar000000000000000029 mtime=1653400149.36697004 29 atime=1653400149.36697004 30 ctime=1653404021.614743465 globus_gram_job_manager-15.8/test/client/ping-test.pl0000775000175000017500000000325014243161125024142 0ustar00johndoejohndoe00000000000000#! /usr/bin/env perl # # Copyright 1999-2010 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Ping a valid and invalid gatekeeper contact. use strict; use POSIX; use Test::More; my $test_exec = './ping-test'; if ($ENV{CONTACT_STRING} eq "") { die "CONTACT_STRING not set"; } my @tests; my @todo; my $caseno=1; sub ping_test { my ($errors,$rc) = ("",0); my ($output); my ($contact, $result) = @_; my $valgrind = ""; if (exists $ENV{VALGRIND}) { $valgrind = "valgrind --log-file=VALGRIND-globus_gram_client_ping_test_" . $caseno++ . ".log"; if (exists $ENV{VALGRIND_OPTIONS}) { $valgrind .= ' ' . $ENV{VALGRIND_OPTIONS}; } } system("$valgrind $test_exec '$contact' >/dev/null"); $rc = $?>> 8; if($rc != $result) { $errors .= "Test exited with $rc. "; } ok($errors eq "", "ping_test $contact $result"); } push(@tests, "ping_test('$ENV{CONTACT_STRING}', 0);"); push(@tests, "ping_test('$ENV{CONTACT_STRING}X', 7);"); # Now that the tests are defined, set up the Test to deal with them. plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-callback-test.pl0000644000000000000000000000013014243161125026415 xustar000000000000000029 mtime=1653400149.36697004 29 atime=1653400149.36697004 30 ctime=1653404021.616743446 globus_gram_job_manager-15.8/test/client/register-callback-test.pl0000775000175000017500000000360514243161125026567 0ustar00johndoejohndoe00000000000000#! /usr/bin/env perl # # Copyright 1999-2010 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # use strict; use POSIX; use Test; my $test_exec = './register-callback-test'; if ($ENV{CONTACT_STRING} eq "") { die "CONTACT_STRING not set"; } my @tests; my @todo; my $testno=1; sub register_callback_test { my ($errors,$rc) = ("",0); my ($output); my ($contact, $test, $result) = @_; my $valgrind = ""; if (exists $ENV{VALGRIND}) { $valgrind = "valgrind --log-file=VALGRIND-register_callback_test_" . $testno++ . ".log"; if (exists $ENV{VALGRIND_OPTIONS}) { $valgrind .= ' ' . $ENV{VALGRIND_OPTIONS}; } } system("$valgrind $test_exec '$contact' $test >/dev/null"); $rc = $?>> 8; if($rc != $result) { $errors .= "Test exited with $rc. "; } if($errors eq "") { ok('success', 'success'); } else { ok($errors, 'success'); } } push(@tests, "register_callback_test('$ENV{CONTACT_STRING}', 1, 0);"); push(@tests, "register_callback_test('$ENV{CONTACT_STRING}X', 1, 7);"); push(@tests, "register_callback_test('$ENV{CONTACT_STRING}', 2, 0);"); push(@tests, "register_callback_test('$ENV{CONTACT_STRING}', 3, 0);"); # Now that the tests are defined, set up the Test to deal with them. plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-ping-test.pl0000644000000000000000000000013014243161125025616 xustar000000000000000029 mtime=1653400149.36797003 29 atime=1653400149.36797003 30 ctime=1653404021.618743427 globus_gram_job_manager-15.8/test/client/register-ping-test.pl0000775000175000017500000000624114243161125025767 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl # # Copyright 1999-2010 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # Ping a valid and invalid gatekeeper contact. my $prefix; my $exec_prefix; my $sbindir; my $bindir; my $includedir; my $datarootdir; my $datadir; my $libdir; my $libexecdir; my $sysconfdir; my $sharedstatedir; my $localstatedir; my $perlmoduledir; BEGIN { $prefix = '@prefix@'; if ($ENV{GLOBUS_LOCATION}) { $prefix = $ENV{GLOBUS_LOCATION}; } $exec_prefix="@exec_prefix@"; $sbindir="@sbindir@"; $bindir="@bindir@"; $includedir="@includedir@"; $datarootdir="@datarootdir@"; $datadir="@datadir@"; $libdir="@libdir@"; $libexecdir="@libexecdir@"; $sysconfdir="@sysconfdir@"; $sharedstatedir="@sharedstatedir@"; $localstatedir="@localstatedir@"; $perlmoduledir="@perlmoduledir@"; unshift(@INC, $perlmoduledir); } use strict; use Test::More; my $test_exec = './register-ping-test'; if ($ENV{CONTACT_STRING} eq "") { die "CONTACT_STRING not set"; } my @tests; my @todo; my $testno = 1; sub register_test { my ($contact, $credential, $result) = @_; my $rc; my $cmdline; my $errors=''; my $valgrind = ""; if (exists $ENV{VALGRIND}) { $valgrind = "valgrind --log-file=VALGRIND-globus_gram_client_register_ping_test_" . $testno++ . ".log"; if (exists $ENV{VALGRIND_OPTIONS}) { $valgrind .= ' ' . $ENV{VALGRIND_OPTIONS}; } } if($contact ne '') { $cmdline = "$test_exec '$contact' "; if($credential ne '') { $cmdline .= "'$credential'"; } system("$valgrind $cmdline >/dev/null"); $rc = $?>> 8; if($rc != $result) { $errors .= "Test exited with $rc. "; } ok($errors eq "", $cmdline ); } else { skip($contact eq '', "Can't tweak contact", 0); } } my $x509_user_proxy; if (exists $ENV{X509_USER_PROXY}) { $x509_user_proxy = $ENV{X509_USER_PROXY}; } else { chomp($x509_user_proxy = `$bindir/grid-proxy-info -path`); } push(@tests, "register_test('$ENV{CONTACT_STRING}', '', 0);"); push(@tests, "register_test('$ENV{CONTACT_STRING}', '$x509_user_proxy', 0);"); my $bad_contact; if($ENV{CONTACT_STRING} =~ m/:(.*):/) { my $replacement = $1 . "/bogus"; $bad_contact=$ENV{CONTACT_STRING}; $bad_contact=~s/:(.*):/:$replacement:/; } push(@tests, "register_test('$bad_contact', '', 93);"); push(@tests, "register_test('$bad_contact', '$x509_user_proxy', 93);"); # Now that the tests are defined, set up the Test to deal with them. plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/register-test.pl0000644000000000000000000000013014243161125024663 xustar000000000000000029 mtime=1653400149.36797003 29 atime=1653400149.36797003 30 ctime=1653404021.619743417 globus_gram_job_manager-15.8/test/client/register-test.pl0000775000175000017500000000667114243161125025043 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl # # Copyright 1999-2010 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # Ping a valid and invalid gatekeeper contact. use strict; use POSIX; use Test; my $test_exec = './register-test'; my $x509_certdir_string; if ($ENV{CONTACT_STRING} eq "") { die "CONTACT_STRING not set"; } if (exists($ENV{X509_CERT_DIR})) { $x509_certdir_string = "(X509_CERT_DIR $ENV{X509_CERT_DIR})"; } else { $x509_certdir_string = ""; } my @tests; my @todo; my $testno = 1; sub register_test { my ($errors,$rc) = ("",0); my ($output); my ($contact, $rsl, $result, $fullarg) = @_; my $valgrind = ""; if (exists $ENV{VALGRIND}) { $valgrind = "valgrind --log-file=VALGRIND-register_test_" . $testno++ . ".log"; if (exists $ENV{VALGRIND_OPTIONS}) { $valgrind .= ' ' . $ENV{VALGRIND_OPTIONS}; } } if (! defined($fullarg)) { $fullarg=''; } system("$valgrind $test_exec '$contact' '$rsl' $fullarg >/dev/null"); $rc = $?>> 8; if($rc != $result) { $errors .= "Test exited with $rc. "; } if($errors eq "") { ok('success', 'success'); } else { ok($errors, 'success'); } } push(@tests, "register_test('$ENV{CONTACT_STRING}', '&(executable=/bin/sleep)(arguments=1)', 0);"); push(@tests, "register_test('$ENV{CONTACT_STRING}X', '&(executable=/bin/sleep)(arguments=1)', 7);"); push(@tests, "register_test('$ENV{CONTACT_STRING}', '&(executable=/no-such-bin/sleep)(arguments=1)', 5);"); # Explanation for these test cases: # Both attempt to run the command # grid-proxy-info -type | grep limited && globusrun -k $GLOBUS_GRAM_JOB_CONTACT # In the 1st case, the credential is a limited proxy, so the job is canceled, # causing the client to receive a FAILED notification. # In the 2nd case, the credential is a full proxy, so the job is not canceled # and the job terminates normally push(@tests, "register_test('$ENV{CONTACT_STRING}', '&(executable=/bin/sh)' . '(arguments = -c \"grid-proxy-info -type | grep limited && eval \"\"globusrun -k \$GLOBUS_GRAM_JOB_CONTACT\"\"; sleep 30\")' . '(environment = ' . ' (GLOBUS_LOCATION \$(GLOBUS_LOCATION)) ' . ' (PATH \"/bin:/usr/bin:\" # \$(GLOBUS_LOCATION) # \"/bin\") '. ' $x509_certdir_string)' . '(library_path = \$(GLOBUS_LOCATION)/lib)', 8);"); push(@tests, "register_test('$ENV{CONTACT_STRING}', '&(executable=/bin/sh)' . '(arguments = -c \"grid-proxy-info -type | grep limited && eval \"\"globusrun -k \$GLOBUS_GRAM_JOB_CONTACT\"\"; sleep 30\")' . '(environment = '. ' (GLOBUS_LOCATION \$(GLOBUS_LOCATION))' . ' (PATH \"/bin:/usr/bin:\" # \$(GLOBUS_LOCATION) # \"/bin\") '. ' $x509_certdir_string)' . '(library_path = \$(GLOBUS_LOCATION)/lib)', 0, '-f');"); # Now that the tests are defined, set up the Test to deal with them. plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } globus_gram_job_manager-15.8/test/client/PaxHeaders.31186/two-phase-commit-test.pl0000644000000000000000000000013014243161125026234 xustar000000000000000029 mtime=1653400149.36897002 29 atime=1653400149.36897002 30 ctime=1653404021.621743398 globus_gram_job_manager-15.8/test/client/two-phase-commit-test.pl0000775000175000017500000000611514243161125026405 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl # # Copyright 1999-2010 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # use strict; use Test::More; use IO::File; my $test_exec = "./two-phase-commit-test"; my $gass_cache = "globus-gass-cache"; my $globusrun = "globusrun"; if ($ENV{CONTACT_STRING} eq "") { die "CONTACT_STRING not set"; } my @tests; my @todo; my $testno=1; sub two_phase_test { my ($errors,$rc) = ("",0); my ($output); my $cache_cmd; my ($contact, $mode, $timeout) = @_; my $tag; my $valgrind = ""; if (exists $ENV{VALGRIND}) { $valgrind = "valgrind --log-file=VALGRIND-globus_gram_client_two_phase_commit_test" . $testno++ . ".log"; if (exists $ENV{VALGRIND_OPTIONS}) { $valgrind .= ' ' . $ENV{VALGRIND_OPTIONS}; } } my $fh = new IO::File( "$valgrind $test_exec \"$contact\" $mode $timeout |"); $tag = join('', <$fh>); $fh->close(); chomp($tag); $rc = $?>> 8; if ($rc != 0) { $errors .= "Test exited with $rc. "; } if($tag eq '') { $errors .= "Didn't get a real job id from the test.\n"; } else { sleep($timeout+5); $ENV{HOME} = (getpwuid($<))[7]; if (($mode eq 'no-commit-end')) { my $cache_out = `$gass_cache -list -tag $tag | wc -l`; chomp($cache_out); if($cache_out eq "0") { $errors .= "Test should have left droppings"; } else { print STDERR `$gass_cache -cleanup-tag $tag`; system("$globusrun", "-r", "$ENV{CONTACT_STRING}", "&(restart=$tag)"); } } else { my $cache_out = `$gass_cache -list -tag $tag`; chomp($cache_out); if($cache_out ne '') { $errors .= "Test left unexpected droppings in the cache:\n" . "$cache_out"; print STDERR `$gass_cache -cleanup-tag $tag`; } } } ok($errors eq "", "$test_exec \"$contact\" $mode $timeout"); } push(@tests, "two_phase_test('$ENV{CONTACT_STRING}','no-commit','1');"); push(@tests, "two_phase_test('$ENV{CONTACT_STRING}','no-commit-end','10');"); push(@tests, "two_phase_test('$ENV{CONTACT_STRING}','commit', '10');"); push(@tests, "two_phase_test('$ENV{CONTACT_STRING}','late-commit-end', '10');"); # Now that the tests are defined, set up the Test to deal with them. plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } globus_gram_job_manager-15.8/test/PaxHeaders.31186/jobmanager0000644000000000000000000000013214243170567022313 xustar000000000000000030 mtime=1653404023.009730161 30 atime=1653404023.059729684 30 ctime=1653404023.009730161 globus_gram_job_manager-15.8/test/jobmanager/0000775000175000017500000000000014243170567022531 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453024430 xustar000000000000000030 mtime=1653400875.652636707 30 atime=1653401385.136595633 30 ctime=1653404021.660743026 globus_gram_job_manager-15.8/test/jobmanager/Makefile.in0000664000175000017500000010417014243162453024574 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/jobmanager DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/job-manager-script-test.pl.in \ $(top_srcdir)/build-aux/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = job-manager-script-test.pl CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = . submit_test stdio_test failure_test rsl_size_test user_test check_SCRIPTS = job-manager-script-test.pl TESTS = $(check_SCRIPTS) @USE_CYGPATH_W_FALSE@X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" @USE_CYGPATH_W_TRUE@X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" @USE_CYGPATH_W_FALSE@X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" @USE_CYGPATH_W_TRUE@X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" @USE_CYGPATH_W_FALSE@X509_CERT_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" @USE_CYGPATH_W_FALSE@TEST_HOME_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../gram-test-wrapper all: all-recursive .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/jobmanager/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/jobmanager/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): job-manager-script-test.pl: $(top_builddir)/config.status $(srcdir)/job-manager-script-test.pl.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? job-manager-script-test.pl.log: job-manager-script-test.pl @p='job-manager-script-test.pl'; \ b='job-manager-script-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-TESTS check-am clean clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/test/jobmanager/PaxHeaders.31186/Makefile.am0000644000000000000000000000012714243161125024416 xustar000000000000000029 mtime=1653400149.36897002 28 atime=1653400875.4916383 30 ctime=1653404021.662743007 globus_gram_job_manager-15.8/test/jobmanager/Makefile.am0000664000175000017500000000167214243161125024561 0ustar00johndoejohndoe00000000000000SUBDIRS = . submit_test stdio_test failure_test rsl_size_test user_test check_SCRIPTS = job-manager-script-test.pl TESTS = $(check_SCRIPTS) if USE_CYGPATH_W X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" else X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" X509_CERT_DIR = "$(abs_top_builddir)/test" TEST_HOME_DIR = "$(abs_top_builddir)/test" endif TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../gram-test-wrapper globus_gram_job_manager-15.8/test/jobmanager/PaxHeaders.31186/job-manager-script-test.pl.in0000644000000000000000000000013214243161125027761 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653401385.313593882 30 ctime=1653404021.664742988 globus_gram_job_manager-15.8/test/jobmanager/job-manager-script-test.pl.in0000664000175000017500000000742714243161125030134 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl use strict; use Test::More; use Globus::Core::Paths; use IPC::Open2; use POSIX qw(pause); $^W = 1; my $script = $Globus::Core::Paths::libexecdir . "/globus-job-manager-script.pl"; my @tests = qw(test_interactive_quit test_interactive_poll); if ($ENV{CONTACT_LRM} eq 'fork') { plan tests => 3; test_interactive_quit(); test_interactive_poll(); test_interactive_multipoll(); } else { plan skip_all => "Test is fork-specific"; } sub test_interactive_quit { my ($child_out, $child_in); my $pid; my $out; $pid = open2( $child_out, $child_in, $script, '-m', 'fork', '-c', 'interactive'); print $child_in "quit\n\n"; waitpid $pid, 0; ok($? == 0, "test_interactive_quit"); } sub test_interactive_poll { my ($child_out, $child_in); my $pid; my $dummy_pid; my $out; $pid = open2( $child_out, $child_in, $script, '-m', 'fork', '-c', 'interactive'); $dummy_pid = fork(); if (!defined($dummy_pid)) { ok(defined($dummy_pid)); return; } elsif ($dummy_pid == 0) { pause(); exit(0); } print $child_in "poll\n"; print $child_in "\$description = { jobid => [ '$dummy_pid' ] };\n\n"; while (($_ = <$child_out>) ne "\n") { if ($_ =~ /^GRAM_SCRIPT_LOG/) { next; } if ($_ ne "GRAM_SCRIPT_JOB_STATE:2\n") { ok($_, "GRAM_SCRIPT_JOB_STATE:2\n"); kill 'TERM', $dummy_pid; waitpid($dummy_pid, 0); print $child_in "quit\n\n"; waitpid($pid, 0); return; } } kill 'TERM', $dummy_pid; waitpid($dummy_pid, 0); print $child_in "poll\n"; print $child_in "\$description = { jobid => [ '$dummy_pid' ] };\n\n"; while (($_ = <$child_out>) ne "\n") { if ($_ =~ /^GRAM_SCRIPT_LOG/) { next; } if ($_ ne "GRAM_SCRIPT_JOB_STATE:8\n") { ok($_, "GRAM_SCRIPT_JOB_STATE:8\n"); return; } } print $child_in "quit\n\n"; waitpid $pid, 0; ok($? == 0, "test_interactive_poll"); } sub test_interactive_multipoll { my ($child_out, $child_in); my $pid; my $dummy_pid; my $out; $pid = open2( $child_out, $child_in, $script, '-m', 'fork', '-c', 'interactive'); $dummy_pid = fork(); if (!defined($dummy_pid)) { ok(defined($dummy_pid)); return; } elsif ($dummy_pid == 0) { pause(); exit(0); } for (my $i = 0; $i < 100; $i++) { print $child_in "poll\n"; print $child_in "\$description = { jobid => [ '$dummy_pid' ] };\n\n"; while (($_ = <$child_out>) ne "\n") { if ($_ =~ m/^GRAM_SCRIPT_LOG/) { next; } elsif ($_ ne "GRAM_SCRIPT_JOB_STATE:2\n") { ok($_, "GRAM_SCRIPT_JOB_STATE:2\n"); kill 'TERM', $dummy_pid; waitpid($dummy_pid, 0); print $child_in "quit\n\n"; waitpid($pid, 0); return; } } } kill 'TERM', $dummy_pid; waitpid($dummy_pid, 0); print $child_in "poll\n"; print $child_in "\$description = { jobid => [ '$dummy_pid' ] };\n\n"; while (($_ = <$child_out>) ne "\n") { if ($_ =~ m/^GRAM_SCRIPT_LOG/) { next; } elsif ($_ ne "GRAM_SCRIPT_JOB_STATE:8\n") { ok($_, "GRAM_SCRIPT_JOB_STATE:8\n"); return; } } print $child_in "quit\n\n"; waitpid $pid, 0; ok($? == 0, "test_interactive_multipoll"); } globus_gram_job_manager-15.8/test/jobmanager/PaxHeaders.31186/submit_test0000644000000000000000000000013214243170566024654 xustar000000000000000030 mtime=1653404022.469735311 30 atime=1653404023.059729684 30 ctime=1653404022.469735311 globus_gram_job_manager-15.8/test/jobmanager/submit_test/0000775000175000017500000000000014243170566025072 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/Makefile.in0000644000000000000000000000013114243162453026771 xustar000000000000000030 mtime=1653400875.849634757 29 atime=1653401385.19859502 30 ctime=1653404021.722742435 globus_gram_job_manager-15.8/test/jobmanager/submit_test/Makefile.in0000664000175000017500000007500114243162453027136 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/jobmanager/submit_test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/globus-gram-job-manager-submit-test.pl.in \ $(top_srcdir)/build-aux/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = globus-gram-job-manager-submit-test.pl CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ check_SCRIPTS = globus-gram-job-manager-submit-test.pl check_DATA = \ submit001.err submit001.out submit001.rsl \ submit002.err submit002.out submit002.rsl \ submit003.err submit003.out submit003.rsl \ submit004.err submit004.out submit004.rsl \ submit005.err submit005.out submit005.rsl \ submit006.err submit006.out submit006.rsl \ submit007.err submit007.out submit007.rsl \ submit008.err submit008.out submit008.rsl \ submit009.err submit009.out submit009.rsl \ submit010.err submit010.out submit010.rsl \ submit011.err submit011.out submit011.rsl \ submit012.err submit012.out submit012.rsl \ submit013.err submit013.out submit013.rsl \ submit014.err submit014.out submit014.rsl \ submit015.err submit015.out submit015.rsl \ submit016.err submit016.out submit016.rsl \ submit017.err submit017.out submit017.rsl \ submit018.err submit018.out submit018.rsl \ submit019.err submit019.out submit019.rsl \ submit020.err submit020.out submit020.rsl \ submit021.err submit021.out submit021.rsl \ submit022.err submit022.out submit022.rsl \ submit023.err submit023.out submit023.rsl \ submit024.err submit024.out submit024.rsl \ submit025.err submit025.out submit025.rsl \ submit026.err submit026.out submit026.rsl \ submit027.err submit027.out submit027.rsl \ submit028.err submit028.out submit028.rsl \ submit029.err submit029.out submit029.rsl \ submit030.err submit030.out submit030.rsl \ submit031.err submit031.out submit031.rsl \ submit032.err submit032.out submit032.rsl \ submit033.err submit033.out submit033.rsl \ submit034.err submit034.out submit034.rsl \ submit035.err submit035.out submit035.rsl \ submit036.err submit036.out submit036.rsl \ submit037.err submit037.out submit037.rsl \ submit038.err submit038.out submit038.rsl \ submit039.err submit039.out submit039.rsl \ submit040.err submit040.out submit040.rsl \ submit041.err submit041.out submit041.rsl \ submit042.err submit042.out submit042.rsl \ submit043.err submit043.out submit043.rsl \ submit044.err submit044.out submit044.rsl \ submit045.err submit045.out submit045.rsl \ submit046.err submit046.out submit046.rsl \ submit047.err submit047.out submit047.rsl \ submit048.err submit048.out submit048.rsl \ submit049.err submit049.out submit049.rsl @USE_CYGPATH_W_FALSE@X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" @USE_CYGPATH_W_TRUE@X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" @USE_CYGPATH_W_FALSE@X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" @USE_CYGPATH_W_TRUE@X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" @USE_CYGPATH_W_FALSE@X509_CERT_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" @USE_CYGPATH_W_FALSE@TEST_DATA_DIR = "$(abs_srcdir)" @USE_CYGPATH_W_TRUE@TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" @USE_CYGPATH_W_FALSE@TEST_HOME_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper TESTS = $(check_SCRIPTS) EXTRA_DIST = $(check_DATA) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/jobmanager/submit_test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/jobmanager/submit_test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): globus-gram-job-manager-submit-test.pl: $(top_builddir)/config.status $(srcdir)/globus-gram-job-manager-submit-test.pl.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_SCRIPTS) $(check_DATA) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? globus-gram-job-manager-submit-test.pl.log: globus-gram-job-manager-submit-test.pl @p='globus-gram-job-manager-submit-test.pl'; \ b='globus-gram-job-manager-submit-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(check_DATA) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/Makefile.am0000644000000000000000000000013214243161125026754 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400875.809635153 30 ctime=1653404021.725742406 globus_gram_job_manager-15.8/test/jobmanager/submit_test/Makefile.am0000664000175000017500000000651714243161125027126 0ustar00johndoejohndoe00000000000000check_SCRIPTS = globus-gram-job-manager-submit-test.pl check_DATA = \ submit001.err submit001.out submit001.rsl \ submit002.err submit002.out submit002.rsl \ submit003.err submit003.out submit003.rsl \ submit004.err submit004.out submit004.rsl \ submit005.err submit005.out submit005.rsl \ submit006.err submit006.out submit006.rsl \ submit007.err submit007.out submit007.rsl \ submit008.err submit008.out submit008.rsl \ submit009.err submit009.out submit009.rsl \ submit010.err submit010.out submit010.rsl \ submit011.err submit011.out submit011.rsl \ submit012.err submit012.out submit012.rsl \ submit013.err submit013.out submit013.rsl \ submit014.err submit014.out submit014.rsl \ submit015.err submit015.out submit015.rsl \ submit016.err submit016.out submit016.rsl \ submit017.err submit017.out submit017.rsl \ submit018.err submit018.out submit018.rsl \ submit019.err submit019.out submit019.rsl \ submit020.err submit020.out submit020.rsl \ submit021.err submit021.out submit021.rsl \ submit022.err submit022.out submit022.rsl \ submit023.err submit023.out submit023.rsl \ submit024.err submit024.out submit024.rsl \ submit025.err submit025.out submit025.rsl \ submit026.err submit026.out submit026.rsl \ submit027.err submit027.out submit027.rsl \ submit028.err submit028.out submit028.rsl \ submit029.err submit029.out submit029.rsl \ submit030.err submit030.out submit030.rsl \ submit031.err submit031.out submit031.rsl \ submit032.err submit032.out submit032.rsl \ submit033.err submit033.out submit033.rsl \ submit034.err submit034.out submit034.rsl \ submit035.err submit035.out submit035.rsl \ submit036.err submit036.out submit036.rsl \ submit037.err submit037.out submit037.rsl \ submit038.err submit038.out submit038.rsl \ submit039.err submit039.out submit039.rsl \ submit040.err submit040.out submit040.rsl \ submit041.err submit041.out submit041.rsl \ submit042.err submit042.out submit042.rsl \ submit043.err submit043.out submit043.rsl \ submit044.err submit044.out submit044.rsl \ submit045.err submit045.out submit045.rsl \ submit046.err submit046.out submit046.rsl \ submit047.err submit047.out submit047.rsl \ submit048.err submit048.out submit048.rsl \ submit049.err submit049.out submit049.rsl if USE_CYGPATH_W X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" else X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" X509_CERT_DIR = "$(abs_top_builddir)/test" TEST_DATA_DIR = "$(abs_srcdir)" TEST_HOME_DIR = "$(abs_top_builddir)/test" endif TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper TESTS = $(check_SCRIPTS) EXTRA_DIST = $(check_DATA) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/globus-gram-job-manager-su0000644000000000000000000000013214243161125031667 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653401385.341593605 30 ctime=1653404021.729742368 globus_gram_job_manager-15.8/test/jobmanager/submit_test/globus-gram-job-manager-submit-test.pl.in0000664000175000017500000001067014243161125034704 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl use Globus::GRAM::Error; use Globus::Core::Paths; use IO::File; use Test::More; use File::Compare; use File::Temp; use File::Basename qw(dirname); $ENV{PATH} = "$Globus::Core::Paths::bindir".":"."$Globus::Core::Paths::sbindir".":".$ENV{PATH}; my (@tests, @todo) = (); my $contact = $ENV{CONTACT_STRING}; my $testtmp = File::Temp::tempdir(CLEANUP => 1); my $lrm = $ENV{CONTACT_LRM} if exists($ENV{CONTACT_LRM}); my $testdatadir = $ENV{TEST_DATA_DIR}; if (!$testdatadir) { $testdatadir = dirname($0); } my $verbose = 0; my @test_cases=qw( submit001 submit002 submit003 submit004 submit005 submit006 submit007 submit008 submit009 submit010 submit011 submit012 submit013 submit014 submit015 submit016 submit017 submit018 submit019 submit020 submit021 submit022 submit023 submit024 submit025 submit026 submit027 submit028 submit029 submit030 submit031 submit032 submit033 submit034 submit035 submit036 submit037 submit038 submit039 submit040 submit041 submit042 submit043 submit044 submit045 submit046 submit047 submit048 submit049 ); my @todo_cases=qw( ); sub test_rsl { my $testname = shift; my $additional_rsl = shift; my $testrsl = "$testname.rsl"; my $additionalrslfile = "$testtmp/$testname.rsl"; my $testout = "$testtmp/$testname.out"; my $testerr = "$testtmp/$testname.err"; my $test_rsl_fp = new IO::File("$testdatadir/$testrsl", '<'); my $out_rsl_fp = new IO::File($additionalrslfile, '>'); my $skiplist=''; my @all_rsl; my $globus_location_skip = 0; my @lrm_skip_list=(); while(<$test_rsl_fp>) { push(@all_rsl, $_); $out_rsl_fp->print($_); } $test_rsl_fp->close(); if($additional_rsl ne "") { push(@all_rsl, $additional_rsl); $out_rsl_fp->print($additional_rsl); } $out_rsl_fp->close(); # $skiplist = join('', @all_rsl); $skiplist =~ m/\S*\(\*\s*(.*)\s*\*\)\S*/; $skiplist = $1; if ($skiplist) { foreach my $s (split(/\s+/, $skiplist)) { if ($s =~ m/LRM_SKIP:(.*)/) { push(@lrm_skip_list, $1); } if ($s =~ m/GLOBUS_LOCATION_REQUIRED/ && ((!$ENV{GLOBUS_LOCATION}) || (! -d $ENV{GLOBUS_LOCATION}))) { $globus_location_skip = 1; } } } SKIP: { skip "Skipping test for $lrm", 1, if (defined($lrm) && grep(/$lrm/, @lrm_skip_list)); skip "Skipping test because no GLOBUS_LOCATION", 1 if ($globus_location_skip != 0); if($verbose) { print "# Submitting job\n"; foreach(@all_rsl) { print "# $_"; } print "\n" if($_ !~ /\n/m); } { local(*OLDOUT, *OLDERR); open(OLDOUT, ">&STDOUT"); open(OLDERR, ">&STDERR"); open(STDOUT, ">$testout"); open(STDERR, ">$testerr"); system("globusrun", "-s", "-r", $contact, "-f", $additionalrslfile); $rc = $? >> 8 || File::Compare::compare("$testdatadir/$testname.out", $testout) || File::Compare::compare("$testdatadir/$testname.err", $testerr); open(STDOUT, ">&OLDOUT"); open(STDERR, ">&OLDERR"); close(OLDOUT); close(OLDERR); } ok("$testname:$additional_rsl:$rc" eq "$testname:$additional_rsl:0", "$testname:$additional_rsl"); } } foreach(@test_cases) { push(@tests, "test_rsl(\"$_\", \"\")"); } push(@tests, "test_rsl(\"" . $test_cases[0] . "\", \"\")"); push(@tests, "test_rsl(\"" . $test_cases[0] . "\", \"(save_state = yes)\")"); push(@tests, "test_rsl(\"" . $test_cases[0] . "\", \"(two_phase = 10)\")"); push(@tests, "test_rsl(\"" . $test_cases[0] . "\", \"(save_state = yes)(two_phase = 10)\")"); foreach(@todo_cases) { push(@tests, "test_cases(\"$_\", \"\")"); push(@todo, scalar(@tests)); } if(@ARGV) { my @doit; $verbose = 1; foreach(@ARGV) { if(/^(\d+)-(\d+)$/) { foreach($1 .. $2) { push(@doit, $_); } } elsif(/^(\d+)$/) { push(@doit, $1); } } plan tests => scalar(@doit); foreach (@doit) { eval "&$tests[$_-1]"; } } else { plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } } globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit001.err0000644000000000000000000000013214243161125027156 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404021.731742349 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit001.err0000664000175000017500000000000014243161125027305 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit001.out0000644000000000000000000000013114243161125027174 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 29 ctime=1653404021.73274234 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit001.out0000664000175000017500000000000014243161125027324 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit001.rsl0000644000000000000000000000013214243161125027166 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.170738163 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit001.rsl0000664000175000017500000000005514243161125027327 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh)(arguments=-c 'exit 0') globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit002.err0000644000000000000000000000013214243161125027157 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.175738115 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit002.err0000664000175000017500000000000014243161125027306 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit002.out0000644000000000000000000000013214243161125027176 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.190737972 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit002.out0000664000175000017500000000000114243161125027326 0ustar00johndoejohndoe00000000000000 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit002.rsl0000644000000000000000000000013214243161125027167 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.195737924 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit002.rsl0000664000175000017500000000003014243161125027321 0ustar00johndoejohndoe00000000000000&(executable=/bin/echo) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit003.err0000644000000000000000000000013214243161125027160 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.198737896 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit003.err0000664000175000017500000000000014243161125027307 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit003.out0000644000000000000000000000013214243161125027177 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.377969929 30 ctime=1653404022.200737877 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit003.out0000664000175000017500000000000614243161125027334 0ustar00johndoejohndoe00000000000000hello globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit003.rsl0000644000000000000000000000013214243161125027170 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.203737848 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit003.rsl0000664000175000017500000000005314243161125027327 0ustar00johndoejohndoe00000000000000&(executable=/bin/echo) (arguments=hello) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit004.err0000644000000000000000000000013214243161125027161 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.205737829 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit004.err0000664000175000017500000000000014243161125027310 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit004.out0000644000000000000000000000013114243161125027177 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 29 ctime=1653404022.20773781 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit004.out0000664000175000017500000000001414243161125027334 0ustar00johndoejohndoe00000000000000hello world globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit004.rsl0000644000000000000000000000013214243161125027171 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.209737791 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit004.rsl0000664000175000017500000000006114243161125027327 0ustar00johndoejohndoe00000000000000&(executable=/bin/echo) (arguments=hello world) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit005.err0000644000000000000000000000013214243161125027162 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.211737772 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit005.err0000664000175000017500000000000014243161125027311 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit005.out0000644000000000000000000000013214243161125027201 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.214737743 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit005.out0000664000175000017500000000003014243161125027333 0ustar00johndoejohndoe00000000000000hello world hello world globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit005.rsl0000644000000000000000000000013214243161125027172 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.217737714 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit005.rsl0000664000175000017500000000012514243161125027331 0ustar00johndoejohndoe00000000000000(* LRM_SKIP:pbs,slurm *) &(executable=/bin/echo) (arguments=hello world) (count=2) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit006.err0000644000000000000000000000013214243161125027163 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.219737695 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit006.err0000664000175000017500000000000014243161125027312 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit006.out0000644000000000000000000000013214243161125027202 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.222737667 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit006.out0000664000175000017500000000003414243161125027340 0ustar00johndoejohndoe00000000000000hello world quoted "string" globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit006.rsl0000644000000000000000000000013214243161125027173 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.224737648 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit006.rsl0000664000175000017500000000010514243161125027330 0ustar00johndoejohndoe00000000000000&(executable=/bin/echo) (arguments=hello world "quoted ""string""") globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit007.err0000644000000000000000000000013214243161125027164 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.226737629 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit007.err0000664000175000017500000000000014243161125027313 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit007.out0000644000000000000000000000013114243161125027202 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 29 ctime=1653404022.22873761 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit007.out0000664000175000017500000000003714243161125027344 0ustar00johndoejohndoe00000000000000string with some \\backslashes globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit007.rsl0000644000000000000000000000013114243161125027173 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 29 ctime=1653404022.23073759 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit007.rsl0000664000175000017500000000013214243161125027331 0ustar00johndoejohndoe00000000000000&(executable=/usr/bin/printf) (arguments="%s %s %s %s\n" string with some \\backslashes) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit008.err0000644000000000000000000000013214243161125027165 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.232737571 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit008.err0000664000175000017500000000000014243161125027314 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit008.out0000644000000000000000000000013214243161125027204 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.235737543 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit008.out0000664000175000017500000000002014243161125027335 0ustar00johndoejohndoe00000000000000quoted (parens) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit008.rsl0000644000000000000000000000013214243161125027175 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.237737524 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit008.rsl0000664000175000017500000000006714243161125027341 0ustar00johndoejohndoe00000000000000&(executable=/bin/echo) (arguments="quoted (parens)") globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit009.err0000644000000000000000000000013214243161125027166 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.239737505 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit009.err0000664000175000017500000000000014243161125027315 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit009.out0000644000000000000000000000013214243161125027205 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.241737486 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit009.out0000664000175000017500000000004114243161125027341 0ustar00johndoejohndoe00000000000000RFC 3820 compliant limited proxy globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit009.rsl0000644000000000000000000000013214243161125027176 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.243737466 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit009.rsl0000664000175000017500000000015114243161125027334 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments = -c "grid-proxy-info -type") (library_path = $(GLOBUS_LOCATION)/lib) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit010.err0000644000000000000000000000013214243161125027156 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.245737447 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit010.err0000664000175000017500000000000014243161125027305 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit010.out0000644000000000000000000000013214243161125027175 xustar000000000000000030 mtime=1653400149.378969918 30 atime=1653400149.378969918 30 ctime=1653404022.247737428 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit010.out0000664000175000017500000000000214243161125027326 0ustar00johndoejohndoe000000000000001 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit010.rsl0000644000000000000000000000013214243161125027166 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.378969918 30 ctime=1653404022.249737409 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit010.rsl0000664000175000017500000000013514243161125027326 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (arguments = -c 'if [ -d "$HOME" ]; then echo 1; else echo 0; fi') globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit011.err0000644000000000000000000000013014243161125027155 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 28 ctime=1653404022.2507374 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit011.err0000664000175000017500000000000014243161125027306 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit011.out0000644000000000000000000000013214243161125027176 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.252737381 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit011.out0000664000175000017500000000000214243161125027327 0ustar00johndoejohndoe000000000000001 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit011.rsl0000644000000000000000000000013214243161125027167 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.254737362 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit011.rsl0000664000175000017500000000025614243161125027333 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (arguments = -c 'if [ -n "$X509_CERT_DIR" ] && [ -d "$X509_CERT_DIR" ] ; then echo 1; elif [ -z "$X509_CERT_DIR" ]; then echo 1; else echo 0; fi' ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit012.err0000644000000000000000000000013214243161125027160 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.255737352 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit012.err0000664000175000017500000000000014243161125027307 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit012.out0000644000000000000000000000013214243161125027177 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.257737333 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit012.out0000664000175000017500000000000214243161125027330 0ustar00johndoejohndoe000000000000001 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit012.rsl0000644000000000000000000000013214243161125027170 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.259737314 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit012.rsl0000664000175000017500000000020514243161125027326 0ustar00johndoejohndoe00000000000000(* GLOBUS_LOCATION_REQUIRED *) &(executable = /bin/sh) (arguments = -c 'if [ -d $GLOBUS_LOCATION ]; then echo 1; else echo 0; fi') globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit013.err0000644000000000000000000000013214243161125027161 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.260737304 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit013.err0000664000175000017500000000000014243161125027310 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit013.out0000644000000000000000000000013214243161125027200 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.262737285 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit013.out0000664000175000017500000000000214243161125027331 0ustar00johndoejohndoe000000000000001 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit013.rsl0000644000000000000000000000013214243161125027171 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.264737266 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit013.rsl0000664000175000017500000000024114243161125027327 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (gass_cache=$(HOME) # "/.globus/.gass_cache") (arguments = -c 'if [ -d "$GLOBUS_GASS_CACHE_DEFAULT" ]; then echo 1; else echo 0; fi') globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit014.err0000644000000000000000000000013214243161125027162 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.265737257 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit014.err0000664000175000017500000000000014243161125027311 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit014.out0000644000000000000000000000013214243161125027201 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.267737238 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit014.out0000664000175000017500000000000014243161125027330 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit014.rsl0000644000000000000000000000013214243161125027172 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.269737219 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit014.rsl0000664000175000017500000000012014243161125027324 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_HOME $(HOME))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit015.err0000644000000000000000000000013214243161125027163 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.270737209 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit015.err0000664000175000017500000000000014243161125027312 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit015.out0000644000000000000000000000013114243161125027201 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 29 ctime=1653404022.27273719 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit015.out0000664000175000017500000000000014243161125027331 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit015.rsl0000644000000000000000000000013214243161125027173 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.274737171 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit015.rsl0000664000175000017500000000012614243161125027333 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_LOGNAME $(LOGNAME))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit016.err0000644000000000000000000000013214243161125027164 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.275737161 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit016.err0000664000175000017500000000000014243161125027313 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit016.out0000644000000000000000000000013214243161125027203 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.276737152 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit016.out0000664000175000017500000000000014243161125027332 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit016.rsl0000644000000000000000000000013214243161125027174 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.278737133 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit016.rsl0000664000175000017500000000013214243161125027331 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_ID $(GLOBUS_ID))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit017.err0000644000000000000000000000013214243161125027165 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.280737114 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit017.err0000664000175000017500000000000014243161125027314 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit017.out0000644000000000000000000000013214243161125027204 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.281737104 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit017.out0000664000175000017500000000000014243161125027333 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit017.rsl0000644000000000000000000000013214243161125027175 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.283737085 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit017.rsl0000664000175000017500000000016614243161125027341 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_GRAM_JOB_CONTACT $(GLOBUS_GRAM_JOB_CONTACT))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit018.err0000644000000000000000000000013214243161125027166 xustar000000000000000030 mtime=1653400149.379969908 30 atime=1653400149.379969908 30 ctime=1653404022.285737066 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit018.err0000664000175000017500000000000014243161125027315 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit018.out0000644000000000000000000000013214243161125027205 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.287737047 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit018.out0000664000175000017500000000000014243161125027334 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit018.rsl0000644000000000000000000000013214243161125027176 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.288737037 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit018.rsl0000664000175000017500000000017014243161125027335 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_HOST_MANUFACTURER $(GLOBUS_HOST_MANUFACTURER))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit019.err0000644000000000000000000000013214243161125027167 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.290737018 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit019.err0000664000175000017500000000000014243161125027316 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit019.out0000644000000000000000000000013214243161125027206 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.292736999 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit019.out0000664000175000017500000000000014243161125027335 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit019.rsl0000644000000000000000000000013114243161125027176 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 29 ctime=1653404022.29473698 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit019.rsl0000664000175000017500000000015614243161125027342 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_HOST_CPUTYPE $(GLOBUS_HOST_CPUTYPE))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit020.err0000644000000000000000000000013214243161125027157 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.295736971 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit020.err0000664000175000017500000000000014243161125027306 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit020.out0000644000000000000000000000013214243161125027176 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.297736951 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit020.out0000664000175000017500000000000014243161125027325 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit020.rsl0000644000000000000000000000013214243161125027167 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.299736932 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit020.rsl0000664000175000017500000000015414243161125027330 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_HOST_OSNAME $(GLOBUS_HOST_OSNAME))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit021.err0000644000000000000000000000013214243161125027160 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.300736923 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit021.err0000664000175000017500000000000014243161125027307 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit021.out0000644000000000000000000000013214243161125027177 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.302736904 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit021.out0000664000175000017500000000000014243161125027326 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit021.rsl0000644000000000000000000000013214243161125027170 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.304736885 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit021.rsl0000664000175000017500000000016214243161125027330 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_HOST_OSVERSION $(GLOBUS_HOST_OSVERSION))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit022.err0000644000000000000000000000013214243161125027161 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.306736866 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit022.err0000664000175000017500000000000014243161125027310 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit022.out0000644000000000000000000000013214243161125027200 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.307736856 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit022.out0000664000175000017500000000000014243161125027327 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit022.rsl0000644000000000000000000000013214243161125027171 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.309736837 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit022.rsl0000664000175000017500000000016414243161125027333 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_GATEKEEPER_HOST $(GLOBUS_GATEKEEPER_HOST))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit023.err0000644000000000000000000000013214243161125027162 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.311736818 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit023.err0000664000175000017500000000000014243161125027311 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit023.out0000644000000000000000000000013214243161125027201 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.313736799 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit023.out0000664000175000017500000000000014243161125027330 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit023.rsl0000644000000000000000000000013214243161125027172 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.314736789 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit023.rsl0000664000175000017500000000016414243161125027334 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_GATEKEEPER_PORT $(GLOBUS_GATEKEEPER_PORT))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit024.err0000644000000000000000000000013114243161125027162 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 29 ctime=1653404022.31673677 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit024.err0000664000175000017500000000000014243161125027312 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit024.out0000644000000000000000000000013214243161125027202 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.317736761 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit024.out0000664000175000017500000000000014243161125027331 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit024.rsl0000644000000000000000000000013214243161125027173 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.319736742 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit024.rsl0000664000175000017500000000017214243161125027334 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_GATEKEEPER_SUBJECT $(GLOBUS_GATEKEEPER_SUBJECT))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit025.err0000644000000000000000000000013214243161125027164 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.321736723 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit025.err0000664000175000017500000000000014243161125027313 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit025.out0000644000000000000000000000013214243161125027203 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.323736704 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit025.out0000664000175000017500000000000014243161125027332 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit025.rsl0000644000000000000000000000013214243161125027174 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.325736684 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit025.rsl0000664000175000017500000000014614243161125027336 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_LOCATION $(GLOBUS_LOCATION))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit026.err0000644000000000000000000000013214243161125027165 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.327736665 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit026.err0000664000175000017500000000000014243161125027314 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit026.out0000644000000000000000000000013214243161125027204 xustar000000000000000030 mtime=1653400149.380969898 30 atime=1653400149.380969898 30 ctime=1653404022.328736656 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit026.out0000664000175000017500000000000014243161125027333 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit026.rsl0000644000000000000000000000013214243161125027175 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.330736637 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit026.rsl0000664000175000017500000000016014243161125027333 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_CACHED_STDOUT $(GLOBUS_CACHED_STDOUT))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit027.err0000644000000000000000000000013214243161125027166 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.331736627 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit027.err0000664000175000017500000000000014243161125027315 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit027.out0000644000000000000000000000013214243161125027205 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.333736608 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit027.out0000664000175000017500000000000014243161125027334 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit027.rsl0000644000000000000000000000013214243161125027176 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.335736589 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit027.rsl0000664000175000017500000000016014243161125027334 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_GLOBUS_CACHED_STDERR $(GLOBUS_CACHED_STDERR))) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit028.err0000644000000000000000000000013114243161125027166 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 29 ctime=1653404022.33673658 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit028.err0000664000175000017500000000000014243161125027316 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit028.out0000644000000000000000000000013114243161125027205 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 29 ctime=1653404022.33773657 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit028.out0000664000175000017500000000000014243161125027335 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit028.rsl0000644000000000000000000000013214243161125027177 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.339736551 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit028.rsl0000664000175000017500000000017614243161125027344 0ustar00johndoejohndoe00000000000000&(executable=/bin/sh) (arguments=-c 'exit 0') (environment=(MY_SCRATCH_DIRECTORY $(SCRATCH_DIRECTORY))) (scratch_dir = . ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit029.err0000644000000000000000000000013214243161125027170 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.340736541 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit029.err0000664000175000017500000000000014243161125027317 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit029.out0000644000000000000000000000013214243161125027207 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.342736522 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit029.out0000664000175000017500000000000214243161125027340 0ustar00johndoejohndoe000000000000001 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit029.rsl0000644000000000000000000000013214243161125027200 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.344736503 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit029.rsl0000664000175000017500000000020014243161125027331 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (scratch_dir = . ) (arguments = -c 'if [ -d "${SCRATCH_DIRECTORY}" ]; then echo 1; else echo 0; fi') globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit030.err0000644000000000000000000000013214243161125027160 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.345736494 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit030.err0000664000175000017500000000000014243161125027307 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit030.out0000644000000000000000000000013214243161125027177 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.347736475 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit030.out0000664000175000017500000000000014243161125027326 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit030.rsl0000644000000000000000000000013214243161125027170 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.349736456 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit030.rsl0000664000175000017500000000012414243161125027326 0ustar00johndoejohndoe00000000000000&(executable = /bin/ls) (arguments = -1 $(SCRATCH_DIRECTORY) ) (scratch_dir = . ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit031.err0000644000000000000000000000013214243161125027161 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.350736446 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit031.err0000664000175000017500000000000014243161125027310 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit031.out0000644000000000000000000000013214243161125027200 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.355736398 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit031.out0000664000175000017500000000000614243161125027335 0ustar00johndoejohndoe00000000000000group globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit031.rsl0000644000000000000000000000013214243161125027171 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.357736379 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit031.rsl0000664000175000017500000000030714243161125027332 0ustar00johndoejohndoe00000000000000&(executable = /bin/ls) (arguments = -1 $(SCRATCH_DIRECTORY) ) (scratch_dir = . ) (file_stage_in = ( $(GLOBUSRUN_GASS_URL) # "/etc/group" $(SCRATCH_DIRECTORY) # "/group" ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit032.err0000644000000000000000000000013114243161125027161 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 29 ctime=1653404022.35973636 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit032.err0000664000175000017500000000000014243161125027311 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit032.out0000644000000000000000000000013214243161125027201 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.361736341 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit032.out0000664000175000017500000000002014243161125027332 0ustar00johndoejohndoe00000000000000group.1 group.2 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit032.rsl0000644000000000000000000000013214243161125027172 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.363736322 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit032.rsl0000664000175000017500000000047414243161125027340 0ustar00johndoejohndoe00000000000000&(executable = /bin/ls) (arguments = -1 $(SCRATCH_DIRECTORY) ) (scratch_dir = . ) (file_stage_in = ( $(GLOBUSRUN_GASS_URL) # "/etc/group" $(SCRATCH_DIRECTORY) # "/group.1" ) ( $(GLOBUSRUN_GASS_URL) # "/etc/group" $(SCRATCH_DIRECTORY) # "/group.2" ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit033.err0000644000000000000000000000013214243161125027163 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.364736313 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit033.err0000664000175000017500000000000014243161125027312 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit033.out0000644000000000000000000000013214243161125027202 xustar000000000000000030 mtime=1653400149.381969888 30 atime=1653400149.381969888 30 ctime=1653404022.367736284 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit033.out0000664000175000017500000000000614243161125027337 0ustar00johndoejohndoe00000000000000group globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit033.rsl0000644000000000000000000000013214243161125027173 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.369736265 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit033.rsl0000664000175000017500000000032514243161125027334 0ustar00johndoejohndoe00000000000000&(executable = /bin/ls) (arguments = -1 $(SCRATCH_DIRECTORY) ) (scratch_dir = . ) (file_stage_in_shared = ( $(GLOBUSRUN_GASS_URL) # "/etc/group" $(SCRATCH_DIRECTORY) # "/group" ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit034.err0000644000000000000000000000013214243161125027164 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.370736255 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit034.err0000664000175000017500000000000014243161125027313 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit034.out0000644000000000000000000000013214243161125027203 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.372736236 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit034.out0000664000175000017500000000002014243161125027334 0ustar00johndoejohndoe00000000000000group.1 group.2 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit034.rsl0000644000000000000000000000013214243161125027174 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.374736217 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit034.rsl0000664000175000017500000000053014243161125027333 0ustar00johndoejohndoe00000000000000&(executable = /bin/ls) (arguments = -1 $(SCRATCH_DIRECTORY) ) (scratch_dir = . ) (file_stage_in_shared = ( $(GLOBUSRUN_GASS_URL) # "/etc/group" $(SCRATCH_DIRECTORY) # "/group.1" ) ( $(GLOBUSRUN_GASS_URL) # "/etc/group" $(SCRATCH_DIRECTORY) # "/group.2" ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit035.err0000644000000000000000000000013214243161125027165 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.376736198 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit035.err0000664000175000017500000000000014243161125027314 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit035.out0000644000000000000000000000013214243161125027204 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.378736179 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit035.out0000664000175000017500000000002014243161125027335 0ustar00johndoejohndoe00000000000000group.1 group.2 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit035.rsl0000644000000000000000000000013114243161125027174 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 29 ctime=1653404022.38073616 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit035.rsl0000664000175000017500000000053214243161125027336 0ustar00johndoejohndoe00000000000000&(executable = /bin/ls) (arguments = -1 $(SCRATCH_DIRECTORY) ) (scratch_dir = . ) (file_stage_in = ( $(GLOBUSRUN_GASS_URL) # "/etc/group" $(SCRATCH_DIRECTORY) # "/group.1" ) ) (file_stage_in_shared = ( $(GLOBUSRUN_GASS_URL) # "/etc/group" $(SCRATCH_DIRECTORY) # "/group.2" ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit036.err0000644000000000000000000000013214243161125027166 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.382736141 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit036.err0000664000175000017500000000000714243161125027324 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit036.out0000644000000000000000000000013214243161125027205 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.384736122 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit036.out0000664000175000017500000000000014243161125027334 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit036.rsl0000644000000000000000000000013214243161125027176 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.386736103 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit036.rsl0000664000175000017500000000007614243161125027342 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2') globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit037.err0000644000000000000000000000013214243161125027167 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.389736074 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit037.err0000664000175000017500000000000714243161125027325 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit037.out0000644000000000000000000000013214243161125027206 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.391736055 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit037.out0000664000175000017500000000000714243161125027344 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit037.rsl0000644000000000000000000000013214243161125027177 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.394736026 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit037.rsl0000664000175000017500000000011314243161125027333 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit038.err0000644000000000000000000000013214243161125027170 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.395736017 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit038.err0000664000175000017500000000000014243161125027317 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit038.out0000644000000000000000000000013214243161125027207 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.398735988 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit038.out0000664000175000017500000000000214243161125027340 0ustar00johndoejohndoe000000000000001 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit038.rsl0000644000000000000000000000013214243161125027200 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.400735969 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit038.rsl0000664000175000017500000000041714243161125027343 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (environment = (GLOBUSRUN_GASS_URL $(GLOBUSRUN_GASS_URL))) (remote_io_url = $(GLOBUSRUN_GASS_URL)) (arguments = -c 'read remote_io_url < "$GLOBUS_REMOTE_IO_URL"; if [ "$remote_io_url" = "$GLOBUSRUN_GASS_URL" ]; then echo 1; else echo 0; fi') globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit039.err0000644000000000000000000000013114243161125027170 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 29 ctime=1653404022.40173596 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit039.err0000664000175000017500000000000014243161125027320 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit039.out0000644000000000000000000000013214243161125027210 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.403735941 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit039.out0000664000175000017500000000004514243161125027350 0ustar00johndoejohndoe00000000000000single quotes shouldn't break things globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit039.rsl0000644000000000000000000000013214243161125027201 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.406735912 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit039.rsl0000664000175000017500000000012114243161125027334 0ustar00johndoejohndoe00000000000000&(executable = /bin/echo) (arguments = "single quotes shouldn't break things") globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit040.err0000644000000000000000000000013214243161125027161 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.407735902 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit040.err0000664000175000017500000000000014243161125027310 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit040.out0000644000000000000000000000013214243161125027200 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.410735874 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit040.out0000664000175000017500000000002614243161125027337 0ustar00johndoejohndoe00000000000000Can you spare a $0.10 globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit040.rsl0000644000000000000000000000013214243161125027171 xustar000000000000000030 mtime=1653400149.382969878 30 atime=1653400149.382969878 30 ctime=1653404022.412735855 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit040.rsl0000664000175000017500000000010214243161125027323 0ustar00johndoejohndoe00000000000000&(executable = /bin/echo) (arguments = "Can you spare a $0.10") globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit041.err0000644000000000000000000000013214243161125027162 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.414735836 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit041.err0000664000175000017500000000000014243161125027311 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit041.out0000644000000000000000000000013214243161125027201 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.417735807 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit041.out0000664000175000017500000000002714243161125027341 0ustar00johndoejohndoe00000000000000Can you spare a $0.10? globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit041.rsl0000644000000000000000000000013214243161125027172 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.419735788 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit041.rsl0000664000175000017500000000010314243161125027325 0ustar00johndoejohndoe00000000000000&(executable = /bin/echo) (arguments = "Can you spare a $0.10?") globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit042.err0000644000000000000000000000013214243161125027163 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.421735769 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit042.err0000664000175000017500000000000014243161125027312 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit042.out0000644000000000000000000000013114243161125027201 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 29 ctime=1653404022.42373575 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit042.out0000664000175000017500000000003714243161125027343 0ustar00johndoejohndoe00000000000000comments to discuss@globus.org globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit042.rsl0000644000000000000000000000013214243161125027173 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.425735731 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit042.rsl0000664000175000017500000000011114243161125027325 0ustar00johndoejohndoe00000000000000&(executable = /bin/echo) (arguments = comments to discuss@globus.org) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit043.err0000644000000000000000000000013214243161125027164 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.426735721 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit043.err0000664000175000017500000000000014243161125027313 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit043.out0000644000000000000000000000013214243161125027203 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.429735693 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit043.out0000664000175000017500000000003214243161125027337 0ustar00johndoejohndoe00000000000000back-ticks (`) are useful globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit043.rsl0000644000000000000000000000013214243161125027174 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.431735674 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit043.rsl0000664000175000017500000000010614243161125027332 0ustar00johndoejohndoe00000000000000&(executable = /bin/echo) (arguments = back-ticks "(`)" are useful) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit044.err0000644000000000000000000000013214243161125027165 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.433735654 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit044.err0000664000175000017500000000000014243161125027314 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit044.out0000644000000000000000000000013214243161125027204 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.435735635 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit044.out0000664000175000017500000000001414243161125027340 0ustar00johndoejohndoe00000000000000hello hello globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit044.rsl0000644000000000000000000000013214243161125027175 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.438735607 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit044.rsl0000664000175000017500000000021614243161125027335 0ustar00johndoejohndoe00000000000000&(executable=/bin/echo) (arguments=hello) (stdout = ( $(GLOBUSRUN_GASS_URL)/dev/stdout ) ( $(GLOBUSRUN_GASS_URL)/dev/stdout ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit045.err0000644000000000000000000000013214243161125027166 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.439735597 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit045.err0000664000175000017500000000000014243161125027315 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit045.out0000644000000000000000000000013214243161125027205 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.441735578 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit045.out0000664000175000017500000000000414243161125027340 0ustar00johndoejohndoe00000000000000foo globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit045.rsl0000644000000000000000000000013214243161125027176 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.443735559 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit045.rsl0000664000175000017500000000011714243161125027336 0ustar00johndoejohndoe00000000000000&(rsl_substitution=(a b) ($(a) foo)) (executable=/bin/echo) (arguments=$(b)) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit046.err0000644000000000000000000000013214243161125027167 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.446735531 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit046.err0000664000175000017500000000000714243161125027325 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit046.out0000644000000000000000000000013214243161125027206 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.448735511 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit046.out0000664000175000017500000000000714243161125027344 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit046.rsl0000644000000000000000000000013214243161125027177 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.450735492 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit046.rsl0000664000175000017500000000067314243161125027346 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout;') (scratch_dir=$(HOME)) (directory=$(SCRATCH_DIRECTORY)) (stdout = $(SCRATCH_DIRECTORY) # /stdout) (stderr = $(SCRATCH_DIRECTORY) # /stderr) (file_stage_out = ( $(SCRATCH_DIRECTORY) # /stdout $(GLOBUSRUN_GASS_URL) # /dev/stdout ) ( $(SCRATCH_DIRECTORY) # /stderr $(GLOBUSRUN_GASS_URL) # /dev/stderr ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit047.err0000644000000000000000000000013214243161125027170 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.452735473 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit047.err0000664000175000017500000000000714243161125027326 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit047.out0000644000000000000000000000013214243161125027207 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.455735445 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit047.out0000664000175000017500000000000714243161125027345 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit047.rsl0000644000000000000000000000013214243161125027200 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.457735426 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit047.rsl0000664000175000017500000000061214243161125027340 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (scratch_dir=$(HOME)) (directory=$(SCRATCH_DIRECTORY)) (stdout = stdout) (stderr = stderr) (file_stage_out = ( $(SCRATCH_DIRECTORY) # /stdout $(GLOBUSRUN_GASS_URL) # /dev/stdout ) ( $(SCRATCH_DIRECTORY) # /stderr $(GLOBUSRUN_GASS_URL) # /dev/stderr ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit048.err0000644000000000000000000000013214243161125027171 xustar000000000000000030 mtime=1653400149.383969868 30 atime=1653400149.383969868 30 ctime=1653404022.459735407 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit048.err0000664000175000017500000000000714243161125027327 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit048.out0000644000000000000000000000013214243161125027210 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653400149.384969858 30 ctime=1653404022.461735387 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit048.out0000664000175000017500000000000714243161125027346 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit048.rsl0000644000000000000000000000013214243161125027201 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653400149.384969858 30 ctime=1653404022.463735368 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit048.rsl0000664000175000017500000000061214243161125027341 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (scratch_dir=$(HOME)) (directory=$(SCRATCH_DIRECTORY)) (stdout = $(SCRATCH_DIRECTORY) # /stdout) (stderr = $(SCRATCH_DIRECTORY) # /stderr) (file_stage_out = ( stdout $(GLOBUSRUN_GASS_URL) # /dev/stdout ) ( stderr $(GLOBUSRUN_GASS_URL) # /dev/stderr ) ) globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit049.err0000644000000000000000000000013214243161125027172 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653400149.384969858 30 ctime=1653404022.465735349 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit049.err0000664000175000017500000000000714243161125027330 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit049.out0000644000000000000000000000013114243161125027210 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653400149.384969858 29 ctime=1653404022.46773533 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit049.out0000664000175000017500000000000714243161125027347 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/submit_test/PaxHeaders.31186/submit049.rsl0000644000000000000000000000013214243161125027202 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653400149.384969858 30 ctime=1653404022.470735302 globus_gram_job_manager-15.8/test/jobmanager/submit_test/submit049.rsl0000664000175000017500000000053214243161125027343 0ustar00johndoejohndoe00000000000000&(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (scratch_dir=$(HOME)) (directory=$(SCRATCH_DIRECTORY)) (stdout = stdout) (stderr = stderr) (file_stage_out = ( stdout $(GLOBUSRUN_GASS_URL) # /dev/stdout ) ( stderr $(GLOBUSRUN_GASS_URL) # /dev/stderr ) ) globus_gram_job_manager-15.8/test/jobmanager/PaxHeaders.31186/stdio_test0000644000000000000000000000013214243170566024473 xustar000000000000000030 mtime=1653404022.654733547 30 atime=1653404023.059729684 30 ctime=1653404022.654733547 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/0000775000175000017500000000000014243170566024711 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453026611 xustar000000000000000030 mtime=1653400875.798635262 30 atime=1653401385.175595247 30 ctime=1653404022.517734853 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/Makefile.in0000664000175000017500000007143414243162453026763 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/jobmanager/stdio_test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ check_SCRIPTS = globus-gram-job-manager-stdio-test.pl check_DATA = \ stdio001.err stdio001.out stdio001.rsl \ stdio002.err stdio002.out stdio002.rsl \ stdio003.err stdio003.out stdio003.rsl \ stdio004.err stdio004.out stdio004.rsl \ stdio005.err stdio005.out stdio005.rsl \ stdio006.err stdio006.out stdio006.rsl \ stdio007.err stdio007.out stdio007.rsl \ stdio008.err stdio008.out stdio008.rsl \ stdio009.err stdio009.out stdio009.rsl \ stdio010.err stdio010.out stdio010.rsl \ stdio011.err stdio011.out stdio011.rsl \ stdio012.err stdio012.out stdio012.rsl \ stdio013.err stdio013.out stdio013.rsl \ stdio014.err stdio014.out stdio014.rsl \ stdio015.err stdio015.out stdio015.rsl \ stdio016.err stdio016.out stdio016.rsl \ stdio017.err stdio017.out stdio017.rsl \ stdio018.err stdio018.out stdio018.rsl \ stdio019.err stdio019.out stdio019.rsl @USE_CYGPATH_W_FALSE@X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" @USE_CYGPATH_W_TRUE@X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" @USE_CYGPATH_W_FALSE@X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" @USE_CYGPATH_W_TRUE@X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" @USE_CYGPATH_W_FALSE@X509_CERT_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" @USE_CYGPATH_W_FALSE@TEST_DATA_DIR = "$(abs_srcdir)" @USE_CYGPATH_W_TRUE@TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" @USE_CYGPATH_W_FALSE@TEST_HOME_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper TESTS = $(check_SCRIPTS) EXTRA_DIST = $(check_SCRIPTS) $(check_DATA) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/jobmanager/stdio_test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/jobmanager/stdio_test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_SCRIPTS) $(check_DATA) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? globus-gram-job-manager-stdio-test.pl.log: globus-gram-job-manager-stdio-test.pl @p='globus-gram-job-manager-stdio-test.pl'; \ b='globus-gram-job-manager-stdio-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(check_DATA) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/Makefile.am0000644000000000000000000000013214243161125026573 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400875.761635628 30 ctime=1653404022.518734844 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/Makefile.am0000664000175000017500000000360614243161125026741 0ustar00johndoejohndoe00000000000000check_SCRIPTS = globus-gram-job-manager-stdio-test.pl check_DATA = \ stdio001.err stdio001.out stdio001.rsl \ stdio002.err stdio002.out stdio002.rsl \ stdio003.err stdio003.out stdio003.rsl \ stdio004.err stdio004.out stdio004.rsl \ stdio005.err stdio005.out stdio005.rsl \ stdio006.err stdio006.out stdio006.rsl \ stdio007.err stdio007.out stdio007.rsl \ stdio008.err stdio008.out stdio008.rsl \ stdio009.err stdio009.out stdio009.rsl \ stdio010.err stdio010.out stdio010.rsl \ stdio011.err stdio011.out stdio011.rsl \ stdio012.err stdio012.out stdio012.rsl \ stdio013.err stdio013.out stdio013.rsl \ stdio014.err stdio014.out stdio014.rsl \ stdio015.err stdio015.out stdio015.rsl \ stdio016.err stdio016.out stdio016.rsl \ stdio017.err stdio017.out stdio017.rsl \ stdio018.err stdio018.out stdio018.rsl \ stdio019.err stdio019.out stdio019.rsl if USE_CYGPATH_W X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" else X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" X509_CERT_DIR = "$(abs_top_builddir)/test" TEST_DATA_DIR = "$(abs_srcdir)" TEST_HOME_DIR = "$(abs_top_builddir)/test" endif TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper TESTS = $(check_SCRIPTS) EXTRA_DIST = $(check_SCRIPTS) $(check_DATA) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/globus-gram-job-manager-std0000644000000000000000000000013214243161125031651 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.521734815 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/globus-gram-job-manager-stdio-test.pl0000775000175000017500000000726714243161125033750 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl use IO::File; use Sys::Hostname; use Test::More; use File::Compare; use File::Temp qw(tempdir); my (@tests) = (); my $contact = $ENV{CONTACT_STRING}; my $testtmp = tempdir( CLEANUP => 1 ); my $testdatadir = $0; if ($testdatadir =~ m|/|) { $testdatadir =~ s|/+[^/]*$||; } else { $testdatadir = '.'; } my $verbose = 0; my @test_cases=qw( stdio001 stdio002 stdio003 stdio004 stdio005 stdio006 stdio007 stdio008 stdio009 stdio010 stdio011 stdio012 stdio013 stdio014 stdio015 stdio016 stdio017 stdio018 stdio019 ); sub test_rsl { my $testname = shift; my $additional_rsl = shift; my $testrsl = "$testname.rsl"; my $additionalrslfile = "$testtmp/$testname.rsl"; my $test_rsl_fp = new IO::File("$testdatadir/$testrsl", '<'); my $rsl_list; my $out_count; my $all_rsl; my $need_ftp = 0; $rsl_list = join('', <$test_rsl_fp>); $rsl_list =~ s/&//; $rsl_list =~ m/\(\*\s+(\d+)\s+\*\)/; $out_count = $1; if ($rsl_list =~ m/TEST_FTP_PREFIX/) { $need_ftp = 1; } $test_rsl_fp->close(); $all_rsl = '&'; # need to put the RSL substitutions in the additional RSL # before the main RSL clauses if($additional_rsl ne '') { $all_rsl .= "$additional_rsl\n"; } $all_rsl .= $rsl_list; if($verbose) { print "# Submitting job\n"; foreach(split(/\n/, $all_rsl)) { print "# $_\n"; } } SKIP: { skip "No ftp server available", 1, if ($need_ftp && !exists $ENV{TEST_FTP_PREFIX}); ok(run_and_compare($testname, $all_rsl, $out_count) == 0, $testname); } } sub run_and_compare { my $testname = shift; my $rsl = shift; my $out_count = shift; my $rc; system("globusrun", "-s", "-r", $contact, $rsl); $rc = $? >> 8; if($rc == 0) { for(my $i = 0; $i < $out_count; $i++) { my $out_name = sprintf("%s.%03d", "$testtmp/$testname.out", $i+1); my $err_name = sprintf("%s.%03d", "$testtmp/$testname.err", $i+1); my $canonical_out = "$testdatadir/$testname.out"; my $canonical_err = "$testdatadir/$testname.err"; if(File::Compare::compare($out_name, $canonical_out) != 0) { $rc = sprintf("comparison of output file %d failed", $i+1); system("cat $out_name"); system("cat $canonical_out"); last; } if(File::Compare::compare($err_name, $canonical_err) != 0) { $rc = sprintf("comparison of error file %d failed", $i+1); system("cat $err_name"); system("cat $canonical_err"); last; } } } return $rc; } foreach(@test_cases) { my $test_ftp_prefix = $ENV{TEST_FTP_PREFIX}; my %rsl_substitutions = (); $rsl_substitutions{TEST_STDOUT} = "$testtmp/$_.out"; $rsl_substitutions{TEST_STDERR} = "$testtmp/$_.err"; $rsl_substitutions{TEST_FTP_PREFIX} = "$ENV{TEST_FTP_PREFIX}/%2F" if exists $ENV{TEST_FTP_PREFIX}; my $testtmprsl = "(rsl_substitution = " . join('', map { "($_ \\\"$rsl_substitutions{$_}\\\")" } keys %rsl_substitutions) . ")"; push(@tests, "test_rsl(\"$_\", \"$testtmprsl\")"); } if(@ARGV) { my @doit; $verbose = 1; foreach(@ARGV) { if(/^(\d+)-(\d+)$/) { foreach($1 .. $2) { push(@doit, $_); } } elsif(/^(\d+)$/) { push(@doit, $1); } } plan tests => scalar(@doit); foreach (@doit) { eval "&$tests[$_-1]"; } } else { plan tests => scalar(@tests); foreach (@tests) { eval "&$_"; } } globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio001.err0000644000000000000000000000013214243161125026614 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.523734796 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio001.err0000664000175000017500000000000714243161125026752 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio001.out0000644000000000000000000000013214243161125026633 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.524734787 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio001.out0000664000175000017500000000000714243161125026771 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio001.rsl0000644000000000000000000000013214243161125026624 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.526734768 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio001.rsl0000664000175000017500000000031414243161125026763 0ustar00johndoejohndoe00000000000000(* 1 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001" ) (stderr = $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001" ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio002.err0000644000000000000000000000013214243161125026615 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.528734748 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio002.err0000664000175000017500000000000714243161125026753 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio002.out0000644000000000000000000000013214243161125026634 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.530734729 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio002.out0000664000175000017500000000000714243161125026772 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio002.rsl0000644000000000000000000000013214243161125026625 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.533734701 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio002.rsl0000664000175000017500000000031114243161125026761 0ustar00johndoejohndoe00000000000000(* 1 *) &(executable = '/bin/sh') (arguments = -c 'echo stderr 1>&2; echo stdout' ) (stdout = $(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".001" ) (stderr = $(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".001" ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio003.err0000644000000000000000000000013214243161125026616 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.535734682 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio003.err0000664000175000017500000000000714243161125026754 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio003.out0000644000000000000000000000013214243161125026635 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.537734663 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio003.out0000664000175000017500000000000714243161125026773 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio003.rsl0000644000000000000000000000013214243161125026626 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.539734644 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio003.rsl0000664000175000017500000000072114243161125026767 0ustar00johndoejohndoe00000000000000(* 1 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = "x-gass-cache://" # $(TEST_STDOUT) # ".001" ) (stderr = "x-gass-cache://" # $(TEST_STDERR) # ".001" ) (file_stage_out = ("x-gass-cache://" # $(TEST_STDOUT) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001") ("x-gass-cache://" # $(TEST_STDERR) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio004.err0000644000000000000000000000013214243161125026617 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.541734625 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio004.err0000664000175000017500000000000714243161125026755 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio004.out0000644000000000000000000000013214243161125026636 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.543734605 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio004.out0000664000175000017500000000000714243161125026774 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio004.rsl0000644000000000000000000000013214243161125026627 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.546734577 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio004.rsl0000664000175000017500000000071714243161125026775 0ustar00johndoejohndoe00000000000000(* 1 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (scratch_dir = $(HOME) ) (stdout = $(SCRATCH_DIRECTORY) # "/stdout.001" ) (stderr = $(SCRATCH_DIRECTORY) # "/stderr.001" ) (file_stage_out = ($(SCRATCH_DIRECTORY) # "/stdout.001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001") ($(SCRATCH_DIRECTORY) # "/stderr.001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio005.err0000644000000000000000000000013214243161125026620 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.548734558 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio005.err0000664000175000017500000000000714243161125026756 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio005.out0000644000000000000000000000013214243161125026637 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.550734539 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio005.out0000664000175000017500000000000714243161125026775 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio005.rsl0000644000000000000000000000013114243161125026627 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 29 ctime=1653404022.55273452 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio005.rsl0000664000175000017500000000032214243161125026766 0ustar00johndoejohndoe00000000000000(* 1 *) &(executable = '/bin/sh') (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ($(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001" )) (stderr = ($(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001" )) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio006.err0000644000000000000000000000013214243161125026621 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.554734501 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio006.err0000664000175000017500000000000714243161125026757 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio006.out0000644000000000000000000000013214243161125026640 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.556734481 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio006.out0000664000175000017500000000000714243161125026776 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio006.rsl0000644000000000000000000000013214243161125026631 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.559734453 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio006.rsl0000664000175000017500000000031414243161125026770 0ustar00johndoejohndoe00000000000000(* 1 *) &(executable = '/bin/sh') (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ($(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".001" )) (stderr = ($(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".001" )) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio007.err0000644000000000000000000000013214243161125026622 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.561734434 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio007.err0000664000175000017500000000000714243161125026760 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio007.out0000644000000000000000000000013214243161125026641 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.563734415 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio007.out0000664000175000017500000000000714243161125026777 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio007.rsl0000644000000000000000000000013214243161125026632 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.565734396 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio007.rsl0000664000175000017500000000072514243161125026777 0ustar00johndoejohndoe00000000000000(* 1 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ("x-gass-cache://" # $(TEST_STDOUT) # ".001" )) (stderr = ("x-gass-cache://" # $(TEST_STDERR) # ".001" )) (file_stage_out = ("x-gass-cache://" # $(TEST_STDOUT) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001") ("x-gass-cache://" # $(TEST_STDERR) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio008.err0000644000000000000000000000013214243161125026623 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.568734367 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio008.err0000664000175000017500000000000714243161125026761 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio008.out0000644000000000000000000000013214243161125026642 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.570734348 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio008.out0000664000175000017500000000000714243161125027000 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio008.rsl0000644000000000000000000000013214243161125026633 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.572734329 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio008.rsl0000664000175000017500000000072314243161125026776 0ustar00johndoejohndoe00000000000000(* 1 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (scratch_dir = $(HOME) ) (stdout = ($(SCRATCH_DIRECTORY) # "/stdout.001" )) (stderr = ($(SCRATCH_DIRECTORY) # "/stderr.001" )) (file_stage_out = ($(SCRATCH_DIRECTORY) # "/stdout.001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001") ($(SCRATCH_DIRECTORY) # "/stderr.001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio009.err0000644000000000000000000000013114243161125026623 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 29 ctime=1653404022.57473431 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio009.err0000664000175000017500000000000714243161125026762 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio009.out0000644000000000000000000000013214243161125026643 xustar000000000000000030 mtime=1653400149.375969949 30 atime=1653400149.375969949 30 ctime=1653404022.576734291 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio009.out0000664000175000017500000000000714243161125027001 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio009.rsl0000644000000000000000000000013214243161125026634 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.375969949 30 ctime=1653404022.578734272 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio009.rsl0000664000175000017500000000051614243161125026777 0ustar00johndoejohndoe00000000000000(* 2 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".002" ) ) (stderr = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".002" ) ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio010.err0000644000000000000000000000013214243161125026614 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.580734253 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio010.err0000664000175000017500000000000714243161125026752 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio010.out0000644000000000000000000000013214243161125026633 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.582734234 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio010.out0000664000175000017500000000000714243161125026771 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio010.rsl0000644000000000000000000000013214243161125026624 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.584734214 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio010.rsl0000664000175000017500000000113114243161125026761 0ustar00johndoejohndoe00000000000000(* 2 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001" ) ( "x-gass-cache://" # $(TEST_STDOUT) # ".002" ) ) (stderr = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001" ) ( "x-gass-cache://" # $(TEST_STDERR) # ".002" ) ) (file_stage_out = ("x-gass-cache://" # $(TEST_STDOUT) # ".002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ("x-gass-cache://" # $(TEST_STDERR) # ".002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio011.err0000644000000000000000000000013214243161125026615 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.587734186 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio011.err0000664000175000017500000000000714243161125026753 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio011.out0000644000000000000000000000013214243161125026634 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.589734167 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio011.out0000664000175000017500000000000714243161125026772 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio011.rsl0000644000000000000000000000013214243161125026625 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.591734148 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio011.rsl0000664000175000017500000000112014243161125026760 0ustar00johndoejohndoe00000000000000(* 2 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (scratch_dir = $(HOME) ) (stdout = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stdout.002" ) ) (stderr = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stderr.002" ) ) (file_stage_out = ($(SCRATCH_DIRECTORY) # "/stdout.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ($(SCRATCH_DIRECTORY) # "/stderr.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio012.err0000644000000000000000000000013214243161125026616 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.594734119 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio012.err0000664000175000017500000000000714243161125026754 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio012.out0000644000000000000000000000013014243161125026633 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 28 ctime=1653404022.5967341 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio012.out0000664000175000017500000000000714243161125026773 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio012.rsl0000644000000000000000000000013214243161125026626 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.598734081 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio012.rsl0000664000175000017500000000110514243161125026764 0ustar00johndoejohndoe00000000000000(* 2 *) &(executable = /bin/sh) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( $(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".001" ) ( "x-gass-cache://" # $(TEST_STDOUT) # ".002" ) ) (stderr = ( $(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".001" ) ( "x-gass-cache://" # $(TEST_STDERR) # ".002" ) ) (file_stage_out = ("x-gass-cache://" # $(TEST_STDOUT) # ".002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ("x-gass-cache://" # $(TEST_STDERR) # ".002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio013.err0000644000000000000000000000013214243161125026617 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.600734062 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio013.err0000664000175000017500000000000714243161125026755 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio013.out0000644000000000000000000000013214243161125026636 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.601734052 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio013.out0000664000175000017500000000000714243161125026774 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio013.rsl0000644000000000000000000000013214243161125026627 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.604734024 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio013.rsl0000664000175000017500000000111214243161125026763 0ustar00johndoejohndoe00000000000000(* 2 *) &(executable = /bin/sh) (scratch_dir = $(HOME) ) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( $(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stdout.002" ) ) (stderr = ( $(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stderr.002" ) ) (file_stage_out = ($(SCRATCH_DIRECTORY) # "/stdout.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ($(SCRATCH_DIRECTORY) # "/stderr.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio014.err0000644000000000000000000000013214243161125026620 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.613733938 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio014.err0000664000175000017500000000000714243161125026756 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio014.out0000644000000000000000000000013114243161125026636 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 29 ctime=1653404022.61873389 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio014.out0000664000175000017500000000000714243161125026775 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio014.rsl0000644000000000000000000000013214243161125026630 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.621733862 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio014.rsl0000664000175000017500000000153214243161125026772 0ustar00johndoejohndoe00000000000000(* 2 *) &(executable = /bin/sh) (scratch_dir = $(HOME) ) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( "x-gass-cache://" # $(TEST_STDOUT) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stdout.002" ) ) (stderr = ( "x-gass-cache://" # $(TEST_STDERR) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stderr.002" ) ) (file_stage_out = ( $(SCRATCH_DIRECTORY) # "/stdout.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ( $(SCRATCH_DIRECTORY) # "/stderr.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ( "x-gass-cache://" # $(TEST_STDOUT) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001") ( "x-gass-cache://" # $(TEST_STDERR) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio015.err0000644000000000000000000000013214243161125026621 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.623733843 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio015.err0000664000175000017500000000000714243161125026757 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio015.out0000644000000000000000000000013214243161125026640 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.626733814 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio015.out0000664000175000017500000000000714243161125026776 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio015.rsl0000644000000000000000000000013214243161125026631 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.628733795 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio015.rsl0000664000175000017500000000172114243161125026773 0ustar00johndoejohndoe00000000000000(* 3 *) &(executable = /bin/sh) (scratch_dir = $(HOME) ) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( "x-gass-cache://" # $(TEST_STDOUT) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stdout.002" ) ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".003" ) ) (stderr = ( "x-gass-cache://" # $(TEST_STDERR) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stderr.002" ) ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".003" ) ) (file_stage_out = ( $(SCRATCH_DIRECTORY) # "/stdout.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ( $(SCRATCH_DIRECTORY) # "/stderr.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ( "x-gass-cache://" # $(TEST_STDOUT) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001") ( "x-gass-cache://" # $(TEST_STDERR) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio016.err0000644000000000000000000000013214243161125026622 xustar000000000000000030 mtime=1653400149.376969939 30 atime=1653400149.376969939 30 ctime=1653404022.630733776 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio016.err0000664000175000017500000000000714243161125026760 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio016.out0000644000000000000000000000013214243161125026641 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.376969939 30 ctime=1653404022.632733757 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio016.out0000664000175000017500000000000714243161125026777 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio016.rsl0000644000000000000000000000013214243161125026632 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.636733719 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio016.rsl0000664000175000017500000000171414243161125026776 0ustar00johndoejohndoe00000000000000(* 3 *) &(executable = /bin/sh) (scratch_dir = $(HOME) ) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( "x-gass-cache://" # $(TEST_STDOUT) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stdout.002" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".003" ) ) (stderr = ( "x-gass-cache://" # $(TEST_STDERR) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stderr.002" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".003" ) ) (file_stage_out = ( $(SCRATCH_DIRECTORY) # "/stdout.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ( $(SCRATCH_DIRECTORY) # "/stderr.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ( "x-gass-cache://" # $(TEST_STDOUT) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001") ( "x-gass-cache://" # $(TEST_STDERR) # ".001" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio017.err0000644000000000000000000000013114243161125026622 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 29 ctime=1653404022.63973369 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio017.err0000664000175000017500000000000714243161125026761 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio017.out0000644000000000000000000000013214243161125026642 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.641733671 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio017.out0000664000175000017500000000000714243161125027000 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio017.rsl0000644000000000000000000000013214243161125026633 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.643733652 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio017.rsl0000664000175000017500000000130614243161125026774 0ustar00johndoejohndoe00000000000000(* 3 *) &(executable = /bin/sh) (scratch_dir = $(HOME) ) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stdout.002" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".003" ) ) (stderr = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001" ) ( $(SCRATCH_DIRECTORY) # "/stderr.002" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".003" ) ) (file_stage_out = ( $(SCRATCH_DIRECTORY) # "/stdout.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ( $(SCRATCH_DIRECTORY) # "/stderr.002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio018.err0000644000000000000000000000013214243161125026624 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.646733623 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio018.err0000664000175000017500000000000714243161125026762 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio018.out0000644000000000000000000000013214243161125026643 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.648733604 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio018.out0000664000175000017500000000000714243161125027001 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio018.rsl0000644000000000000000000000013214243161125026634 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.650733585 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio018.rsl0000664000175000017500000000135614243161125027002 0ustar00johndoejohndoe00000000000000(* 3 *) &(executable = /bin/sh) (scratch_dir = $(HOME) ) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001" ) ( "x-gass-cache://" # $(TEST_STDOUT) # ".002" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".003" ) ) (stderr = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001" ) ( "x-gass-cache://" # $(TEST_STDERR) # ".002" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".003" ) ) (file_stage_out = ( "x-gass-cache://" # $(TEST_STDOUT) # ".002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ( "x-gass-cache://" # $(TEST_STDERR) # ".002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ) globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio019.err0000644000000000000000000000013214243161125026625 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.651733575 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio019.err0000664000175000017500000000000714243161125026763 0ustar00johndoejohndoe00000000000000stderr globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio019.out0000644000000000000000000000013214243161125026644 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.653733556 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio019.out0000664000175000017500000000000714243161125027002 0ustar00johndoejohndoe00000000000000stdout globus_gram_job_manager-15.8/test/jobmanager/stdio_test/PaxHeaders.31186/stdio019.rsl0000644000000000000000000000013214243161125026635 xustar000000000000000030 mtime=1653400149.377969929 30 atime=1653400149.377969929 30 ctime=1653404022.654733547 globus_gram_job_manager-15.8/test/jobmanager/stdio_test/stdio019.rsl0000664000175000017500000000212614243161125026777 0ustar00johndoejohndoe00000000000000(* 3 *) &(executable = /bin/sh) (scratch_dir = $(HOME) ) (arguments = -c 'echo stderr 1>&2; echo stdout') (stdout = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".001" ) ( "x-gass-cache://" # $(TEST_STDOUT) # ".002" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDOUT) # ".003" ) ( $(SCRATCH_DIRECTORY) # "/stdout.004" ) ) (stderr = ( $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".001" ) ( "x-gass-cache://" # $(TEST_STDERR) # ".002" ) ( $(TEST_FTP_PREFIX) # $(TEST_STDERR) # ".003" ) ( $(SCRATCH_DIRECTORY) # "/stderr.004" ) ) (file_stage_out = ( "x-gass-cache://" # $(TEST_STDOUT) # ".002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".002") ( "x-gass-cache://" # $(TEST_STDERR) # ".002" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".002") ( $(SCRATCH_DIRECTORY) # "/stdout.004" $(GLOBUSRUN_GASS_URL) # $(TEST_STDOUT) # ".004") ( $(SCRATCH_DIRECTORY) # "/stderr.004" $(GLOBUSRUN_GASS_URL) # $(TEST_STDERR) # ".004") ) globus_gram_job_manager-15.8/test/jobmanager/PaxHeaders.31186/failure_test0000644000000000000000000000013214243170566025000 xustar000000000000000030 mtime=1653404022.886731334 30 atime=1653404023.059729684 30 ctime=1653404022.886731334 globus_gram_job_manager-15.8/test/jobmanager/failure_test/0000775000175000017500000000000014243170566025216 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453027116 xustar000000000000000030 mtime=1653400875.702636212 30 atime=1653401385.116595831 30 ctime=1653404022.696733146 globus_gram_job_manager-15.8/test/jobmanager/failure_test/Makefile.in0000664000175000017500000007502514243162453027270 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/jobmanager/failure_test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/globus-gram-job-manager-failure-test.pl.in \ $(top_srcdir)/build-aux/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = globus-gram-job-manager-failure-test.pl CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ check_SCRIPTS = globus-gram-job-manager-failure-test.pl check_DATA = \ error_bad_directory.rsl \ error_evaluation_failed.rsl \ error_executable_not_found.rsl \ error_executable_permissions.rsl \ error_invalid_cache2.rsl \ error_invalid_cache.rsl \ error_invalid_count.rsl \ error_invalid_file_cleanup.rsl \ error_invalid_gram_myjob.rsl \ error_invalid_host_count2.rsl \ error_invalid_host_count.rsl \ error_invalid_jobtype.rsl \ error_invalid_max_cpu_time.rsl \ error_invalid_max_memory.rsl \ error_invalid_maxtime.rsl \ error_invalid_max_wall_time.rsl \ error_invalid_min_memory.rsl \ error_invalid_proxy_timeout.rsl \ error_invalid_project.rsl \ error_invalid_queue.rsl \ error_invalid_save_state.rsl \ error_invalid_scratch.rsl \ error_invalid_two_phase_commit.rsl \ error_no_state_file.rsl \ error_opening_stderr2.rsl \ error_opening_stderr.rsl \ error_opening_stdout2.rsl \ error_opening_stdout3.rsl \ error_opening_stdout.rsl \ error_rsl_arguments.rsl \ error_rsl_cache.rsl \ error_rsl_directory.rsl \ error_rsl_dryrun.rsl \ error_rsl_environment1.rsl \ error_rsl_environment2.rsl \ error_rsl_evaluation_failed2.rsl \ error_rsl_evaluation_failed.rsl \ error_rsl_executable.rsl \ error_rsl_file_stage_in2.rsl \ error_rsl_file_stage_in3.rsl \ error_rsl_file_stage_in.rsl \ error_rsl_file_stage_in_shared2.rsl \ error_rsl_file_stage_in_shared3.rsl \ error_rsl_file_stage_in_shared.rsl \ error_rsl_file_stage_out2.rsl \ error_rsl_file_stage_out3.rsl \ error_rsl_file_stage_out.rsl \ error_rsl_host_count.rsl \ error_rsl_jobtype.rsl \ error_rsl_max_cpu_time.rsl \ error_rsl_max_memory.rsl \ error_rsl_maxtime.rsl \ error_rsl_max_wall_time.rsl \ error_rsl_min_memory.rsl \ error_rsl_myjob.rsl \ error_rsl_project.rsl \ error_rsl_proxy_timeout.rsl \ error_rsl_queue.rsl \ error_rsl_remote_io_url.rsl \ error_rsl_restart.rsl \ error_rsl_save_state.rsl \ error_rsl_scratch.rsl \ error_rsl_stderr2.rsl \ error_rsl_stderr.rsl \ error_rsl_stdin.rsl \ error_rsl_stdout2.rsl \ error_rsl_stdout.rsl \ error_rsl_two_phase_commit.rsl \ error_staging_executable.rsl \ error_staging_stdin.rsl \ error_stdin_not_found.rsl \ error_undefined_executable.rsl TESTS = $(check_SCRIPTS) @USE_CYGPATH_W_FALSE@X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" @USE_CYGPATH_W_TRUE@X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" @USE_CYGPATH_W_FALSE@X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" @USE_CYGPATH_W_TRUE@X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" @USE_CYGPATH_W_FALSE@X509_CERT_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" @USE_CYGPATH_W_FALSE@TEST_DATA_DIR = "$(abs_srcdir)" @USE_CYGPATH_W_TRUE@TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" @USE_CYGPATH_W_FALSE@TEST_HOME_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper EXTRA_DIST = $(check_DATA) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/jobmanager/failure_test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/jobmanager/failure_test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): globus-gram-job-manager-failure-test.pl: $(top_builddir)/config.status $(srcdir)/globus-gram-job-manager-failure-test.pl.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_SCRIPTS) $(check_DATA) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? globus-gram-job-manager-failure-test.pl.log: globus-gram-job-manager-failure-test.pl @p='globus-gram-job-manager-failure-test.pl'; \ b='globus-gram-job-manager-failure-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(check_DATA) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/Makefile.am0000644000000000000000000000013114243161125027077 xustar000000000000000029 mtime=1653400149.36897002 30 atime=1653400875.663636598 30 ctime=1653404022.698733127 globus_gram_job_manager-15.8/test/jobmanager/failure_test/Makefile.am0000664000175000017500000000653114243161125027246 0ustar00johndoejohndoe00000000000000check_SCRIPTS = globus-gram-job-manager-failure-test.pl check_DATA = \ error_bad_directory.rsl \ error_evaluation_failed.rsl \ error_executable_not_found.rsl \ error_executable_permissions.rsl \ error_invalid_cache2.rsl \ error_invalid_cache.rsl \ error_invalid_count.rsl \ error_invalid_file_cleanup.rsl \ error_invalid_gram_myjob.rsl \ error_invalid_host_count2.rsl \ error_invalid_host_count.rsl \ error_invalid_jobtype.rsl \ error_invalid_max_cpu_time.rsl \ error_invalid_max_memory.rsl \ error_invalid_maxtime.rsl \ error_invalid_max_wall_time.rsl \ error_invalid_min_memory.rsl \ error_invalid_proxy_timeout.rsl \ error_invalid_project.rsl \ error_invalid_queue.rsl \ error_invalid_save_state.rsl \ error_invalid_scratch.rsl \ error_invalid_two_phase_commit.rsl \ error_no_state_file.rsl \ error_opening_stderr2.rsl \ error_opening_stderr.rsl \ error_opening_stdout2.rsl \ error_opening_stdout3.rsl \ error_opening_stdout.rsl \ error_rsl_arguments.rsl \ error_rsl_cache.rsl \ error_rsl_directory.rsl \ error_rsl_dryrun.rsl \ error_rsl_environment1.rsl \ error_rsl_environment2.rsl \ error_rsl_evaluation_failed2.rsl \ error_rsl_evaluation_failed.rsl \ error_rsl_executable.rsl \ error_rsl_file_stage_in2.rsl \ error_rsl_file_stage_in3.rsl \ error_rsl_file_stage_in.rsl \ error_rsl_file_stage_in_shared2.rsl \ error_rsl_file_stage_in_shared3.rsl \ error_rsl_file_stage_in_shared.rsl \ error_rsl_file_stage_out2.rsl \ error_rsl_file_stage_out3.rsl \ error_rsl_file_stage_out.rsl \ error_rsl_host_count.rsl \ error_rsl_jobtype.rsl \ error_rsl_max_cpu_time.rsl \ error_rsl_max_memory.rsl \ error_rsl_maxtime.rsl \ error_rsl_max_wall_time.rsl \ error_rsl_min_memory.rsl \ error_rsl_myjob.rsl \ error_rsl_project.rsl \ error_rsl_proxy_timeout.rsl \ error_rsl_queue.rsl \ error_rsl_remote_io_url.rsl \ error_rsl_restart.rsl \ error_rsl_save_state.rsl \ error_rsl_scratch.rsl \ error_rsl_stderr2.rsl \ error_rsl_stderr.rsl \ error_rsl_stdin.rsl \ error_rsl_stdout2.rsl \ error_rsl_stdout.rsl \ error_rsl_two_phase_commit.rsl \ error_staging_executable.rsl \ error_staging_stdin.rsl \ error_stdin_not_found.rsl \ error_undefined_executable.rsl TESTS = $(check_SCRIPTS) if USE_CYGPATH_W X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" else X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" X509_CERT_DIR = "$(abs_top_builddir)/test" TEST_DATA_DIR = "$(abs_srcdir)" TEST_HOME_DIR = "$(abs_top_builddir)/test" endif TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper EXTRA_DIST = $(check_DATA) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/globus-gram-job-manager-f0000644000000000000000000000013214243161125031611 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653401385.363593387 30 ctime=1653404022.699733118 globus_gram_job_manager-15.8/test/jobmanager/failure_test/globus-gram-job-manager-failure-test.pl.in0000664000175000017500000001011414243161125035145 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl use Globus::GRAM::Error; use Globus::Core::Paths; use IO::File; use File::Basename qw(dirname); use Test::More; my (@tests, @todo) = (); my $contact = $ENV{CONTACT_STRING}; my $lrm = $ENV{CONTACT_LRM} if exists($ENV{CONTACT_LRM}); my $testdatadir = $ENV{TEST_DATA_DIR}; if (!$testdatadir) { $testdatadir = dirname($0); } my $verbose = 0; my @test_rsls=qw( error_bad_directory.rsl error_evaluation_failed.rsl error_executable_not_found.rsl error_executable_permissions.rsl error_invalid_cache2.rsl error_invalid_cache.rsl error_invalid_count.rsl error_invalid_gram_myjob.rsl error_invalid_jobtype.rsl error_invalid_save_state.rsl error_invalid_scratch.rsl error_invalid_two_phase_commit.rsl error_invalid_proxy_timeout.rsl error_no_state_file.rsl error_opening_stderr.rsl error_opening_stderr2.rsl error_opening_stdout.rsl error_opening_stdout2.rsl error_opening_stdout3.rsl error_rsl_arguments.rsl error_rsl_cache.rsl error_rsl_directory.rsl error_rsl_dryrun.rsl error_rsl_environment1.rsl error_rsl_environment2.rsl error_rsl_evaluation_failed2.rsl error_rsl_evaluation_failed.rsl error_rsl_executable.rsl error_rsl_file_stage_in2.rsl error_rsl_file_stage_in3.rsl error_rsl_file_stage_in.rsl error_rsl_file_stage_in_shared2.rsl error_rsl_file_stage_in_shared3.rsl error_rsl_file_stage_in_shared.rsl error_rsl_file_stage_out2.rsl error_rsl_file_stage_out3.rsl error_rsl_file_stage_out.rsl error_rsl_jobtype.rsl error_rsl_myjob.rsl error_rsl_proxy_timeout.rsl error_rsl_remote_io_url.rsl error_rsl_restart.rsl error_rsl_save_state.rsl error_rsl_scratch.rsl error_rsl_stderr.rsl error_rsl_stderr2.rsl error_rsl_stdin.rsl error_rsl_stdout.rsl error_rsl_stdout2.rsl error_rsl_two_phase_commit.rsl error_staging_executable.rsl error_staging_stdin.rsl error_stdin_not_found.rsl error_undefined_executable.rsl ); my @skip_as_root = qw( error_invalid_cache2.rsl error_invalid_cache.rsl error_invalid_scratch.rsl error_opening_stderr.rsl error_opening_stderr2.rsl error_opening_stdout.rsl error_opening_stdout2.rsl error_opening_stdout3.rsl error_stdin_not_found.rsl ); sub test_rsl { my $rsl_file = shift; my $file = new IO::File("$testdatadir/$rsl_file", '<'); my @all_rsl = <$file>; my $error; my $value; my @error_list = (); my @lrm_skip_list = (); my $ok=0; $value = $all_rsl[0]; chomp($value); $value =~ s/\(\*\s*(.*)\s*\*\)/$1/; foreach my $s (split(/\s+/, $value)) { if ($s =~ m/^GLOBUS_GRAM_PROTOCOL_ERROR_/) { $s =~ s/GLOBUS_GRAM_PROTOCOL_ERROR_//; push(@error_list, eval "Globus::GRAM::Error::$s()"); } elsif ($s =~ m/LRM_SKIP:(.*)/) { push(@lrm_skip_list, $1); } } SKIP: { skip "Skipping test for $lrm", 1, if (defined($lrm) && grep(/$lrm/, @lrm_skip_list)); skip "Skipping as root", 1, if ($< == 0 && grep(/$rsl_file/, @skip_as_root)); ok(submit_rsl("$testdatadir/$rsl_file", @error_list)==0, $rsl_file); } } sub submit_rsl { my $rsl_file = shift; my @error_list = @_; my @args = ("globusrun", "-s", "-r", "$contact", "-f", $rsl_file); my ($saveout, $saveerr); open($saveout, ">&STDOUT"); open($saveerr, ">&STDERR"); open(STDOUT, ">/dev/null"); open(STDERR, ">/dev/null"); system(@args); open(STDOUT, ">&", $saveout); open(STDERR, ">&", $saveerr); $rc = $? >> 8; foreach (@error_list) { if ($_->value == $rc) { return 0 } } return 1; } foreach(@test_rsls) { push(@tests, "test_rsl(\"$_\")"); } if(@ARGV) { my @doit; $verbose = 1; foreach(@ARGV) { if(/^(\d+)-(\d+)$/) { foreach($1 .. $2) { push(@doit, $_); } } elsif(/^(\d+)$/) { push(@doit, $1); } } plan tests => scalar(@doit); foreach (@doit) { eval "&$tests[$_-1]"; } } else { plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } } globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_bad_directory.rsl0000644000000000000000000000013014243161125031607 xustar000000000000000029 mtime=1653400149.36897002 29 atime=1653400149.36897002 30 ctime=1653404022.709733022 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_bad_directory.rsl0000664000175000017500000000017714243161125031757 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_BAD_DIRECTORY LRM_SKIP:condor,slurm *) &(executable=/bin/sh) (directory=/etc/no/such/directory) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_evaluation_failed.r0000644000000000000000000000013014243161125032111 xustar000000000000000029 mtime=1653400149.36897002 29 atime=1653400149.36897002 30 ctime=1653404022.713732984 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_evaluation_failed.rsl0000664000175000017500000000014114243161125032607 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED *) &(executable=$(INVALID_RSL_SUBSTITUTION)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_executable_not_foun0000644000000000000000000000013014243161125032226 xustar000000000000000029 mtime=1653400149.36897002 29 atime=1653400149.36897002 30 ctime=1653404022.718732937 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_executable_not_found.rsl0000664000175000017500000000015014243161125033330 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_EXECUTABLE_NOT_FOUND LRM_SKIP:condor *) &(executable=/no/such/executable) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_executable_permissi0000644000000000000000000000013014243161125032232 xustar000000000000000029 mtime=1653400149.36897002 29 atime=1653400149.36897002 30 ctime=1653404022.727732851 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_executable_permissions.rsl0000664000175000017500000000014214243161125033711 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_EXECUTABLE_PERMISSIONS LRM_SKIP:condor *) &(executable=/etc/passwd) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_cache2.rsl0000644000000000000000000000013014243161125031630 xustar000000000000000029 mtime=1653400149.36897002 29 atime=1653400149.36897002 30 ctime=1653404022.732732803 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_cache2.rsl0000664000175000017500000000013014243161125031765 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_CACHE *) &(executable=/bin/sh) (gass_cache=/etc) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_cache.rsl0000644000000000000000000000013014243161125031546 xustar000000000000000029 mtime=1653400149.36897002 29 atime=1653400149.36897002 30 ctime=1653404022.738732746 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_cache.rsl0000664000175000017500000000015514243161125031712 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_CACHE *) &(executable=/bin/sh) (gass_cache=/etc/no/such/writable/dir) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_count.rsl0000644000000000000000000000013014243161125031633 xustar000000000000000029 mtime=1653400149.36897002 29 atime=1653400149.36897002 30 ctime=1653404022.740732727 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_count.rsl0000664000175000017500000000012114243161125031770 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_COUNT *) &(executable=/bin/sh)(count=asdf) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_file_cleanu0000644000000000000000000000013014243161125032152 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36897002 30 ctime=1653404022.742732708 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_file_cleanup.rsl0000664000175000017500000000020714243161125033273 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_CLEANUP *) &(executable=/bin/sh) (file_cleanup=(/no/such/an (/no/such/invalid /no/such/form))) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_gram_myjob.0000644000000000000000000000013014243161125032110 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.743732698 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_gram_myjob.rsl0000664000175000017500000000014314243161125032772 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_GRAM_MYJOB *) &(executable = /bin/sh) (gram_my_job = bogus) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_host_count20000644000000000000000000000013014243161125032153 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.745732679 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_host_count2.rsl0000664000175000017500000000013414243161125033113 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_HOST_COUNT *) &(executable=/bin/sh) (host_count=-1) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_host_count.0000644000000000000000000000012714243161125032155 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 29 ctime=1653404022.74773266 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_host_count.rsl0000664000175000017500000000013614243161125033033 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_HOST_COUNT *) &(executable=/bin/sh) (host_count=asdf) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_jobtype.rsl0000644000000000000000000000013014243161125032157 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.749732641 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_jobtype.rsl0000664000175000017500000000013014243161125032314 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_JOBTYPE *) &(executable=/bin/sh) (jobtype=bogus) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_max_cpu_tim0000644000000000000000000000013014243161125032211 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.751732622 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_max_cpu_time.rsl0000664000175000017500000000013514243161125033317 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MAX_CPU_TIME *) &(executable=/bin/sh) (maxcputime=-1) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_max_memory.0000644000000000000000000000013014243161125032137 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.753732603 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_max_memory.rsl0000664000175000017500000000013314243161125033020 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MAX_MEMORY *) &(executable=/bin/sh) (max_memory=-1) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_maxtime.rsl0000644000000000000000000000013014243161125032147 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.755732584 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_maxtime.rsl0000664000175000017500000000012514243161125032310 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MAXTIME *) &(executable=/bin/sh) (maxtime=-1) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_max_wall_ti0000644000000000000000000000013014243161125032204 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.757732565 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_max_wall_time.rsl0000664000175000017500000000014114243161125033464 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MAX_WALL_TIME *) &(executable=/bin/sh) (max_wall_time=-1) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_min_memory.0000644000000000000000000000013014243161125032135 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.759732546 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_min_memory.rsl0000664000175000017500000000013314243161125033016 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_MIN_MEMORY *) &(executable=/bin/sh) (min_memory=-1) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_proxy_timeo0000644000000000000000000000013014243161125032262 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.761732526 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_proxy_timeout.rsl0000664000175000017500000000022714243161125033576 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_PROXY_TIMEOUT GLOBUS_GRAM_PROTOCOL_ERROR_RSL_PROXY_TIMEOUT *) &(executable=/bin/sh) (proxy_timeout = /dev/null) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_project.rsl0000644000000000000000000000013014243161125032151 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.763732507 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_project.rsl0000664000175000017500000000013014243161125032306 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_PROJECT *) &(executable=/bin/sh) (project=bogus) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_queue.rsl0000644000000000000000000000013014243161125031627 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.764732498 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_queue.rsl0000664000175000017500000000012414243161125031767 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_QUEUE *) &(executable=/bin/sh) (queue=bogus) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_save_state.0000644000000000000000000000013014243161125032120 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.767732469 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_save_state.rsl0000664000175000017500000000013614243161125033004 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SAVE_STATE *) &(executable=/bin/sh) (save_state=bogus) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_scratch.rsl0000644000000000000000000000012714243161125032140 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 29 ctime=1653404022.76973245 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_scratch.rsl0000664000175000017500000000013314243161125032272 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_SCRATCH *) &(executable=/bin/sh) (scratch_dir=/etc) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_invalid_two_phase_c0000644000000000000000000000013014243161125032177 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.771732431 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_invalid_two_phase_commit.rsl0000664000175000017500000000022514243161125034206 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_TWO_PHASE_COMMIT GLOBUS_GRAM_PROTOCOL_ERROR_RSL_TWO_PHASE_COMMIT *) &(executable=/bin/sh) (two_phase = bogus) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_no_state_file.rsl0000644000000000000000000000013014243161125031610 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.774732402 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_no_state_file.rsl0000664000175000017500000000012514243161125031751 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_NO_STATE_FILE *) &(restart=https://localhost:2119/1/1) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_opening_stderr2.rsl0000644000000000000000000000013114243161125032102 xustar000000000000000030 mtime=1653400149.370969999 29 atime=1653400149.36997001 30 ctime=1653404022.776732383 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_opening_stderr2.rsl0000664000175000017500000000016614243161125032247 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDERR *) &(executable=/bin/sh) (stdout=/dev/null) (stderr=/etc/no/such/file) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_opening_stderr.rsl0000644000000000000000000000013014243161125032017 xustar000000000000000029 mtime=1653400149.36997001 29 atime=1653400149.36997001 30 ctime=1653404022.778732364 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_opening_stderr.rsl0000664000175000017500000000014214243161125032157 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDERR *) &(executable=/bin/sh) (stderr=/etc/no/such/file) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_opening_stdout2.rsl0000644000000000000000000000013214243161125032122 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.780732345 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_opening_stdout2.rsl0000664000175000017500000000016614243161125032266 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT *) &(executable=/bin/sh) (stdout=/etc/no/such/file) (stderr=/dev/null) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_opening_stdout3.rsl0000644000000000000000000000013214243161125032123 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.782732326 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_opening_stdout3.rsl0000664000175000017500000000020314243161125032257 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT *) &(two_phase=5) (executable=/etc/badness) (stdout=/etc/badness) (save_state=yes) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_opening_stdout.rsl0000644000000000000000000000013214243161125032040 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.784732307 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_opening_stdout.rsl0000664000175000017500000000014214243161125032176 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_OPENING_STDOUT *) &(executable=/bin/sh) (stdout=/etc/no/such/file) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_arguments.rsl0000644000000000000000000000013214243161125031664 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.787732278 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_arguments.rsl0000664000175000017500000000016314243161125032025 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_ARGUMENTS *) &(executable=/bin/sh)(arguments=(incorrect format (for arguments))) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_cache.rsl0000644000000000000000000000013214243161125030722 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.789732259 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_cache.rsl0000664000175000017500000000014014243161125031056 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_CACHE *) &(gass_cache=two directories) (executable=/bin/sh) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_directory.rsl0000644000000000000000000000013214243161125031663 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.792732231 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_directory.rsl0000664000175000017500000000014714243161125032026 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_DIRECTORY *) &(executable=/bin/sh) (directory=("can't parse this")) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_dryrun.rsl0000644000000000000000000000013214243161125031202 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.797732183 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_dryrun.rsl0000664000175000017500000000012414243161125031340 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_DRYRUN *) &(executable=/bin/sh) (dryrun=(bogus)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_environment1.rs0000644000000000000000000000013214243161125032130 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.801732145 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_environment1.rsl0000664000175000017500000000017514243161125032450 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_ENVIRONMENT *) &(executable=/bin/sh) (environment=(balanced pair) (unbalanced pair here)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_environment2.rs0000644000000000000000000000013214243161125032131 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.803732126 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_environment2.rsl0000664000175000017500000000014414243161125032445 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_ENVIRONMENT *) &(executable=/bin/sh) (environment=just_a_scalar) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_evaluation_fail0000644000000000000000000000013214243161125032222 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.806732097 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_evaluation_failed2.rsl0000664000175000017500000000017214243161125033555 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED *) & (rsl_substitution=(INVALID triple value)) (executable=/bin/sh) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_evaluation_fail0000644000000000000000000000013214243161125032222 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.808732078 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_evaluation_failed.rsl0000664000175000017500000000013514243161125033472 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EVALUATION_FAILED *) &(executable=$(INVALID_SUBSTITUTION)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_executable.rsl0000644000000000000000000000013214243161125032000 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.810732059 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_executable.rsl0000664000175000017500000000011014243161125032131 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_EXECUTABLE *) &(executable=(/bin/sh)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_in2.0000644000000000000000000000013214243161125032010 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.813732031 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_in2.rsl0000664000175000017500000000017214243161125032672 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN *) &(executable=/bin/sh) (file_stage_in = ftp://ftp.globus.org /tmp/ftp) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_in3.0000644000000000000000000000013214243161125032011 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.815732011 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_in3.rsl0000664000175000017500000000027714243161125032701 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN *) &(executable=/bin/sh) (file_stage_in = ( ftp://ftp.globus.org /tmp/ftp) (ftp://ftp.globus.org/no/destination/for/stage)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_in.r0000644000000000000000000000013214243161125032110 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.818731983 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_in.rsl0000664000175000017500000000017714243161125032615 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN *) &(executable=/bin/sh) (file_stage_in = ( ftp://ftp.globus.org (/tmp/ftp))) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_in_s0000644000000000000000000000013214243161125032172 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.820731964 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_in_shared2.rsl0000664000175000017500000000021014243161125034211 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN_SHARED *) &(executable=/bin/sh) (file_stage_in_shared = ftp://ftp.globus.org /tmp/ftp) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_in_s0000644000000000000000000000013214243161125032172 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.822731945 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_in_shared3.rsl0000664000175000017500000000031514243161125034220 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN_SHARED *) &(executable=/bin/sh) (file_stage_in_shared = ( ftp://ftp.globus.org /tmp/ftp) (ftp://ftp.globus.org/no/destination/for/stage)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_in_s0000644000000000000000000000013214243161125032172 xustar000000000000000030 mtime=1653400149.370969999 30 atime=1653400149.370969999 30 ctime=1653404022.824731926 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_in_shared.rsl0000664000175000017500000000021514243161125034134 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_IN_SHARED *) &(executable=/bin/sh) (file_stage_in_shared = ( ftp://ftp.globus.org (/tmp/ftp))) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_out20000644000000000000000000000013214243161125032133 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.826731907 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_out2.rsl0000664000175000017500000000017414243161125033075 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_OUT *) &(executable=/bin/sh) (file_stage_out = ftp://ftp.globus.org /tmp/ftp) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_out30000644000000000000000000000013214243161125032134 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.828731887 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_out3.rsl0000664000175000017500000000030114243161125033066 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_OUT *) &(executable=/bin/sh) (file_stage_out = ( ftp://ftp.globus.org /tmp/ftp) (ftp://ftp.globus.org/no/destination/for/stage)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_file_stage_out.0000644000000000000000000000013214243161125032127 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.830731868 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_file_stage_out.rsl0000664000175000017500000000020114243161125033002 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_FILE_STAGE_OUT *) &(executable=/bin/sh) (file_stage_out = ( ftp://ftp.globus.org (/tmp/ftp))) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_host_count.rsl0000644000000000000000000000013114243161125032043 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 29 ctime=1653404022.83373184 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_host_count.rsl0000664000175000017500000000014114243161125032201 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_HOST_COUNT *) &(executable=/bin/sh) (host_count=(host_count)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_jobtype.rsl0000644000000000000000000000013214243161125031333 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.835731821 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_jobtype.rsl0000664000175000017500000000013114243161125031467 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_JOBTYPE *) &(executable=/bin/sh) (jobtype = (a list)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_max_cpu_time.rs0000644000000000000000000000013214243161125032155 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.837731802 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_max_cpu_time.rsl0000664000175000017500000000013214243161125032466 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MAX_CPU_TIME *) &(executable=/bin/sh) (maxcputime=(1)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_max_memory.rsl0000644000000000000000000000013214243161125032034 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.840731773 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_max_memory.rsl0000664000175000017500000000013014243161125032167 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MAX_MEMORY *) &(executable=/bin/sh) (max_memory=(1)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_maxtime.rsl0000644000000000000000000000013214243161125031323 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.842731754 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_maxtime.rsl0000664000175000017500000000012214243161125031457 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MAXTIME *) &(executable=/bin/sh) (maxtime=(1)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_max_wall_time.r0000644000000000000000000000013214243161125032142 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.845731725 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_max_wall_time.rsl0000664000175000017500000000013614243161125032642 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MAX_WALL_TIME *) &(executable=/bin/sh) (max_wall_time=(1)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_min_memory.rsl0000644000000000000000000000013214243161125032032 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.848731697 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_min_memory.rsl0000664000175000017500000000013014243161125032165 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MIN_MEMORY *) &(executable=/bin/sh) (min_memory=(1)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_myjob.rsl0000644000000000000000000000013214243161125030777 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.850731678 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_myjob.rsl0000664000175000017500000000013714243161125031141 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_MYJOB *) &(executable=/bin/sh) (gram_my_job = (collective)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_project.rsl0000644000000000000000000000013214243161125031325 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.852731659 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_project.rsl0000664000175000017500000000012714243161125031466 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_PROJECT *) &(executable=/bin/sh) (project=(a list)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_proxy_timeout.r0000644000000000000000000000013114243161125032246 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 29 ctime=1653404022.85573163 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_proxy_timeout.rsl0000664000175000017500000000022114243161125032742 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_INVALID_PROXY_TIMEOUT GLOBUS_GRAM_PROTOCOL_ERROR_RSL_PROXY_TIMEOUT *) &(executable=/bin/sh) (proxy_timeout=1 2 3) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_queue.rsl0000644000000000000000000000013214243161125031003 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.857731611 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_queue.rsl0000664000175000017500000000012314243161125031140 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_QUEUE *) &(executable=/bin/sh) (queue=(a list)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_remote_io_url.r0000644000000000000000000000013214243161125032164 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.859731592 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_remote_io_url.rsl0000664000175000017500000000015114243161125032661 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_REMOTE_IO_URL *) &(executable=/bin/sh) (remote_io_url = (bad format)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_restart.rsl0000644000000000000000000000013214243161125031343 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.861731573 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_restart.rsl0000664000175000017500000000010714243161125031502 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_RESTART *) &(restart=(bogus format)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_save_state.rsl0000644000000000000000000000013214243161125032015 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.863731554 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_save_state.rsl0000664000175000017500000000014314243161125032154 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SAVE_STATE *) &(executable=/bin/sh) (save_state=(bogus syntax)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_scratch.rsl0000644000000000000000000000013214243161125031306 xustar000000000000000030 mtime=1653400149.371969989 30 atime=1653400149.371969989 30 ctime=1653404022.865731535 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_scratch.rsl0000664000175000017500000000014114243161125031443 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_SCRATCH *) &(executable=/bin/sh) (scratch_dir=(bogus format)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_stderr2.rsl0000644000000000000000000000013214243161125031244 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.867731516 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_stderr2.rsl0000664000175000017500000000014314243161125031403 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDERR *) &(executable=/bin/sh) (stderr=(bad (format string) )) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_stderr.rsl0000644000000000000000000000013214243161125031162 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.371969989 30 ctime=1653404022.870731487 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_stderr.rsl0000664000175000017500000000013614243161125031323 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDERR *) &(executable=/bin/sh) (stderr=bad format string) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_stdin.rsl0000644000000000000000000000013214243161125031000 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.872731468 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_stdin.rsl0000664000175000017500000000012714243161125031141 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDIN *) &(executable=/bin/sh) (stdin = a sequence) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_stdout2.rsl0000644000000000000000000000013214243161125031263 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.874731449 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_stdout2.rsl0000664000175000017500000000014314243161125031422 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT *) &(executable=/bin/sh) (stdout=(bad (format string) )) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_stdout.rsl0000644000000000000000000000013114243161125031200 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 29 ctime=1653404022.87673143 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_stdout.rsl0000664000175000017500000000014214243161125031337 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_STDOUT *) &(executable=/bin/sh) (stdout=a sequence (of words)) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_rsl_two_phase_commi0000644000000000000000000000013214243161125032235 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.878731411 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_rsl_two_phase_commit.rsl0000664000175000017500000000015514243161125033362 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_RSL_TWO_PHASE_COMMIT *) &(executable=/bin/sh) (twophase = (a bad (sequence))) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_staging_executable.0000644000000000000000000000013214243161125032113 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.880731392 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_staging_executable.rsl0000664000175000017500000000014514243161125032775 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_STAGING_EXECUTABLE *) &(executable=$(GLOBUSRUN_GASS_URL)/no/such/file) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_staging_stdin.rsl0000644000000000000000000000013214243161125031634 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.882731372 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_staging_stdin.rsl0000664000175000017500000000016114243161125031773 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_STAGING_STDIN *) &(executable=/bin/sh) (stdin=$(GLOBUSRUN_GASS_URL)/no/such/file) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_stdin_not_found.rsl0000644000000000000000000000013214243161125032173 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.884731353 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_stdin_not_found.rsl0000664000175000017500000000016214243161125032333 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_STDIN_NOT_FOUND LRM_SKIP:condor *) &(executable=/bin/sh) (stdin=/etc/no/such/file) globus_gram_job_manager-15.8/test/jobmanager/failure_test/PaxHeaders.31186/error_undefined_executabl0000644000000000000000000000013214243161125032175 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.887731325 globus_gram_job_manager-15.8/test/jobmanager/failure_test/error_undefined_executable.rsl0000664000175000017500000000012114243161125033274 0ustar00johndoejohndoe00000000000000(* GLOBUS_GRAM_PROTOCOL_ERROR_UNDEFINED_EXE *) &(arguments=hello)(stdout=output) globus_gram_job_manager-15.8/test/jobmanager/PaxHeaders.31186/rsl_size_test0000644000000000000000000000013214243170566025203 xustar000000000000000030 mtime=1653404022.995730295 30 atime=1653404023.060729675 30 ctime=1653404022.995730295 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/0000775000175000017500000000000014243170566025421 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453027321 xustar000000000000000030 mtime=1653400875.750635737 30 atime=1653401385.155595445 30 ctime=1653404022.927730943 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/Makefile.in0000664000175000017500000007073214243162453027473 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/jobmanager/rsl_size_test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/globus-gram-job-manager-rsl-size-test.pl.in \ $(top_srcdir)/build-aux/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = globus-gram-job-manager-rsl-size-test.pl CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ check_SCRIPTS = globus-gram-job-manager-rsl-size-test.pl check_DATA = \ tiny.err tiny.out tiny.rc tiny.rsl \ small.err small.out small.rc small.rsl \ medium.err medium.out medium.rc medium.rsl \ large.err large.out large.rc large.rsl \ huge.err huge.out huge.rc huge.rsl TESTS = $(check_SCRIPTS) @USE_CYGPATH_W_FALSE@X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" @USE_CYGPATH_W_TRUE@X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" @USE_CYGPATH_W_FALSE@X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" @USE_CYGPATH_W_TRUE@X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" @USE_CYGPATH_W_FALSE@X509_CERT_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" @USE_CYGPATH_W_FALSE@TEST_DATA_DIR = "$(abs_srcdir)" @USE_CYGPATH_W_TRUE@TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" @USE_CYGPATH_W_FALSE@TEST_HOME_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper EXTRA_DIST = $(check_DATA) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/jobmanager/rsl_size_test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/jobmanager/rsl_size_test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): globus-gram-job-manager-rsl-size-test.pl: $(top_builddir)/config.status $(srcdir)/globus-gram-job-manager-rsl-size-test.pl.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_SCRIPTS) $(check_DATA) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? globus-gram-job-manager-rsl-size-test.pl.log: globus-gram-job-manager-rsl-size-test.pl @p='globus-gram-job-manager-rsl-size-test.pl'; \ b='globus-gram-job-manager-rsl-size-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(check_DATA) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/Makefile.am0000644000000000000000000000013214243161125027303 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400875.713636103 30 ctime=1653404022.929730924 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/Makefile.am0000664000175000017500000000242414243161125027446 0ustar00johndoejohndoe00000000000000check_SCRIPTS = globus-gram-job-manager-rsl-size-test.pl check_DATA = \ tiny.err tiny.out tiny.rc tiny.rsl \ small.err small.out small.rc small.rsl \ medium.err medium.out medium.rc medium.rsl \ large.err large.out large.rc large.rsl \ huge.err huge.out huge.rc huge.rsl TESTS = $(check_SCRIPTS) if USE_CYGPATH_W X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" else X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" X509_CERT_DIR = "$(abs_top_builddir)/test" TEST_DATA_DIR = "$(abs_srcdir)" TEST_HOME_DIR = "$(abs_top_builddir)/test" endif TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper EXTRA_DIST = $(check_DATA) globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/globus-gram-job-manager-0000644000000000000000000000031114243161125031645 xustar0000000000000000112 path=globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl.in 30 mtime=1653400149.372969979 29 atime=1653401385.38459318 30 ctime=1653404022.930730915 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/globus-gram-job-manager-rsl-size-test.pl.0000664000175000017500000000406714243161125035154 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl use Globus::GRAM::Error; use Globus::Core::Paths; use IO::File; use Test::More; use File::Basename qw(dirname); use File::Compare; use File::Temp; $ENV{PATH} = "$ENV{PATH}:${Globus::Core::Paths::bindir}:${Globus::Core::Paths::sbindir}"; my (@tests, @todo) = (); my $contact = $ENV{CONTACT_STRING}; my $testtmp = File::Temp::tempdir(CLEANUP => 1); my $testdatadir = $ENV{TEST_DATA_DIR}; if (!$testdatadir) { $testdatadir = dirname($0); } my $verbose = 0; die if $contact eq ''; my @test_cases; my @todo_cases; if ($^O eq 'gnu') { # SO_RCVBUF/SO_SNDBUF not implemented on GNU/Hurd # http://savannah.gnu.org/task/?12729 @test_cases=qw(tiny small medium); @todo_cases=qw(large huge); } else { @test_cases=qw(tiny small medium large huge); @todo_cases=qw(); } sub test_rsl { my $testname = shift; my $testrsl = "$testdatadir/$testname.rsl"; my $testrc = "$testdatadir/$testname.rc"; my $testout = "$testtmp/$testname.out"; my $testerr = "$testtmp/$testname.err"; my $testrcfile = new IO::File("<$testrc"); my $expectedrc = <$testrcfile>; $testrcfile->close(); if($verbose) { print "# Submitting job $testdatadir/$testname.rsl\n"; } system("globusrun -s -r \"$contact\" -f \"$testdatadir/$testname.rsl\" >$testout 2>$testerr"); $rc = (($? >> 8) != $expectedrc) || File::Compare::compare("$testdatadir/$testname.out", $testout) || File::Compare::compare("$testdatadir/$testname.err", $testerr); ok($rc == 0, $testname); } foreach(@test_cases) { push(@tests, "test_rsl(\"$_\");"); } if(@ARGV) { my @doit; $verbose = 1; foreach(@ARGV) { if(/^(\d+)-(\d+)$/) { foreach($1 .. $2) { push(@doit, $_); } } elsif(/^(\d+)$/) { push(@doit, $1); } } plan tests => scalar(@doit); foreach (@doit) { eval "&$tests[$_-1]"; } } else { plan tests => scalar(@tests), todo => \@todo; foreach (@tests) { eval "&$_"; } } globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/tiny.err0000644000000000000000000000013214243161125026744 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.931730905 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/tiny.err0000664000175000017500000000000014243161125027073 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/tiny.out0000644000000000000000000000013114243161125026762 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 29 ctime=1653404022.94173081 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/tiny.out0000664000175000017500000000001014243161125027113 0ustar00johndoejohndoe00000000000000val0000 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/tiny.rc0000644000000000000000000000013214243161125026560 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.944730781 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/tiny.rc0000664000175000017500000000000214243161125026711 0ustar00johndoejohndoe000000000000000 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/tiny.rsl0000644000000000000000000000013214243161125026754 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.947730753 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/tiny.rsl0000664000175000017500000000013414243161125027113 0ustar00johndoejohndoe00000000000000& (rsl_substitution = (var0000 val0000) ) (executable=/bin/echo)(arguments=$(var0000)) globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/small.err0000644000000000000000000000013214243161125027071 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.949730734 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/small.err0000664000175000017500000000000014243161125027220 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/small.out0000644000000000000000000000013014243161125027106 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 28 ctime=1653404022.9637306 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/small.out0000664000175000017500000000001014243161125027240 0ustar00johndoejohndoe00000000000000val0099 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/small.rc0000644000000000000000000000013214243161125026705 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.967730562 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/small.rc0000664000175000017500000000000214243161125027036 0ustar00johndoejohndoe000000000000000 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/small.rsl0000644000000000000000000000013214243161125027101 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.374969959 30 ctime=1653404022.972730514 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/small.rsl0000664000175000017500000000433614243161125027250 0ustar00johndoejohndoe00000000000000& (rsl_substitution = (var0000 val0000) (var0001 val0001) (var0002 val0002) (var0003 val0003) (var0004 val0004) (var0005 val0005) (var0006 val0006) (var0007 val0007) (var0008 val0008) (var0009 val0009) (var0010 val0010) (var0011 val0011) (var0012 val0012) (var0013 val0013) (var0014 val0014) (var0015 val0015) (var0016 val0016) (var0017 val0017) (var0018 val0018) (var0019 val0019) (var0020 val0020) (var0021 val0021) (var0022 val0022) (var0023 val0023) (var0024 val0024) (var0025 val0025) (var0026 val0026) (var0027 val0027) (var0028 val0028) (var0029 val0029) (var0030 val0030) (var0031 val0031) (var0032 val0032) (var0033 val0033) (var0034 val0034) (var0035 val0035) (var0036 val0036) (var0037 val0037) (var0038 val0038) (var0039 val0039) (var0040 val0040) (var0041 val0041) (var0042 val0042) (var0043 val0043) (var0044 val0044) (var0045 val0045) (var0046 val0046) (var0047 val0047) (var0048 val0048) (var0049 val0049) (var0050 val0050) (var0051 val0051) (var0052 val0052) (var0053 val0053) (var0054 val0054) (var0055 val0055) (var0056 val0056) (var0057 val0057) (var0058 val0058) (var0059 val0059) (var0060 val0060) (var0061 val0061) (var0062 val0062) (var0063 val0063) (var0064 val0064) (var0065 val0065) (var0066 val0066) (var0067 val0067) (var0068 val0068) (var0069 val0069) (var0070 val0070) (var0071 val0071) (var0072 val0072) (var0073 val0073) (var0074 val0074) (var0075 val0075) (var0076 val0076) (var0077 val0077) (var0078 val0078) (var0079 val0079) (var0080 val0080) (var0081 val0081) (var0082 val0082) (var0083 val0083) (var0084 val0084) (var0085 val0085) (var0086 val0086) (var0087 val0087) (var0088 val0088) (var0089 val0089) (var0090 val0090) (var0091 val0091) (var0092 val0092) (var0093 val0093) (var0094 val0094) (var0095 val0095) (var0096 val0096) (var0097 val0097) (var0098 val0098) (var0099 val0099) ) (executable=/bin/echo)(arguments=$(var0099)) globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/medium.err0000644000000000000000000000013214243161125027241 xustar000000000000000030 mtime=1653400149.373969969 30 atime=1653400149.373969969 30 ctime=1653404022.974730495 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/medium.err0000664000175000017500000000000014243161125027370 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/medium.out0000644000000000000000000000013214243161125027260 xustar000000000000000030 mtime=1653400149.373969969 30 atime=1653400149.373969969 30 ctime=1653404022.976730476 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/medium.out0000664000175000017500000000001014243161125027410 0ustar00johndoejohndoe00000000000000val0999 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/medium.rc0000644000000000000000000000013214243161125027055 xustar000000000000000030 mtime=1653400149.373969969 30 atime=1653400149.373969969 30 ctime=1653404022.978730457 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/medium.rc0000664000175000017500000000000214243161125027206 0ustar00johndoejohndoe000000000000000 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/medium.rsl0000644000000000000000000000013214243161125027251 xustar000000000000000030 mtime=1653400149.374969959 30 atime=1653400149.373969969 30 ctime=1653404022.980730438 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/medium.rsl0000664000175000017500000005306614243161125027424 0ustar00johndoejohndoe00000000000000& (rsl_substitution = (var0000 val0000) (var0001 val0001) (var0002 val0002) (var0003 val0003) (var0004 val0004) (var0005 val0005) (var0006 val0006) (var0007 val0007) (var0008 val0008) (var0009 val0009) (var0010 val0010) (var0011 val0011) (var0012 val0012) (var0013 val0013) (var0014 val0014) (var0015 val0015) (var0016 val0016) (var0017 val0017) (var0018 val0018) (var0019 val0019) (var0020 val0020) (var0021 val0021) (var0022 val0022) (var0023 val0023) (var0024 val0024) (var0025 val0025) (var0026 val0026) (var0027 val0027) (var0028 val0028) (var0029 val0029) (var0030 val0030) (var0031 val0031) (var0032 val0032) (var0033 val0033) (var0034 val0034) (var0035 val0035) (var0036 val0036) (var0037 val0037) (var0038 val0038) (var0039 val0039) (var0040 val0040) (var0041 val0041) (var0042 val0042) (var0043 val0043) (var0044 val0044) (var0045 val0045) (var0046 val0046) (var0047 val0047) (var0048 val0048) (var0049 val0049) (var0050 val0050) (var0051 val0051) (var0052 val0052) (var0053 val0053) (var0054 val0054) (var0055 val0055) (var0056 val0056) (var0057 val0057) (var0058 val0058) (var0059 val0059) (var0060 val0060) (var0061 val0061) (var0062 val0062) (var0063 val0063) (var0064 val0064) (var0065 val0065) (var0066 val0066) (var0067 val0067) (var0068 val0068) (var0069 val0069) (var0070 val0070) (var0071 val0071) (var0072 val0072) (var0073 val0073) (var0074 val0074) (var0075 val0075) (var0076 val0076) (var0077 val0077) (var0078 val0078) (var0079 val0079) (var0080 val0080) (var0081 val0081) (var0082 val0082) (var0083 val0083) (var0084 val0084) (var0085 val0085) (var0086 val0086) (var0087 val0087) (var0088 val0088) (var0089 val0089) (var0090 val0090) (var0091 val0091) (var0092 val0092) (var0093 val0093) (var0094 val0094) (var0095 val0095) (var0096 val0096) (var0097 val0097) (var0098 val0098) (var0099 val0099) (var0100 val0100) (var0101 val0101) (var0102 val0102) (var0103 val0103) (var0104 val0104) (var0105 val0105) (var0106 val0106) (var0107 val0107) (var0108 val0108) (var0109 val0109) (var0110 val0110) (var0111 val0111) (var0112 val0112) (var0113 val0113) (var0114 val0114) (var0115 val0115) (var0116 val0116) (var0117 val0117) (var0118 val0118) (var0119 val0119) (var0120 val0120) (var0121 val0121) (var0122 val0122) (var0123 val0123) (var0124 val0124) (var0125 val0125) (var0126 val0126) (var0127 val0127) (var0128 val0128) (var0129 val0129) (var0130 val0130) (var0131 val0131) (var0132 val0132) (var0133 val0133) (var0134 val0134) (var0135 val0135) (var0136 val0136) (var0137 val0137) (var0138 val0138) (var0139 val0139) (var0140 val0140) (var0141 val0141) (var0142 val0142) (var0143 val0143) (var0144 val0144) (var0145 val0145) (var0146 val0146) (var0147 val0147) (var0148 val0148) (var0149 val0149) (var0150 val0150) (var0151 val0151) (var0152 val0152) (var0153 val0153) (var0154 val0154) (var0155 val0155) (var0156 val0156) (var0157 val0157) (var0158 val0158) (var0159 val0159) (var0160 val0160) (var0161 val0161) (var0162 val0162) (var0163 val0163) (var0164 val0164) (var0165 val0165) (var0166 val0166) (var0167 val0167) (var0168 val0168) (var0169 val0169) (var0170 val0170) (var0171 val0171) (var0172 val0172) (var0173 val0173) (var0174 val0174) (var0175 val0175) (var0176 val0176) (var0177 val0177) (var0178 val0178) (var0179 val0179) (var0180 val0180) (var0181 val0181) (var0182 val0182) (var0183 val0183) (var0184 val0184) (var0185 val0185) (var0186 val0186) (var0187 val0187) (var0188 val0188) (var0189 val0189) (var0190 val0190) (var0191 val0191) (var0192 val0192) (var0193 val0193) (var0194 val0194) (var0195 val0195) (var0196 val0196) (var0197 val0197) (var0198 val0198) (var0199 val0199) (var0200 val0200) (var0201 val0201) (var0202 val0202) (var0203 val0203) (var0204 val0204) (var0205 val0205) (var0206 val0206) (var0207 val0207) (var0208 val0208) (var0209 val0209) (var0210 val0210) (var0211 val0211) (var0212 val0212) (var0213 val0213) (var0214 val0214) (var0215 val0215) (var0216 val0216) (var0217 val0217) (var0218 val0218) (var0219 val0219) (var0220 val0220) (var0221 val0221) (var0222 val0222) (var0223 val0223) (var0224 val0224) (var0225 val0225) (var0226 val0226) (var0227 val0227) (var0228 val0228) (var0229 val0229) (var0230 val0230) (var0231 val0231) (var0232 val0232) (var0233 val0233) (var0234 val0234) (var0235 val0235) (var0236 val0236) (var0237 val0237) (var0238 val0238) (var0239 val0239) (var0240 val0240) (var0241 val0241) (var0242 val0242) (var0243 val0243) (var0244 val0244) (var0245 val0245) (var0246 val0246) (var0247 val0247) (var0248 val0248) (var0249 val0249) (var0250 val0250) (var0251 val0251) (var0252 val0252) (var0253 val0253) (var0254 val0254) (var0255 val0255) (var0256 val0256) (var0257 val0257) (var0258 val0258) (var0259 val0259) (var0260 val0260) (var0261 val0261) (var0262 val0262) (var0263 val0263) (var0264 val0264) (var0265 val0265) (var0266 val0266) (var0267 val0267) (var0268 val0268) (var0269 val0269) (var0270 val0270) (var0271 val0271) (var0272 val0272) (var0273 val0273) (var0274 val0274) (var0275 val0275) (var0276 val0276) (var0277 val0277) (var0278 val0278) (var0279 val0279) (var0280 val0280) (var0281 val0281) (var0282 val0282) (var0283 val0283) (var0284 val0284) (var0285 val0285) (var0286 val0286) (var0287 val0287) (var0288 val0288) (var0289 val0289) (var0290 val0290) (var0291 val0291) (var0292 val0292) (var0293 val0293) (var0294 val0294) (var0295 val0295) (var0296 val0296) (var0297 val0297) (var0298 val0298) (var0299 val0299) (var0300 val0300) (var0301 val0301) (var0302 val0302) (var0303 val0303) (var0304 val0304) (var0305 val0305) (var0306 val0306) (var0307 val0307) (var0308 val0308) (var0309 val0309) (var0310 val0310) (var0311 val0311) (var0312 val0312) (var0313 val0313) (var0314 val0314) (var0315 val0315) (var0316 val0316) (var0317 val0317) (var0318 val0318) (var0319 val0319) (var0320 val0320) (var0321 val0321) (var0322 val0322) (var0323 val0323) (var0324 val0324) (var0325 val0325) (var0326 val0326) (var0327 val0327) (var0328 val0328) (var0329 val0329) (var0330 val0330) (var0331 val0331) (var0332 val0332) (var0333 val0333) (var0334 val0334) (var0335 val0335) (var0336 val0336) (var0337 val0337) (var0338 val0338) (var0339 val0339) (var0340 val0340) (var0341 val0341) (var0342 val0342) (var0343 val0343) (var0344 val0344) (var0345 val0345) (var0346 val0346) (var0347 val0347) (var0348 val0348) (var0349 val0349) (var0350 val0350) (var0351 val0351) (var0352 val0352) (var0353 val0353) (var0354 val0354) (var0355 val0355) (var0356 val0356) (var0357 val0357) (var0358 val0358) (var0359 val0359) (var0360 val0360) (var0361 val0361) (var0362 val0362) (var0363 val0363) (var0364 val0364) (var0365 val0365) (var0366 val0366) (var0367 val0367) (var0368 val0368) (var0369 val0369) (var0370 val0370) (var0371 val0371) (var0372 val0372) (var0373 val0373) (var0374 val0374) (var0375 val0375) (var0376 val0376) (var0377 val0377) (var0378 val0378) (var0379 val0379) (var0380 val0380) (var0381 val0381) (var0382 val0382) (var0383 val0383) (var0384 val0384) (var0385 val0385) (var0386 val0386) (var0387 val0387) (var0388 val0388) (var0389 val0389) (var0390 val0390) (var0391 val0391) (var0392 val0392) (var0393 val0393) (var0394 val0394) (var0395 val0395) (var0396 val0396) (var0397 val0397) (var0398 val0398) (var0399 val0399) (var0400 val0400) (var0401 val0401) (var0402 val0402) (var0403 val0403) (var0404 val0404) (var0405 val0405) (var0406 val0406) (var0407 val0407) (var0408 val0408) (var0409 val0409) (var0410 val0410) (var0411 val0411) (var0412 val0412) (var0413 val0413) (var0414 val0414) (var0415 val0415) (var0416 val0416) (var0417 val0417) (var0418 val0418) (var0419 val0419) (var0420 val0420) (var0421 val0421) (var0422 val0422) (var0423 val0423) (var0424 val0424) (var0425 val0425) (var0426 val0426) (var0427 val0427) (var0428 val0428) (var0429 val0429) (var0430 val0430) (var0431 val0431) (var0432 val0432) (var0433 val0433) (var0434 val0434) (var0435 val0435) (var0436 val0436) (var0437 val0437) (var0438 val0438) (var0439 val0439) (var0440 val0440) (var0441 val0441) (var0442 val0442) (var0443 val0443) (var0444 val0444) (var0445 val0445) (var0446 val0446) (var0447 val0447) (var0448 val0448) (var0449 val0449) (var0450 val0450) (var0451 val0451) (var0452 val0452) (var0453 val0453) (var0454 val0454) (var0455 val0455) (var0456 val0456) (var0457 val0457) (var0458 val0458) (var0459 val0459) (var0460 val0460) (var0461 val0461) (var0462 val0462) (var0463 val0463) (var0464 val0464) (var0465 val0465) (var0466 val0466) (var0467 val0467) (var0468 val0468) (var0469 val0469) (var0470 val0470) (var0471 val0471) (var0472 val0472) (var0473 val0473) (var0474 val0474) (var0475 val0475) (var0476 val0476) (var0477 val0477) (var0478 val0478) (var0479 val0479) (var0480 val0480) (var0481 val0481) (var0482 val0482) (var0483 val0483) (var0484 val0484) (var0485 val0485) (var0486 val0486) (var0487 val0487) (var0488 val0488) (var0489 val0489) (var0490 val0490) (var0491 val0491) (var0492 val0492) (var0493 val0493) (var0494 val0494) (var0495 val0495) (var0496 val0496) (var0497 val0497) (var0498 val0498) (var0499 val0499) (var0500 val0500) (var0501 val0501) (var0502 val0502) (var0503 val0503) (var0504 val0504) (var0505 val0505) (var0506 val0506) (var0507 val0507) (var0508 val0508) (var0509 val0509) (var0510 val0510) (var0511 val0511) (var0512 val0512) (var0513 val0513) (var0514 val0514) (var0515 val0515) (var0516 val0516) (var0517 val0517) (var0518 val0518) (var0519 val0519) (var0520 val0520) (var0521 val0521) (var0522 val0522) (var0523 val0523) (var0524 val0524) (var0525 val0525) (var0526 val0526) (var0527 val0527) (var0528 val0528) (var0529 val0529) (var0530 val0530) (var0531 val0531) (var0532 val0532) (var0533 val0533) (var0534 val0534) (var0535 val0535) (var0536 val0536) (var0537 val0537) (var0538 val0538) (var0539 val0539) (var0540 val0540) (var0541 val0541) (var0542 val0542) (var0543 val0543) (var0544 val0544) (var0545 val0545) (var0546 val0546) (var0547 val0547) (var0548 val0548) (var0549 val0549) (var0550 val0550) (var0551 val0551) (var0552 val0552) (var0553 val0553) (var0554 val0554) (var0555 val0555) (var0556 val0556) (var0557 val0557) (var0558 val0558) (var0559 val0559) (var0560 val0560) (var0561 val0561) (var0562 val0562) (var0563 val0563) (var0564 val0564) (var0565 val0565) (var0566 val0566) (var0567 val0567) (var0568 val0568) (var0569 val0569) (var0570 val0570) (var0571 val0571) (var0572 val0572) (var0573 val0573) (var0574 val0574) (var0575 val0575) (var0576 val0576) (var0577 val0577) (var0578 val0578) (var0579 val0579) (var0580 val0580) (var0581 val0581) (var0582 val0582) (var0583 val0583) (var0584 val0584) (var0585 val0585) (var0586 val0586) (var0587 val0587) (var0588 val0588) (var0589 val0589) (var0590 val0590) (var0591 val0591) (var0592 val0592) (var0593 val0593) (var0594 val0594) (var0595 val0595) (var0596 val0596) (var0597 val0597) (var0598 val0598) (var0599 val0599) (var0600 val0600) (var0601 val0601) (var0602 val0602) (var0603 val0603) (var0604 val0604) (var0605 val0605) (var0606 val0606) (var0607 val0607) (var0608 val0608) (var0609 val0609) (var0610 val0610) (var0611 val0611) (var0612 val0612) (var0613 val0613) (var0614 val0614) (var0615 val0615) (var0616 val0616) (var0617 val0617) (var0618 val0618) (var0619 val0619) (var0620 val0620) (var0621 val0621) (var0622 val0622) (var0623 val0623) (var0624 val0624) (var0625 val0625) (var0626 val0626) (var0627 val0627) (var0628 val0628) (var0629 val0629) (var0630 val0630) (var0631 val0631) (var0632 val0632) (var0633 val0633) (var0634 val0634) (var0635 val0635) (var0636 val0636) (var0637 val0637) (var0638 val0638) (var0639 val0639) (var0640 val0640) (var0641 val0641) (var0642 val0642) (var0643 val0643) (var0644 val0644) (var0645 val0645) (var0646 val0646) (var0647 val0647) (var0648 val0648) (var0649 val0649) (var0650 val0650) (var0651 val0651) (var0652 val0652) (var0653 val0653) (var0654 val0654) (var0655 val0655) (var0656 val0656) (var0657 val0657) (var0658 val0658) (var0659 val0659) (var0660 val0660) (var0661 val0661) (var0662 val0662) (var0663 val0663) (var0664 val0664) (var0665 val0665) (var0666 val0666) (var0667 val0667) (var0668 val0668) (var0669 val0669) (var0670 val0670) (var0671 val0671) (var0672 val0672) (var0673 val0673) (var0674 val0674) (var0675 val0675) (var0676 val0676) (var0677 val0677) (var0678 val0678) (var0679 val0679) (var0680 val0680) (var0681 val0681) (var0682 val0682) (var0683 val0683) (var0684 val0684) (var0685 val0685) (var0686 val0686) (var0687 val0687) (var0688 val0688) (var0689 val0689) (var0690 val0690) (var0691 val0691) (var0692 val0692) (var0693 val0693) (var0694 val0694) (var0695 val0695) (var0696 val0696) (var0697 val0697) (var0698 val0698) (var0699 val0699) (var0700 val0700) (var0701 val0701) (var0702 val0702) (var0703 val0703) (var0704 val0704) (var0705 val0705) (var0706 val0706) (var0707 val0707) (var0708 val0708) (var0709 val0709) (var0710 val0710) (var0711 val0711) (var0712 val0712) (var0713 val0713) (var0714 val0714) (var0715 val0715) (var0716 val0716) (var0717 val0717) (var0718 val0718) (var0719 val0719) (var0720 val0720) (var0721 val0721) (var0722 val0722) (var0723 val0723) (var0724 val0724) (var0725 val0725) (var0726 val0726) (var0727 val0727) (var0728 val0728) (var0729 val0729) (var0730 val0730) (var0731 val0731) (var0732 val0732) (var0733 val0733) (var0734 val0734) (var0735 val0735) (var0736 val0736) (var0737 val0737) (var0738 val0738) (var0739 val0739) (var0740 val0740) (var0741 val0741) (var0742 val0742) (var0743 val0743) (var0744 val0744) (var0745 val0745) (var0746 val0746) (var0747 val0747) (var0748 val0748) (var0749 val0749) (var0750 val0750) (var0751 val0751) (var0752 val0752) (var0753 val0753) (var0754 val0754) (var0755 val0755) (var0756 val0756) (var0757 val0757) (var0758 val0758) (var0759 val0759) (var0760 val0760) (var0761 val0761) (var0762 val0762) (var0763 val0763) (var0764 val0764) (var0765 val0765) (var0766 val0766) (var0767 val0767) (var0768 val0768) (var0769 val0769) (var0770 val0770) (var0771 val0771) (var0772 val0772) (var0773 val0773) (var0774 val0774) (var0775 val0775) (var0776 val0776) (var0777 val0777) (var0778 val0778) (var0779 val0779) (var0780 val0780) (var0781 val0781) (var0782 val0782) (var0783 val0783) (var0784 val0784) (var0785 val0785) (var0786 val0786) (var0787 val0787) (var0788 val0788) (var0789 val0789) (var0790 val0790) (var0791 val0791) (var0792 val0792) (var0793 val0793) (var0794 val0794) (var0795 val0795) (var0796 val0796) (var0797 val0797) (var0798 val0798) (var0799 val0799) (var0800 val0800) (var0801 val0801) (var0802 val0802) (var0803 val0803) (var0804 val0804) (var0805 val0805) (var0806 val0806) (var0807 val0807) (var0808 val0808) (var0809 val0809) (var0810 val0810) (var0811 val0811) (var0812 val0812) (var0813 val0813) (var0814 val0814) (var0815 val0815) (var0816 val0816) (var0817 val0817) (var0818 val0818) (var0819 val0819) (var0820 val0820) (var0821 val0821) (var0822 val0822) (var0823 val0823) (var0824 val0824) (var0825 val0825) (var0826 val0826) (var0827 val0827) (var0828 val0828) (var0829 val0829) (var0830 val0830) (var0831 val0831) (var0832 val0832) (var0833 val0833) (var0834 val0834) (var0835 val0835) (var0836 val0836) (var0837 val0837) (var0838 val0838) (var0839 val0839) (var0840 val0840) (var0841 val0841) (var0842 val0842) (var0843 val0843) (var0844 val0844) (var0845 val0845) (var0846 val0846) (var0847 val0847) (var0848 val0848) (var0849 val0849) (var0850 val0850) (var0851 val0851) (var0852 val0852) (var0853 val0853) (var0854 val0854) (var0855 val0855) (var0856 val0856) (var0857 val0857) (var0858 val0858) (var0859 val0859) (var0860 val0860) (var0861 val0861) (var0862 val0862) (var0863 val0863) (var0864 val0864) (var0865 val0865) (var0866 val0866) (var0867 val0867) (var0868 val0868) (var0869 val0869) (var0870 val0870) (var0871 val0871) (var0872 val0872) (var0873 val0873) (var0874 val0874) (var0875 val0875) (var0876 val0876) (var0877 val0877) (var0878 val0878) (var0879 val0879) (var0880 val0880) (var0881 val0881) (var0882 val0882) (var0883 val0883) (var0884 val0884) (var0885 val0885) (var0886 val0886) (var0887 val0887) (var0888 val0888) (var0889 val0889) (var0890 val0890) (var0891 val0891) (var0892 val0892) (var0893 val0893) (var0894 val0894) (var0895 val0895) (var0896 val0896) (var0897 val0897) (var0898 val0898) (var0899 val0899) (var0900 val0900) (var0901 val0901) (var0902 val0902) (var0903 val0903) (var0904 val0904) (var0905 val0905) (var0906 val0906) (var0907 val0907) (var0908 val0908) (var0909 val0909) (var0910 val0910) (var0911 val0911) (var0912 val0912) (var0913 val0913) (var0914 val0914) (var0915 val0915) (var0916 val0916) (var0917 val0917) (var0918 val0918) (var0919 val0919) (var0920 val0920) (var0921 val0921) (var0922 val0922) (var0923 val0923) (var0924 val0924) (var0925 val0925) (var0926 val0926) (var0927 val0927) (var0928 val0928) (var0929 val0929) (var0930 val0930) (var0931 val0931) (var0932 val0932) (var0933 val0933) (var0934 val0934) (var0935 val0935) (var0936 val0936) (var0937 val0937) (var0938 val0938) (var0939 val0939) (var0940 val0940) (var0941 val0941) (var0942 val0942) (var0943 val0943) (var0944 val0944) (var0945 val0945) (var0946 val0946) (var0947 val0947) (var0948 val0948) (var0949 val0949) (var0950 val0950) (var0951 val0951) (var0952 val0952) (var0953 val0953) (var0954 val0954) (var0955 val0955) (var0956 val0956) (var0957 val0957) (var0958 val0958) (var0959 val0959) (var0960 val0960) (var0961 val0961) (var0962 val0962) (var0963 val0963) (var0964 val0964) (var0965 val0965) (var0966 val0966) (var0967 val0967) (var0968 val0968) (var0969 val0969) (var0970 val0970) (var0971 val0971) (var0972 val0972) (var0973 val0973) (var0974 val0974) (var0975 val0975) (var0976 val0976) (var0977 val0977) (var0978 val0978) (var0979 val0979) (var0980 val0980) (var0981 val0981) (var0982 val0982) (var0983 val0983) (var0984 val0984) (var0985 val0985) (var0986 val0986) (var0987 val0987) (var0988 val0988) (var0989 val0989) (var0990 val0990) (var0991 val0991) (var0992 val0992) (var0993 val0993) (var0994 val0994) (var0995 val0995) (var0996 val0996) (var0997 val0997) (var0998 val0998) (var0999 val0999) ) (executable=/bin/echo)(arguments=$(var0999)) globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/large.err0000644000000000000000000000013214243161125027053 xustar000000000000000030 mtime=1653400149.373969969 30 atime=1653400149.373969969 30 ctime=1653404022.982730419 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/large.err0000664000175000017500000000012614243161125027213 0ustar00johndoejohndoe00000000000000GRAM Job submission failed because data transfer to the server failed (error code 10) globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/large.out0000644000000000000000000000013014243161125027070 xustar000000000000000030 mtime=1653400149.373969969 30 atime=1653400149.373969969 28 ctime=1653404022.9847304 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/large.out0000664000175000017500000000000014243161125027221 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/large.rc0000644000000000000000000000013214243161125026667 xustar000000000000000030 mtime=1653400149.373969969 30 atime=1653400149.373969969 30 ctime=1653404022.986730381 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/large.rc0000664000175000017500000000000314243161125027021 0ustar00johndoejohndoe0000000000000010 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/large.rsl0000644000000000000000000000013214243161125027063 xustar000000000000000030 mtime=1653400149.373969969 30 atime=1653400149.373969969 30 ctime=1653404022.988730362 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/large.rsl0000664000175000017500000015346414243161125027241 0ustar00johndoejohndoe00000000000000& (rsl_substitution = (var0000 val0000) (var0001 val0001) (var0002 val0002) (var0003 val0003) (var0004 val0004) (var0005 val0005) (var0006 val0006) (var0007 val0007) (var0008 val0008) (var0009 val0009) (var0010 val0010) (var0011 val0011) (var0012 val0012) (var0013 val0013) (var0014 val0014) (var0015 val0015) (var0016 val0016) (var0017 val0017) (var0018 val0018) (var0019 val0019) (var0020 val0020) (var0021 val0021) (var0022 val0022) (var0023 val0023) (var0024 val0024) (var0025 val0025) (var0026 val0026) (var0027 val0027) (var0028 val0028) (var0029 val0029) (var0030 val0030) (var0031 val0031) (var0032 val0032) (var0033 val0033) (var0034 val0034) (var0035 val0035) (var0036 val0036) (var0037 val0037) (var0038 val0038) (var0039 val0039) (var0040 val0040) (var0041 val0041) (var0042 val0042) (var0043 val0043) (var0044 val0044) (var0045 val0045) (var0046 val0046) (var0047 val0047) (var0048 val0048) (var0049 val0049) (var0050 val0050) (var0051 val0051) (var0052 val0052) (var0053 val0053) (var0054 val0054) (var0055 val0055) (var0056 val0056) (var0057 val0057) (var0058 val0058) (var0059 val0059) (var0060 val0060) (var0061 val0061) (var0062 val0062) (var0063 val0063) (var0064 val0064) (var0065 val0065) (var0066 val0066) (var0067 val0067) (var0068 val0068) (var0069 val0069) (var0070 val0070) (var0071 val0071) (var0072 val0072) (var0073 val0073) (var0074 val0074) (var0075 val0075) (var0076 val0076) (var0077 val0077) (var0078 val0078) (var0079 val0079) (var0080 val0080) (var0081 val0081) (var0082 val0082) (var0083 val0083) (var0084 val0084) (var0085 val0085) (var0086 val0086) (var0087 val0087) (var0088 val0088) (var0089 val0089) (var0090 val0090) (var0091 val0091) (var0092 val0092) (var0093 val0093) (var0094 val0094) (var0095 val0095) (var0096 val0096) (var0097 val0097) (var0098 val0098) (var0099 val0099) (var0100 val0100) (var0101 val0101) (var0102 val0102) (var0103 val0103) (var0104 val0104) (var0105 val0105) (var0106 val0106) (var0107 val0107) (var0108 val0108) (var0109 val0109) (var0110 val0110) (var0111 val0111) (var0112 val0112) (var0113 val0113) (var0114 val0114) (var0115 val0115) (var0116 val0116) (var0117 val0117) (var0118 val0118) (var0119 val0119) (var0120 val0120) (var0121 val0121) (var0122 val0122) (var0123 val0123) (var0124 val0124) (var0125 val0125) (var0126 val0126) (var0127 val0127) (var0128 val0128) (var0129 val0129) (var0130 val0130) (var0131 val0131) (var0132 val0132) (var0133 val0133) (var0134 val0134) (var0135 val0135) (var0136 val0136) (var0137 val0137) (var0138 val0138) (var0139 val0139) (var0140 val0140) (var0141 val0141) (var0142 val0142) (var0143 val0143) (var0144 val0144) (var0145 val0145) (var0146 val0146) (var0147 val0147) (var0148 val0148) (var0149 val0149) (var0150 val0150) (var0151 val0151) (var0152 val0152) (var0153 val0153) (var0154 val0154) (var0155 val0155) (var0156 val0156) (var0157 val0157) (var0158 val0158) (var0159 val0159) (var0160 val0160) (var0161 val0161) (var0162 val0162) (var0163 val0163) (var0164 val0164) (var0165 val0165) (var0166 val0166) (var0167 val0167) (var0168 val0168) (var0169 val0169) (var0170 val0170) (var0171 val0171) (var0172 val0172) (var0173 val0173) (var0174 val0174) (var0175 val0175) (var0176 val0176) (var0177 val0177) (var0178 val0178) (var0179 val0179) (var0180 val0180) (var0181 val0181) (var0182 val0182) (var0183 val0183) (var0184 val0184) (var0185 val0185) (var0186 val0186) (var0187 val0187) (var0188 val0188) (var0189 val0189) (var0190 val0190) (var0191 val0191) (var0192 val0192) (var0193 val0193) (var0194 val0194) (var0195 val0195) (var0196 val0196) (var0197 val0197) (var0198 val0198) (var0199 val0199) (var0200 val0200) (var0201 val0201) (var0202 val0202) (var0203 val0203) (var0204 val0204) (var0205 val0205) (var0206 val0206) (var0207 val0207) (var0208 val0208) (var0209 val0209) (var0210 val0210) (var0211 val0211) (var0212 val0212) (var0213 val0213) (var0214 val0214) (var0215 val0215) (var0216 val0216) (var0217 val0217) (var0218 val0218) (var0219 val0219) (var0220 val0220) (var0221 val0221) (var0222 val0222) (var0223 val0223) (var0224 val0224) (var0225 val0225) (var0226 val0226) (var0227 val0227) (var0228 val0228) (var0229 val0229) (var0230 val0230) (var0231 val0231) (var0232 val0232) (var0233 val0233) (var0234 val0234) (var0235 val0235) (var0236 val0236) (var0237 val0237) (var0238 val0238) (var0239 val0239) (var0240 val0240) (var0241 val0241) (var0242 val0242) (var0243 val0243) (var0244 val0244) (var0245 val0245) (var0246 val0246) (var0247 val0247) (var0248 val0248) (var0249 val0249) (var0250 val0250) (var0251 val0251) (var0252 val0252) (var0253 val0253) (var0254 val0254) (var0255 val0255) (var0256 val0256) (var0257 val0257) (var0258 val0258) (var0259 val0259) (var0260 val0260) (var0261 val0261) (var0262 val0262) (var0263 val0263) (var0264 val0264) (var0265 val0265) (var0266 val0266) (var0267 val0267) (var0268 val0268) (var0269 val0269) (var0270 val0270) (var0271 val0271) (var0272 val0272) (var0273 val0273) (var0274 val0274) (var0275 val0275) (var0276 val0276) (var0277 val0277) (var0278 val0278) (var0279 val0279) (var0280 val0280) (var0281 val0281) (var0282 val0282) (var0283 val0283) (var0284 val0284) (var0285 val0285) (var0286 val0286) (var0287 val0287) (var0288 val0288) (var0289 val0289) (var0290 val0290) (var0291 val0291) (var0292 val0292) (var0293 val0293) (var0294 val0294) (var0295 val0295) (var0296 val0296) (var0297 val0297) (var0298 val0298) (var0299 val0299) (var0300 val0300) (var0301 val0301) (var0302 val0302) (var0303 val0303) (var0304 val0304) (var0305 val0305) (var0306 val0306) (var0307 val0307) (var0308 val0308) (var0309 val0309) (var0310 val0310) (var0311 val0311) (var0312 val0312) (var0313 val0313) (var0314 val0314) (var0315 val0315) (var0316 val0316) (var0317 val0317) (var0318 val0318) (var0319 val0319) (var0320 val0320) (var0321 val0321) (var0322 val0322) (var0323 val0323) (var0324 val0324) (var0325 val0325) (var0326 val0326) (var0327 val0327) (var0328 val0328) (var0329 val0329) (var0330 val0330) (var0331 val0331) (var0332 val0332) (var0333 val0333) (var0334 val0334) (var0335 val0335) (var0336 val0336) (var0337 val0337) (var0338 val0338) (var0339 val0339) (var0340 val0340) (var0341 val0341) (var0342 val0342) (var0343 val0343) (var0344 val0344) (var0345 val0345) (var0346 val0346) (var0347 val0347) (var0348 val0348) (var0349 val0349) (var0350 val0350) (var0351 val0351) (var0352 val0352) (var0353 val0353) (var0354 val0354) (var0355 val0355) (var0356 val0356) (var0357 val0357) (var0358 val0358) (var0359 val0359) (var0360 val0360) (var0361 val0361) (var0362 val0362) (var0363 val0363) (var0364 val0364) (var0365 val0365) (var0366 val0366) (var0367 val0367) (var0368 val0368) (var0369 val0369) (var0370 val0370) (var0371 val0371) (var0372 val0372) (var0373 val0373) (var0374 val0374) (var0375 val0375) (var0376 val0376) (var0377 val0377) (var0378 val0378) (var0379 val0379) (var0380 val0380) (var0381 val0381) (var0382 val0382) (var0383 val0383) (var0384 val0384) (var0385 val0385) (var0386 val0386) (var0387 val0387) (var0388 val0388) (var0389 val0389) (var0390 val0390) (var0391 val0391) (var0392 val0392) (var0393 val0393) (var0394 val0394) (var0395 val0395) (var0396 val0396) (var0397 val0397) (var0398 val0398) (var0399 val0399) (var0400 val0400) (var0401 val0401) (var0402 val0402) (var0403 val0403) (var0404 val0404) (var0405 val0405) (var0406 val0406) (var0407 val0407) (var0408 val0408) (var0409 val0409) (var0410 val0410) (var0411 val0411) (var0412 val0412) (var0413 val0413) (var0414 val0414) (var0415 val0415) (var0416 val0416) (var0417 val0417) (var0418 val0418) (var0419 val0419) (var0420 val0420) (var0421 val0421) (var0422 val0422) (var0423 val0423) (var0424 val0424) (var0425 val0425) (var0426 val0426) (var0427 val0427) (var0428 val0428) (var0429 val0429) (var0430 val0430) (var0431 val0431) (var0432 val0432) (var0433 val0433) (var0434 val0434) (var0435 val0435) (var0436 val0436) (var0437 val0437) (var0438 val0438) (var0439 val0439) (var0440 val0440) (var0441 val0441) (var0442 val0442) (var0443 val0443) (var0444 val0444) (var0445 val0445) (var0446 val0446) (var0447 val0447) (var0448 val0448) (var0449 val0449) (var0450 val0450) (var0451 val0451) (var0452 val0452) (var0453 val0453) (var0454 val0454) (var0455 val0455) (var0456 val0456) (var0457 val0457) (var0458 val0458) (var0459 val0459) (var0460 val0460) (var0461 val0461) (var0462 val0462) (var0463 val0463) (var0464 val0464) (var0465 val0465) (var0466 val0466) (var0467 val0467) (var0468 val0468) (var0469 val0469) (var0470 val0470) (var0471 val0471) (var0472 val0472) (var0473 val0473) (var0474 val0474) (var0475 val0475) (var0476 val0476) (var0477 val0477) (var0478 val0478) (var0479 val0479) (var0480 val0480) (var0481 val0481) (var0482 val0482) (var0483 val0483) (var0484 val0484) (var0485 val0485) (var0486 val0486) (var0487 val0487) (var0488 val0488) (var0489 val0489) (var0490 val0490) (var0491 val0491) (var0492 val0492) (var0493 val0493) (var0494 val0494) (var0495 val0495) (var0496 val0496) (var0497 val0497) (var0498 val0498) (var0499 val0499) (var0500 val0500) (var0501 val0501) (var0502 val0502) (var0503 val0503) (var0504 val0504) (var0505 val0505) (var0506 val0506) (var0507 val0507) (var0508 val0508) (var0509 val0509) (var0510 val0510) (var0511 val0511) (var0512 val0512) (var0513 val0513) (var0514 val0514) (var0515 val0515) (var0516 val0516) (var0517 val0517) (var0518 val0518) (var0519 val0519) (var0520 val0520) (var0521 val0521) (var0522 val0522) (var0523 val0523) (var0524 val0524) (var0525 val0525) (var0526 val0526) (var0527 val0527) (var0528 val0528) (var0529 val0529) (var0530 val0530) (var0531 val0531) (var0532 val0532) (var0533 val0533) (var0534 val0534) (var0535 val0535) (var0536 val0536) (var0537 val0537) (var0538 val0538) (var0539 val0539) (var0540 val0540) (var0541 val0541) (var0542 val0542) (var0543 val0543) (var0544 val0544) (var0545 val0545) (var0546 val0546) (var0547 val0547) (var0548 val0548) (var0549 val0549) (var0550 val0550) (var0551 val0551) (var0552 val0552) (var0553 val0553) (var0554 val0554) (var0555 val0555) (var0556 val0556) (var0557 val0557) (var0558 val0558) (var0559 val0559) (var0560 val0560) (var0561 val0561) (var0562 val0562) (var0563 val0563) (var0564 val0564) (var0565 val0565) (var0566 val0566) (var0567 val0567) (var0568 val0568) (var0569 val0569) (var0570 val0570) (var0571 val0571) (var0572 val0572) (var0573 val0573) (var0574 val0574) (var0575 val0575) (var0576 val0576) (var0577 val0577) (var0578 val0578) (var0579 val0579) (var0580 val0580) (var0581 val0581) (var0582 val0582) (var0583 val0583) (var0584 val0584) (var0585 val0585) (var0586 val0586) (var0587 val0587) (var0588 val0588) (var0589 val0589) (var0590 val0590) (var0591 val0591) (var0592 val0592) (var0593 val0593) (var0594 val0594) (var0595 val0595) (var0596 val0596) (var0597 val0597) (var0598 val0598) (var0599 val0599) (var0600 val0600) (var0601 val0601) (var0602 val0602) (var0603 val0603) (var0604 val0604) (var0605 val0605) (var0606 val0606) (var0607 val0607) (var0608 val0608) (var0609 val0609) (var0610 val0610) (var0611 val0611) (var0612 val0612) (var0613 val0613) (var0614 val0614) (var0615 val0615) (var0616 val0616) (var0617 val0617) (var0618 val0618) (var0619 val0619) (var0620 val0620) (var0621 val0621) (var0622 val0622) (var0623 val0623) (var0624 val0624) (var0625 val0625) (var0626 val0626) (var0627 val0627) (var0628 val0628) (var0629 val0629) (var0630 val0630) (var0631 val0631) (var0632 val0632) (var0633 val0633) (var0634 val0634) (var0635 val0635) (var0636 val0636) (var0637 val0637) (var0638 val0638) (var0639 val0639) (var0640 val0640) (var0641 val0641) (var0642 val0642) (var0643 val0643) (var0644 val0644) (var0645 val0645) (var0646 val0646) (var0647 val0647) (var0648 val0648) (var0649 val0649) (var0650 val0650) (var0651 val0651) (var0652 val0652) (var0653 val0653) (var0654 val0654) (var0655 val0655) (var0656 val0656) (var0657 val0657) (var0658 val0658) (var0659 val0659) (var0660 val0660) (var0661 val0661) (var0662 val0662) (var0663 val0663) (var0664 val0664) (var0665 val0665) (var0666 val0666) (var0667 val0667) (var0668 val0668) (var0669 val0669) (var0670 val0670) (var0671 val0671) (var0672 val0672) (var0673 val0673) (var0674 val0674) (var0675 val0675) (var0676 val0676) (var0677 val0677) (var0678 val0678) (var0679 val0679) (var0680 val0680) (var0681 val0681) (var0682 val0682) (var0683 val0683) (var0684 val0684) (var0685 val0685) (var0686 val0686) (var0687 val0687) (var0688 val0688) (var0689 val0689) (var0690 val0690) (var0691 val0691) (var0692 val0692) (var0693 val0693) (var0694 val0694) (var0695 val0695) (var0696 val0696) (var0697 val0697) (var0698 val0698) (var0699 val0699) (var0700 val0700) (var0701 val0701) (var0702 val0702) (var0703 val0703) (var0704 val0704) (var0705 val0705) (var0706 val0706) (var0707 val0707) (var0708 val0708) (var0709 val0709) (var0710 val0710) (var0711 val0711) (var0712 val0712) (var0713 val0713) (var0714 val0714) (var0715 val0715) (var0716 val0716) (var0717 val0717) (var0718 val0718) (var0719 val0719) (var0720 val0720) (var0721 val0721) (var0722 val0722) (var0723 val0723) (var0724 val0724) (var0725 val0725) (var0726 val0726) (var0727 val0727) (var0728 val0728) (var0729 val0729) (var0730 val0730) (var0731 val0731) (var0732 val0732) (var0733 val0733) (var0734 val0734) (var0735 val0735) (var0736 val0736) (var0737 val0737) (var0738 val0738) (var0739 val0739) (var0740 val0740) (var0741 val0741) (var0742 val0742) (var0743 val0743) (var0744 val0744) (var0745 val0745) (var0746 val0746) (var0747 val0747) (var0748 val0748) (var0749 val0749) (var0750 val0750) (var0751 val0751) (var0752 val0752) (var0753 val0753) (var0754 val0754) (var0755 val0755) (var0756 val0756) (var0757 val0757) (var0758 val0758) (var0759 val0759) (var0760 val0760) (var0761 val0761) (var0762 val0762) (var0763 val0763) (var0764 val0764) (var0765 val0765) (var0766 val0766) (var0767 val0767) (var0768 val0768) (var0769 val0769) (var0770 val0770) (var0771 val0771) (var0772 val0772) (var0773 val0773) (var0774 val0774) (var0775 val0775) (var0776 val0776) (var0777 val0777) (var0778 val0778) (var0779 val0779) (var0780 val0780) (var0781 val0781) (var0782 val0782) (var0783 val0783) (var0784 val0784) (var0785 val0785) (var0786 val0786) (var0787 val0787) (var0788 val0788) (var0789 val0789) (var0790 val0790) (var0791 val0791) (var0792 val0792) (var0793 val0793) (var0794 val0794) (var0795 val0795) (var0796 val0796) (var0797 val0797) (var0798 val0798) (var0799 val0799) (var0800 val0800) (var0801 val0801) (var0802 val0802) (var0803 val0803) (var0804 val0804) (var0805 val0805) (var0806 val0806) (var0807 val0807) (var0808 val0808) (var0809 val0809) (var0810 val0810) (var0811 val0811) (var0812 val0812) (var0813 val0813) (var0814 val0814) (var0815 val0815) (var0816 val0816) (var0817 val0817) (var0818 val0818) (var0819 val0819) (var0820 val0820) (var0821 val0821) (var0822 val0822) (var0823 val0823) (var0824 val0824) (var0825 val0825) (var0826 val0826) (var0827 val0827) (var0828 val0828) (var0829 val0829) (var0830 val0830) (var0831 val0831) (var0832 val0832) (var0833 val0833) (var0834 val0834) (var0835 val0835) (var0836 val0836) (var0837 val0837) (var0838 val0838) (var0839 val0839) (var0840 val0840) (var0841 val0841) (var0842 val0842) (var0843 val0843) (var0844 val0844) (var0845 val0845) (var0846 val0846) (var0847 val0847) (var0848 val0848) (var0849 val0849) (var0850 val0850) (var0851 val0851) (var0852 val0852) (var0853 val0853) (var0854 val0854) (var0855 val0855) (var0856 val0856) (var0857 val0857) (var0858 val0858) (var0859 val0859) (var0860 val0860) (var0861 val0861) (var0862 val0862) (var0863 val0863) (var0864 val0864) (var0865 val0865) (var0866 val0866) (var0867 val0867) (var0868 val0868) (var0869 val0869) (var0870 val0870) (var0871 val0871) (var0872 val0872) (var0873 val0873) (var0874 val0874) (var0875 val0875) (var0876 val0876) (var0877 val0877) (var0878 val0878) (var0879 val0879) (var0880 val0880) (var0881 val0881) (var0882 val0882) (var0883 val0883) (var0884 val0884) (var0885 val0885) (var0886 val0886) (var0887 val0887) (var0888 val0888) (var0889 val0889) (var0890 val0890) (var0891 val0891) (var0892 val0892) (var0893 val0893) (var0894 val0894) (var0895 val0895) (var0896 val0896) (var0897 val0897) (var0898 val0898) (var0899 val0899) (var0900 val0900) (var0901 val0901) (var0902 val0902) (var0903 val0903) (var0904 val0904) (var0905 val0905) (var0906 val0906) (var0907 val0907) (var0908 val0908) (var0909 val0909) (var0910 val0910) (var0911 val0911) (var0912 val0912) (var0913 val0913) (var0914 val0914) (var0915 val0915) (var0916 val0916) (var0917 val0917) (var0918 val0918) (var0919 val0919) (var0920 val0920) (var0921 val0921) (var0922 val0922) (var0923 val0923) (var0924 val0924) (var0925 val0925) (var0926 val0926) (var0927 val0927) (var0928 val0928) (var0929 val0929) (var0930 val0930) (var0931 val0931) (var0932 val0932) (var0933 val0933) (var0934 val0934) (var0935 val0935) (var0936 val0936) (var0937 val0937) (var0938 val0938) (var0939 val0939) (var0940 val0940) (var0941 val0941) (var0942 val0942) (var0943 val0943) (var0944 val0944) (var0945 val0945) (var0946 val0946) (var0947 val0947) (var0948 val0948) (var0949 val0949) (var0950 val0950) (var0951 val0951) (var0952 val0952) (var0953 val0953) (var0954 val0954) (var0955 val0955) (var0956 val0956) (var0957 val0957) (var0958 val0958) (var0959 val0959) (var0960 val0960) (var0961 val0961) (var0962 val0962) (var0963 val0963) (var0964 val0964) (var0965 val0965) (var0966 val0966) (var0967 val0967) (var0968 val0968) (var0969 val0969) (var0970 val0970) (var0971 val0971) (var0972 val0972) (var0973 val0973) (var0974 val0974) (var0975 val0975) (var0976 val0976) (var0977 val0977) (var0978 val0978) (var0979 val0979) (var0980 val0980) (var0981 val0981) (var0982 val0982) (var0983 val0983) (var0984 val0984) (var0985 val0985) (var0986 val0986) (var0987 val0987) (var0988 val0988) (var0989 val0989) (var0990 val0990) (var0991 val0991) (var0992 val0992) (var0993 val0993) (var0994 val0994) (var0995 val0995) (var0996 val0996) (var0997 val0997) (var0998 val0998) (var0999 val0999) (var1000 val1000) (var1001 val1001) (var1002 val1002) (var1003 val1003) (var1004 val1004) (var1005 val1005) (var1006 val1006) (var1007 val1007) (var1008 val1008) (var1009 val1009) (var1010 val1010) (var1011 val1011) (var1012 val1012) (var1013 val1013) (var1014 val1014) (var1015 val1015) (var1016 val1016) (var1017 val1017) (var1018 val1018) (var1019 val1019) (var1020 val1020) (var1021 val1021) (var1022 val1022) (var1023 val1023) (var1024 val1024) (var1025 val1025) (var1026 val1026) (var1027 val1027) (var1028 val1028) (var1029 val1029) (var1030 val1030) (var1031 val1031) (var1032 val1032) (var1033 val1033) (var1034 val1034) (var1035 val1035) (var1036 val1036) (var1037 val1037) (var1038 val1038) (var1039 val1039) (var1040 val1040) (var1041 val1041) (var1042 val1042) (var1043 val1043) (var1044 val1044) (var1045 val1045) (var1046 val1046) (var1047 val1047) (var1048 val1048) (var1049 val1049) (var1050 val1050) (var1051 val1051) (var1052 val1052) (var1053 val1053) (var1054 val1054) (var1055 val1055) (var1056 val1056) (var1057 val1057) (var1058 val1058) (var1059 val1059) (var1060 val1060) (var1061 val1061) (var1062 val1062) (var1063 val1063) (var1064 val1064) (var1065 val1065) (var1066 val1066) (var1067 val1067) (var1068 val1068) (var1069 val1069) (var1070 val1070) (var1071 val1071) (var1072 val1072) (var1073 val1073) (var1074 val1074) (var1075 val1075) (var1076 val1076) (var1077 val1077) (var1078 val1078) (var1079 val1079) (var1080 val1080) (var1081 val1081) (var1082 val1082) (var1083 val1083) (var1084 val1084) (var1085 val1085) (var1086 val1086) (var1087 val1087) (var1088 val1088) (var1089 val1089) (var1090 val1090) (var1091 val1091) (var1092 val1092) (var1093 val1093) (var1094 val1094) (var1095 val1095) (var1096 val1096) (var1097 val1097) (var1098 val1098) (var1099 val1099) (var1100 val1100) (var1101 val1101) (var1102 val1102) (var1103 val1103) (var1104 val1104) (var1105 val1105) (var1106 val1106) (var1107 val1107) (var1108 val1108) (var1109 val1109) (var1110 val1110) (var1111 val1111) (var1112 val1112) (var1113 val1113) (var1114 val1114) (var1115 val1115) (var1116 val1116) (var1117 val1117) (var1118 val1118) (var1119 val1119) (var1120 val1120) (var1121 val1121) (var1122 val1122) (var1123 val1123) (var1124 val1124) (var1125 val1125) (var1126 val1126) (var1127 val1127) (var1128 val1128) (var1129 val1129) (var1130 val1130) (var1131 val1131) (var1132 val1132) (var1133 val1133) (var1134 val1134) (var1135 val1135) (var1136 val1136) (var1137 val1137) (var1138 val1138) (var1139 val1139) (var1140 val1140) (var1141 val1141) (var1142 val1142) (var1143 val1143) (var1144 val1144) (var1145 val1145) (var1146 val1146) (var1147 val1147) (var1148 val1148) (var1149 val1149) (var1150 val1150) (var1151 val1151) (var1152 val1152) (var1153 val1153) (var1154 val1154) (var1155 val1155) (var1156 val1156) (var1157 val1157) (var1158 val1158) (var1159 val1159) (var1160 val1160) (var1161 val1161) (var1162 val1162) (var1163 val1163) (var1164 val1164) (var1165 val1165) (var1166 val1166) (var1167 val1167) (var1168 val1168) (var1169 val1169) (var1170 val1170) (var1171 val1171) (var1172 val1172) (var1173 val1173) (var1174 val1174) (var1175 val1175) (var1176 val1176) (var1177 val1177) (var1178 val1178) (var1179 val1179) (var1180 val1180) (var1181 val1181) (var1182 val1182) (var1183 val1183) (var1184 val1184) (var1185 val1185) (var1186 val1186) (var1187 val1187) (var1188 val1188) (var1189 val1189) (var1190 val1190) (var1191 val1191) (var1192 val1192) (var1193 val1193) (var1194 val1194) (var1195 val1195) (var1196 val1196) (var1197 val1197) (var1198 val1198) (var1199 val1199) (var1200 val1200) (var1201 val1201) (var1202 val1202) (var1203 val1203) (var1204 val1204) (var1205 val1205) (var1206 val1206) (var1207 val1207) (var1208 val1208) (var1209 val1209) (var1210 val1210) (var1211 val1211) (var1212 val1212) (var1213 val1213) (var1214 val1214) (var1215 val1215) (var1216 val1216) (var1217 val1217) (var1218 val1218) (var1219 val1219) (var1220 val1220) (var1221 val1221) (var1222 val1222) (var1223 val1223) (var1224 val1224) (var1225 val1225) (var1226 val1226) (var1227 val1227) (var1228 val1228) (var1229 val1229) (var1230 val1230) (var1231 val1231) (var1232 val1232) (var1233 val1233) (var1234 val1234) (var1235 val1235) (var1236 val1236) (var1237 val1237) (var1238 val1238) (var1239 val1239) (var1240 val1240) (var1241 val1241) (var1242 val1242) (var1243 val1243) (var1244 val1244) (var1245 val1245) (var1246 val1246) (var1247 val1247) (var1248 val1248) (var1249 val1249) (var1250 val1250) (var1251 val1251) (var1252 val1252) (var1253 val1253) (var1254 val1254) (var1255 val1255) (var1256 val1256) (var1257 val1257) (var1258 val1258) (var1259 val1259) (var1260 val1260) (var1261 val1261) (var1262 val1262) (var1263 val1263) (var1264 val1264) (var1265 val1265) (var1266 val1266) (var1267 val1267) (var1268 val1268) (var1269 val1269) (var1270 val1270) (var1271 val1271) (var1272 val1272) (var1273 val1273) (var1274 val1274) (var1275 val1275) (var1276 val1276) (var1277 val1277) (var1278 val1278) (var1279 val1279) (var1280 val1280) (var1281 val1281) (var1282 val1282) (var1283 val1283) (var1284 val1284) (var1285 val1285) (var1286 val1286) (var1287 val1287) (var1288 val1288) (var1289 val1289) (var1290 val1290) (var1291 val1291) (var1292 val1292) (var1293 val1293) (var1294 val1294) (var1295 val1295) (var1296 val1296) (var1297 val1297) (var1298 val1298) (var1299 val1299) (var1300 val1300) (var1301 val1301) (var1302 val1302) (var1303 val1303) (var1304 val1304) (var1305 val1305) (var1306 val1306) (var1307 val1307) (var1308 val1308) (var1309 val1309) (var1310 val1310) (var1311 val1311) (var1312 val1312) (var1313 val1313) (var1314 val1314) (var1315 val1315) (var1316 val1316) (var1317 val1317) (var1318 val1318) (var1319 val1319) (var1320 val1320) (var1321 val1321) (var1322 val1322) (var1323 val1323) (var1324 val1324) (var1325 val1325) (var1326 val1326) (var1327 val1327) (var1328 val1328) (var1329 val1329) (var1330 val1330) (var1331 val1331) (var1332 val1332) (var1333 val1333) (var1334 val1334) (var1335 val1335) (var1336 val1336) (var1337 val1337) (var1338 val1338) (var1339 val1339) (var1340 val1340) (var1341 val1341) (var1342 val1342) (var1343 val1343) (var1344 val1344) (var1345 val1345) (var1346 val1346) (var1347 val1347) (var1348 val1348) (var1349 val1349) (var1350 val1350) (var1351 val1351) (var1352 val1352) (var1353 val1353) (var1354 val1354) (var1355 val1355) (var1356 val1356) (var1357 val1357) (var1358 val1358) (var1359 val1359) (var1360 val1360) (var1361 val1361) (var1362 val1362) (var1363 val1363) (var1364 val1364) (var1365 val1365) (var1366 val1366) (var1367 val1367) (var1368 val1368) (var1369 val1369) (var1370 val1370) (var1371 val1371) (var1372 val1372) (var1373 val1373) (var1374 val1374) (var1375 val1375) (var1376 val1376) (var1377 val1377) (var1378 val1378) (var1379 val1379) (var1380 val1380) (var1381 val1381) (var1382 val1382) (var1383 val1383) (var1384 val1384) (var1385 val1385) (var1386 val1386) (var1387 val1387) (var1388 val1388) (var1389 val1389) (var1390 val1390) (var1391 val1391) (var1392 val1392) (var1393 val1393) (var1394 val1394) (var1395 val1395) (var1396 val1396) (var1397 val1397) (var1398 val1398) (var1399 val1399) (var1400 val1400) (var1401 val1401) (var1402 val1402) (var1403 val1403) (var1404 val1404) (var1405 val1405) (var1406 val1406) (var1407 val1407) (var1408 val1408) (var1409 val1409) (var1410 val1410) (var1411 val1411) (var1412 val1412) (var1413 val1413) (var1414 val1414) (var1415 val1415) (var1416 val1416) (var1417 val1417) (var1418 val1418) (var1419 val1419) (var1420 val1420) (var1421 val1421) (var1422 val1422) (var1423 val1423) (var1424 val1424) (var1425 val1425) (var1426 val1426) (var1427 val1427) (var1428 val1428) (var1429 val1429) (var1430 val1430) (var1431 val1431) (var1432 val1432) (var1433 val1433) (var1434 val1434) (var1435 val1435) (var1436 val1436) (var1437 val1437) (var1438 val1438) (var1439 val1439) (var1440 val1440) (var1441 val1441) (var1442 val1442) (var1443 val1443) (var1444 val1444) (var1445 val1445) (var1446 val1446) (var1447 val1447) (var1448 val1448) (var1449 val1449) (var1450 val1450) (var1451 val1451) (var1452 val1452) (var1453 val1453) (var1454 val1454) (var1455 val1455) (var1456 val1456) (var1457 val1457) (var1458 val1458) (var1459 val1459) (var1460 val1460) (var1461 val1461) (var1462 val1462) (var1463 val1463) (var1464 val1464) (var1465 val1465) (var1466 val1466) (var1467 val1467) (var1468 val1468) (var1469 val1469) (var1470 val1470) (var1471 val1471) (var1472 val1472) (var1473 val1473) (var1474 val1474) (var1475 val1475) (var1476 val1476) (var1477 val1477) (var1478 val1478) (var1479 val1479) (var1480 val1480) (var1481 val1481) (var1482 val1482) (var1483 val1483) (var1484 val1484) (var1485 val1485) (var1486 val1486) (var1487 val1487) (var1488 val1488) (var1489 val1489) (var1490 val1490) (var1491 val1491) (var1492 val1492) (var1493 val1493) (var1494 val1494) (var1495 val1495) (var1496 val1496) (var1497 val1497) (var1498 val1498) (var1499 val1499) (var1500 val1500) (var1501 val1501) (var1502 val1502) (var1503 val1503) (var1504 val1504) (var1505 val1505) (var1506 val1506) (var1507 val1507) (var1508 val1508) (var1509 val1509) (var1510 val1510) (var1511 val1511) (var1512 val1512) (var1513 val1513) (var1514 val1514) (var1515 val1515) (var1516 val1516) (var1517 val1517) (var1518 val1518) (var1519 val1519) (var1520 val1520) (var1521 val1521) (var1522 val1522) (var1523 val1523) (var1524 val1524) (var1525 val1525) (var1526 val1526) (var1527 val1527) (var1528 val1528) (var1529 val1529) (var1530 val1530) (var1531 val1531) (var1532 val1532) (var1533 val1533) (var1534 val1534) (var1535 val1535) (var1536 val1536) (var1537 val1537) (var1538 val1538) (var1539 val1539) (var1540 val1540) (var1541 val1541) (var1542 val1542) (var1543 val1543) (var1544 val1544) (var1545 val1545) (var1546 val1546) (var1547 val1547) (var1548 val1548) (var1549 val1549) (var1550 val1550) (var1551 val1551) (var1552 val1552) (var1553 val1553) (var1554 val1554) (var1555 val1555) (var1556 val1556) (var1557 val1557) (var1558 val1558) (var1559 val1559) (var1560 val1560) (var1561 val1561) (var1562 val1562) (var1563 val1563) (var1564 val1564) (var1565 val1565) (var1566 val1566) (var1567 val1567) (var1568 val1568) (var1569 val1569) (var1570 val1570) (var1571 val1571) (var1572 val1572) (var1573 val1573) (var1574 val1574) (var1575 val1575) (var1576 val1576) (var1577 val1577) (var1578 val1578) (var1579 val1579) (var1580 val1580) (var1581 val1581) (var1582 val1582) (var1583 val1583) (var1584 val1584) (var1585 val1585) (var1586 val1586) (var1587 val1587) (var1588 val1588) (var1589 val1589) (var1590 val1590) (var1591 val1591) (var1592 val1592) (var1593 val1593) (var1594 val1594) (var1595 val1595) (var1596 val1596) (var1597 val1597) (var1598 val1598) (var1599 val1599) (var1600 val1600) (var1601 val1601) (var1602 val1602) (var1603 val1603) (var1604 val1604) (var1605 val1605) (var1606 val1606) (var1607 val1607) (var1608 val1608) (var1609 val1609) (var1610 val1610) (var1611 val1611) (var1612 val1612) (var1613 val1613) (var1614 val1614) (var1615 val1615) (var1616 val1616) (var1617 val1617) (var1618 val1618) (var1619 val1619) (var1620 val1620) (var1621 val1621) (var1622 val1622) (var1623 val1623) (var1624 val1624) (var1625 val1625) (var1626 val1626) (var1627 val1627) (var1628 val1628) (var1629 val1629) (var1630 val1630) (var1631 val1631) (var1632 val1632) (var1633 val1633) (var1634 val1634) (var1635 val1635) (var1636 val1636) (var1637 val1637) (var1638 val1638) (var1639 val1639) (var1640 val1640) (var1641 val1641) (var1642 val1642) (var1643 val1643) (var1644 val1644) (var1645 val1645) (var1646 val1646) (var1647 val1647) (var1648 val1648) (var1649 val1649) (var1650 val1650) (var1651 val1651) (var1652 val1652) (var1653 val1653) (var1654 val1654) (var1655 val1655) (var1656 val1656) (var1657 val1657) (var1658 val1658) (var1659 val1659) (var1660 val1660) (var1661 val1661) (var1662 val1662) (var1663 val1663) (var1664 val1664) (var1665 val1665) (var1666 val1666) (var1667 val1667) (var1668 val1668) (var1669 val1669) (var1670 val1670) (var1671 val1671) (var1672 val1672) (var1673 val1673) (var1674 val1674) (var1675 val1675) (var1676 val1676) (var1677 val1677) (var1678 val1678) (var1679 val1679) (var1680 val1680) (var1681 val1681) (var1682 val1682) (var1683 val1683) (var1684 val1684) (var1685 val1685) (var1686 val1686) (var1687 val1687) (var1688 val1688) (var1689 val1689) (var1690 val1690) (var1691 val1691) (var1692 val1692) (var1693 val1693) (var1694 val1694) (var1695 val1695) (var1696 val1696) (var1697 val1697) (var1698 val1698) (var1699 val1699) (var1700 val1700) (var1701 val1701) (var1702 val1702) (var1703 val1703) (var1704 val1704) (var1705 val1705) (var1706 val1706) (var1707 val1707) (var1708 val1708) (var1709 val1709) (var1710 val1710) (var1711 val1711) (var1712 val1712) (var1713 val1713) (var1714 val1714) (var1715 val1715) (var1716 val1716) (var1717 val1717) (var1718 val1718) (var1719 val1719) (var1720 val1720) (var1721 val1721) (var1722 val1722) (var1723 val1723) (var1724 val1724) (var1725 val1725) (var1726 val1726) (var1727 val1727) (var1728 val1728) (var1729 val1729) (var1730 val1730) (var1731 val1731) (var1732 val1732) (var1733 val1733) (var1734 val1734) (var1735 val1735) (var1736 val1736) (var1737 val1737) (var1738 val1738) (var1739 val1739) (var1740 val1740) (var1741 val1741) (var1742 val1742) (var1743 val1743) (var1744 val1744) (var1745 val1745) (var1746 val1746) (var1747 val1747) (var1748 val1748) (var1749 val1749) (var1750 val1750) (var1751 val1751) (var1752 val1752) (var1753 val1753) (var1754 val1754) (var1755 val1755) (var1756 val1756) (var1757 val1757) (var1758 val1758) (var1759 val1759) (var1760 val1760) (var1761 val1761) (var1762 val1762) (var1763 val1763) (var1764 val1764) (var1765 val1765) (var1766 val1766) (var1767 val1767) (var1768 val1768) (var1769 val1769) (var1770 val1770) (var1771 val1771) (var1772 val1772) (var1773 val1773) (var1774 val1774) (var1775 val1775) (var1776 val1776) (var1777 val1777) (var1778 val1778) (var1779 val1779) (var1780 val1780) (var1781 val1781) (var1782 val1782) (var1783 val1783) (var1784 val1784) (var1785 val1785) (var1786 val1786) (var1787 val1787) (var1788 val1788) (var1789 val1789) (var1790 val1790) (var1791 val1791) (var1792 val1792) (var1793 val1793) (var1794 val1794) (var1795 val1795) (var1796 val1796) (var1797 val1797) (var1798 val1798) (var1799 val1799) (var1800 val1800) (var1801 val1801) (var1802 val1802) (var1803 val1803) (var1804 val1804) (var1805 val1805) (var1806 val1806) (var1807 val1807) (var1808 val1808) (var1809 val1809) (var1810 val1810) (var1811 val1811) (var1812 val1812) (var1813 val1813) (var1814 val1814) (var1815 val1815) (var1816 val1816) (var1817 val1817) (var1818 val1818) (var1819 val1819) (var1820 val1820) (var1821 val1821) (var1822 val1822) (var1823 val1823) (var1824 val1824) (var1825 val1825) (var1826 val1826) (var1827 val1827) (var1828 val1828) (var1829 val1829) (var1830 val1830) (var1831 val1831) (var1832 val1832) (var1833 val1833) (var1834 val1834) (var1835 val1835) (var1836 val1836) (var1837 val1837) (var1838 val1838) (var1839 val1839) (var1840 val1840) (var1841 val1841) (var1842 val1842) (var1843 val1843) (var1844 val1844) (var1845 val1845) (var1846 val1846) (var1847 val1847) (var1848 val1848) (var1849 val1849) (var1850 val1850) (var1851 val1851) (var1852 val1852) (var1853 val1853) (var1854 val1854) (var1855 val1855) (var1856 val1856) (var1857 val1857) (var1858 val1858) (var1859 val1859) (var1860 val1860) (var1861 val1861) (var1862 val1862) (var1863 val1863) (var1864 val1864) (var1865 val1865) (var1866 val1866) (var1867 val1867) (var1868 val1868) (var1869 val1869) (var1870 val1870) (var1871 val1871) (var1872 val1872) (var1873 val1873) (var1874 val1874) (var1875 val1875) (var1876 val1876) (var1877 val1877) (var1878 val1878) (var1879 val1879) (var1880 val1880) (var1881 val1881) (var1882 val1882) (var1883 val1883) (var1884 val1884) (var1885 val1885) (var1886 val1886) (var1887 val1887) (var1888 val1888) (var1889 val1889) (var1890 val1890) (var1891 val1891) (var1892 val1892) (var1893 val1893) (var1894 val1894) (var1895 val1895) (var1896 val1896) (var1897 val1897) (var1898 val1898) (var1899 val1899) (var1900 val1900) (var1901 val1901) (var1902 val1902) (var1903 val1903) (var1904 val1904) (var1905 val1905) (var1906 val1906) (var1907 val1907) (var1908 val1908) (var1909 val1909) (var1910 val1910) (var1911 val1911) (var1912 val1912) (var1913 val1913) (var1914 val1914) (var1915 val1915) (var1916 val1916) (var1917 val1917) (var1918 val1918) (var1919 val1919) (var1920 val1920) (var1921 val1921) (var1922 val1922) (var1923 val1923) (var1924 val1924) (var1925 val1925) (var1926 val1926) (var1927 val1927) (var1928 val1928) (var1929 val1929) (var1930 val1930) (var1931 val1931) (var1932 val1932) (var1933 val1933) (var1934 val1934) (var1935 val1935) (var1936 val1936) (var1937 val1937) (var1938 val1938) (var1939 val1939) (var1940 val1940) (var1941 val1941) (var1942 val1942) (var1943 val1943) (var1944 val1944) (var1945 val1945) (var1946 val1946) (var1947 val1947) (var1948 val1948) (var1949 val1949) (var1950 val1950) (var1951 val1951) (var1952 val1952) (var1953 val1953) (var1954 val1954) (var1955 val1955) (var1956 val1956) (var1957 val1957) (var1958 val1958) (var1959 val1959) (var1960 val1960) (var1961 val1961) (var1962 val1962) (var1963 val1963) (var1964 val1964) (var1965 val1965) (var1966 val1966) (var1967 val1967) (var1968 val1968) (var1969 val1969) (var1970 val1970) (var1971 val1971) (var1972 val1972) (var1973 val1973) (var1974 val1974) (var1975 val1975) (var1976 val1976) (var1977 val1977) (var1978 val1978) (var1979 val1979) (var1980 val1980) (var1981 val1981) (var1982 val1982) (var1983 val1983) (var1984 val1984) (var1985 val1985) (var1986 val1986) (var1987 val1987) (var1988 val1988) (var1989 val1989) (var1990 val1990) (var1991 val1991) (var1992 val1992) (var1993 val1993) (var1994 val1994) (var1995 val1995) (var1996 val1996) (var1997 val1997) (var1998 val1998) (var1999 val1999) (var2000 val2000) (var2001 val2001) (var2002 val2002) (var2003 val2003) (var2004 val2004) (var2005 val2005) (var2006 val2006) (var2007 val2007) (var2008 val2008) (var2009 val2009) (var2010 val2010) (var2011 val2011) (var2012 val2012) (var2013 val2013) (var2014 val2014) (var2015 val2015) (var2016 val2016) (var2017 val2017) (var2018 val2018) (var2019 val2019) (var2020 val2020) (var2021 val2021) (var2022 val2022) (var2023 val2023) (var2024 val2024) (var2025 val2025) (var2026 val2026) (var2027 val2027) (var2028 val2028) (var2029 val2029) (var2030 val2030) (var2031 val2031) (var2032 val2032) (var2033 val2033) (var2034 val2034) (var2035 val2035) (var2036 val2036) (var2037 val2037) (var2038 val2038) (var2039 val2039) (var2040 val2040) (var2041 val2041) (var2042 val2042) (var2043 val2043) (var2044 val2044) (var2045 val2045) (var2046 val2046) (var2047 val2047) (var2048 val2048) (var2049 val2049) (var2050 val2050) (var2051 val2051) (var2052 val2052) (var2053 val2053) (var2054 val2054) (var2055 val2055) (var2056 val2056) (var2057 val2057) (var2058 val2058) (var2059 val2059) (var2060 val2060) (var2061 val2061) (var2062 val2062) (var2063 val2063) (var2064 val2064) (var2065 val2065) (var2066 val2066) (var2067 val2067) (var2068 val2068) (var2069 val2069) (var2070 val2070) (var2071 val2071) (var2072 val2072) (var2073 val2073) (var2074 val2074) (var2075 val2075) (var2076 val2076) (var2077 val2077) (var2078 val2078) (var2079 val2079) (var2080 val2080) (var2081 val2081) (var2082 val2082) (var2083 val2083) (var2084 val2084) (var2085 val2085) (var2086 val2086) (var2087 val2087) (var2088 val2088) (var2089 val2089) (var2090 val2090) (var2091 val2091) (var2092 val2092) (var2093 val2093) (var2094 val2094) (var2095 val2095) (var2096 val2096) (var2097 val2097) (var2098 val2098) (var2099 val2099) (var2100 val2100) (var2101 val2101) (var2102 val2102) (var2103 val2103) (var2104 val2104) (var2105 val2105) (var2106 val2106) (var2107 val2107) (var2108 val2108) (var2109 val2109) (var2110 val2110) (var2111 val2111) (var2112 val2112) (var2113 val2113) (var2114 val2114) (var2115 val2115) (var2116 val2116) (var2117 val2117) (var2118 val2118) (var2119 val2119) (var2120 val2120) (var2121 val2121) (var2122 val2122) (var2123 val2123) (var2124 val2124) (var2125 val2125) (var2126 val2126) (var2127 val2127) (var2128 val2128) (var2129 val2129) (var2130 val2130) (var2131 val2131) (var2132 val2132) (var2133 val2133) (var2134 val2134) (var2135 val2135) (var2136 val2136) (var2137 val2137) (var2138 val2138) (var2139 val2139) (var2140 val2140) (var2141 val2141) (var2142 val2142) (var2143 val2143) (var2144 val2144) (var2145 val2145) (var2146 val2146) (var2147 val2147) (var2148 val2148) (var2149 val2149) (var2150 val2150) (var2151 val2151) (var2152 val2152) (var2153 val2153) (var2154 val2154) (var2155 val2155) (var2156 val2156) (var2157 val2157) (var2158 val2158) (var2159 val2159) (var2160 val2160) (var2161 val2161) (var2162 val2162) (var2163 val2163) (var2164 val2164) (var2165 val2165) (var2166 val2166) (var2167 val2167) (var2168 val2168) (var2169 val2169) (var2170 val2170) (var2171 val2171) (var2172 val2172) (var2173 val2173) (var2174 val2174) (var2175 val2175) (var2176 val2176) (var2177 val2177) (var2178 val2178) (var2179 val2179) (var2180 val2180) (var2181 val2181) (var2182 val2182) (var2183 val2183) (var2184 val2184) (var2185 val2185) (var2186 val2186) (var2187 val2187) (var2188 val2188) (var2189 val2189) (var2190 val2190) (var2191 val2191) (var2192 val2192) (var2193 val2193) (var2194 val2194) (var2195 val2195) (var2196 val2196) (var2197 val2197) (var2198 val2198) (var2199 val2199) (var2200 val2200) (var2201 val2201) (var2202 val2202) (var2203 val2203) (var2204 val2204) (var2205 val2205) (var2206 val2206) (var2207 val2207) (var2208 val2208) (var2209 val2209) (var2210 val2210) (var2211 val2211) (var2212 val2212) (var2213 val2213) (var2214 val2214) (var2215 val2215) (var2216 val2216) (var2217 val2217) (var2218 val2218) (var2219 val2219) (var2220 val2220) (var2221 val2221) (var2222 val2222) (var2223 val2223) (var2224 val2224) (var2225 val2225) (var2226 val2226) (var2227 val2227) (var2228 val2228) (var2229 val2229) (var2230 val2230) (var2231 val2231) (var2232 val2232) (var2233 val2233) (var2234 val2234) (var2235 val2235) (var2236 val2236) (var2237 val2237) (var2238 val2238) (var2239 val2239) (var2240 val2240) (var2241 val2241) (var2242 val2242) (var2243 val2243) (var2244 val2244) (var2245 val2245) (var2246 val2246) (var2247 val2247) (var2248 val2248) (var2249 val2249) (var2250 val2250) (var2251 val2251) (var2252 val2252) (var2253 val2253) (var2254 val2254) (var2255 val2255) (var2256 val2256) (var2257 val2257) (var2258 val2258) (var2259 val2259) (var2260 val2260) (var2261 val2261) (var2262 val2262) (var2263 val2263) (var2264 val2264) (var2265 val2265) (var2266 val2266) (var2267 val2267) (var2268 val2268) (var2269 val2269) (var2270 val2270) (var2271 val2271) (var2272 val2272) (var2273 val2273) (var2274 val2274) (var2275 val2275) (var2276 val2276) (var2277 val2277) (var2278 val2278) (var2279 val2279) (var2280 val2280) (var2281 val2281) (var2282 val2282) (var2283 val2283) (var2284 val2284) (var2285 val2285) (var2286 val2286) (var2287 val2287) (var2288 val2288) (var2289 val2289) (var2290 val2290) (var2291 val2291) (var2292 val2292) (var2293 val2293) (var2294 val2294) (var2295 val2295) (var2296 val2296) (var2297 val2297) (var2298 val2298) (var2299 val2299) (var2300 val2300) (var2301 val2301) (var2302 val2302) (var2303 val2303) (var2304 val2304) (var2305 val2305) (var2306 val2306) (var2307 val2307) (var2308 val2308) (var2309 val2309) (var2310 val2310) (var2311 val2311) (var2312 val2312) (var2313 val2313) (var2314 val2314) (var2315 val2315) (var2316 val2316) (var2317 val2317) (var2318 val2318) (var2319 val2319) (var2320 val2320) (var2321 val2321) (var2322 val2322) (var2323 val2323) (var2324 val2324) (var2325 val2325) (var2326 val2326) (var2327 val2327) (var2328 val2328) (var2329 val2329) (var2330 val2330) (var2331 val2331) (var2332 val2332) (var2333 val2333) (var2334 val2334) (var2335 val2335) (var2336 val2336) (var2337 val2337) (var2338 val2338) (var2339 val2339) (var2340 val2340) (var2341 val2341) (var2342 val2342) (var2343 val2343) (var2344 val2344) (var2345 val2345) (var2346 val2346) (var2347 val2347) (var2348 val2348) (var2349 val2349) (var2350 val2350) (var2351 val2351) (var2352 val2352) (var2353 val2353) (var2354 val2354) (var2355 val2355) (var2356 val2356) (var2357 val2357) (var2358 val2358) (var2359 val2359) (var2360 val2360) (var2361 val2361) (var2362 val2362) (var2363 val2363) (var2364 val2364) (var2365 val2365) (var2366 val2366) (var2367 val2367) (var2368 val2368) (var2369 val2369) (var2370 val2370) (var2371 val2371) (var2372 val2372) (var2373 val2373) (var2374 val2374) (var2375 val2375) (var2376 val2376) (var2377 val2377) (var2378 val2378) (var2379 val2379) (var2380 val2380) (var2381 val2381) (var2382 val2382) (var2383 val2383) (var2384 val2384) (var2385 val2385) (var2386 val2386) (var2387 val2387) (var2388 val2388) (var2389 val2389) (var2390 val2390) (var2391 val2391) (var2392 val2392) (var2393 val2393) (var2394 val2394) (var2395 val2395) (var2396 val2396) (var2397 val2397) (var2398 val2398) (var2399 val2399) (var2400 val2400) (var2401 val2401) (var2402 val2402) (var2403 val2403) (var2404 val2404) (var2405 val2405) (var2406 val2406) (var2407 val2407) (var2408 val2408) (var2409 val2409) (var2410 val2410) (var2411 val2411) (var2412 val2412) (var2413 val2413) (var2414 val2414) (var2415 val2415) (var2416 val2416) (var2417 val2417) (var2418 val2418) (var2419 val2419) (var2420 val2420) (var2421 val2421) (var2422 val2422) (var2423 val2423) (var2424 val2424) (var2425 val2425) (var2426 val2426) (var2427 val2427) (var2428 val2428) (var2429 val2429) (var2430 val2430) (var2431 val2431) (var2432 val2432) (var2433 val2433) (var2434 val2434) (var2435 val2435) (var2436 val2436) (var2437 val2437) (var2438 val2438) (var2439 val2439) (var2440 val2440) (var2441 val2441) (var2442 val2442) (var2443 val2443) (var2444 val2444) (var2445 val2445) (var2446 val2446) (var2447 val2447) (var2448 val2448) (var2449 val2449) (var2450 val2450) (var2451 val2451) (var2452 val2452) (var2453 val2453) (var2454 val2454) (var2455 val2455) (var2456 val2456) (var2457 val2457) (var2458 val2458) (var2459 val2459) (var2460 val2460) (var2461 val2461) (var2462 val2462) (var2463 val2463) (var2464 val2464) (var2465 val2465) (var2466 val2466) (var2467 val2467) (var2468 val2468) (var2469 val2469) (var2470 val2470) (var2471 val2471) (var2472 val2472) (var2473 val2473) (var2474 val2474) (var2475 val2475) (var2476 val2476) (var2477 val2477) (var2478 val2478) (var2479 val2479) (var2480 val2480) (var2481 val2481) (var2482 val2482) (var2483 val2483) (var2484 val2484) (var2485 val2485) (var2486 val2486) (var2487 val2487) (var2488 val2488) (var2489 val2489) (var2490 val2490) (var2491 val2491) (var2492 val2492) (var2493 val2493) (var2494 val2494) (var2495 val2495) (var2496 val2496) (var2497 val2497) (var2498 val2498) (var2499 val2499) (var2500 val2500) ) (executable=/bin/echo)(arguments=$(var2500)) globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/huge.err0000644000000000000000000000013214243161125026711 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.990730343 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/huge.err0000664000175000017500000000012614243161125027051 0ustar00johndoejohndoe00000000000000GRAM Job submission failed because data transfer to the server failed (error code 10) globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/huge.out0000644000000000000000000000013214243161125026730 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.991730333 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/huge.out0000664000175000017500000000000014243161125027057 0ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/huge.rc0000644000000000000000000000013214243161125026525 xustar000000000000000030 mtime=1653400149.372969979 30 atime=1653400149.372969979 30 ctime=1653404022.993730314 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/huge.rc0000664000175000017500000000000314243161125026657 0ustar00johndoejohndoe0000000000000010 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/PaxHeaders.31186/huge.rsl0000644000000000000000000000013214243161125026721 xustar000000000000000030 mtime=1653400149.373969969 30 atime=1653400149.372969979 30 ctime=1653404023.005730199 globus_gram_job_manager-15.8/test/jobmanager/rsl_size_test/huge.rsl0000664000175000017500000022644414243161125027076 0ustar00johndoejohndoe00000000000000& (rsl_substitution = (var0000 val0000) (var0001 val0001) (var0002 val0002) (var0003 val0003) (var0004 val0004) (var0005 val0005) (var0006 val0006) (var0007 val0007) (var0008 val0008) (var0009 val0009) (var0010 val0010) (var0011 val0011) (var0012 val0012) (var0013 val0013) (var0014 val0014) (var0015 val0015) (var0016 val0016) (var0017 val0017) (var0018 val0018) (var0019 val0019) (var0020 val0020) (var0021 val0021) (var0022 val0022) (var0023 val0023) (var0024 val0024) (var0025 val0025) (var0026 val0026) (var0027 val0027) (var0028 val0028) (var0029 val0029) (var0030 val0030) (var0031 val0031) (var0032 val0032) (var0033 val0033) (var0034 val0034) (var0035 val0035) (var0036 val0036) (var0037 val0037) (var0038 val0038) (var0039 val0039) (var0040 val0040) (var0041 val0041) (var0042 val0042) (var0043 val0043) (var0044 val0044) (var0045 val0045) (var0046 val0046) (var0047 val0047) (var0048 val0048) (var0049 val0049) (var0050 val0050) (var0051 val0051) (var0052 val0052) (var0053 val0053) (var0054 val0054) (var0055 val0055) (var0056 val0056) (var0057 val0057) (var0058 val0058) (var0059 val0059) (var0060 val0060) (var0061 val0061) (var0062 val0062) (var0063 val0063) (var0064 val0064) (var0065 val0065) (var0066 val0066) (var0067 val0067) (var0068 val0068) (var0069 val0069) (var0070 val0070) (var0071 val0071) (var0072 val0072) (var0073 val0073) (var0074 val0074) (var0075 val0075) (var0076 val0076) (var0077 val0077) (var0078 val0078) (var0079 val0079) (var0080 val0080) (var0081 val0081) (var0082 val0082) (var0083 val0083) (var0084 val0084) (var0085 val0085) (var0086 val0086) (var0087 val0087) (var0088 val0088) (var0089 val0089) (var0090 val0090) (var0091 val0091) (var0092 val0092) (var0093 val0093) (var0094 val0094) (var0095 val0095) (var0096 val0096) (var0097 val0097) (var0098 val0098) (var0099 val0099) (var0100 val0100) (var0101 val0101) (var0102 val0102) (var0103 val0103) (var0104 val0104) (var0105 val0105) (var0106 val0106) (var0107 val0107) (var0108 val0108) (var0109 val0109) (var0110 val0110) (var0111 val0111) (var0112 val0112) (var0113 val0113) (var0114 val0114) (var0115 val0115) (var0116 val0116) (var0117 val0117) (var0118 val0118) (var0119 val0119) (var0120 val0120) (var0121 val0121) (var0122 val0122) (var0123 val0123) (var0124 val0124) (var0125 val0125) (var0126 val0126) (var0127 val0127) (var0128 val0128) (var0129 val0129) (var0130 val0130) (var0131 val0131) (var0132 val0132) (var0133 val0133) (var0134 val0134) (var0135 val0135) (var0136 val0136) (var0137 val0137) (var0138 val0138) (var0139 val0139) (var0140 val0140) (var0141 val0141) (var0142 val0142) (var0143 val0143) (var0144 val0144) (var0145 val0145) (var0146 val0146) (var0147 val0147) (var0148 val0148) (var0149 val0149) (var0150 val0150) (var0151 val0151) (var0152 val0152) (var0153 val0153) (var0154 val0154) (var0155 val0155) (var0156 val0156) (var0157 val0157) (var0158 val0158) (var0159 val0159) (var0160 val0160) (var0161 val0161) (var0162 val0162) (var0163 val0163) (var0164 val0164) (var0165 val0165) (var0166 val0166) (var0167 val0167) (var0168 val0168) (var0169 val0169) (var0170 val0170) (var0171 val0171) (var0172 val0172) (var0173 val0173) (var0174 val0174) (var0175 val0175) (var0176 val0176) (var0177 val0177) (var0178 val0178) (var0179 val0179) (var0180 val0180) (var0181 val0181) (var0182 val0182) (var0183 val0183) (var0184 val0184) (var0185 val0185) (var0186 val0186) (var0187 val0187) (var0188 val0188) (var0189 val0189) (var0190 val0190) (var0191 val0191) (var0192 val0192) (var0193 val0193) (var0194 val0194) (var0195 val0195) (var0196 val0196) (var0197 val0197) (var0198 val0198) (var0199 val0199) (var0200 val0200) (var0201 val0201) (var0202 val0202) (var0203 val0203) (var0204 val0204) (var0205 val0205) (var0206 val0206) (var0207 val0207) (var0208 val0208) (var0209 val0209) (var0210 val0210) (var0211 val0211) (var0212 val0212) (var0213 val0213) (var0214 val0214) (var0215 val0215) (var0216 val0216) (var0217 val0217) (var0218 val0218) (var0219 val0219) (var0220 val0220) (var0221 val0221) (var0222 val0222) (var0223 val0223) (var0224 val0224) (var0225 val0225) (var0226 val0226) (var0227 val0227) (var0228 val0228) (var0229 val0229) (var0230 val0230) (var0231 val0231) (var0232 val0232) (var0233 val0233) (var0234 val0234) (var0235 val0235) (var0236 val0236) (var0237 val0237) (var0238 val0238) (var0239 val0239) (var0240 val0240) (var0241 val0241) (var0242 val0242) (var0243 val0243) (var0244 val0244) (var0245 val0245) (var0246 val0246) (var0247 val0247) (var0248 val0248) (var0249 val0249) (var0250 val0250) (var0251 val0251) (var0252 val0252) (var0253 val0253) (var0254 val0254) (var0255 val0255) (var0256 val0256) (var0257 val0257) (var0258 val0258) (var0259 val0259) (var0260 val0260) (var0261 val0261) (var0262 val0262) (var0263 val0263) (var0264 val0264) (var0265 val0265) (var0266 val0266) (var0267 val0267) (var0268 val0268) (var0269 val0269) (var0270 val0270) (var0271 val0271) (var0272 val0272) (var0273 val0273) (var0274 val0274) (var0275 val0275) (var0276 val0276) (var0277 val0277) (var0278 val0278) (var0279 val0279) (var0280 val0280) (var0281 val0281) (var0282 val0282) (var0283 val0283) (var0284 val0284) (var0285 val0285) (var0286 val0286) (var0287 val0287) (var0288 val0288) (var0289 val0289) (var0290 val0290) (var0291 val0291) (var0292 val0292) (var0293 val0293) (var0294 val0294) (var0295 val0295) (var0296 val0296) (var0297 val0297) (var0298 val0298) (var0299 val0299) (var0300 val0300) (var0301 val0301) (var0302 val0302) (var0303 val0303) (var0304 val0304) (var0305 val0305) (var0306 val0306) (var0307 val0307) (var0308 val0308) (var0309 val0309) (var0310 val0310) (var0311 val0311) (var0312 val0312) (var0313 val0313) (var0314 val0314) (var0315 val0315) (var0316 val0316) (var0317 val0317) (var0318 val0318) (var0319 val0319) (var0320 val0320) (var0321 val0321) (var0322 val0322) (var0323 val0323) (var0324 val0324) (var0325 val0325) (var0326 val0326) (var0327 val0327) (var0328 val0328) (var0329 val0329) (var0330 val0330) (var0331 val0331) (var0332 val0332) (var0333 val0333) (var0334 val0334) (var0335 val0335) (var0336 val0336) (var0337 val0337) (var0338 val0338) (var0339 val0339) (var0340 val0340) (var0341 val0341) (var0342 val0342) (var0343 val0343) (var0344 val0344) (var0345 val0345) (var0346 val0346) (var0347 val0347) (var0348 val0348) (var0349 val0349) (var0350 val0350) (var0351 val0351) (var0352 val0352) (var0353 val0353) (var0354 val0354) (var0355 val0355) (var0356 val0356) (var0357 val0357) (var0358 val0358) (var0359 val0359) (var0360 val0360) (var0361 val0361) (var0362 val0362) (var0363 val0363) (var0364 val0364) (var0365 val0365) (var0366 val0366) (var0367 val0367) (var0368 val0368) (var0369 val0369) (var0370 val0370) (var0371 val0371) (var0372 val0372) (var0373 val0373) (var0374 val0374) (var0375 val0375) (var0376 val0376) (var0377 val0377) (var0378 val0378) (var0379 val0379) (var0380 val0380) (var0381 val0381) (var0382 val0382) (var0383 val0383) (var0384 val0384) (var0385 val0385) (var0386 val0386) (var0387 val0387) (var0388 val0388) (var0389 val0389) (var0390 val0390) (var0391 val0391) (var0392 val0392) (var0393 val0393) (var0394 val0394) (var0395 val0395) (var0396 val0396) (var0397 val0397) (var0398 val0398) (var0399 val0399) (var0400 val0400) (var0401 val0401) (var0402 val0402) (var0403 val0403) (var0404 val0404) (var0405 val0405) (var0406 val0406) (var0407 val0407) (var0408 val0408) (var0409 val0409) (var0410 val0410) (var0411 val0411) (var0412 val0412) (var0413 val0413) (var0414 val0414) (var0415 val0415) (var0416 val0416) (var0417 val0417) (var0418 val0418) (var0419 val0419) (var0420 val0420) (var0421 val0421) (var0422 val0422) (var0423 val0423) (var0424 val0424) (var0425 val0425) (var0426 val0426) (var0427 val0427) (var0428 val0428) (var0429 val0429) (var0430 val0430) (var0431 val0431) (var0432 val0432) (var0433 val0433) (var0434 val0434) (var0435 val0435) (var0436 val0436) (var0437 val0437) (var0438 val0438) (var0439 val0439) (var0440 val0440) (var0441 val0441) (var0442 val0442) (var0443 val0443) (var0444 val0444) (var0445 val0445) (var0446 val0446) (var0447 val0447) (var0448 val0448) (var0449 val0449) (var0450 val0450) (var0451 val0451) (var0452 val0452) (var0453 val0453) (var0454 val0454) (var0455 val0455) (var0456 val0456) (var0457 val0457) (var0458 val0458) (var0459 val0459) (var0460 val0460) (var0461 val0461) (var0462 val0462) (var0463 val0463) (var0464 val0464) (var0465 val0465) (var0466 val0466) (var0467 val0467) (var0468 val0468) (var0469 val0469) (var0470 val0470) (var0471 val0471) (var0472 val0472) (var0473 val0473) (var0474 val0474) (var0475 val0475) (var0476 val0476) (var0477 val0477) (var0478 val0478) (var0479 val0479) (var0480 val0480) (var0481 val0481) (var0482 val0482) (var0483 val0483) (var0484 val0484) (var0485 val0485) (var0486 val0486) (var0487 val0487) (var0488 val0488) (var0489 val0489) (var0490 val0490) (var0491 val0491) (var0492 val0492) (var0493 val0493) (var0494 val0494) (var0495 val0495) (var0496 val0496) (var0497 val0497) (var0498 val0498) (var0499 val0499) (var0500 val0500) (var0501 val0501) (var0502 val0502) (var0503 val0503) (var0504 val0504) (var0505 val0505) (var0506 val0506) (var0507 val0507) (var0508 val0508) (var0509 val0509) (var0510 val0510) (var0511 val0511) (var0512 val0512) (var0513 val0513) (var0514 val0514) (var0515 val0515) (var0516 val0516) (var0517 val0517) (var0518 val0518) (var0519 val0519) (var0520 val0520) (var0521 val0521) (var0522 val0522) (var0523 val0523) (var0524 val0524) (var0525 val0525) (var0526 val0526) (var0527 val0527) (var0528 val0528) (var0529 val0529) (var0530 val0530) (var0531 val0531) (var0532 val0532) (var0533 val0533) (var0534 val0534) (var0535 val0535) (var0536 val0536) (var0537 val0537) (var0538 val0538) (var0539 val0539) (var0540 val0540) (var0541 val0541) (var0542 val0542) (var0543 val0543) (var0544 val0544) (var0545 val0545) (var0546 val0546) (var0547 val0547) (var0548 val0548) (var0549 val0549) (var0550 val0550) (var0551 val0551) (var0552 val0552) (var0553 val0553) (var0554 val0554) (var0555 val0555) (var0556 val0556) (var0557 val0557) (var0558 val0558) (var0559 val0559) (var0560 val0560) (var0561 val0561) (var0562 val0562) (var0563 val0563) (var0564 val0564) (var0565 val0565) (var0566 val0566) (var0567 val0567) (var0568 val0568) (var0569 val0569) (var0570 val0570) (var0571 val0571) (var0572 val0572) (var0573 val0573) (var0574 val0574) (var0575 val0575) (var0576 val0576) (var0577 val0577) (var0578 val0578) (var0579 val0579) (var0580 val0580) (var0581 val0581) (var0582 val0582) (var0583 val0583) (var0584 val0584) (var0585 val0585) (var0586 val0586) (var0587 val0587) (var0588 val0588) (var0589 val0589) (var0590 val0590) (var0591 val0591) (var0592 val0592) (var0593 val0593) (var0594 val0594) (var0595 val0595) (var0596 val0596) (var0597 val0597) (var0598 val0598) (var0599 val0599) (var0600 val0600) (var0601 val0601) (var0602 val0602) (var0603 val0603) (var0604 val0604) (var0605 val0605) (var0606 val0606) (var0607 val0607) (var0608 val0608) (var0609 val0609) (var0610 val0610) (var0611 val0611) (var0612 val0612) (var0613 val0613) (var0614 val0614) (var0615 val0615) (var0616 val0616) (var0617 val0617) (var0618 val0618) (var0619 val0619) (var0620 val0620) (var0621 val0621) (var0622 val0622) (var0623 val0623) (var0624 val0624) (var0625 val0625) (var0626 val0626) (var0627 val0627) (var0628 val0628) (var0629 val0629) (var0630 val0630) (var0631 val0631) (var0632 val0632) (var0633 val0633) (var0634 val0634) (var0635 val0635) (var0636 val0636) (var0637 val0637) (var0638 val0638) (var0639 val0639) (var0640 val0640) (var0641 val0641) (var0642 val0642) (var0643 val0643) (var0644 val0644) (var0645 val0645) (var0646 val0646) (var0647 val0647) (var0648 val0648) (var0649 val0649) (var0650 val0650) (var0651 val0651) (var0652 val0652) (var0653 val0653) (var0654 val0654) (var0655 val0655) (var0656 val0656) (var0657 val0657) (var0658 val0658) (var0659 val0659) (var0660 val0660) (var0661 val0661) (var0662 val0662) (var0663 val0663) (var0664 val0664) (var0665 val0665) (var0666 val0666) (var0667 val0667) (var0668 val0668) (var0669 val0669) (var0670 val0670) (var0671 val0671) (var0672 val0672) (var0673 val0673) (var0674 val0674) (var0675 val0675) (var0676 val0676) (var0677 val0677) (var0678 val0678) (var0679 val0679) (var0680 val0680) (var0681 val0681) (var0682 val0682) (var0683 val0683) (var0684 val0684) (var0685 val0685) (var0686 val0686) (var0687 val0687) (var0688 val0688) (var0689 val0689) (var0690 val0690) (var0691 val0691) (var0692 val0692) (var0693 val0693) (var0694 val0694) (var0695 val0695) (var0696 val0696) (var0697 val0697) (var0698 val0698) (var0699 val0699) (var0700 val0700) (var0701 val0701) (var0702 val0702) (var0703 val0703) (var0704 val0704) (var0705 val0705) (var0706 val0706) (var0707 val0707) (var0708 val0708) (var0709 val0709) (var0710 val0710) (var0711 val0711) (var0712 val0712) (var0713 val0713) (var0714 val0714) (var0715 val0715) (var0716 val0716) (var0717 val0717) (var0718 val0718) (var0719 val0719) (var0720 val0720) (var0721 val0721) (var0722 val0722) (var0723 val0723) (var0724 val0724) (var0725 val0725) (var0726 val0726) (var0727 val0727) (var0728 val0728) (var0729 val0729) (var0730 val0730) (var0731 val0731) (var0732 val0732) (var0733 val0733) (var0734 val0734) (var0735 val0735) (var0736 val0736) (var0737 val0737) (var0738 val0738) (var0739 val0739) (var0740 val0740) (var0741 val0741) (var0742 val0742) (var0743 val0743) (var0744 val0744) (var0745 val0745) (var0746 val0746) (var0747 val0747) (var0748 val0748) (var0749 val0749) (var0750 val0750) (var0751 val0751) (var0752 val0752) (var0753 val0753) (var0754 val0754) (var0755 val0755) (var0756 val0756) (var0757 val0757) (var0758 val0758) (var0759 val0759) (var0760 val0760) (var0761 val0761) (var0762 val0762) (var0763 val0763) (var0764 val0764) (var0765 val0765) (var0766 val0766) (var0767 val0767) (var0768 val0768) (var0769 val0769) (var0770 val0770) (var0771 val0771) (var0772 val0772) (var0773 val0773) (var0774 val0774) (var0775 val0775) (var0776 val0776) (var0777 val0777) (var0778 val0778) (var0779 val0779) (var0780 val0780) (var0781 val0781) (var0782 val0782) (var0783 val0783) (var0784 val0784) (var0785 val0785) (var0786 val0786) (var0787 val0787) (var0788 val0788) (var0789 val0789) (var0790 val0790) (var0791 val0791) (var0792 val0792) (var0793 val0793) (var0794 val0794) (var0795 val0795) (var0796 val0796) (var0797 val0797) (var0798 val0798) (var0799 val0799) (var0800 val0800) (var0801 val0801) (var0802 val0802) (var0803 val0803) (var0804 val0804) (var0805 val0805) (var0806 val0806) (var0807 val0807) (var0808 val0808) (var0809 val0809) (var0810 val0810) (var0811 val0811) (var0812 val0812) (var0813 val0813) (var0814 val0814) (var0815 val0815) (var0816 val0816) (var0817 val0817) (var0818 val0818) (var0819 val0819) (var0820 val0820) (var0821 val0821) (var0822 val0822) (var0823 val0823) (var0824 val0824) (var0825 val0825) (var0826 val0826) (var0827 val0827) (var0828 val0828) (var0829 val0829) (var0830 val0830) (var0831 val0831) (var0832 val0832) (var0833 val0833) (var0834 val0834) (var0835 val0835) (var0836 val0836) (var0837 val0837) (var0838 val0838) (var0839 val0839) (var0840 val0840) (var0841 val0841) (var0842 val0842) (var0843 val0843) (var0844 val0844) (var0845 val0845) (var0846 val0846) (var0847 val0847) (var0848 val0848) (var0849 val0849) (var0850 val0850) (var0851 val0851) (var0852 val0852) (var0853 val0853) (var0854 val0854) (var0855 val0855) (var0856 val0856) (var0857 val0857) (var0858 val0858) (var0859 val0859) (var0860 val0860) (var0861 val0861) (var0862 val0862) (var0863 val0863) (var0864 val0864) (var0865 val0865) (var0866 val0866) (var0867 val0867) (var0868 val0868) (var0869 val0869) (var0870 val0870) (var0871 val0871) (var0872 val0872) (var0873 val0873) (var0874 val0874) (var0875 val0875) (var0876 val0876) (var0877 val0877) (var0878 val0878) (var0879 val0879) (var0880 val0880) (var0881 val0881) (var0882 val0882) (var0883 val0883) (var0884 val0884) (var0885 val0885) (var0886 val0886) (var0887 val0887) (var0888 val0888) (var0889 val0889) (var0890 val0890) (var0891 val0891) (var0892 val0892) (var0893 val0893) (var0894 val0894) (var0895 val0895) (var0896 val0896) (var0897 val0897) (var0898 val0898) (var0899 val0899) (var0900 val0900) (var0901 val0901) (var0902 val0902) (var0903 val0903) (var0904 val0904) (var0905 val0905) (var0906 val0906) (var0907 val0907) (var0908 val0908) (var0909 val0909) (var0910 val0910) (var0911 val0911) (var0912 val0912) (var0913 val0913) (var0914 val0914) (var0915 val0915) (var0916 val0916) (var0917 val0917) (var0918 val0918) (var0919 val0919) (var0920 val0920) (var0921 val0921) (var0922 val0922) (var0923 val0923) (var0924 val0924) (var0925 val0925) (var0926 val0926) (var0927 val0927) (var0928 val0928) (var0929 val0929) (var0930 val0930) (var0931 val0931) (var0932 val0932) (var0933 val0933) (var0934 val0934) (var0935 val0935) (var0936 val0936) (var0937 val0937) (var0938 val0938) (var0939 val0939) (var0940 val0940) (var0941 val0941) (var0942 val0942) (var0943 val0943) (var0944 val0944) (var0945 val0945) (var0946 val0946) (var0947 val0947) (var0948 val0948) (var0949 val0949) (var0950 val0950) (var0951 val0951) (var0952 val0952) (var0953 val0953) (var0954 val0954) (var0955 val0955) (var0956 val0956) (var0957 val0957) (var0958 val0958) (var0959 val0959) (var0960 val0960) (var0961 val0961) (var0962 val0962) (var0963 val0963) (var0964 val0964) (var0965 val0965) (var0966 val0966) (var0967 val0967) (var0968 val0968) (var0969 val0969) (var0970 val0970) (var0971 val0971) (var0972 val0972) (var0973 val0973) (var0974 val0974) (var0975 val0975) (var0976 val0976) (var0977 val0977) (var0978 val0978) (var0979 val0979) (var0980 val0980) (var0981 val0981) (var0982 val0982) (var0983 val0983) (var0984 val0984) (var0985 val0985) (var0986 val0986) (var0987 val0987) (var0988 val0988) (var0989 val0989) (var0990 val0990) (var0991 val0991) (var0992 val0992) (var0993 val0993) (var0994 val0994) (var0995 val0995) (var0996 val0996) (var0997 val0997) (var0998 val0998) (var0999 val0999) (var1000 val1000) (var1001 val1001) (var1002 val1002) (var1003 val1003) (var1004 val1004) (var1005 val1005) (var1006 val1006) (var1007 val1007) (var1008 val1008) (var1009 val1009) (var1010 val1010) (var1011 val1011) (var1012 val1012) (var1013 val1013) (var1014 val1014) (var1015 val1015) (var1016 val1016) (var1017 val1017) (var1018 val1018) (var1019 val1019) (var1020 val1020) (var1021 val1021) (var1022 val1022) (var1023 val1023) (var1024 val1024) (var1025 val1025) (var1026 val1026) (var1027 val1027) (var1028 val1028) (var1029 val1029) (var1030 val1030) (var1031 val1031) (var1032 val1032) (var1033 val1033) (var1034 val1034) (var1035 val1035) (var1036 val1036) (var1037 val1037) (var1038 val1038) (var1039 val1039) (var1040 val1040) (var1041 val1041) (var1042 val1042) (var1043 val1043) (var1044 val1044) (var1045 val1045) (var1046 val1046) (var1047 val1047) (var1048 val1048) (var1049 val1049) (var1050 val1050) (var1051 val1051) (var1052 val1052) (var1053 val1053) (var1054 val1054) (var1055 val1055) (var1056 val1056) (var1057 val1057) (var1058 val1058) (var1059 val1059) (var1060 val1060) (var1061 val1061) (var1062 val1062) (var1063 val1063) (var1064 val1064) (var1065 val1065) (var1066 val1066) (var1067 val1067) (var1068 val1068) (var1069 val1069) (var1070 val1070) (var1071 val1071) (var1072 val1072) (var1073 val1073) (var1074 val1074) (var1075 val1075) (var1076 val1076) (var1077 val1077) (var1078 val1078) (var1079 val1079) (var1080 val1080) (var1081 val1081) (var1082 val1082) (var1083 val1083) (var1084 val1084) (var1085 val1085) (var1086 val1086) (var1087 val1087) (var1088 val1088) (var1089 val1089) (var1090 val1090) (var1091 val1091) (var1092 val1092) (var1093 val1093) (var1094 val1094) (var1095 val1095) (var1096 val1096) (var1097 val1097) (var1098 val1098) (var1099 val1099) (var1100 val1100) (var1101 val1101) (var1102 val1102) (var1103 val1103) (var1104 val1104) (var1105 val1105) (var1106 val1106) (var1107 val1107) (var1108 val1108) (var1109 val1109) (var1110 val1110) (var1111 val1111) (var1112 val1112) (var1113 val1113) (var1114 val1114) (var1115 val1115) (var1116 val1116) (var1117 val1117) (var1118 val1118) (var1119 val1119) (var1120 val1120) (var1121 val1121) (var1122 val1122) (var1123 val1123) (var1124 val1124) (var1125 val1125) (var1126 val1126) (var1127 val1127) (var1128 val1128) (var1129 val1129) (var1130 val1130) (var1131 val1131) (var1132 val1132) (var1133 val1133) (var1134 val1134) (var1135 val1135) (var1136 val1136) (var1137 val1137) (var1138 val1138) (var1139 val1139) (var1140 val1140) (var1141 val1141) (var1142 val1142) (var1143 val1143) (var1144 val1144) (var1145 val1145) (var1146 val1146) (var1147 val1147) (var1148 val1148) (var1149 val1149) (var1150 val1150) (var1151 val1151) (var1152 val1152) (var1153 val1153) (var1154 val1154) (var1155 val1155) (var1156 val1156) (var1157 val1157) (var1158 val1158) (var1159 val1159) (var1160 val1160) (var1161 val1161) (var1162 val1162) (var1163 val1163) (var1164 val1164) (var1165 val1165) (var1166 val1166) (var1167 val1167) (var1168 val1168) (var1169 val1169) (var1170 val1170) (var1171 val1171) (var1172 val1172) (var1173 val1173) (var1174 val1174) (var1175 val1175) (var1176 val1176) (var1177 val1177) (var1178 val1178) (var1179 val1179) (var1180 val1180) (var1181 val1181) (var1182 val1182) (var1183 val1183) (var1184 val1184) (var1185 val1185) (var1186 val1186) (var1187 val1187) (var1188 val1188) (var1189 val1189) (var1190 val1190) (var1191 val1191) (var1192 val1192) (var1193 val1193) (var1194 val1194) (var1195 val1195) (var1196 val1196) (var1197 val1197) (var1198 val1198) (var1199 val1199) (var1200 val1200) (var1201 val1201) (var1202 val1202) (var1203 val1203) (var1204 val1204) (var1205 val1205) (var1206 val1206) (var1207 val1207) (var1208 val1208) (var1209 val1209) (var1210 val1210) (var1211 val1211) (var1212 val1212) (var1213 val1213) (var1214 val1214) (var1215 val1215) (var1216 val1216) (var1217 val1217) (var1218 val1218) (var1219 val1219) (var1220 val1220) (var1221 val1221) (var1222 val1222) (var1223 val1223) (var1224 val1224) (var1225 val1225) (var1226 val1226) (var1227 val1227) (var1228 val1228) (var1229 val1229) (var1230 val1230) (var1231 val1231) (var1232 val1232) (var1233 val1233) (var1234 val1234) (var1235 val1235) (var1236 val1236) (var1237 val1237) (var1238 val1238) (var1239 val1239) (var1240 val1240) (var1241 val1241) (var1242 val1242) (var1243 val1243) (var1244 val1244) (var1245 val1245) (var1246 val1246) (var1247 val1247) (var1248 val1248) (var1249 val1249) (var1250 val1250) (var1251 val1251) (var1252 val1252) (var1253 val1253) (var1254 val1254) (var1255 val1255) (var1256 val1256) (var1257 val1257) (var1258 val1258) (var1259 val1259) (var1260 val1260) (var1261 val1261) (var1262 val1262) (var1263 val1263) (var1264 val1264) (var1265 val1265) (var1266 val1266) (var1267 val1267) (var1268 val1268) (var1269 val1269) (var1270 val1270) (var1271 val1271) (var1272 val1272) (var1273 val1273) (var1274 val1274) (var1275 val1275) (var1276 val1276) (var1277 val1277) (var1278 val1278) (var1279 val1279) (var1280 val1280) (var1281 val1281) (var1282 val1282) (var1283 val1283) (var1284 val1284) (var1285 val1285) (var1286 val1286) (var1287 val1287) (var1288 val1288) (var1289 val1289) (var1290 val1290) (var1291 val1291) (var1292 val1292) (var1293 val1293) (var1294 val1294) (var1295 val1295) (var1296 val1296) (var1297 val1297) (var1298 val1298) (var1299 val1299) (var1300 val1300) (var1301 val1301) (var1302 val1302) (var1303 val1303) (var1304 val1304) (var1305 val1305) (var1306 val1306) (var1307 val1307) (var1308 val1308) (var1309 val1309) (var1310 val1310) (var1311 val1311) (var1312 val1312) (var1313 val1313) (var1314 val1314) (var1315 val1315) (var1316 val1316) (var1317 val1317) (var1318 val1318) (var1319 val1319) (var1320 val1320) (var1321 val1321) (var1322 val1322) (var1323 val1323) (var1324 val1324) (var1325 val1325) (var1326 val1326) (var1327 val1327) (var1328 val1328) (var1329 val1329) (var1330 val1330) (var1331 val1331) (var1332 val1332) (var1333 val1333) (var1334 val1334) (var1335 val1335) (var1336 val1336) (var1337 val1337) (var1338 val1338) (var1339 val1339) (var1340 val1340) (var1341 val1341) (var1342 val1342) (var1343 val1343) (var1344 val1344) (var1345 val1345) (var1346 val1346) (var1347 val1347) (var1348 val1348) (var1349 val1349) (var1350 val1350) (var1351 val1351) (var1352 val1352) (var1353 val1353) (var1354 val1354) (var1355 val1355) (var1356 val1356) (var1357 val1357) (var1358 val1358) (var1359 val1359) (var1360 val1360) (var1361 val1361) (var1362 val1362) (var1363 val1363) (var1364 val1364) (var1365 val1365) (var1366 val1366) (var1367 val1367) (var1368 val1368) (var1369 val1369) (var1370 val1370) (var1371 val1371) (var1372 val1372) (var1373 val1373) (var1374 val1374) (var1375 val1375) (var1376 val1376) (var1377 val1377) (var1378 val1378) (var1379 val1379) (var1380 val1380) (var1381 val1381) (var1382 val1382) (var1383 val1383) (var1384 val1384) (var1385 val1385) (var1386 val1386) (var1387 val1387) (var1388 val1388) (var1389 val1389) (var1390 val1390) (var1391 val1391) (var1392 val1392) (var1393 val1393) (var1394 val1394) (var1395 val1395) (var1396 val1396) (var1397 val1397) (var1398 val1398) (var1399 val1399) (var1400 val1400) (var1401 val1401) (var1402 val1402) (var1403 val1403) (var1404 val1404) (var1405 val1405) (var1406 val1406) (var1407 val1407) (var1408 val1408) (var1409 val1409) (var1410 val1410) (var1411 val1411) (var1412 val1412) (var1413 val1413) (var1414 val1414) (var1415 val1415) (var1416 val1416) (var1417 val1417) (var1418 val1418) (var1419 val1419) (var1420 val1420) (var1421 val1421) (var1422 val1422) (var1423 val1423) (var1424 val1424) (var1425 val1425) (var1426 val1426) (var1427 val1427) (var1428 val1428) (var1429 val1429) (var1430 val1430) (var1431 val1431) (var1432 val1432) (var1433 val1433) (var1434 val1434) (var1435 val1435) (var1436 val1436) (var1437 val1437) (var1438 val1438) (var1439 val1439) (var1440 val1440) (var1441 val1441) (var1442 val1442) (var1443 val1443) (var1444 val1444) (var1445 val1445) (var1446 val1446) (var1447 val1447) (var1448 val1448) (var1449 val1449) (var1450 val1450) (var1451 val1451) (var1452 val1452) (var1453 val1453) (var1454 val1454) (var1455 val1455) (var1456 val1456) (var1457 val1457) (var1458 val1458) (var1459 val1459) (var1460 val1460) (var1461 val1461) (var1462 val1462) (var1463 val1463) (var1464 val1464) (var1465 val1465) (var1466 val1466) (var1467 val1467) (var1468 val1468) (var1469 val1469) (var1470 val1470) (var1471 val1471) (var1472 val1472) (var1473 val1473) (var1474 val1474) (var1475 val1475) (var1476 val1476) (var1477 val1477) (var1478 val1478) (var1479 val1479) (var1480 val1480) (var1481 val1481) (var1482 val1482) (var1483 val1483) (var1484 val1484) (var1485 val1485) (var1486 val1486) (var1487 val1487) (var1488 val1488) (var1489 val1489) (var1490 val1490) (var1491 val1491) (var1492 val1492) (var1493 val1493) (var1494 val1494) (var1495 val1495) (var1496 val1496) (var1497 val1497) (var1498 val1498) (var1499 val1499) (var1500 val1500) (var1501 val1501) (var1502 val1502) (var1503 val1503) (var1504 val1504) (var1505 val1505) (var1506 val1506) (var1507 val1507) (var1508 val1508) (var1509 val1509) (var1510 val1510) (var1511 val1511) (var1512 val1512) (var1513 val1513) (var1514 val1514) (var1515 val1515) (var1516 val1516) (var1517 val1517) (var1518 val1518) (var1519 val1519) (var1520 val1520) (var1521 val1521) (var1522 val1522) (var1523 val1523) (var1524 val1524) (var1525 val1525) (var1526 val1526) (var1527 val1527) (var1528 val1528) (var1529 val1529) (var1530 val1530) (var1531 val1531) (var1532 val1532) (var1533 val1533) (var1534 val1534) (var1535 val1535) (var1536 val1536) (var1537 val1537) (var1538 val1538) (var1539 val1539) (var1540 val1540) (var1541 val1541) (var1542 val1542) (var1543 val1543) (var1544 val1544) (var1545 val1545) (var1546 val1546) (var1547 val1547) (var1548 val1548) (var1549 val1549) (var1550 val1550) (var1551 val1551) (var1552 val1552) (var1553 val1553) (var1554 val1554) (var1555 val1555) (var1556 val1556) (var1557 val1557) (var1558 val1558) (var1559 val1559) (var1560 val1560) (var1561 val1561) (var1562 val1562) (var1563 val1563) (var1564 val1564) (var1565 val1565) (var1566 val1566) (var1567 val1567) (var1568 val1568) (var1569 val1569) (var1570 val1570) (var1571 val1571) (var1572 val1572) (var1573 val1573) (var1574 val1574) (var1575 val1575) (var1576 val1576) (var1577 val1577) (var1578 val1578) (var1579 val1579) (var1580 val1580) (var1581 val1581) (var1582 val1582) (var1583 val1583) (var1584 val1584) (var1585 val1585) (var1586 val1586) (var1587 val1587) (var1588 val1588) (var1589 val1589) (var1590 val1590) (var1591 val1591) (var1592 val1592) (var1593 val1593) (var1594 val1594) (var1595 val1595) (var1596 val1596) (var1597 val1597) (var1598 val1598) (var1599 val1599) (var1600 val1600) (var1601 val1601) (var1602 val1602) (var1603 val1603) (var1604 val1604) (var1605 val1605) (var1606 val1606) (var1607 val1607) (var1608 val1608) (var1609 val1609) (var1610 val1610) (var1611 val1611) (var1612 val1612) (var1613 val1613) (var1614 val1614) (var1615 val1615) (var1616 val1616) (var1617 val1617) (var1618 val1618) (var1619 val1619) (var1620 val1620) (var1621 val1621) (var1622 val1622) (var1623 val1623) (var1624 val1624) (var1625 val1625) (var1626 val1626) (var1627 val1627) (var1628 val1628) (var1629 val1629) (var1630 val1630) (var1631 val1631) (var1632 val1632) (var1633 val1633) (var1634 val1634) (var1635 val1635) (var1636 val1636) (var1637 val1637) (var1638 val1638) (var1639 val1639) (var1640 val1640) (var1641 val1641) (var1642 val1642) (var1643 val1643) (var1644 val1644) (var1645 val1645) (var1646 val1646) (var1647 val1647) (var1648 val1648) (var1649 val1649) (var1650 val1650) (var1651 val1651) (var1652 val1652) (var1653 val1653) (var1654 val1654) (var1655 val1655) (var1656 val1656) (var1657 val1657) (var1658 val1658) (var1659 val1659) (var1660 val1660) (var1661 val1661) (var1662 val1662) (var1663 val1663) (var1664 val1664) (var1665 val1665) (var1666 val1666) (var1667 val1667) (var1668 val1668) (var1669 val1669) (var1670 val1670) (var1671 val1671) (var1672 val1672) (var1673 val1673) (var1674 val1674) (var1675 val1675) (var1676 val1676) (var1677 val1677) (var1678 val1678) (var1679 val1679) (var1680 val1680) (var1681 val1681) (var1682 val1682) (var1683 val1683) (var1684 val1684) (var1685 val1685) (var1686 val1686) (var1687 val1687) (var1688 val1688) (var1689 val1689) (var1690 val1690) (var1691 val1691) (var1692 val1692) (var1693 val1693) (var1694 val1694) (var1695 val1695) (var1696 val1696) (var1697 val1697) (var1698 val1698) (var1699 val1699) (var1700 val1700) (var1701 val1701) (var1702 val1702) (var1703 val1703) (var1704 val1704) (var1705 val1705) (var1706 val1706) (var1707 val1707) (var1708 val1708) (var1709 val1709) (var1710 val1710) (var1711 val1711) (var1712 val1712) (var1713 val1713) (var1714 val1714) (var1715 val1715) (var1716 val1716) (var1717 val1717) (var1718 val1718) (var1719 val1719) (var1720 val1720) (var1721 val1721) (var1722 val1722) (var1723 val1723) (var1724 val1724) (var1725 val1725) (var1726 val1726) (var1727 val1727) (var1728 val1728) (var1729 val1729) (var1730 val1730) (var1731 val1731) (var1732 val1732) (var1733 val1733) (var1734 val1734) (var1735 val1735) (var1736 val1736) (var1737 val1737) (var1738 val1738) (var1739 val1739) (var1740 val1740) (var1741 val1741) (var1742 val1742) (var1743 val1743) (var1744 val1744) (var1745 val1745) (var1746 val1746) (var1747 val1747) (var1748 val1748) (var1749 val1749) (var1750 val1750) (var1751 val1751) (var1752 val1752) (var1753 val1753) (var1754 val1754) (var1755 val1755) (var1756 val1756) (var1757 val1757) (var1758 val1758) (var1759 val1759) (var1760 val1760) (var1761 val1761) (var1762 val1762) (var1763 val1763) (var1764 val1764) (var1765 val1765) (var1766 val1766) (var1767 val1767) (var1768 val1768) (var1769 val1769) (var1770 val1770) (var1771 val1771) (var1772 val1772) (var1773 val1773) (var1774 val1774) (var1775 val1775) (var1776 val1776) (var1777 val1777) (var1778 val1778) (var1779 val1779) (var1780 val1780) (var1781 val1781) (var1782 val1782) (var1783 val1783) (var1784 val1784) (var1785 val1785) (var1786 val1786) (var1787 val1787) (var1788 val1788) (var1789 val1789) (var1790 val1790) (var1791 val1791) (var1792 val1792) (var1793 val1793) (var1794 val1794) (var1795 val1795) (var1796 val1796) (var1797 val1797) (var1798 val1798) (var1799 val1799) (var1800 val1800) (var1801 val1801) (var1802 val1802) (var1803 val1803) (var1804 val1804) (var1805 val1805) (var1806 val1806) (var1807 val1807) (var1808 val1808) (var1809 val1809) (var1810 val1810) (var1811 val1811) (var1812 val1812) (var1813 val1813) (var1814 val1814) (var1815 val1815) (var1816 val1816) (var1817 val1817) (var1818 val1818) (var1819 val1819) (var1820 val1820) (var1821 val1821) (var1822 val1822) (var1823 val1823) (var1824 val1824) (var1825 val1825) (var1826 val1826) (var1827 val1827) (var1828 val1828) (var1829 val1829) (var1830 val1830) (var1831 val1831) (var1832 val1832) (var1833 val1833) (var1834 val1834) (var1835 val1835) (var1836 val1836) (var1837 val1837) (var1838 val1838) (var1839 val1839) (var1840 val1840) (var1841 val1841) (var1842 val1842) (var1843 val1843) (var1844 val1844) (var1845 val1845) (var1846 val1846) (var1847 val1847) (var1848 val1848) (var1849 val1849) (var1850 val1850) (var1851 val1851) (var1852 val1852) (var1853 val1853) (var1854 val1854) (var1855 val1855) (var1856 val1856) (var1857 val1857) (var1858 val1858) (var1859 val1859) (var1860 val1860) (var1861 val1861) (var1862 val1862) (var1863 val1863) (var1864 val1864) (var1865 val1865) (var1866 val1866) (var1867 val1867) (var1868 val1868) (var1869 val1869) (var1870 val1870) (var1871 val1871) (var1872 val1872) (var1873 val1873) (var1874 val1874) (var1875 val1875) (var1876 val1876) (var1877 val1877) (var1878 val1878) (var1879 val1879) (var1880 val1880) (var1881 val1881) (var1882 val1882) (var1883 val1883) (var1884 val1884) (var1885 val1885) (var1886 val1886) (var1887 val1887) (var1888 val1888) (var1889 val1889) (var1890 val1890) (var1891 val1891) (var1892 val1892) (var1893 val1893) (var1894 val1894) (var1895 val1895) (var1896 val1896) (var1897 val1897) (var1898 val1898) (var1899 val1899) (var1900 val1900) (var1901 val1901) (var1902 val1902) (var1903 val1903) (var1904 val1904) (var1905 val1905) (var1906 val1906) (var1907 val1907) (var1908 val1908) (var1909 val1909) (var1910 val1910) (var1911 val1911) (var1912 val1912) (var1913 val1913) (var1914 val1914) (var1915 val1915) (var1916 val1916) (var1917 val1917) (var1918 val1918) (var1919 val1919) (var1920 val1920) (var1921 val1921) (var1922 val1922) (var1923 val1923) (var1924 val1924) (var1925 val1925) (var1926 val1926) (var1927 val1927) (var1928 val1928) (var1929 val1929) (var1930 val1930) (var1931 val1931) (var1932 val1932) (var1933 val1933) (var1934 val1934) (var1935 val1935) (var1936 val1936) (var1937 val1937) (var1938 val1938) (var1939 val1939) (var1940 val1940) (var1941 val1941) (var1942 val1942) (var1943 val1943) (var1944 val1944) (var1945 val1945) (var1946 val1946) (var1947 val1947) (var1948 val1948) (var1949 val1949) (var1950 val1950) (var1951 val1951) (var1952 val1952) (var1953 val1953) (var1954 val1954) (var1955 val1955) (var1956 val1956) (var1957 val1957) (var1958 val1958) (var1959 val1959) (var1960 val1960) (var1961 val1961) (var1962 val1962) (var1963 val1963) (var1964 val1964) (var1965 val1965) (var1966 val1966) (var1967 val1967) (var1968 val1968) (var1969 val1969) (var1970 val1970) (var1971 val1971) (var1972 val1972) (var1973 val1973) (var1974 val1974) (var1975 val1975) (var1976 val1976) (var1977 val1977) (var1978 val1978) (var1979 val1979) (var1980 val1980) (var1981 val1981) (var1982 val1982) (var1983 val1983) (var1984 val1984) (var1985 val1985) (var1986 val1986) (var1987 val1987) (var1988 val1988) (var1989 val1989) (var1990 val1990) (var1991 val1991) (var1992 val1992) (var1993 val1993) (var1994 val1994) (var1995 val1995) (var1996 val1996) (var1997 val1997) (var1998 val1998) (var1999 val1999) (var2000 val2000) (var2001 val2001) (var2002 val2002) (var2003 val2003) (var2004 val2004) (var2005 val2005) (var2006 val2006) (var2007 val2007) (var2008 val2008) (var2009 val2009) (var2010 val2010) (var2011 val2011) (var2012 val2012) (var2013 val2013) (var2014 val2014) (var2015 val2015) (var2016 val2016) (var2017 val2017) (var2018 val2018) (var2019 val2019) (var2020 val2020) (var2021 val2021) (var2022 val2022) (var2023 val2023) (var2024 val2024) (var2025 val2025) (var2026 val2026) (var2027 val2027) (var2028 val2028) (var2029 val2029) (var2030 val2030) (var2031 val2031) (var2032 val2032) (var2033 val2033) (var2034 val2034) (var2035 val2035) (var2036 val2036) (var2037 val2037) (var2038 val2038) (var2039 val2039) (var2040 val2040) (var2041 val2041) (var2042 val2042) (var2043 val2043) (var2044 val2044) (var2045 val2045) (var2046 val2046) (var2047 val2047) (var2048 val2048) (var2049 val2049) (var2050 val2050) (var2051 val2051) (var2052 val2052) (var2053 val2053) (var2054 val2054) (var2055 val2055) (var2056 val2056) (var2057 val2057) (var2058 val2058) (var2059 val2059) (var2060 val2060) (var2061 val2061) (var2062 val2062) (var2063 val2063) (var2064 val2064) (var2065 val2065) (var2066 val2066) (var2067 val2067) (var2068 val2068) (var2069 val2069) (var2070 val2070) (var2071 val2071) (var2072 val2072) (var2073 val2073) (var2074 val2074) (var2075 val2075) (var2076 val2076) (var2077 val2077) (var2078 val2078) (var2079 val2079) (var2080 val2080) (var2081 val2081) (var2082 val2082) (var2083 val2083) (var2084 val2084) (var2085 val2085) (var2086 val2086) (var2087 val2087) (var2088 val2088) (var2089 val2089) (var2090 val2090) (var2091 val2091) (var2092 val2092) (var2093 val2093) (var2094 val2094) (var2095 val2095) (var2096 val2096) (var2097 val2097) (var2098 val2098) (var2099 val2099) (var2100 val2100) (var2101 val2101) (var2102 val2102) (var2103 val2103) (var2104 val2104) (var2105 val2105) (var2106 val2106) (var2107 val2107) (var2108 val2108) (var2109 val2109) (var2110 val2110) (var2111 val2111) (var2112 val2112) (var2113 val2113) (var2114 val2114) (var2115 val2115) (var2116 val2116) (var2117 val2117) (var2118 val2118) (var2119 val2119) (var2120 val2120) (var2121 val2121) (var2122 val2122) (var2123 val2123) (var2124 val2124) (var2125 val2125) (var2126 val2126) (var2127 val2127) (var2128 val2128) (var2129 val2129) (var2130 val2130) (var2131 val2131) (var2132 val2132) (var2133 val2133) (var2134 val2134) (var2135 val2135) (var2136 val2136) (var2137 val2137) (var2138 val2138) (var2139 val2139) (var2140 val2140) (var2141 val2141) (var2142 val2142) (var2143 val2143) (var2144 val2144) (var2145 val2145) (var2146 val2146) (var2147 val2147) (var2148 val2148) (var2149 val2149) (var2150 val2150) (var2151 val2151) (var2152 val2152) (var2153 val2153) (var2154 val2154) (var2155 val2155) (var2156 val2156) (var2157 val2157) (var2158 val2158) (var2159 val2159) (var2160 val2160) (var2161 val2161) (var2162 val2162) (var2163 val2163) (var2164 val2164) (var2165 val2165) (var2166 val2166) (var2167 val2167) (var2168 val2168) (var2169 val2169) (var2170 val2170) (var2171 val2171) (var2172 val2172) (var2173 val2173) (var2174 val2174) (var2175 val2175) (var2176 val2176) (var2177 val2177) (var2178 val2178) (var2179 val2179) (var2180 val2180) (var2181 val2181) (var2182 val2182) (var2183 val2183) (var2184 val2184) (var2185 val2185) (var2186 val2186) (var2187 val2187) (var2188 val2188) (var2189 val2189) (var2190 val2190) (var2191 val2191) (var2192 val2192) (var2193 val2193) (var2194 val2194) (var2195 val2195) (var2196 val2196) (var2197 val2197) (var2198 val2198) (var2199 val2199) (var2200 val2200) (var2201 val2201) (var2202 val2202) (var2203 val2203) (var2204 val2204) (var2205 val2205) (var2206 val2206) (var2207 val2207) (var2208 val2208) (var2209 val2209) (var2210 val2210) (var2211 val2211) (var2212 val2212) (var2213 val2213) (var2214 val2214) (var2215 val2215) (var2216 val2216) (var2217 val2217) (var2218 val2218) (var2219 val2219) (var2220 val2220) (var2221 val2221) (var2222 val2222) (var2223 val2223) (var2224 val2224) (var2225 val2225) (var2226 val2226) (var2227 val2227) (var2228 val2228) (var2229 val2229) (var2230 val2230) (var2231 val2231) (var2232 val2232) (var2233 val2233) (var2234 val2234) (var2235 val2235) (var2236 val2236) (var2237 val2237) (var2238 val2238) (var2239 val2239) (var2240 val2240) (var2241 val2241) (var2242 val2242) (var2243 val2243) (var2244 val2244) (var2245 val2245) (var2246 val2246) (var2247 val2247) (var2248 val2248) (var2249 val2249) (var2250 val2250) (var2251 val2251) (var2252 val2252) (var2253 val2253) (var2254 val2254) (var2255 val2255) (var2256 val2256) (var2257 val2257) (var2258 val2258) (var2259 val2259) (var2260 val2260) (var2261 val2261) (var2262 val2262) (var2263 val2263) (var2264 val2264) (var2265 val2265) (var2266 val2266) (var2267 val2267) (var2268 val2268) (var2269 val2269) (var2270 val2270) (var2271 val2271) (var2272 val2272) (var2273 val2273) (var2274 val2274) (var2275 val2275) (var2276 val2276) (var2277 val2277) (var2278 val2278) (var2279 val2279) (var2280 val2280) (var2281 val2281) (var2282 val2282) (var2283 val2283) (var2284 val2284) (var2285 val2285) (var2286 val2286) (var2287 val2287) (var2288 val2288) (var2289 val2289) (var2290 val2290) (var2291 val2291) (var2292 val2292) (var2293 val2293) (var2294 val2294) (var2295 val2295) (var2296 val2296) (var2297 val2297) (var2298 val2298) (var2299 val2299) (var2300 val2300) (var2301 val2301) (var2302 val2302) (var2303 val2303) (var2304 val2304) (var2305 val2305) (var2306 val2306) (var2307 val2307) (var2308 val2308) (var2309 val2309) (var2310 val2310) (var2311 val2311) (var2312 val2312) (var2313 val2313) (var2314 val2314) (var2315 val2315) (var2316 val2316) (var2317 val2317) (var2318 val2318) (var2319 val2319) (var2320 val2320) (var2321 val2321) (var2322 val2322) (var2323 val2323) (var2324 val2324) (var2325 val2325) (var2326 val2326) (var2327 val2327) (var2328 val2328) (var2329 val2329) (var2330 val2330) (var2331 val2331) (var2332 val2332) (var2333 val2333) (var2334 val2334) (var2335 val2335) (var2336 val2336) (var2337 val2337) (var2338 val2338) (var2339 val2339) (var2340 val2340) (var2341 val2341) (var2342 val2342) (var2343 val2343) (var2344 val2344) (var2345 val2345) (var2346 val2346) (var2347 val2347) (var2348 val2348) (var2349 val2349) (var2350 val2350) (var2351 val2351) (var2352 val2352) (var2353 val2353) (var2354 val2354) (var2355 val2355) (var2356 val2356) (var2357 val2357) (var2358 val2358) (var2359 val2359) (var2360 val2360) (var2361 val2361) (var2362 val2362) (var2363 val2363) (var2364 val2364) (var2365 val2365) (var2366 val2366) (var2367 val2367) (var2368 val2368) (var2369 val2369) (var2370 val2370) (var2371 val2371) (var2372 val2372) (var2373 val2373) (var2374 val2374) (var2375 val2375) (var2376 val2376) (var2377 val2377) (var2378 val2378) (var2379 val2379) (var2380 val2380) (var2381 val2381) (var2382 val2382) (var2383 val2383) (var2384 val2384) (var2385 val2385) (var2386 val2386) (var2387 val2387) (var2388 val2388) (var2389 val2389) (var2390 val2390) (var2391 val2391) (var2392 val2392) (var2393 val2393) (var2394 val2394) (var2395 val2395) (var2396 val2396) (var2397 val2397) (var2398 val2398) (var2399 val2399) (var2400 val2400) (var2401 val2401) (var2402 val2402) (var2403 val2403) (var2404 val2404) (var2405 val2405) (var2406 val2406) (var2407 val2407) (var2408 val2408) (var2409 val2409) (var2410 val2410) (var2411 val2411) (var2412 val2412) (var2413 val2413) (var2414 val2414) (var2415 val2415) (var2416 val2416) (var2417 val2417) (var2418 val2418) (var2419 val2419) (var2420 val2420) (var2421 val2421) (var2422 val2422) (var2423 val2423) (var2424 val2424) (var2425 val2425) (var2426 val2426) (var2427 val2427) (var2428 val2428) (var2429 val2429) (var2430 val2430) (var2431 val2431) (var2432 val2432) (var2433 val2433) (var2434 val2434) (var2435 val2435) (var2436 val2436) (var2437 val2437) (var2438 val2438) (var2439 val2439) (var2440 val2440) (var2441 val2441) (var2442 val2442) (var2443 val2443) (var2444 val2444) (var2445 val2445) (var2446 val2446) (var2447 val2447) (var2448 val2448) (var2449 val2449) (var2450 val2450) (var2451 val2451) (var2452 val2452) (var2453 val2453) (var2454 val2454) (var2455 val2455) (var2456 val2456) (var2457 val2457) (var2458 val2458) (var2459 val2459) (var2460 val2460) (var2461 val2461) (var2462 val2462) (var2463 val2463) (var2464 val2464) (var2465 val2465) (var2466 val2466) (var2467 val2467) (var2468 val2468) (var2469 val2469) (var2470 val2470) (var2471 val2471) (var2472 val2472) (var2473 val2473) (var2474 val2474) (var2475 val2475) (var2476 val2476) (var2477 val2477) (var2478 val2478) (var2479 val2479) (var2480 val2480) (var2481 val2481) (var2482 val2482) (var2483 val2483) (var2484 val2484) (var2485 val2485) (var2486 val2486) (var2487 val2487) (var2488 val2488) (var2489 val2489) (var2490 val2490) (var2491 val2491) (var2492 val2492) (var2493 val2493) (var2494 val2494) (var2495 val2495) (var2496 val2496) (var2497 val2497) (var2498 val2498) (var2499 val2499) (var2500 val2500) (var2501 val2501) (var2502 val2502) (var2503 val2503) (var2504 val2504) (var2505 val2505) (var2506 val2506) (var2507 val2507) (var2508 val2508) (var2509 val2509) (var2510 val2510) (var2511 val2511) (var2512 val2512) (var2513 val2513) (var2514 val2514) (var2515 val2515) (var2516 val2516) (var2517 val2517) (var2518 val2518) (var2519 val2519) (var2520 val2520) (var2521 val2521) (var2522 val2522) (var2523 val2523) (var2524 val2524) (var2525 val2525) (var2526 val2526) (var2527 val2527) (var2528 val2528) (var2529 val2529) (var2530 val2530) (var2531 val2531) (var2532 val2532) (var2533 val2533) (var2534 val2534) (var2535 val2535) (var2536 val2536) (var2537 val2537) (var2538 val2538) (var2539 val2539) (var2540 val2540) (var2541 val2541) (var2542 val2542) (var2543 val2543) (var2544 val2544) (var2545 val2545) (var2546 val2546) (var2547 val2547) (var2548 val2548) (var2549 val2549) (var2550 val2550) (var2551 val2551) (var2552 val2552) (var2553 val2553) (var2554 val2554) (var2555 val2555) (var2556 val2556) (var2557 val2557) (var2558 val2558) (var2559 val2559) (var2560 val2560) (var2561 val2561) (var2562 val2562) (var2563 val2563) (var2564 val2564) (var2565 val2565) (var2566 val2566) (var2567 val2567) (var2568 val2568) (var2569 val2569) (var2570 val2570) (var2571 val2571) (var2572 val2572) (var2573 val2573) (var2574 val2574) (var2575 val2575) (var2576 val2576) (var2577 val2577) (var2578 val2578) (var2579 val2579) (var2580 val2580) (var2581 val2581) (var2582 val2582) (var2583 val2583) (var2584 val2584) (var2585 val2585) (var2586 val2586) (var2587 val2587) (var2588 val2588) (var2589 val2589) (var2590 val2590) (var2591 val2591) (var2592 val2592) (var2593 val2593) (var2594 val2594) (var2595 val2595) (var2596 val2596) (var2597 val2597) (var2598 val2598) (var2599 val2599) (var2600 val2600) (var2601 val2601) (var2602 val2602) (var2603 val2603) (var2604 val2604) (var2605 val2605) (var2606 val2606) (var2607 val2607) (var2608 val2608) (var2609 val2609) (var2610 val2610) (var2611 val2611) (var2612 val2612) (var2613 val2613) (var2614 val2614) (var2615 val2615) (var2616 val2616) (var2617 val2617) (var2618 val2618) (var2619 val2619) (var2620 val2620) (var2621 val2621) (var2622 val2622) (var2623 val2623) (var2624 val2624) (var2625 val2625) (var2626 val2626) (var2627 val2627) (var2628 val2628) (var2629 val2629) (var2630 val2630) (var2631 val2631) (var2632 val2632) (var2633 val2633) (var2634 val2634) (var2635 val2635) (var2636 val2636) (var2637 val2637) (var2638 val2638) (var2639 val2639) (var2640 val2640) (var2641 val2641) (var2642 val2642) (var2643 val2643) (var2644 val2644) (var2645 val2645) (var2646 val2646) (var2647 val2647) (var2648 val2648) (var2649 val2649) (var2650 val2650) (var2651 val2651) (var2652 val2652) (var2653 val2653) (var2654 val2654) (var2655 val2655) (var2656 val2656) (var2657 val2657) (var2658 val2658) (var2659 val2659) (var2660 val2660) (var2661 val2661) (var2662 val2662) (var2663 val2663) (var2664 val2664) (var2665 val2665) (var2666 val2666) (var2667 val2667) (var2668 val2668) (var2669 val2669) (var2670 val2670) (var2671 val2671) (var2672 val2672) (var2673 val2673) (var2674 val2674) (var2675 val2675) (var2676 val2676) (var2677 val2677) (var2678 val2678) (var2679 val2679) (var2680 val2680) (var2681 val2681) (var2682 val2682) (var2683 val2683) (var2684 val2684) (var2685 val2685) (var2686 val2686) (var2687 val2687) (var2688 val2688) (var2689 val2689) (var2690 val2690) (var2691 val2691) (var2692 val2692) (var2693 val2693) (var2694 val2694) (var2695 val2695) (var2696 val2696) (var2697 val2697) (var2698 val2698) (var2699 val2699) (var2700 val2700) (var2701 val2701) (var2702 val2702) (var2703 val2703) (var2704 val2704) (var2705 val2705) (var2706 val2706) (var2707 val2707) (var2708 val2708) (var2709 val2709) (var2710 val2710) (var2711 val2711) (var2712 val2712) (var2713 val2713) (var2714 val2714) (var2715 val2715) (var2716 val2716) (var2717 val2717) (var2718 val2718) (var2719 val2719) (var2720 val2720) (var2721 val2721) (var2722 val2722) (var2723 val2723) (var2724 val2724) (var2725 val2725) (var2726 val2726) (var2727 val2727) (var2728 val2728) (var2729 val2729) (var2730 val2730) (var2731 val2731) (var2732 val2732) (var2733 val2733) (var2734 val2734) (var2735 val2735) (var2736 val2736) (var2737 val2737) (var2738 val2738) (var2739 val2739) (var2740 val2740) (var2741 val2741) (var2742 val2742) (var2743 val2743) (var2744 val2744) (var2745 val2745) (var2746 val2746) (var2747 val2747) (var2748 val2748) (var2749 val2749) (var2750 val2750) (var2751 val2751) (var2752 val2752) (var2753 val2753) (var2754 val2754) (var2755 val2755) (var2756 val2756) (var2757 val2757) (var2758 val2758) (var2759 val2759) (var2760 val2760) (var2761 val2761) (var2762 val2762) (var2763 val2763) (var2764 val2764) (var2765 val2765) (var2766 val2766) (var2767 val2767) (var2768 val2768) (var2769 val2769) (var2770 val2770) (var2771 val2771) (var2772 val2772) (var2773 val2773) (var2774 val2774) (var2775 val2775) (var2776 val2776) (var2777 val2777) (var2778 val2778) (var2779 val2779) (var2780 val2780) (var2781 val2781) (var2782 val2782) (var2783 val2783) (var2784 val2784) (var2785 val2785) (var2786 val2786) (var2787 val2787) (var2788 val2788) (var2789 val2789) (var2790 val2790) (var2791 val2791) (var2792 val2792) (var2793 val2793) (var2794 val2794) (var2795 val2795) (var2796 val2796) (var2797 val2797) (var2798 val2798) (var2799 val2799) (var2800 val2800) (var2801 val2801) (var2802 val2802) (var2803 val2803) (var2804 val2804) (var2805 val2805) (var2806 val2806) (var2807 val2807) (var2808 val2808) (var2809 val2809) (var2810 val2810) (var2811 val2811) (var2812 val2812) (var2813 val2813) (var2814 val2814) (var2815 val2815) (var2816 val2816) (var2817 val2817) (var2818 val2818) (var2819 val2819) (var2820 val2820) (var2821 val2821) (var2822 val2822) (var2823 val2823) (var2824 val2824) (var2825 val2825) (var2826 val2826) (var2827 val2827) (var2828 val2828) (var2829 val2829) (var2830 val2830) (var2831 val2831) (var2832 val2832) (var2833 val2833) (var2834 val2834) (var2835 val2835) (var2836 val2836) (var2837 val2837) (var2838 val2838) (var2839 val2839) (var2840 val2840) (var2841 val2841) (var2842 val2842) (var2843 val2843) (var2844 val2844) (var2845 val2845) (var2846 val2846) (var2847 val2847) (var2848 val2848) (var2849 val2849) (var2850 val2850) (var2851 val2851) (var2852 val2852) (var2853 val2853) (var2854 val2854) (var2855 val2855) (var2856 val2856) (var2857 val2857) (var2858 val2858) (var2859 val2859) (var2860 val2860) (var2861 val2861) (var2862 val2862) (var2863 val2863) (var2864 val2864) (var2865 val2865) (var2866 val2866) (var2867 val2867) (var2868 val2868) (var2869 val2869) (var2870 val2870) (var2871 val2871) (var2872 val2872) (var2873 val2873) (var2874 val2874) (var2875 val2875) (var2876 val2876) (var2877 val2877) (var2878 val2878) (var2879 val2879) (var2880 val2880) (var2881 val2881) (var2882 val2882) (var2883 val2883) (var2884 val2884) (var2885 val2885) (var2886 val2886) (var2887 val2887) (var2888 val2888) (var2889 val2889) (var2890 val2890) (var2891 val2891) (var2892 val2892) (var2893 val2893) (var2894 val2894) (var2895 val2895) (var2896 val2896) (var2897 val2897) (var2898 val2898) (var2899 val2899) (var2900 val2900) (var2901 val2901) (var2902 val2902) (var2903 val2903) (var2904 val2904) (var2905 val2905) (var2906 val2906) (var2907 val2907) (var2908 val2908) (var2909 val2909) (var2910 val2910) (var2911 val2911) (var2912 val2912) (var2913 val2913) (var2914 val2914) (var2915 val2915) (var2916 val2916) (var2917 val2917) (var2918 val2918) (var2919 val2919) (var2920 val2920) (var2921 val2921) (var2922 val2922) (var2923 val2923) (var2924 val2924) (var2925 val2925) (var2926 val2926) (var2927 val2927) (var2928 val2928) (var2929 val2929) (var2930 val2930) (var2931 val2931) (var2932 val2932) (var2933 val2933) (var2934 val2934) (var2935 val2935) (var2936 val2936) (var2937 val2937) (var2938 val2938) (var2939 val2939) (var2940 val2940) (var2941 val2941) (var2942 val2942) (var2943 val2943) (var2944 val2944) (var2945 val2945) (var2946 val2946) (var2947 val2947) (var2948 val2948) (var2949 val2949) (var2950 val2950) (var2951 val2951) (var2952 val2952) (var2953 val2953) (var2954 val2954) (var2955 val2955) (var2956 val2956) (var2957 val2957) (var2958 val2958) (var2959 val2959) (var2960 val2960) (var2961 val2961) (var2962 val2962) (var2963 val2963) (var2964 val2964) (var2965 val2965) (var2966 val2966) (var2967 val2967) (var2968 val2968) (var2969 val2969) (var2970 val2970) (var2971 val2971) (var2972 val2972) (var2973 val2973) (var2974 val2974) (var2975 val2975) (var2976 val2976) (var2977 val2977) (var2978 val2978) (var2979 val2979) (var2980 val2980) (var2981 val2981) (var2982 val2982) (var2983 val2983) (var2984 val2984) (var2985 val2985) (var2986 val2986) (var2987 val2987) (var2988 val2988) (var2989 val2989) (var2990 val2990) (var2991 val2991) (var2992 val2992) (var2993 val2993) (var2994 val2994) (var2995 val2995) (var2996 val2996) (var2997 val2997) (var2998 val2998) (var2999 val2999) (var3000 val3000) (var3001 val3001) (var3002 val3002) (var3003 val3003) (var3004 val3004) (var3005 val3005) (var3006 val3006) (var3007 val3007) (var3008 val3008) (var3009 val3009) (var3010 val3010) (var3011 val3011) (var3012 val3012) (var3013 val3013) (var3014 val3014) (var3015 val3015) (var3016 val3016) (var3017 val3017) (var3018 val3018) (var3019 val3019) (var3020 val3020) (var3021 val3021) (var3022 val3022) (var3023 val3023) (var3024 val3024) (var3025 val3025) (var3026 val3026) (var3027 val3027) (var3028 val3028) (var3029 val3029) (var3030 val3030) (var3031 val3031) (var3032 val3032) (var3033 val3033) (var3034 val3034) (var3035 val3035) (var3036 val3036) (var3037 val3037) (var3038 val3038) (var3039 val3039) (var3040 val3040) (var3041 val3041) (var3042 val3042) (var3043 val3043) (var3044 val3044) (var3045 val3045) (var3046 val3046) (var3047 val3047) (var3048 val3048) (var3049 val3049) (var3050 val3050) (var3051 val3051) (var3052 val3052) (var3053 val3053) (var3054 val3054) (var3055 val3055) (var3056 val3056) (var3057 val3057) (var3058 val3058) (var3059 val3059) (var3060 val3060) (var3061 val3061) (var3062 val3062) (var3063 val3063) (var3064 val3064) (var3065 val3065) (var3066 val3066) (var3067 val3067) (var3068 val3068) (var3069 val3069) (var3070 val3070) (var3071 val3071) (var3072 val3072) (var3073 val3073) (var3074 val3074) (var3075 val3075) (var3076 val3076) (var3077 val3077) (var3078 val3078) (var3079 val3079) (var3080 val3080) (var3081 val3081) (var3082 val3082) (var3083 val3083) (var3084 val3084) (var3085 val3085) (var3086 val3086) (var3087 val3087) (var3088 val3088) (var3089 val3089) (var3090 val3090) (var3091 val3091) (var3092 val3092) (var3093 val3093) (var3094 val3094) (var3095 val3095) (var3096 val3096) (var3097 val3097) (var3098 val3098) (var3099 val3099) (var3100 val3100) (var3101 val3101) (var3102 val3102) (var3103 val3103) (var3104 val3104) (var3105 val3105) (var3106 val3106) (var3107 val3107) (var3108 val3108) (var3109 val3109) (var3110 val3110) (var3111 val3111) (var3112 val3112) (var3113 val3113) (var3114 val3114) (var3115 val3115) (var3116 val3116) (var3117 val3117) (var3118 val3118) (var3119 val3119) (var3120 val3120) (var3121 val3121) (var3122 val3122) (var3123 val3123) (var3124 val3124) (var3125 val3125) (var3126 val3126) (var3127 val3127) (var3128 val3128) (var3129 val3129) (var3130 val3130) (var3131 val3131) (var3132 val3132) (var3133 val3133) (var3134 val3134) (var3135 val3135) (var3136 val3136) (var3137 val3137) (var3138 val3138) (var3139 val3139) (var3140 val3140) (var3141 val3141) (var3142 val3142) (var3143 val3143) (var3144 val3144) (var3145 val3145) (var3146 val3146) (var3147 val3147) (var3148 val3148) (var3149 val3149) (var3150 val3150) (var3151 val3151) (var3152 val3152) (var3153 val3153) (var3154 val3154) (var3155 val3155) (var3156 val3156) (var3157 val3157) (var3158 val3158) (var3159 val3159) (var3160 val3160) (var3161 val3161) (var3162 val3162) (var3163 val3163) (var3164 val3164) (var3165 val3165) (var3166 val3166) (var3167 val3167) (var3168 val3168) (var3169 val3169) (var3170 val3170) (var3171 val3171) (var3172 val3172) (var3173 val3173) (var3174 val3174) (var3175 val3175) (var3176 val3176) (var3177 val3177) (var3178 val3178) (var3179 val3179) (var3180 val3180) (var3181 val3181) (var3182 val3182) (var3183 val3183) (var3184 val3184) (var3185 val3185) (var3186 val3186) (var3187 val3187) (var3188 val3188) (var3189 val3189) (var3190 val3190) (var3191 val3191) (var3192 val3192) (var3193 val3193) (var3194 val3194) (var3195 val3195) (var3196 val3196) (var3197 val3197) (var3198 val3198) (var3199 val3199) (var3200 val3200) (var3201 val3201) (var3202 val3202) (var3203 val3203) (var3204 val3204) (var3205 val3205) (var3206 val3206) (var3207 val3207) (var3208 val3208) (var3209 val3209) (var3210 val3210) (var3211 val3211) (var3212 val3212) (var3213 val3213) (var3214 val3214) (var3215 val3215) (var3216 val3216) (var3217 val3217) (var3218 val3218) (var3219 val3219) (var3220 val3220) (var3221 val3221) (var3222 val3222) (var3223 val3223) (var3224 val3224) (var3225 val3225) (var3226 val3226) (var3227 val3227) (var3228 val3228) (var3229 val3229) (var3230 val3230) (var3231 val3231) (var3232 val3232) (var3233 val3233) (var3234 val3234) (var3235 val3235) (var3236 val3236) (var3237 val3237) (var3238 val3238) (var3239 val3239) (var3240 val3240) (var3241 val3241) (var3242 val3242) (var3243 val3243) (var3244 val3244) (var3245 val3245) (var3246 val3246) (var3247 val3247) (var3248 val3248) (var3249 val3249) (var3250 val3250) (var3251 val3251) (var3252 val3252) (var3253 val3253) (var3254 val3254) (var3255 val3255) (var3256 val3256) (var3257 val3257) (var3258 val3258) (var3259 val3259) (var3260 val3260) (var3261 val3261) (var3262 val3262) (var3263 val3263) (var3264 val3264) (var3265 val3265) (var3266 val3266) (var3267 val3267) (var3268 val3268) (var3269 val3269) (var3270 val3270) (var3271 val3271) (var3272 val3272) (var3273 val3273) (var3274 val3274) (var3275 val3275) (var3276 val3276) (var3277 val3277) (var3278 val3278) (var3279 val3279) (var3280 val3280) (var3281 val3281) (var3282 val3282) (var3283 val3283) (var3284 val3284) (var3285 val3285) (var3286 val3286) (var3287 val3287) (var3288 val3288) (var3289 val3289) (var3290 val3290) (var3291 val3291) (var3292 val3292) (var3293 val3293) (var3294 val3294) (var3295 val3295) (var3296 val3296) (var3297 val3297) (var3298 val3298) (var3299 val3299) (var3300 val3300) (var3301 val3301) (var3302 val3302) (var3303 val3303) (var3304 val3304) (var3305 val3305) (var3306 val3306) (var3307 val3307) (var3308 val3308) (var3309 val3309) (var3310 val3310) (var3311 val3311) (var3312 val3312) (var3313 val3313) (var3314 val3314) (var3315 val3315) (var3316 val3316) (var3317 val3317) (var3318 val3318) (var3319 val3319) (var3320 val3320) (var3321 val3321) (var3322 val3322) (var3323 val3323) (var3324 val3324) (var3325 val3325) (var3326 val3326) (var3327 val3327) (var3328 val3328) (var3329 val3329) (var3330 val3330) (var3331 val3331) (var3332 val3332) (var3333 val3333) (var3334 val3334) (var3335 val3335) (var3336 val3336) (var3337 val3337) (var3338 val3338) (var3339 val3339) (var3340 val3340) (var3341 val3341) (var3342 val3342) (var3343 val3343) (var3344 val3344) (var3345 val3345) (var3346 val3346) (var3347 val3347) (var3348 val3348) (var3349 val3349) (var3350 val3350) (var3351 val3351) (var3352 val3352) (var3353 val3353) (var3354 val3354) (var3355 val3355) (var3356 val3356) (var3357 val3357) (var3358 val3358) (var3359 val3359) (var3360 val3360) (var3361 val3361) (var3362 val3362) (var3363 val3363) (var3364 val3364) (var3365 val3365) (var3366 val3366) (var3367 val3367) (var3368 val3368) (var3369 val3369) (var3370 val3370) (var3371 val3371) (var3372 val3372) (var3373 val3373) (var3374 val3374) (var3375 val3375) (var3376 val3376) (var3377 val3377) (var3378 val3378) (var3379 val3379) (var3380 val3380) (var3381 val3381) (var3382 val3382) (var3383 val3383) (var3384 val3384) (var3385 val3385) (var3386 val3386) (var3387 val3387) (var3388 val3388) (var3389 val3389) (var3390 val3390) (var3391 val3391) (var3392 val3392) (var3393 val3393) (var3394 val3394) (var3395 val3395) (var3396 val3396) (var3397 val3397) (var3398 val3398) (var3399 val3399) (var3400 val3400) (var3401 val3401) (var3402 val3402) (var3403 val3403) (var3404 val3404) (var3405 val3405) (var3406 val3406) (var3407 val3407) (var3408 val3408) (var3409 val3409) (var3410 val3410) (var3411 val3411) (var3412 val3412) (var3413 val3413) (var3414 val3414) (var3415 val3415) (var3416 val3416) (var3417 val3417) (var3418 val3418) (var3419 val3419) (var3420 val3420) (var3421 val3421) (var3422 val3422) (var3423 val3423) (var3424 val3424) (var3425 val3425) (var3426 val3426) (var3427 val3427) (var3428 val3428) (var3429 val3429) (var3430 val3430) (var3431 val3431) (var3432 val3432) (var3433 val3433) (var3434 val3434) (var3435 val3435) (var3436 val3436) (var3437 val3437) (var3438 val3438) (var3439 val3439) (var3440 val3440) (var3441 val3441) (var3442 val3442) (var3443 val3443) (var3444 val3444) (var3445 val3445) (var3446 val3446) (var3447 val3447) (var3448 val3448) (var3449 val3449) (var3450 val3450) (var3451 val3451) (var3452 val3452) (var3453 val3453) (var3454 val3454) (var3455 val3455) (var3456 val3456) (var3457 val3457) (var3458 val3458) (var3459 val3459) (var3460 val3460) (var3461 val3461) (var3462 val3462) (var3463 val3463) (var3464 val3464) (var3465 val3465) (var3466 val3466) (var3467 val3467) (var3468 val3468) (var3469 val3469) (var3470 val3470) (var3471 val3471) (var3472 val3472) (var3473 val3473) (var3474 val3474) (var3475 val3475) (var3476 val3476) (var3477 val3477) (var3478 val3478) (var3479 val3479) (var3480 val3480) (var3481 val3481) (var3482 val3482) (var3483 val3483) (var3484 val3484) (var3485 val3485) (var3486 val3486) (var3487 val3487) (var3488 val3488) (var3489 val3489) (var3490 val3490) (var3491 val3491) (var3492 val3492) (var3493 val3493) (var3494 val3494) (var3495 val3495) (var3496 val3496) (var3497 val3497) (var3498 val3498) (var3499 val3499) (var3500 val3500) ) (executable=/bin/echo)(arguments=$(var3500)) globus_gram_job_manager-15.8/test/jobmanager/PaxHeaders.31186/user_test0000644000000000000000000000013014243170567024326 xustar000000000000000029 mtime=1653404023.05072977 30 atime=1653404023.060729675 29 ctime=1653404023.05072977 globus_gram_job_manager-15.8/test/jobmanager/user_test/0000775000175000017500000000000014243170567024546 5ustar00johndoejohndoe00000000000000globus_gram_job_manager-15.8/test/jobmanager/user_test/PaxHeaders.31186/Makefile.in0000644000000000000000000000013214243162453026445 xustar000000000000000030 mtime=1653400875.895634302 30 atime=1653401385.217594832 30 ctime=1653404023.047729799 globus_gram_job_manager-15.8/test/jobmanager/user_test/Makefile.in0000664000175000017500000006760514243162453026624 0ustar00johndoejohndoe00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/jobmanager/user_test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/libxml.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/dirt.sh \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AGE_VERSION = @AGE_VERSION@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUDITDIR = @AUDITDIR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLIENT_TEST_PACKAGE_DEPS = @CLIENT_TEST_PACKAGE_DEPS@ CLIENT_TEST_PACKAGE_DEP_CFLAGS = @CLIENT_TEST_PACKAGE_DEP_CFLAGS@ CLIENT_TEST_PACKAGE_DEP_LIBS = @CLIENT_TEST_PACKAGE_DEP_LIBS@ COMMON_PERL5LIB = @COMMON_PERL5LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIRT_BRANCH_ID = @DIRT_BRANCH_ID@ DIRT_TIMESTAMP = @DIRT_TIMESTAMP@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GASS_CACHE_PATH = @GASS_CACHE_PATH@ GASS_COPY_PATH = @GASS_COPY_PATH@ GATEKEEPER_PATH = @GATEKEEPER_PATH@ GLOBUS_VERSION = @GLOBUS_VERSION@ GLOBUS_XIO_GSI_DRIVER_DLOPEN = @GLOBUS_XIO_GSI_DRIVER_DLOPEN@ GLOBUS_XIO_POPEN_DRIVER_DLOPEN = @GLOBUS_XIO_POPEN_DRIVER_DLOPEN@ GRAM_CLIENT_TOOLS_PATH = @GRAM_CLIENT_TOOLS_PATH@ GRAM_JOB_MANAGER_FORK_PERL5LIB = @GRAM_JOB_MANAGER_FORK_PERL5LIB@ GRAM_JOB_MANAGER_SCRIPT_PATH = @GRAM_JOB_MANAGER_SCRIPT_PATH@ GRAM_JOB_MANAGER_SCRIPT_PERL5LIB = @GRAM_JOB_MANAGER_SCRIPT_PERL5LIB@ GRAM_PROTOCOL_PERL5LIB = @GRAM_PROTOCOL_PERL5LIB@ GREP = @GREP@ GSI_CERT_UTILS_PATH = @GSI_CERT_UTILS_PATH@ GSI_PROXY_UTILS_PATH = @GSI_PROXY_UTILS_PATH@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JOBMANAGER_PATH = @JOBMANAGER_PATH@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LOGDIR = @LOGDIR@ LTLIBOBJS = @LTLIBOBJS@ MAJOR_VERSION = @MAJOR_VERSION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINOR_VERSION = @MINOR_VERSION@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OPENSSL_PKGCONFIG = @OPENSSL_PKGCONFIG@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DEPS = @PACKAGE_DEPS@ PACKAGE_DEP_CFLAGS = @PACKAGE_DEP_CFLAGS@ PACKAGE_DEP_LIBS = @PACKAGE_DEP_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREOPEN_FORCE = @PREOPEN_FORCE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ XML_CPPFLAGS = @XML_CPPFLAGS@ XML_LIBS = @XML_LIBS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ check_SCRIPTS = globus-gram-job-manager-user-test.pl TESTS = $(check_SCRIPTS) @USE_CYGPATH_W_FALSE@X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" @USE_CYGPATH_W_TRUE@X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" @USE_CYGPATH_W_FALSE@X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" @USE_CYGPATH_W_TRUE@X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" @USE_CYGPATH_W_FALSE@X509_CERT_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" @USE_CYGPATH_W_FALSE@TEST_DATA_DIR = "$(abs_srcdir)" @USE_CYGPATH_W_TRUE@TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" @USE_CYGPATH_W_FALSE@TEST_HOME_DIR = "$(abs_top_builddir)/test" @USE_CYGPATH_W_TRUE@TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper EXTRA_DIST = $(check_SCRIPTS) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/jobmanager/user_test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/jobmanager/user_test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? globus-gram-job-manager-user-test.pl.log: globus-gram-job-manager-user-test.pl @p='globus-gram-job-manager-user-test.pl'; \ b='globus-gram-job-manager-user-test.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: globus_gram_job_manager-15.8/test/jobmanager/user_test/PaxHeaders.31186/Makefile.am0000644000000000000000000000013114243161125026426 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653400875.860634649 29 ctime=1653404023.04972978 globus_gram_job_manager-15.8/test/jobmanager/user_test/Makefile.am0000664000175000017500000000202314243161125026565 0ustar00johndoejohndoe00000000000000check_SCRIPTS = globus-gram-job-manager-user-test.pl TESTS = $(check_SCRIPTS) if USE_CYGPATH_W X509_USER_CERT = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.cert)" X509_USER_KEY = "$$($(CYGPATH_W) $(abs_top_builddir)/test/testcred.key)" X509_CERT_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" TEST_DATA_DIR = "$$($(CYGPATH_W) $(abs_srcdir))" TEST_HOME_DIR = "$$($(CYGPATH_W) $(abs_top_builddir)/test)" else X509_USER_CERT = "$(abs_top_builddir)/test/testcred.cert" X509_USER_KEY = "$(abs_top_builddir)/test/testcred.key" X509_CERT_DIR = "$(abs_top_builddir)/test" TEST_DATA_DIR = "$(abs_srcdir)" TEST_HOME_DIR = "$(abs_top_builddir)/test" endif TESTS_ENVIRONMENT = export \ X509_USER_CERT=$(X509_USER_CERT) \ X509_USER_KEY=$(X509_USER_KEY) \ X509_CERT_DIR=$(X509_CERT_DIR) \ TEST_DATA_DIR=$(TEST_DATA_DIR) \ HOME=$(TEST_HOME_DIR); LOG_COMPILER = $(LIBTOOL) --mode=execute \ $(GLOBUS_XIO_GSI_DRIVER_DLOPEN) \ $(GLOBUS_XIO_POPEN_DRIVER_DLOPEN) \ ../../gram-test-wrapper EXTRA_DIST = $(check_SCRIPTS) globus_gram_job_manager-15.8/test/jobmanager/user_test/PaxHeaders.31186/globus-gram-job-manager-user0000644000000000000000000000013214243161125031671 xustar000000000000000030 mtime=1653400149.384969858 30 atime=1653400149.384969858 30 ctime=1653404023.051729761 globus_gram_job_manager-15.8/test/jobmanager/user_test/globus-gram-job-manager-user-test.pl0000775000175000017500000000307214243161125033426 0ustar00johndoejohndoe00000000000000#! /usr/bin/perl use Globus::GRAM::Error; use IO::File; use Test::More; my (@tests) = (); my $contact = $ENV{CONTACT_STRING}; my $me = (getpwuid($<))[0]; sub test_user { my $username = shift; my $result = shift; my $rc; my $rsl = '&(executable=/usr/bin/whoami)'; my $output; if ($username ne '') { $rsl .= "(username=$username)"; } else { $username = $me; } print "# Submitting job: $rsl\n"; { local(*OLDERR, *PIPE); local($/); open(OLDERR, ">&STDERR"); open(STDERR, ">/dev/null"); open(PIPE, "-|", "globusrun", "-s", "-r", $contact, $rsl); $output = ; open(STDERR, ">&OLDERR"); close(OLDERR); close(PIPE); } chomp($output); $rc = $? >> 8; if ($rc != 0) { $username = ''; } ok("$output:$rc" eq "$username:$result", "test_user_$me"); } push(@tests, "test_user('', 0)"); push(@tests, "test_user('$me', 0)"), push(@tests, "test_user('$me'.'x', Globus::GRAM::Error::AUTHORIZATION->value)"); if(@ARGV) { my @doit; $verbose = 1; foreach(@ARGV) { if(/^(\d+)-(\d+)$/) { foreach($1 .. $2) { push(@doit, $_); } } elsif(/^(\d+)$/) { push(@doit, $1); } } plan tests => scalar(@doit); foreach (@doit) { eval "&$tests[$_-1]"; } } else { plan tests => scalar(@tests); foreach (@tests) { eval "&$_"; } }