# PaCkAgE DaTaStReAm UOAlibtlu 1 528 UOAlibtlh 1 120 UOAlibtld 1 472 # end of header 07070100009673000081a40000006400000064000000013f1bb19d000001120000002000000038000000000000000000000012ff270889UOAlibtlu/pkginfoPKG=UOAlibtlu NAME=LibTool shared libraries and utilities ARCH=sparc VERSION=1.5.0-1.1 CATEGORY=system CLASSES=none BASEDIR=/usr/local DESC=Abstraction Utility of system linker, shared libraries and utilities EMAIL=solaris-packaging@noc.uoa.gr PSTAMP=atlantic20030721122549 07070100009672000081a40000006400000064000000013f1bb19d0000016c0000002000000038000000000000000000000011ff270889UOAlibtlu/pkgmap: 1 528 1 d none bin 0755 root bin 1 f none bin/libtool 0555 root bin 198930 11343 1058289968 1 f none bin/libtoolize 0555 root bin 9933 2759 1058289968 1 d none lib 0755 root bin 1 s none lib/libltdl.so=libltdl.so.3.1.0 1 s none lib/libltdl.so.3=libltdl.so.3.1.0 1 f none lib/libltdl.so.3.1.0 0555 root bin 40144 27523 1058289971 1 i pkginfo 274 23379 1058779549 07070100009654000081a40000006400000064000000013f1bb18c0000011f0000002000000038000000000000000000000012ff270889UOAlibtlh/pkginfoPKG=UOAlibtlh NAME=LibTool development libraries and headers ARCH=sparc VERSION=1.5.0-1.1 CATEGORY=system CLASSES=none ltdlla BASEDIR=/usr/local DESC=Abstraction Utility of system linker, development libraries and headers EMAIL=solaris-packaging@noc.uoa.gr PSTAMP=atlantic20030721122532 07070100009653000081a40000006400000064000000013f1bb18c000001750000002000000038000000000000000000000011ff270889UOAlibtlh/pkgmap: 1 120 1 i depend 53 4807 1058292414 1 i i.ltdlla 348 25577 1058779419 1 d none include 0755 root bin 1 f none include/ltdl.h 0644 root bin 11722 32329 1058289972 1 d none lib 0755 root bin 1 f none lib/libltdl.a 0644 root bin 37852 17048 1058289972 1 e ltdlla lib/libltdl.la ? ? ? 789 1650 1058290601 1 i pkginfo 287 24627 1058779532 1 i postinstall 521 34932 1058292955 07070100009665000081a40000006400000064000000013f1bb192000000d60000002000000038000000000000000000000012ff270889UOAlibtld/pkginfoPKG=UOAlibtld NAME=LibTool Documentation ARCH=sparc VERSION=1.5.0-1.1 CATEGORY=system CLASSES=none BASEDIR=/usr/local DESC=Documentation for libtool EMAIL=solaris-packaging@noc.uoa.gr PSTAMP=atlantic20030721122538 07070100009664000081a40000006400000064000000013f1bb192000002160000002000000038000000000000000000000011ff270889UOAlibtld/pkgmap: 1 472 1 d none info 0755 root bin 1 f none info/libtool.info 0444 root bin 3618 44210 1058289973 1 f none info/libtool.info-1 0444 root bin 49847 2408 1058289973 1 f none info/libtool.info-2 0444 root bin 49997 24978 1058289973 1 f none info/libtool.info-3 0444 root bin 49918 27713 1058289973 1 f none info/libtool.info-4 0444 root bin 36584 47005 1058289974 1 f none info/libtool.info-5 0444 root bin 41104 61394 1058289974 1 i pkginfo 214 17649 1058779538 1 i postinstall 642 49466 1058293022 1 i postremove 651 50258 1058293030 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!07070100009673000081a40000006400000064000000013f1bb19d00000112000000200000003800000000000000000000000800000000pkginfoPKG=UOAlibtlu NAME=LibTool shared libraries and utilities ARCH=sparc VERSION=1.5.0-1.1 CATEGORY=system CLASSES=none BASEDIR=/usr/local DESC=Abstraction Utility of system linker, shared libraries and utilities EMAIL=solaris-packaging@noc.uoa.gr PSTAMP=atlantic20030721122549 07070100009672000081a40000006400000064000000013f1bb19d0000016c000000200000003800000000000000000000000700000000pkgmap: 1 528 1 d none bin 0755 root bin 1 f none bin/libtool 0555 root bin 198930 11343 1058289968 1 f none bin/libtoolize 0555 root bin 9933 2759 1058289968 1 d none lib 0755 root bin 1 s none lib/libltdl.so=libltdl.so.3.1.0 1 s none lib/libltdl.so.3=libltdl.so.3.1.0 1 f none lib/libltdl.so.3.1.0 0555 root bin 40144 27523 1058289971 1 i pkginfo 274 23379 1058779549 07070100009674000041ed0000006400000064000000043f1bb19d00000000000000200000003800000000000000000000000600000000reloc07070100009675000041ed0000006400000064000000023f1bb19d00000000000000200000003800000000000000000000000a00000000reloc/bin07070100009676000081a40000006400000064000000013f143930000309120000002000000038000000000000000000000012ff270889reloc/bin/libtool#! /bin/bash # libtoolT - Provide generalized library-building support services. # Generated automatically by (GNU libtool 1.5) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 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 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. # A sed program that does not truncate output. SED="/usr/bin/sed" # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="/usr/bin/sed -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags="available_tags= CXX" # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host atlantic: # Shell to use when invoking shell scripts. SHELL="/bin/bash" # Whether or not to build shared libraries. build_libtool_libs=yes # Whether or not to build static libraries. build_old_libs=yes # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=yes # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=no # Whether or not to optimize for fast installation. fast_install=yes # The host system. host_alias= host=sparc-sun-solaris2.9 # An echo program that does not interpret backslashes. echo="echo" # The archiver. AR="ar" AR_FLAGS="cru" # A C compiler. LTCC="cc" # A language-specific compiler. CC="cc" # Is the compiler the GNU C compiler? with_gcc= # An ERE matcher. EGREP="egrep" # The linker used to build libraries. LD="/usr/ccs/bin/ld" # Whether we need hard or soft links. LN_S="ln -s" # A BSD-compatible nm program. NM="/usr/ccs/bin/nm -p" # A symbol stripping program STRIP=strip # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=file # Used on cygwin: DLL creation program. DLLTOOL="dlltool" # Used on cygwin: object dumper. OBJDUMP="objdump" # Used on cygwin: assembler. AS="as" # The name of the directory that contains temporary libtool files. objdir=.libs # How to create reloadable object files. reload_flag=" -r" reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" # How to pass a linker flag through the compiler. wl="-Wl," # Object file suffix (normally "o"). objext="o" # Old archive suffix (normally "a"). libext="a" # Shared library suffix (normally ".so"). shrext='.so' # Executable file suffix (normally ""). exeext="" # Additional compiler flags for building library objects. pic_flag=" -KPIC -DPIC" pic_mode=default # What is the maximum length of a command? max_cmd_len=262144 # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" # Must we lock files when doing compilation ? need_locks="no" # Do we need the lib prefix for modules? need_lib_prefix=no # Do we need a version for libraries? need_version=no # Whether dlopen is supported. dlopen_support=yes # Whether dlopen of programs is supported. dlopen_self=yes # Whether dlopen of statically linked programs is supported. dlopen_self_static=yes # Compiler flag to prevent dynamic linking. link_static_flag="-Bstatic" # Compiler flag to turn off builtin functions. no_builtin_flag="" # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="" # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec="-z allextract\$convenience -z defaultextract" # Compiler flag to generate thread-safe objects. thread_safe_flag_spec="" # Library versioning type. version_type=linux # Format of library name prefix. libname_spec="lib\$name" # 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="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" # The coded name of the library, if different from the real name. soname_spec="\${libname}\${release}\${shared_ext}\$major" # Commands used to build and install an old-style archive. RANLIB="ranlib" old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB \$oldlib" old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib" old_postuninstall_cmds="" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="" # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds="" # Commands used to build and install a shared archive. 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" postinstall_cmds="chmod +x \$lib" postuninstall_cmds="" # Commands used to build a loadable module (assumed same as above if empty) module_cmds="" module_expsym_cmds="" # Commands to strip libraries. old_striplib="" striplib="" # Dependencies to place before the objects being linked to create a # shared library. predep_objects="" # Dependencies to place after the objects being linked to create a # shared library. postdep_objects="" # Dependencies to place before the objects being linked to create a # shared library. predeps="" # Dependencies to place after the objects being linked to create a # shared library. postdeps="" # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path="" # Method to check whether dependent libraries are shared objects. deplibs_check_method="pass_all" # Command to use when deplibs_check_method == file_magic. file_magic_cmd="\$MAGIC_CMD" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="" # Flag that forces no undefined symbols. no_undefined_flag=" -z text" # Commands used to finish a libtool library installation in a directory. finish_cmds="" # Same as above, but a single script fragment to be evaled but not shown. finish_eval="" # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe="sed -n -e 's/^.*[ ]\\([BDT][BDT]*\\)[ ][ ]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" # Transform the output of nm in a proper C declaration global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'" # Transform the output of nm in a C name address pair global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'" # This is the shared library runtime path variable. runpath_var= # This is the shared library path variable. shlibpath_var=LD_LIBRARY_PATH # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=yes # How to hardcode a shared library path into an executable. hardcode_action=immediate # Whether we should hardcode library paths into libraries. hardcode_into_libs=yes # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist. hardcode_libdir_flag_spec="-R\$libdir" # If ld is used when linking, flag to hardcode $libdir into # a binary during linking. This must work even if $libdir does # not exist. hardcode_libdir_flag_spec_ld="" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="" # Set to yes if using DIR/libNAME during linking hardcodes DIR into the # resulting binary. hardcode_direct=no # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=no # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=no # 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=no # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="PATH " # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=yes # Compile-time system search path for libraries sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" # Run-time system search path for libraries sys_lib_dlsearch_path_spec="/lib /usr/lib" # Fix the shell variable $srcfile for the compiler. fix_srcfile_path="" # Set to yes if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds="" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Symbols that must always be exported. include_expsyms="" # ### END LIBTOOL CONFIG # ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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. # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # 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. win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ grep -E 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` if test "X$win32_nmres" = "Ximport" ; then win32_libid_type="x86 archive import" else win32_libid_type="x86 archive static" fi 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 } # End of Shell function definitions ##################################### # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit 1 ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2003 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit 0 ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0" done exit 0 ;; --debug) $echo "$progname: enabling shell trace mode" set -x ;; --dry-run | -n) run=: ;; --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 0 ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit 1 ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit 1 fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_output= arg_mode=normal libobj= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit 1 fi arg_mode=target continue ;; -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit 1 ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit 1 ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit 1 ;; esac # 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. if test -n "$available_tags" && test -z "$tagname"; then case $base_compile 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 "* | " `$echo $CC` "* | "`$echo $CC` "*) ;; # 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$" < "$0" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" case "$base_compile " in "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit 1 # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit 1 fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit 1" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit 1" 1 2 15 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 $run ln "$0" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit 1 fi $echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $run $rm $removelist exit 1 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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $run $rm $removelist exit 1 fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_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" base_compile="$base_compile $arg" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit 1 fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit 1 fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit 1 else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit 1 fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit 1 fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit 1 fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd*) # 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 deplibs="$deplibs -framework System" continue esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # gcc -m* arguments should be passed to the linker via $compiler_flags # in order to pass architecture information to the linker # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo # but this is not reliable with gcc because gcc may use -mfoo to # select a different linker, different libraries, etc, while # -Wl,-mfoo simply passes -mfoo to the linker. -m*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" if test "$with_gcc" = "yes" ; then compiler_flags="$compiler_flags $arg" fi continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit 1 fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit 1 else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi # 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 link # command doesn't match the default compiler. if test -n "$available_tags" && test -z "$tagname"; then case $base_compile 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 "* | "`$echo $CC` "* | " `$echo $CC` "*) ;; # 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$" < "$0" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" case $base_compile in "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) # The compiler in $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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit 1 # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test "$status" -ne 0 && test ! -d "$output_objdir"; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit 1 ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplcations in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit 1 ;; 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 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 "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do # Search the libtool library lib="$searchdir/lib${name}.la" if test -f "$lib"; then found=yes break fi 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit 1 fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit 1 fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit 1 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit 1 fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' eval cmds=\"$extract_expsyms_cmds\" for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' eval cmds=\"$old_archive_from_expsyms_cmds\" for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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* ) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against it, someone # is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | grep "bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="-L$inst_prefix_dir$libdir $add_dir" ;; 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 $echo "$modename: configuration error: unsupported hardcode properties" exit 1 fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="-L$inst_prefix_dir$libdir $add_dir" ;; 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 convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" 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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit 1 fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi newlib_search_path="$newlib_search_path $path" path="" fi ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$deplibs $depdepl" ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit 1 else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit 1 fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case $revision in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case $age in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` 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) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` dependency_libs=`$echo "$dependency_libs " | ${SED} -e '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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; 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" for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols eval cmds=\"$export_symbols_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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 cmds=\"$module_expsym_cmds\" else eval cmds=\"$module_cmds\" fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval cmds=\"$archive_expsym_cmds\" else eval cmds=\"$archive_cmds\" fi fi if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$save_output-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$save_output-${k}.$objext k=`expr $k + 1` output=$output_objdir/$save_output-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadale object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval cmds=\"$archive_expsym_cmds\" else eval cmds=\"$archive_cmds\" fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit 0 fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" eval cmds=\"$reload_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $run eval "echo timestamp > $libobj" || exit $? exit 0 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" eval cmds=\"$reload_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit 1 ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit 0 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $0 --fallback-echo"; then case $0 in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; *) qecho="$SHELL `pwd`/$0 --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) cwrappersource=`$echo ${objdir}/lt-${output}.c` cwrapper=`$echo ${output}.exe` $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit 1" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); char * basename (const char *name); char * fnqualify(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup ((char *) basename (argv[0])); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = fnqualify(argv[0]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return (char *) base; } char * fnqualify(const char *path) { size_t size; char *p; char tmp[LT_PATHMAX + 1]; assert(path != NULL); /* Is it qualified already? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha (path[0]) && path[1] == ':') return xstrdup (path); #endif if (IS_DIR_SEPARATOR (path[0])) return xstrdup (path); /* prepend the current directory */ /* doesn't handle '~' */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ p = XMALLOC(char, size); sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); return p; } 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit 1" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit 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\ " chmod +x $output fi exit 0 ;; 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then eval cmds=\"$old_archive_from_new_cmds\" else eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # GNU ar 2.10+ was changed to match POSIX; thus no paths are # encoded into archives. This makes 'ar r' malfunction in # this piecewise linking case whenever conflicting object # names appear in distinct ar calls; check, warn and compensate. if (for obj in $save_oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 AR_FLAGS=cq fi # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit 1 fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit 0 ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit 1 fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit 1 fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit 1 ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit 1 fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit 1 fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" eval cmds=\"$postinstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit 0 ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit 1 fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : else $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. eval cmds=\"$old_postinstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $0 --finish$current_libdirs' else exit 0 fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. eval cmds=\"$finish_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit 0 $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "----------------------------------------------------------------------" exit 0 ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit 1 fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit 1 fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit 1 fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 0 fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit 1 fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test "$mode" = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. eval cmds=\"$postuninstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. eval cmds=\"$old_postuninstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit 1 ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit 1 fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit 1 fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit 0 ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit 0 # 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: # ### BEGIN LIBTOOL TAG CONFIG: CXX # Libtool was configured on host atlantic: # Shell to use when invoking shell scripts. SHELL="/bin/bash" # Whether or not to build shared libraries. build_libtool_libs=yes # Whether or not to build static libraries. build_old_libs=yes # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=no # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=no # Whether or not to optimize for fast installation. fast_install=needless # The host system. host_alias= host=sparc-sun-solaris2.9 # An echo program that does not interpret backslashes. echo="echo" # The archiver. AR="ar" AR_FLAGS="cru" # A C compiler. LTCC="cc" # A language-specific compiler. CC="CC" # Is the compiler the GNU C compiler? with_gcc=no # An ERE matcher. EGREP="egrep" # The linker used to build libraries. LD="/usr/ccs/bin/ld" # Whether we need hard or soft links. LN_S="ln -s" # A BSD-compatible nm program. NM="/usr/ccs/bin/nm -p" # A symbol stripping program STRIP=strip # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=file # Used on cygwin: DLL creation program. DLLTOOL="dlltool" # Used on cygwin: object dumper. OBJDUMP="objdump" # Used on cygwin: assembler. AS="as" # The name of the directory that contains temporary libtool files. objdir=.libs # How to create reloadable object files. reload_flag=" -r" reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" # How to pass a linker flag through the compiler. wl="-Qoption ld " # Object file suffix (normally "o"). objext="o" # Old archive suffix (normally "a"). libext="a" # Shared library suffix (normally ".so"). shrext='.so' # Executable file suffix (normally ""). exeext="" # Additional compiler flags for building library objects. pic_flag=" -KPIC -DPIC" pic_mode=default # What is the maximum length of a command? max_cmd_len=262144 # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" # Must we lock files when doing compilation ? need_locks="no" # Do we need the lib prefix for modules? need_lib_prefix=no # Do we need a version for libraries? need_version=no # Whether dlopen is supported. dlopen_support=yes # Whether dlopen of programs is supported. dlopen_self=yes # Whether dlopen of statically linked programs is supported. dlopen_self_static=yes # Compiler flag to prevent dynamic linking. link_static_flag="-Bstatic" # Compiler flag to turn off builtin functions. no_builtin_flag="" # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="" # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec="\${wl}-z \${wl}allextract\$convenience \${wl}-z \${wl}defaultextract" # Compiler flag to generate thread-safe objects. thread_safe_flag_spec="" # Library versioning type. version_type=linux # Format of library name prefix. libname_spec="lib\$name" # 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="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" # The coded name of the library, if different from the real name. soname_spec="\${libname}\${release}\${shared_ext}\$major" # Commands used to build and install an old-style archive. RANLIB="ranlib" old_archive_cmds="\$CC -xar -o \$oldlib \$oldobjs" old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib" old_postuninstall_cmds="" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="" # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds="" # Commands used to build and install a shared archive. archive_cmds="\$CC -G\${allow_undefined_flag} -nolib -h\$soname -o \$lib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$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} -nolib \${wl}-M \${wl}\$lib.exp -h\$soname -o \$lib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags~\$rm \$lib.exp" postinstall_cmds="chmod +x \$lib" postuninstall_cmds="" # Commands used to build a loadable module (assumed same as above if empty) module_cmds="" module_expsym_cmds="" # Commands to strip libraries. old_striplib="" striplib="" # Dependencies to place before the objects being linked to create a # shared library. predep_objects="" # Dependencies to place after the objects being linked to create a # shared library. postdep_objects="" # Dependencies to place before the objects being linked to create a # shared library. predeps="" # Dependencies to place after the objects being linked to create a # shared library. postdeps="" # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path="" # Method to check whether dependent libraries are shared objects. deplibs_check_method="pass_all" # Command to use when deplibs_check_method == file_magic. file_magic_cmd="\$MAGIC_CMD" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="" # Flag that forces no undefined symbols. no_undefined_flag=" -zdefs" # Commands used to finish a libtool library installation in a directory. finish_cmds="" # Same as above, but a single script fragment to be evaled but not shown. finish_eval="" # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe="sed -n -e 's/^.*[ ]\\([BDT][BDT]*\\)[ ][ ]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" # Transform the output of nm in a proper C declaration global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'" # Transform the output of nm in a C name address pair global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'" # This is the shared library runtime path variable. runpath_var= # This is the shared library path variable. shlibpath_var=LD_LIBRARY_PATH # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=yes # How to hardcode a shared library path into an executable. hardcode_action=immediate # Whether we should hardcode library paths into libraries. hardcode_into_libs=yes # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist. hardcode_libdir_flag_spec="-R\$libdir" # If ld is used when linking, flag to hardcode $libdir into # a binary during linking. This must work even if $libdir does # not exist. hardcode_libdir_flag_spec_ld="" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="" # Set to yes if using DIR/libNAME during linking hardcodes DIR into the # resulting binary. hardcode_direct=no # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=no # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=no # 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=no # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="PATH LD_LIBRARY_PATH " # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=yes # Compile-time system search path for libraries sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" # Run-time system search path for libraries sys_lib_dlsearch_path_spec="/lib /usr/lib" # Fix the shell variable $srcfile for the compiler. fix_srcfile_path="" # Set to yes if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds="" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="" # Symbols that must always be exported. include_expsyms="" # ### END LIBTOOL TAG CONFIG: CXX 07070100009677000081a40000006400000064000000013f143930000026cd0000002000000038000000000000000000000015ff270889reloc/bin/libtoolize#! /bin/sh # libtoolize - Prepare a package to use libtool. # libtoolize. Generated from libtoolize.in by configure. # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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. # The name of this program. progname=`echo "$0" | sed 's%^.*/%%'` # Constants. PROGRAM=libtoolize PACKAGE=libtool VERSION=1.5 # Directory names. prefix=/usr/local datadir=${prefix}/share pkgdatadir=${datadir}/libtool aclocaldir=${datadir}/aclocal libtool_m4="$aclocaldir/libtool.m4" ltdl_m4="$aclocaldir/ltdl.m4" dry_run=no help="Try \`$progname --help' for more information." rm="rm -f" ln_s="ln -s" cp="cp -f" mkdir="mkdir" # Global variables. automake= copy= force= ltdl= ltdl_tar= configure_ac= status=0 for arg do case "$arg" in --help) cat <. EOF exit 0 ;; --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION" echo echo "Copyright (C) 2003 Free Software Foundation, Inc." echo "This is free software; see the source for copying conditions. There is NO" echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit 0 ;; --automake) automake=yes ;; -c | --copy) ln_s= ;; --debug) echo "$progname: enabling shell trace mode" set -x ;; -n | --dry-run) if test "$dry_run" != yes; then dry_run=yes rm="echo $rm" test -n "$ln_s" && ln_s="echo $ln_s" cp="echo $cp" mkdir="echo mkdir" fi ;; -f | --force) force=yes ;; --ltdl) ltdl=yes ;; --ltdl-tar) ltdl_tar=yes ;; -*) echo "$progname: unrecognized option \`$arg'" 1>&2 echo "$help" 1>&2 exit 1 ;; *) echo "$progname: too many arguments" 1>&2 echo "$help" 1>&2 exit 1 ;; esac done if test -f configure.ac; then configure_ac=configure.ac elif test -f configure.in; then configure_ac=configure.in else echo "$progname: \`configure.ac' does not exist" 1>&2 echo "$help" 1>&2 exit 1 fi files=`cd $pkgdatadir && ls` if test -z "$files"; then echo "$progname: cannot list files in \`$pkgdatadir'" 1>&2 exit 1 fi files='config.guess config.sub ltmain.sh' auxdir=. auxdirline=`grep '^AC_CONFIG_AUX_DIR' $configure_ac 2>/dev/null` if test -n "$auxdirline"; then # Handle explicit AC_CONFIG_AUX_DIR settings. auxdir=`echo "$auxdirline" | sed 's/^AC_CONFIG_AUX_DIR(\([^)]*\)).*$/\1/'` if test "$auxdir" = "$auxdirline"; then echo "$progname: invalid AC_CONFIG_AUX_DIR syntax: $auxdirline" 1>&2 exit 1 else # Strip any quote brackets. auxdir=`echo "$auxdir" | sed 's/^\[\(.*\)\]$/\1/g'` case "$auxdir" in *\$*) echo "$progname: cannot handle variables in AC_CONFIG_AUX_DIR" 1>&2 exit 1 ;; *) ;; esac fi else # Try to discover auxdir the same way it is discovered by configure. # Note that we default to the current directory. for dir in . .. ../..; do if test -f $dir/install-sh; then auxdir=$dir break elif test -f $dir/install.sh; then auxdir=$dir break fi done fi if test -z "$automake"; then if grep '^A[MC]_PROG_LIBTOOL' $configure_ac >/dev/null 2>&1; then : else echo "Remember to add \`AC_PROG_LIBTOOL' to \`$configure_ac'." fi if grep '^AC_PROG_RANLIB' $configure_ac >/dev/null 2>&1; then echo "Using \`AC_PROG_RANLIB' is rendered obsolete by \`AC_PROG_LIBTOOL'" fi if grep 'generated automatically by aclocal' aclocal.m4 >/dev/null 2>&1; then updatemsg="update your \`aclocal.m4' by running aclocal" else updatemsg="add the contents of \`$libtool_m4' to \`aclocal.m4'" fi if grep '^AC_DEFUN(\[A[MC]_PROG_LIBTOOL' aclocal.m4 >/dev/null 2>&1; then # Check the version number on libtool.m4 and the one used in aclocal.m4. instserial=`grep '^# serial ' $libtool_m4 | grep 'A[MC]_PROG_LIBTOOL' | sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'` if test -z "$instserial"; then echo "$progname: warning: no serial number on \`$libtool_m4'" 1>&2 else # If the local macro has no serial number, we assume it's ancient. localserial=`grep '^# serial ' aclocal.m4 | grep 'A[MC]_PROG_LIBTOOL' | sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'` test -z "$localserial" && localserial=0 if test "$localserial" -lt "$instserial"; then echo "You should $updatemsg." elif test "$localserial" -gt "$instserial"; then echo "$progname: \`$libtool_m4' is serial $instserial, less than $localserial in \`aclocal.m4'" 1>&2 if test -z "$force"; then echo "Use \`--force' to replace newer libtool files with this version." 1>&2 exit 1 fi echo "To remain compatible, you should $updatemsg." fi fi else echo "You should $updatemsg." fi if grep '^AC_LIB_LTDL' $configure_ac >/dev/null 2>&1; then if grep 'generated automatically by aclocal' aclocal.m4 >/dev/null 2>&1; then updatemsg="update your \`aclocal.m4' by running aclocal" else updatemsg="add the contents of \`$ltdl_m4' to \`aclocal.m4'" fi if grep '^AC_DEFUN(AC_LIB_LTDL' aclocal.m4 >/dev/null 2>&1; then # Check the version number on ltdl.m4 and the one used in aclocal.m4. instserial=`grep '^# serial ' $ltdl_m4 | grep 'AC_LIB_LTDL' | sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'` if test -z "$instserial"; then echo "$progname: warning: no serial number on \`$ltdl_m4'" 1>&2 else # If the local macro has no serial number, we assume it's ancient. localserial=`grep '^# serial ' aclocal.m4 | grep 'AC_LIB_LTDL' | sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'` test -z "$localserial" && localserial=0 if test "$localserial" -lt "$instserial"; then echo "You should $updatemsg." elif test "$localserial" -gt "$instserial"; then echo "$progname: \`$ltld_m4' is serial $instserial, less than $localserial in \`aclocal.m4'" 1>&2 if test -z "$force"; then echo "Use \`--force' to replace newer libtool files with this version." 1>&2 exit 1 fi echo "To remain compatible, you should $updatemsg." fi fi else echo "You should $updatemsg." fi fi fi if test "x$ltdl" = xyes; then test -d libltdl || $mkdir libltdl ltdlfiles=`cd $pkgdatadir && ls libltdl/*` else ltdlfiles= fi for file in $ltdlfiles; do if test -f "$file" && test -z "$force"; then test -z "$automake" && echo "$progname: \`$file' exists: use \`--force' to overwrite" 1>&2 continue fi $rm $file if test -n "$ln_s" && $ln_s $pkgdatadir/$file $file; then : elif $cp $pkgdatadir/$file $file; then : else echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2 status=1 fi done if test "x$ltdl_tar" = x"yes"; then if test "x$dry_run" = x"yes"; then echo "tar -cf - libltdl | gzip --best > libltdl.tar.gz" elif test -f libltdl.tar.gz && test -z "$force"; then test -z "$automake" && echo "$progname: \`libltdl.tar.gz' exists: use \`--force' to overwrite" 1>&2 else test -d libltdl && ${rm}r libltdl $mkdir libltdl ltdlfiles=`cd $pkgdatadir && ls libltdl/*` for file in $ltdlfiles; do if $cp $pkgdatadir/$file $file; then : else echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2 status=1 break fi done for file in $files; do if $cp $pkgdatadir/$file libltdl/$file; then : else echo "$progname: cannot copy \`$pkgdatadir/$file' to \`libltdl/$file'" 1>&2 status=1 break fi done tar -cf - libltdl | gzip --best > libltdl.tar.gz ${rm}r libltdl fi fi # Change to the auxiliary directory. if test "$auxdir" != .; then test -z "$automake" && echo "Putting files in AC_CONFIG_AUX_DIR, \`$auxdir'." cd $auxdir || exit 1 fi for file in $files; do if test -f "$file" && test -z "$force"; then test -z "$automake" && echo "$progname: \`$file' exists: use \`--force' to overwrite" 1>&2 continue fi $rm $file if test -n "$ln_s" && $ln_s $pkgdatadir/$file $file; then : elif $cp $pkgdatadir/$file $file; then : else echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2 status=1 fi done exit $status # Local Variables: # mode:shell-script # sh-indentation:2 # End: 07070100009678000041ed0000006400000064000000023f1bb19d00000000000000200000003800000000000000000000000aff270889reloc/lib07070100009679000081a40000006400000064000000013f14393300009cd0000000200000003800000000000000000000001bff270889reloc/lib/libltdl.so.3.1.0ELF”4™84 (qûqûqüqüLLuÔuÔ°GG  $%&')+/12346;<=?BCDF !"#(*,-.05789:>@AEh$¬&ÈP4`ìpI'´h^^(hv}ìÜ‹ZР ¦V؈±vˆ¾Åt ßæíõg „ _˜l(^€:PøLEqû LSe¸èfnvŒxuÔ ‰ix š' §¯cˆ0©¿[p˜Ôqv„sÛ_ˆëóü] hШ¶(qü >wHEèY`hEð0rOøƒ`H¤SD”—bÄÄ=k¬`D½wHÂÊÓa\hè%ÀTòFˆÜÿ(8strlenfopenlt_dlloader_namememcpylt_dlseterrorlt_dlcaller_registerlt_dlpreload_defaultlt_dlgetsearchpathlt_dlmalloclt_dladderrorlt_dladdsearchdirlt_dlsymlt_dlerrorlt_dlreallocstrcpy_PROCEDURE_LINKAGE_TABLE_memsetfclose__ctypelt_dlloader_nextfgetssprintfstrchrlt_dlgetinfolt_dlmakeresidentlt_dlclose_etextstrcmplt_dlloader_removereaddirlt_dlfree_DYNAMICstrncmplt_dlloader_findlt_dlpreloadopendirlt_dlloader_addlt_dlinsertsearchdirgetenvlt_dlisresidentstrncatclosedirlt_dlsetsearchpathmemmovelt_dlloader_data_GLOBAL_OFFSET_TABLE__edatalt_dlmutex_registerstrcatstrrchrlt_dlopenlt_dlforeachfilelt_dlforeachaccesslt_dlcaller_get_datalt_dlhandle_next_endstrncpy__assertlt_dlcaller_set_datalt_dlinitlt_dlopenextlt_dlexitlibdl.so.1SISCD_2.3libc.so.1SYSVABI_1.3libltdl.so.3  ztó7̳(rj8rj@rjHr jTrj\rjrj˜rjœr j¤r$j¬r(j´r,jÀr0jÈr4jÐr8jØr<jär@jìrDjürHkrLk0rPk8rTk„rXkŒr\k¸r`jrdjrhj'rlvàrpvèrtvðrxmœr|m¨r€m°r„w4rˆw<rŒm¼rmÄr”mÐr˜mØrœmàr mèr¤mðr¨mør¬nr°nr´nr¸n r¼n,rÀn4rÄn<rÈnDrÌnLrÐnTrÔn`rØnhrÜn€rànˆrän rèn¨rìn°rðn¸rônÀrønÈrünÌsnÔsnÜsnìs nôso soso,so4s oHs$oXs(o\s,ods0ots4o|s8os<o s@o°sDoÀsHoÌsLoÔsPoèsTp sXps\ps`p(sdp0shp@slpHsppPstpXsxpds|pls€pps„pxsˆpsŒp”sp¨s”p°s˜p¸sœpÀs pÌs¤pÔs¨pøs¬qs°qs´q$s¸q4s¼q<sÀqDsÄqLsÈqXsÌq`sÐqxsÔq€sØqˆsÜqsàq”säqœsèq¬sìq´sðqÈsôqÐsøqôsü5t6´tO4t)t tvkÀv”kÐv˜kðvœlv l v¤l8v¨lHv¬lhv°l|v´l”v¸l¬v¼lÀvÀlÔvÄlìvÈmvÌmvÐm8vÔmTvØmxwÔw \w èw # w$%w(%w,"¼v„ vˆ1vŒ*tDtPt\1thttBt€/tŒt˜>t¤&t°=t¼ tÈ#tÔtàtìtø%uuuu(6u4:u@AuL(uXudup!u|7uˆ5u”,u $u¬u¸-uÄ"ã¿ °Hº ˜;@W¸bšaø¶@ž @X ôÀò ŸÆ@ ºHº@X’Çà‘èã¿ ˜°@Wša ¢@@-ž €¦`@4Ô €¢ @Ö`€¢àH €¦àÞ €£à@1+à`€¤ @-+€¦à@Çà‘è ú`Ð ¬@@Wß’®@Çà‘è ø`’@WØ”î& ì&`Çà‘è „àš`Ð@Ò@ @WÏ”";¿ÿ΀¦` ` ˆ`Ð@Ò@@WÆ”"<¿ÿÇ'¨`¤àÐ@Ò@@W½”"=¿ÿÏ€¦àã¿ ˜¸@Wš``¢@ž @K° €¦ @R€¦à@Z€§ @  ÄO €  H @W˜€ ‚  ‚ @(Š"È@Æ ŸÀÀ°@°Çà‘è ÒO €¢`@¤ÔO €¢€@ €¤€(@  $ ÖL¿ÿ€¢à"H  $ À, ¤ €¸ æO æ, ¤ ¸ èO €¥ OÿìêO ê, €¤ H €¦ H ;²bî@ìàŸÅ€° ð& à&àÇà‘è )!– ¦ Ò@ Ð@@W`”"e¿ÿ°€¦ ;-®`$ª (Ð@Ò@@WV”"f¿ÿ¨€¦àž`,˜`0Ð@Ò@ @WL”"g¿ÿ €§ ã¿ ˜¸@V´šbœ°¶@@Qž €¦`@X€¦ @a ÂN € `@\€§ @€¦ @  ÒN €¢`H @W ¶ ÿÿ è¶ ÿÿèÔ €§ H€¦ ÖO?ÿ€¢à@ €¦ ¸' à €§ @€¦ âO?ÿ€¤`2Oÿú¸' €¦ @  äN €¤ H @W€¦ ¦ ö`î ¨ÀÐ @Vý’ª'¬@ºÇà‘è ø`@”'@Vû’’@Vñ”ì& è&`Çà‘è /+¬à4¨`8ÐÀÒÀ@Vè”"¡¿ÿª€¦`šà<º @ÐÀ ÒÀ@VÞ”"¢¿ÿ¢€¦  ˆ`D„àHÐÀÒÀ@VÔ”"£¿ÿž€§ ã¿ ˜°@Vš`¼¸@@ž €¦`H€¦ €¦ @!€¦`@ -€¦ @€¦ @¶€¦`H€¦@€¦€@;@V·’ º €§@ H º Çà‘èº €¦`8HºÇà‘è-)ª L¦ PÐÒ@Vœ”"Ù¿ÿÜ€¦ ;1²`T® XÐÒ@V’”"à¿ÿßã¿ ˜°@Ušc´¦@@ž €¦`H€¦ €¦ @€¦`@/€¦ H ¶¦`H ¸úO €§`H¶¦àô/ Oÿû¸' Çàè/+¬à\¨``ÐÀÒÀ@Vg”#¿ÿ逦 ã¿ ˜9@U® pšc¦ º@ž è@ì €¥ H€¦ ê ŸÅ@€¦ @ €¦`H €¦ €¦ H€¦ €¦à@ €¦ @€¦`H €¦ H €¦à@ð% ò% ö% €€¦`𠀦 @Ð?ôô ŸÆ€€¦ ö?ô¦ ö% €¦`HŸÆ@Çà‘èã¿ ˜°@Ušbº@ž @% ?ÿ9¦ pâ@ä`€¤ Hè`ŸÅî`Ð`¬%àª%à@—“- H Ð$`³-`ô`ð&€à`° ð$`ö`€¦àHú`ŸÇ@Çà‘è–à|’ €Ð@ Ò@ @Uï”#¼¿ÿÖ9ã¿ ˜;@U¶`pša(¸´@ž ú€ò`€¦`H° ô`ŸÆ€ö`€§@*€§ @(€§ @Ä`€  @ ‰/ Š°Æ`ПÀÀ€(“/ ”°Ð@ Ð'`€"Ö`€¢à@ ¥/ â`Þ` @Ð?´ŸÃÀ€ê`­/ ¨@æ?´æ'`€Ø`€£ @ÐèÚ`ŸÃ@€° Âè° Â'`î`€¥àHø`ŸÇÇàèã¿ ˜;@T¸bšcØ¢@ž ö@òàŸÆ@€¦ H¤€¢ H-ª tæ@èà€¥ @ôàÐÿÔŸÆ€Çà‘èîÿÔî$àÇà‘èã¿ ˜@TšcHª@ž @Ue’€¦`H°€¢ H7®àtô@ì €¥ @ø Ð¿ÔŸÇÇàèú¿Ôú& Çàèã¿ ˜ª@TšbĨ@ž ÿý(€¥`H°ìM`€¥ H@U5€H€¦ H5² tîöà€¦à@øàÐÿÔŸÇÇàèúÿÔú%àÇàèã¿ ˜@Tšb¨@ž @U)’!°H3®`têì`€¥ @ @U ô`ŸÆ€Çàè@U;¸`xöÐ&àÇàèã¿ ˜@Tša”¨@ž @U ° €H3®`têì`€¥ @ @Tþô`ŸÆ€€° @T÷;¸`x° öÐ&àÇàèã¿ ˜@T’ša¨@ž @Tì°H3®`têì`€¥ @ @TÚô`ŸÆ€Çàè@TÓ;¶`xøÐ' Çàèã¿ ˜;@T¸`pš`|¶@ž èÀò €¦`H° ê ŸÅ@ì 4À% 8€¥ HÐ 4@T¾°î €¥àHô ŸÆ€Çàèã¿ ˜;@S¶`pšcð¤@æ€ðà€¦ Hž èàŸÅúà8€§`H9²"ê€ú`H€§`ì`ŸÅ€€§`OÿùîàÀ$à8€¥àHôàŸÆ€Çà‘è ã¿ ÿÿÐÇà‘è ã¿ ˜;@S¶`pšc ´@ž â€ò`€¦`H¸ ä`ŸÄ€æ`8€¤à@ èà€¥@æà€¤àOÿúÿþµ ª@ ’ @T_” ð%`ì`8ì%`ê$`8€¸ î`€¥àHð`ŸÆÇà‘èã¿ ˜;@S¸`pšbP¶@ž úÀî`€¥àH° È`ŸÁô`8€¦ @€¦`Ð`€¢ @ÐÌÊ`ŸÁ@€0ÒÌÒ'`€,H”à„òÀ à â €¤`@ä €¤ 2H   Ð @T’€2H  €°æ €¤àOÿòô €¦ Oÿéè`€¥ @ÐÄê`ŸÅ@€ìÄì'`ò`€¦`Hö`ŸÆÀÇàèÃà ã¿ ˜ú` @S€§`š`à¨@ž @¦`Ðà@Sè’€@ êà ¦à€¥`Oÿ÷€5ðàÇàè5° tìî €¥à@пÐö ŸÆÀ€ø¿Ðø% Çà‘è ã¿ ˜;@S¸`pš`0¶@ž ôÀò €¦`H° Ê ŸÁ@Ô `’ Ò& `€¢`H7ð& T1À& \  @S° ’ @S°ÔÀº@Sª ’ <–à”@S¨ÔÀ °@РPÿþÀ@€¦ â €¤`@п¼ä ŸÄ€€° 濼æ& €° Hè €¥ @п´ê ŸÅ@€° ì¿´° ì& î €¥àHö ŸÆÀÇàèã¿ °@˜ÿþëè@R/šbЬàp´@ž ÿþ®° è€ê €¥`Hò ŸÆ@ö 4€¦àHÐ 4@SQ°ø €§ Hú ŸÇ@Çàèã¿ ˜;@R¸`pšb<¶@ìÀò €¦`Hž î ŸÅÀð% 4𠀦 Hô ŸÆ€Çà‘è ã¿ ˜;@R¸`pšaÔ @ž øô €¦ H° ú ŸÇ@Ò `ò X€¢`@)Ô €¢ @ð Ð?ìŸÆ€g° ò?ìò' €c° ä `¦"ú–¤ Ö' `H\ê \€¥`Hö \îà(¬ à€¥ @Þ \ÚàÚ' \Ø \€£ @Æ \Äà(‚ € `OÿõÈ \€¡ @%¢ à \€¤ @´ à Ò (Š `€¡`2H´ Ö (” à€¢ H €¤ ä €¤€H€¤ @Rà€2H° €¤ Oÿ뀦 @€¦`æ \€¤àOÿߢ`€¦`@ê`è`Ð`€¥`H €¦@ì`ŸÅ€€2H° €¦@H €¦`"H²î`ŸÅÀ²€¦`OÿêÀ' Xò €¦`Hö ŸÆÀÇàèã¿ ˜9@Q´ tšcœ¬º@ž ø@î €¥à@° Ú ŸÃ@€®î Þ?ø€£àHÂ?øŸÀ@ê Tô P€¥`@€¥`Ä`€  H€¦`@€¥`Æ`€ àH €¦`HÐ`@Rs’€@€¥`ê`€¥`Oÿꀥ`@Ê`ˆ`È%`ê% €<ö €¦`@  àÿüðÐ&àÒà€¢`H€¦ €/° ð&à€¦ @€¦ Ð Ö  ŸÂÀ’Ð&àÔà€¢ @€¦ ô €¦ Oÿõ€¦ @â €¤`"H° +Ð ¨bæ@äàŸÄ€ð$ € ° ô&àì €¥ @ò ŸÆ@€î' ö?ü€¦àHú?üŸÇ@Çàèã¿ ˜´@Qšaˆ¦@ž @ ¸ úN €§`Hº @Q麀€¦ º €¦ @@€¦ @H€¦à@P€§`H€¦à–€ÔJÿÿ€¢ /"Hº'`€¦à@  àNà€¤ H @Q΀ª@ª@¨`¤@ÿü< ¢@/¸ Çà‘è¬à°”–ÒÀ@Q¦`@ ’ ”ÿÿ½–¸€7ÿÿ3’€2H¸ 7´âòÀð`ŸÆÇà‘è-® ˜ª œÐÀÒÀ@Q¨”)”¿ÿº€¦ ‚  šà¤ÐÀÒÀ @Qž”)•¿ÿ²€¦à Š`¨† ¬ÐÀÒÀ@Q””)–¿ÿª€§`ã¿ ˜¸@Pšc¼®@@ ž ÿþþ’€H€¦àÇà‘è €¦à@'€§`@€¦ H €§`’ ”ÿÿr–€H€§`Çà‘è €§`@ ;’¸`dÔÀÿÿd–€HÇà‘è ’ ”ÿÿ[–€HÇà‘è Çà‘è ã¿ ˜°@PšbЮ@@Lž ôN €¦ @H€¦`@P€¦ @ ÔN €¢ H @Q4ÿû§ @Çà‘è ÖN €¢àH/  ¸ ¶ /ºÞN€£à:@ €¤ "H"¸ âO`€¤`:"H¸ äO`€¤ "H¸ æN€¤à/@èNè*  €¸ êO`€¥`:"H ¸ ìO`€¥ "H ¸ îO`€¥à/"H¸ ö*  ¸ ôN€¦ Oÿغ`À*Ð&`Çà‘è ‚ ´˜`¸ÐÀÒÀ @Pü”)ñ¿ÿ²€¦` Š`¼† ÀÐÀÒÀ@Pò”)ò¿ÿª€¦ ã¿ ˜°@Pša4¸@@1ž €¦`@8€¦ @@’ :”ÿù%–@#;¶`t€¢ è@ê €¥`@ò Ð?ÔŸÆ@Çà‘è ì?Ôì% Çà‘è î €¥à@ô Ð?¨ŸÆ€Çà‘è ø?¨ø% Çà‘è Çà‘è ˆ`Ä„àÈÐÒ@P°”*1¿ÿÊ€¦`–àÌ’ ÐÐ Ò @P¦”*2¿ÿ€¦ '#¤àÔ `ØÐÒ@Pœ”*3¿ÿº㿈ø# \²@Oö# `’cظ@ž@ À# dêN`€¥`H¬ @P|¬€š ¬ š )À'¿ü† pÚ'¿øª èÚ'¿ôÄ €  H'È ŸÁŠâ€¦ æ@fÒN €¢`Hb’¿ôÿÿ€2@i¤ ’¿øпôÿÿt”¿ü€2@b¤ пøÒ¿üÿù‹” ¶"@[¤ ˆ`Ü„ààú¶  /ø¤ ¢ €¢ @ ® îNà€¥àH® @P9®€°À°À” €¢€ H€¤@€¥`H¢ ÖàŸÂÀÿúžª@5€¤@@R@P$’€¦`HØN`€£ H ž@ÚKÿÿ€£`/H@à-@®à@@P’Ò `ŸÆ€Ô \ž@Ð# dпøÒ¿üÿùA”¶OÿÀ¦à€Ð¿øô €¦ @Ð?Äò ŸÆ@¤ €Ð¿øä?Ää% ¤ пø€¢ "HпôâàŸÄ@пôä'¿ø€¢ H€¥`ààŸÄä'¿ô€¥`HúàŸÇ@ö €¦à"Hð d ŸÀ@ð dÇàè’@OÛ”*x¿ÿ¬ã¿ ˜°@Oš`ؤ@ž @.¶ ØN €£ @*€¦`@2€¦ @:)¦ üÒ€@OíÐ& H@Oé’ /€¢8HÀ* ê`€¥`H 9Ð`´"î€ìàŸÅ€ö&`¶ ÿúXÐ&`ú`€§`"H¶?ÿÇà‘è‚ äšàèЀҀ @O›”* ¿ÿЀ¦` Š`ì† ðЀҀ@O‘”*¡¿ÿÈ€¦ #”àø `ôÒ€ Ѐ@O‡”*¢¿ÿÀ)㿘˜À'¿ü;@N¶bšc„’¸@–Ôž ÿþݘ¿üð¿üÇàèã¿ @Ož’ €@Çà‘è ÿüß’€2HÀ&`Çà‘è ã¿ °@º Çà‘è˜7@Nºšbè–¸@´âž ’Ôÿþµ˜ €"Hº Çà‘èÀ" Ãà ã¿ ú €§`H¸ ä €¤ H´ ¶ ì ê€è`(¦ €¤àH´ î ÐÀ@OS¸ò €¦€Oÿò¶àÇà‘èã¿ ˜@Nšbº@ž @OK’ '€¦`@  âN`€¤`H¤ @O €¤¤ æ €¤àH €¤ /Ð ¬âê@è`ŸÅÀ& €¤ @ôN`€¦ 'H¶$ÿùe¸@’`Çà‘è @O(”&àºÀ/ýø& €À& Çà‘è ã¿ ˜9@N®"ša(°º@ž ê@H€¦`ì`ŸÅ€€¦`H€¦ ð`ŸÆ€¦ H€¦àò`ŸÆ@€¦àHô`ŸÆ€Çà‘è ã¿xÀ'¿ü˜¢ @N°â'¿øš`”¸  @ž @è¶ Ô €¢ @îž`täÚ €£`@Ä ŸÀ€Ð# \€€¦`î €¦`î# \@-ÿù  ,Ð& Æ € à@¶ Çà‘èÐ ’ @N°” ,Ò ¿ôÒ'¿ôÈ ê æ (À ¨àè%`(ÿü’ €"@Qæ¿ôö €¦à"H±¶ 9Ð ¶ ¤"àò ŸÆ@â& Çà‘èÊN`€¡`@¸’¿üÿý €"@пü¶ €ƒ@Nš’ /º@º Ö¿ü´'@ ÿøÏ @Ð'¿ø¶ €tÒ¿ü@N”Ø¿øâ+€ €§`Ú¿üº€¢ H€§`â'¿üº €£`@›ÞO`€£à@–@Nv’ .ª@½'¨àh@N^Ò€H·â'¿ðª%@¨ â'¿ì¦ â'¿èâ'¿äÿø `¸@¸¶ €E€¥`HŠ ”â ® _Ò ˆ¬`’ôJ`Ô€€Š @ÖJ`Ö) €’`î) ’`Š`€¡@ Oÿóˆ À*Ø¿ø€£ H@€¥ Ú¿ø€£`HÞ¿øŸÃÀ L€ `HРL”¿øÿþ€’¨Ä¿ü€  H€¥ Æ¿üŸÀÀ€¥ H€¥ ˆa @N*ÐH€¥ ”¿øÿþk’¨€¥ H€¥ ’¡$@NÐ H€¥ ”¿øÿþ]’¨€¥ H €¥ +®`l”¿øÐÿþS’¨€¥ H €¥ )´!(Ò@M÷¨€¥ @ª$æ €¤à@ ö Ð¿¼ŸÆÀ¶ €Ò𿼶 ð$ €Íÿø $´@@Më¶ €Ãì € @¾´®$Š!,¬$úú# `º(’@MÜ”€@°€¦ @  ÖN €¢àH @M‰€š€š€ØKÿ€£ @Þ €‹à@@M‚’²´&`’@M¾”€@ª®¬`»/`¿ÿÞ€¦ ÂN € ` H„ÄN €  #H€Ò `@M¬” €@¿ðÿþB’ ¶À€r€¦à †!0Ò@Mž” €@¿ìÿþ4’  ¶À€d€¦àŠa4Ò@M” €@¿èÿþ&’ ¶À€V€¦à3”a8Ò @M‚” €@¿äÿþ’ ¶À€H€¦à–!<Ò @MQ€@¦ €=€¦àšá@Ò @MG€2@¿𦠀3€¦à€ `H0€¦à„áDÒ@M\” €H'€¦à¿ðÿýñ’ ¶†ÀH!€¦àÐ¿ð€¢ H€¦à@M;’ H€¦àÿ÷· ²"@¶àпð€¢H€¦à€¢ "@ ò'¿ð’¢Ê È`ŸÁò'¿ð€€¦à€¦à@Ö €ŠàOÿN@M&€¦ HºâÚØ`ŸÃÿ÷K ,Ð& ô €¦ "H¶à€¦à@пðÒ¿ìÔ¿èÿýëÖ¿äì €¥ Hæ%Ð „¢Âî`ŸÅÀâ& €ÜÆ € à@’ Ð @LÙ” ,Ð ÿýxÒ¿ä€@¿ôÔ Ò¿øÔ'¿ôÔ¿èÖ¿ðØ¿ìÿû#š€"H пðÐ ÿýj¶à€Ð¿ðпð¶àÒ¿ìÔ¿èÿýºÖ¿ä€¦à"@ú¿ôè €¥ H²Ð –"ò æ`ŸÄÀâ& €¨Ú €£@"HWæ¿ôÐ ÿýJ€Ræ¿ôÿöò ,Ð& Þ €£à@¶ €•Ð ’ @L•” ,ì ô¿øì'¿ô€¦ @%”¿ôРLÿý’€2H&ê¿ô/áP@L£Ð”¿ôÿý ’€2Hê¿ô‚¡T@L™Ð”¿ôÿý’€2Hê¿ô ”¿ô† lÐÿü÷’€2H ê¿ô¿ôÿùÉ’€2HÀ'¿ôê¿ô€¥`2@æ¿ôÊ €¡`"HY¶ 7Ð ¤â¶ ÔÒ ŸÂ@â& €Oè €¥Hò €¦`"H ú¿ôÐ šâØ Ö ŸÂÀú¿ôú& â'¿ôì ô €¦ H- „ Ä `î Ðà €¢HÈ Æ € àH è ’¢Ê Ð ê`ŸÅ@æ ø$à ¸ ò¿ø€¦`HÖ¿øŸÂÀÚ Þ TÞ#`Ø ð¿üØ$ T€¦ Hú¿üŸÇ@ô €¦ "@ú \젟ŀР\€ú$ Ð¿ø‚¢î€¢ H€§ ÆàŸÀÀâ'¿ø€§ "HпüÈàŸÁпü€¢ HêàŸÅ@Çà‘è -¤a®¡ÐÒ@KÍ”+Ú¿ý5–!º¡ Ð Ò@KÔ+Û¿ý ;-”a®¡Ð Ò@K¹”+õ¿ýB’¿ü†!‚¡ÐÒ@K¯”,¿ýd+ŠaHˆaLÐÒ@K¥”,ã¿þá’ 㿘À'¿ü’ÿü׿ü€"@ð¿üÇà‘è Çàèã¿ ˜;@J¸`tšcж@ž ìÀô €¦ @° î ŸÅÀ€Ð ò¿¼€¢"H° Çàè㿘°@À'¿ü@K¹Çà‘è˜äN )@J¦ hšcH® ¶@ž úÀ€¤ H@KY®@KŽ’ .ª"@ìO`@Kw’€@’`@Kr€2HìO`@K”Çà‘è €¥ H˜À@K>˜Àÿõ° ²@²Çà‘è @K7’’@K‚¿üÿüs’Ú¿ü€£`@i€$@øO`ÿÿ€HcøO`´ €§ H @K`´ €¥ H€¦€@K€¦€@bÊÀÈ`ŸÁ €§ H²À@K`²Àÿõy`²@²Çà‘è @K’€’`À.@’`@KH¿üÿü9’Ô¿ü€¢ @#€@-ÿÿc€H€¦`-ª tæÀèà€¥ @Ðÿ¼îàŸÅÀ€€¦`ðÿ¼€¦`ð$à"H° ;¸böÀôàŸÆ€Çà‘è €¦`"Hð¿ü%¢¢àÀÖ ŸÂÀð¿üÇàè„âÂÀÞ`ŸÃÀð¿üÇàèã¿ ˜@J’š`Œ”¸@ž –ÿóq@#;¶`t€¢ æ@èà€¥ @êàÐÿÔŸÅ@Çà‘è ìÿÔì$àÇà‘è îà€¥à@òàÐÿ¨ŸÆ@Çà‘è ôÿ¨ô$àÇà‘è Çà‘è ã¿ ˜¶@I°šcÀ¤@ž @*´ €¦`@1€¦à@99èNà€¥ @59ú €§`@Ð Ò`ÿó§” ´@@J’€¢ @@ Ð Ò`ÿó™”´Oÿôÿÿ èÇà‘è ÿÿœè”áXŠa\Ѐ Ò€@JX”-Ý¿ÿÑ€¦`'!ž!d¢á`ҀЀ@JN”-Þ¿ÿÉ€¦à-®!hª¡lЀҀ@JE”-ß¿ÿÆã¿ ˜°@Išb€º@ž @`¸ €¦`@g€¦à@o€¦ @ ¬ ÈN €¡ H¬ @J ¬€¤à ¤à @J¦€Š$à€¡@@ª7®áˆö@ÒMÿ@J!€@%`ª%`€¢Oÿ÷ÒM`€¢`."H¦”$à€¢€@  $ÀÖJ €¢à."@¦ ”" €¢€Oÿú€ $À $À¨€ÿôf ¢ ¦@¸ Çà‘è-@Iê’ª¡ŒÒ@@J4’@J3”’ø,ÀÿÿU”€H5¸ ²¢ú@ð`ŸÆÇà‘è!%–¡t¢!pÒ@ Ð@@IÓ”-û¿ÿ›€¦`šáx¨!|Ð@ Ò@@IÉ”-ü¿ÿ“€¦à„ီa„Ð@Ò@@I¿”-ý¿ÿ‹€¦ ã¿ ˜°@Iš`h¤@ž @;¢ øN €§ @7€¦`@?€¦ @G€¦ @  àN €¤ H @I—€¨¨æM?ÿ€¤à/@B@Iå¸@@Iã–@úJà €§`.H ’ÿÿI”€H€¢ @IÑ–Oÿð@IÏÇà‘èÇà‘è ;˜a–a”Ѐ Ò€ @Ir”.8¿ÿÀ¦` †!˜‚¡œÐ€Ò€@Ih”.9¿ÿ»€¦ ”á Ša¤Ð€ Ò€@I^”.:¿ÿ³€¦ 7-®ᨪ¡¬Ð€Ò€@IT”.;¿ÿ¸㿘À'¿ü˜º @H’¿üú'¿øšb¸¬@ž ÿÿ‰”¿ø€Hпü€¢ "HпüÒ¿øÿòk” ®@ ŸÆ@’º@пüÒ¿øÿò`”®Oÿ÷пü€¢ H7´âø€ò ŸÆ@Çà‘èã¿ ˜;@H¸šaø´b¦@°ôÀ¶@ž ² ÿøxè%”¢ ˆ’ àÀ–Ð ÿøo˜°H €¦ +¨a°@I6ÐÀ”’ –ÿøc˜°€¦ H €¦ /¬á´@I)ÐÀ”’ –ÿøV˜°€¦ @ 3°a¸² @IÐÀ°ÿøKèÇàèã¿ ˜9@H´ pš`ø¶¬@ž ô€ò €¦`H° Ô ŸÂ€ò \€¦`–H €¢à€¦À @ €¢à² Öà€¢à@€¦À 2Oÿü² €¢à@𠀦 @пàà ŸÄ€^° â¿àâ& €Z° èà¦% æ&àäà€¤ @Aîà(ª à€¥`@<ÚàžbØ \ø€Ð`€¦À @ÄàÄ&`€ÆàÆ& \ÒàÊ`ÒàŸÁ@²ÿùJÈà$°@€¡ Hº Ô Ðà$ŸÂ€º À&à$Öà€¢àHà ÐàŸÄú&àâà €¤`H€¦àä Ðà ŸÄ€ú&à €¦àHæ ŸÄÀ€êà(¨ `€¥ Hì €¥ @пðî ŸÅÀ€° ð¿ðð& ° ö €¦àHú ŸÇ@Çàèã¿ ˜°@Gšb¬¶@@ž ¢àtÔÀà €¤ @ö Ð¿ØŸÆÀ¸ Çà‘èð¿Ø¸ ð" Çà‘è²@)¦ túÀä`€¤ @ô`ÐПƀ¸ Çà‘èòи ò'`Çà‘èØN`€£ H¸ @H ¸Þ Úà€£`@® Ä  êH`€¥`H® Æ Ðà@Gý€®ì €¥ @  Ê ÈI`€¡ H Ð @G”€’ €¢`€@€º¿€ÿòX º@1– tàÀ â €¤`@ö Ð?ÜŸÆÀ¸ Çà‘èú?ܸ ú$ Çà‘èæ ä ìà€¤ @H5¸ têÀè`€¥ @Ø`ŸÃ€®î`Þ Úà€£`@  Ò`@G¶Ò @H€ Ò @G® ˆa¼ÒÀ@G÷@Gô’Æ Ò ÄàŸÀ€”¸@¿€€§@H:€§`H7# bÔÀÒ ŸÂ@Çà‘èÖ`€¢à@ä`ŸÄ€€î%`è æ €¤à@ ê Ò`@G|@GÇ’€@Gu’ø Ò î ŸÅÀ”¬¿€€§@H ¸€§`H5²¢öÀðàŸÆÇà‘èã¿ ˜;@F¸`tšc¶@ôÀò €¦`@ž ì ŸÅ€€ºú î €¥à@ð ŸÆ €€§`À& €§`"@ú¿¨Çà‘èã¿À'¿ü˜¶ @Fö'¿ø°šbŒ¨@ž @ƒö'¿ô€¦ @‹#ÒN €¢`@†’¿üÿõÜ€"@ä¿ü¶ €^пü€¤ @…9æL €¤à@9ú €§`@€¦`@„€¦ @ŒÿñÈÐ& ò €¦`H\¶ Çà‘耦 @Š#Ò €¢`@…’¿øÐ ÿö”¿ô€@€¦`¶ €5пüH¿øä €¤€@€/Ð @Fíú ¸&@€§@Ä¿øÈ ¿ø†&@²€’¿ô”ÿü(–€"@пø¶ €Ð¿üÒ¿ôÿðU” :Ê Ò¿ø€¡@ "HпüÔ €¢ "H æ¿ø%Ð ¢¢àÖ ŸÂÀæ¿øæ& пüö'¿ø€¢ "H пø1®"ìê ŸÅ@пøÀ'¿ü€¢ H;´bøò ŸÆ@Çà‘è Š!À†!ÄÐÒ@F±”/`¿ÿx€¦ #”áÌ aÈÒ Ð@F§”/a¿ÿt’¿ü-®!Ъ¡ÔÐÒ@Fž”/i¿ÿzžaؘaÜÐÒ @F””/n¿ÿv€¦  ˆaà„áäÐÒ@FŠ”/o¿ÿn#”áì aèÒ Ð@F€”/x¿ÿu’¿ø+¬áð¦aôÐÒ@Fw”/‡¿ÿ{žaø˜aüÐÒ @Fm”/ˆ¿ÿyÄ¿øã¿ °H$¶ èN €¥ H ˜/@E¬àpšc¦@ž ôÀê €¥`H Tò ŸÆ@ T’ ÿÿ ”€2H¶ ø €§ Hú ŸÇ@Çà‘èã¿ ˜;@E¸`pšb€°¶@ž øÀ@=º Þ €£àH ŸÀ@Ä T€¦ @Æ T€ à@  Ê TÈI`€¡ H Ð T@FÔ T’€€¦ @ æ €¤àH€¦`è ŸÅ€€¦`Ö €¢àHà ŸÄâ €¤`@ä Ð?øŸÄ€º Çà‘èð?øº ð' Çà‘耦`HêN`€¥`Hì €¥ H Tî ŸÅÀ T’ÿþ¤”€2Hº ò €¦`Hô ŸÆ€Çà‘èã¿ ˜7@E´àpš`è¸@ž öòà€¦`Hº ÒàŸÂ@ÔàT€¢ H %ÐàT¢¢àÖ ŸÂÀú&àTæà€¤àH€¦ èàŸÅ€¦ "@!º êN €¥`"Hº @E¤€"Hº ìà€¥ H’àTîàŸÅÀ’àTÿôN€2Hº ðà€¦ HøàŸÇÇà‘èÇà‘èã¿ ˜;@D¸`pšcȶ@êÀò`€¦`Hž ì`ŸÅ€î`ð`T€¥àHô`ŸÆ€Çàèã¿ °@˜@D/šc\¬àtª@æ@èà€¥ @ž òàÐÿØŸÆ@¶ Çà‘èôÿض ô$àÇà‘èú (¶ ¸`ø& (Çà‘èã¿ °@˜@D-šbܪ t¨@äæ €¤à@ž ò Ð¿ØŸÆ@Çà‘è?ÿî¿Øî$ Çà‘è?ÿú (¸`¶ Ÿ6à– µ2ð?° Çàèã¿ °@˜@D7šbT´àt²@ì@î €¥à@ž ø Ð¿ØŸÇÇà‘è ú¿Øú% Çà‘è Çà‘î @–Ð Ãà@D˜!à”`Œ’ž Ð@ Ð Ãàã¿ ˜;@D´`pša¨¶@ž èÀî €¥àH¸ ê ŸÅ@ì \€¥ @ ì ŸÆ’€@€¥ Oÿú€¸ 𠀦 Hò ŸÆ@Çà‘èã¿ ˜;@D¸`pša¶@êÀò`€¦`Hž ì`ŸÅ€ð`dî`° ð%`d€¥àHô`ŸÆ€Çàèã¿ ˜7@D®àpš`”º¸@ž àª ì €¥ H° ì ŸÅ€ø`$€§ H¶ Ø`$î €¥àH ¶ š š`Ä`$ª`Â@€ `Oÿüš`¶ €¥`H€¦À† Ê`$È@€¡@¶à€¦ÀOÿù†à€€¦ÀÔ`$—.à€¦À’€ ð`@ž`Ð`$“+à@Dƒ@€° Ð&`$£.àè`$ú$@æ`$¤ÀÀ$ €£.àò`$ª@ô%`ô €¦ Hú ŸÇ@Çàèã¿ ˜;@C´`pšc,¶@ž úÀî`€¥àH¸ Ò`ŸÂ@Ö`$Ôà€¢ Hž   ä`$ ¤@@   ì`$ꀥ`Oÿøžà€è`$¹+à¦øàð`€¦ Hò`ŸÆ@Çà‘èã¿ ˜²@Cšbh®@@sž â`€¤`Hp7ä`€¤ Hl7æ` €¤à@g¶ ÿî º@¶ Çà‘èÀ" ô" ž`pÒ`øÀÒ" Ð`Ð'`Ê`Ê'` È`È'`Æ` Æ'`Ä`Ä'`Ú €£`HÔ ŸÂ€Ö X€¢à@€¦ ú' X€7@à Xâ €¤`@à ä €¤ Oÿýú$ €(æ X€¤À@ð'`ú' X€ è Xê €¥@@è ì €¥€Oÿýî €¥À@𠀦 @Ð?¸ò ŸÆ@€¶ ö?¸ö' €¶ ð'`ú% ô €¦ Hú ŸÇ@Çà‘è7¬àtèÀê €¥`@Ð?°ô ŸÆ€€¶ Ø?°¶ Ø% Çà‘èã¿ ˜;@C¸`pš`8¶@ž øÀ@Cù´@´ì €¥ @î Ð?¸ŸÅÀ² Çà‘èô?¸² ô' Çà‘èØ €£ H² Ú ŸÃ@Þ \€£à@Âà€ @@Þà€£àOÿú€Ä €  @Ð?ÀÆ ŸÀÀ€6² È?ÀÈ' €2² Ê X€¦€@Ò XÐ`Ð' X€ú XÔ`€¢ @Ö`Ðà@Cy’€@ú`à`€¤ Oÿöä`ô`â â'`æ €¤àH€¦ ò Ð ŸÆ@²€¦ H/¬âêÀè`ŸÅ𠀦 Hö ŸÆÀÇà‘èã¿ ˜;@B¸`pšbP¶@ž êÀò`€¦`H€¦ ì`ŸÅ€€¦ @ð €ð`Xî`€¥àHô`ŸÆ€Çàèã¿ ˜;@B¸`pšaÌ°¶@äÀ@ž æ €¤àHè ŸÅê ð €¥`Hì ŸÅ€Çàèî €¥à@° ô Ð¿¸ŸÆ€Çàèò¿¸ò$ Çàèã¿ ˜;@B¸`pša °¶@äÀ@ž æ €¤àHè ŸÅê €¥`H° ì ŸÅ€Çàèî €¥à@° ô Ð¿¸ŸÆ€Çàèò¿¸ò$ Çàèã¿ ˜;@B¸`pš`x¨´@ê€ò`€¦`Hž ì`ŸÅ€ð`X€¦ @ Ð @BÄ’€@𠀦 Oÿøî`€¥àHö`ŸÆÀÇàè.libs/.la.so/lib:/usr/libpargzltdl.cpargz_lenltdl.c(*pargz && *pargz_len) || (!*pargz && !*pargz_len)ltdl.cstrltdl.cpargzltdl.cpargz_lenltdl.cpargzltdl.cpargz_lenltdl.centry && *entryltdl.c(argz && argz_len) || (!argz && !argz_len)ltdl.c(!argz && !argz_len) || ((argz <= entry) && (entry < (argz + argz_len)))ltdl.c(argz && argz_len) || (!argz && !argz_len)ltdl.cunknown errordlopen support not availableinvalid loaderloader initialization failedloader removal failedfile not founddependency library not foundno symbols definedcan't open the modulecan't close the modulesymbol not foundnot enough memoryinvalid module handleinternal buffer overflowinvalid errorcodelibrary already shutdowncan't close resident moduleinvalid mutex handler registrationinvalid search path insert positiondiagnosticltdl.c@PROGRAM@dlopendlpreloadhandleltdl.cdirnameltdl.cdlnameltdl.c%.*s/%spath && *pathltdl.cpcanonicalltdl.cpathltdl.cpargzltdl.cpargz_lenltdl.cfilenamesize > lendirltdl.cfilename && *filenameltdl.cpdirltdl.cpfileltdl.crphandleltdl.c*phandle == 0ltdl.cfilename && *filenameltdl.cbase_name && *base_nameltdl.cLTDL_LIBRARY_PATHLD_LIBRARY_PATHrdlname=old_library=libdir=dependency_libs=installed=yes installed=no library_names=*phandleltdl.cLTDL_LIBRARY_PATHLD_LIBRARY_PATHfilenameltdl.cpargzltdl.cpargz_lenltdl.centry && *entryltdl.cpargzltdl.cpargz_lenltdl.cdpltdl.c.0123456789bufltdl.c/dirnam && *dirnamltdl.cpargzltdl.cpargz_lenltdl.cdirnam[LT_STRLEN(dirnam) -1] != '/'ltdl.cLTDL_LIBRARY_PATHLD_LIBRARY_PATH/lib:/usr/lib_LTX_ppathltdl.cdir && *dirltdl.ccanonical && *canonicalltdl.c!beforeltdl.cdirltdl.cppath && *ppathltdl.c*ppath <= beforeltdl.cbefore - *ppath <= strlen (*ppath)ltdl.cuÔ00¿ÿó<0¿ÿðH0¿ÿíT0¿ÿê`0¿ÿçl0¿ÿäx0¿ÿá„0¿ÿÞ0¿ÿÛœ0¿ÿب0¿ÿÕ´0¿ÿÒÀ0¿ÿÏÌ0¿ÿÌØ0¿ÿÉä0¿ÿÆð0¿ÿÃü0¿ÿÀ0¿ÿ½0¿ÿº 0¿ÿ·,0¿ÿ´80¿ÿ±D0¿ÿ®P0¿ÿ«\0¿ÿ¨h0¿ÿ¥t0¿ÿ¢€0¿ÿŸŒ0¿ÿœ˜0¿ÿ™¤0¿ÿ–°0¿ÿ“ 4”D AÔ oÿýøXDoÿÿþ ˆoÿÿÿŒ` È $ oÿýüoÿÿûtÿñ”ÔD ˆ È`ìj j8 qü t uÔ v„wHwHìôwHÿñwH(v„3j BwHSj8 Yj@ _jH ejT kj\ qj wj˜ }jœ ƒj¤ ‰j¬ j´ •jÀ ›jÈ ¡jÐ §jØ ­jä ³jì ¹jü ¿k Åk0 Ëk8 Ñk„ ×kŒ Ýk¸ ãvPöj ýj  j# j' #và8väOvèhvìvð‘vô¤vø¯mœ µm¨ »vüÂԈΠ\ŒÛ èŒæwîwm° w # X%&%°1"¼=w4Nw8Vw<^w@jm¼ qmÄ xmÐ mØ †mà mè ”mð ›mø ¢n ©n °n ·n ¾n, Ån4 Ìn< ÓnD ÚnL ánT èn` ïnh ön€ ýnˆ n   n¨ n° n¸  nÀ 'nÈ .nÌ 5nÔ <nÜ Cnì Jnô Qo Xo _o, fo4 moH toX {o\ ‚od ‰ot o| —o žo  ¥o° ¬oÀ ³oÌ ºoÔ Áoè Èp Ïp Öp Ýp( äp0 ëp@ òpH ùpP pX pd pl pp px #p *p” 1p¨ 8p° ?p¸ FpÀ MpÌ TpÔ [pø bq iq pq$ wq4 ~q< …qD ŒqL “qX šq` ¡qx ¨q€ ¯qˆ ¶q ½q” Äqœ Ëq¬ Òq´ ÙqÈ àqÐ çqô îìdùP@ ÄTà-4;<¬N¨„Ze,¨p!tŒ|"¬‘"ÐФ*T²,hÌÇ.4ìÓ/ œå0¼Xò25P6hL!6´@66ôhD7\ B7htQ7ÜìV8È`9X ˜kF hzId̉J0@ŸKp±Mˆ¬ÃO4ÄØW`púh$¬ÈP-`ìpB'´hW^(hovìÜ„ZР™ŸV؈ªvˆ·¾t Øßæîg „ÿ _˜l!^€3PøL>qû ELe¸è_gvŒquÔ z‚ix “'  ¨cˆ0¢¸[p˜Íjv„lÔ_ˆäìõ]   hШ¯ !qü 7wH >è R Y aEð0 kOø |`H¤ ‰–SD” bÄÄ6 d ¥`D ¶wH » à Ìa\h á%ÀT ëFˆÜ ø(8.libs/libltdl.so.3.1.0ltdl.cBbss.bssDdata.dataDrodata.rodataDpicdata.picdata.L432.L433.L438.L439.L449.L450.L465.L466.L471.L472.L477.L478.L515.L516.L521.L522.L529.L530.L566.L567.L579.L580.L601.L602lt_dlerror_stringsobjdirarchive_extshlib_extsys_search_pathlt_dlmutex_lock_funclt_dlmutex_unlock_funclt_dlmutex_seterror_funclt_dlmutex_geterror_funclt_dllast_erroruser_error_stringserrorcount.L680.L681sys_dlsys_dl_opensys_dl_closesys_dl_symdefault_preloaded_symbols.L922presympresym_openpresym_closepresym_sympresym_exituser_search_pathloadershandlesinitialized.L1006.L1007.L1191.L1192.L1197.L1198.L1203.L1204.L1216.L1257.L1258.L1263.L1264.L1299.L1300.L1305.L1306.L1311.L1312.L1377.L1378.L1414.L1415.L1420.L1421.L1426.L1427.L1430.L1531.L1532.L1537.L1538.L1561.L1562.L1583.L1584.L1613.L1618.L1625.L1659.L1663.L1667.L1671.L1675.L1679.L1684.L1716.L1717.L1739.L1741.L1912.L1913.L1918.L1919.L1926.L1927.L1948.L1949.L1954.L1955.L1960.L1961.L1972.L1992.L2009.L2010.L2015.L2016.L2021.L2022.L2031.L2032.L2077.L2080.L2083.L2193.L2242.L2243.L2250.L2251.L2261.L2262.L2269.L2270.L2275.L2276.L2285.L2286.L2295.L2296.L2301.L2302rpl_strduprpl_argz_appendrpl_argz_create_seprpl_argz_insertrpl_argz_nextrpl_argz_stringifylt_erealloclt_emalloclt_estrduppresym_initpresym_free_symlistspresym_add_symlisttryall_dlopentryall_dlopen_modulefind_modulecanonicalize_pathargzize_pathforeach_dirinpathfind_file_callbackfind_filefind_handle_callbackfind_handleunload_deplibstrimfree_varstry_dlopenfile_not_foundlt_argz_insertlt_argz_insertinorderlt_argz_insertdirlist_files_by_dirforeachfile_callbacklt_dlpath_insertdir_START__END_strlenfopenlt_dlloader_namememcpylt_dlseterrorlt_dlcaller_registerlt_dlpreload_defaultlt_dlgetsearchpathlt_dlmalloclt_dladderrorlt_dladdsearchdirlt_dlsymlt_dlerrorlt_dlreallocstrcpy_PROCEDURE_LINKAGE_TABLE_memsetfclose__ctypelt_dlloader_nextfgetssprintfstrchrlt_dlgetinfolt_dlmakeresidentlt_dlclose_etextstrcmplt_dlloader_removereaddirlt_dlfree_DYNAMICstrncmplt_dlloader_findlt_dlpreloadopendirlt_dlloader_addlt_dlinsertsearchdirgetenvlt_dlisresidentstrncatclosedirlt_dlsetsearchpathmemmovelt_dlloader_data_GLOBAL_OFFSET_TABLE__edatalt_dlmutex_registerstrcatstrrchrlt_dlopenlt_dlforeachfilelt_dlforeachaccesslt_dlcaller_get_datalt_dlhandle_next_endstrncpy__assertlt_dlcaller_set_datalt_dlinitlt_dlopenextlt_dlexit<?8Z4cg: Forte Developer 7 Compiler Common 7.0 Patch 111704-09 2003/06/19@(#)unistd.h 1.60 01/07/29 SMI@(#)feature_tests.h 1.18 99/07/26 SMI@(#)isa_defs.h 1.20 99/05/04 SMI@(#)types.h 1.73 02/10/10 SMI@(#)machtypes.h 1.13 99/05/04 SMI@(#)int_types.h 1.6 97/08/20 SMI@(#)select.h 1.17 01/08/15 SMI@(#)time.h 2.70 02/01/28 SMI@(#)time.h 1.39 99/08/10 SMI@(#)time_iso.h 1.1 99/08/09 SMI@(#)time_impl.h 1.7 01/09/06 SMI@(#)unistd.h 1.39 01/07/29 SMI@(#)stdio.h 1.79 01/04/16 SMI@(#)stdio_iso.h 1.2 99/10/25 SMI@(#)va_list.h 1.13 01/02/08 SMI@(#)stdio_tag.h 1.3 98/04/20 SMI@(#)stdio_impl.h 1.13 01/11/16 SMI@(#)stdlib.h 1.48 00/04/13 SMI@(#)stdlib_iso.h 1.3 01/03/09 SMI@(#)string.h 1.24 99/08/10 SMI@(#)string_iso.h 1.2 99/11/09 SMI@(#)ctype.h 1.33 99/08/10 SMI@(#)ctype_iso.h 1.1 99/08/09 SMI@(#)malloc.h 1.11 97/08/23 SMI@(#)memory.h 1.13 00/02/17 SMI@(#)errno.h 1.16 99/07/26 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)dirent.h 1.31 01/07/29 SMI@(#)dirent.h 1.32 99/05/04 SMI@(#)assert.h 1.9 92/07/14 SMI@(#)dlfcn.h 1.35 01/07/27 SMI@(#)dl.h 1.15 97/04/25 SMIacomp: Forte Developer 7 C 5.4 Patch 111708-07 2003/06/19.hash.dynsym.dynstr.SUNW_version.rela.got.rela.data.rela.plt.text.rodata.rodata1.dynamic.picdata.bss.symtab.strtab.stab.index.comment.shstrtab.stab.indexstrltdl.cV=8.0;DBG_GEN=4.0.145;Xa;O;P;R=Forte Developer 7 C 5.4 Patch 111708-07 2003/06/19/DEVEL/litool/UOAlibtl.sources/libtool-1.5/libltdl; /opt/SUNWspro/bin/../prod/bin/cc -DHAVE_CONFIG_H -I. -I. -I. -xtarget=ultra2 -xarch=v8plusa -O -c -KPIC -DPIC -o .libs/ltdl.o ltdl.c””@ ÔÔp"DDAoÿÿþ ˆ ˆ@%B È È<  /B\ :B``Œ  DììV,JjjRj8j8Ã*qüqü?ttÀ [uÔuÔ°4v„v„ÄdwHwHmwHwHrwHÓz ˆØ ‚’Ü$ Ž“s— —s°¡˜#07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!07070100009654000081a40000006400000064000000013f1bb18c0000011f000000200000003800000000000000000000000800000000pkginfoPKG=UOAlibtlh NAME=LibTool development libraries and headers ARCH=sparc VERSION=1.5.0-1.1 CATEGORY=system CLASSES=none ltdlla BASEDIR=/usr/local DESC=Abstraction Utility of system linker, development libraries and headers EMAIL=solaris-packaging@noc.uoa.gr PSTAMP=atlantic20030721122532 07070100009653000081a40000006400000064000000013f1bb18c00000175000000200000003800000000000000000000000700000000pkgmap: 1 120 1 i depend 53 4807 1058292414 1 i i.ltdlla 348 25577 1058779419 1 d none include 0755 root bin 1 f none include/ltdl.h 0644 root bin 11722 32329 1058289972 1 d none lib 0755 root bin 1 f none lib/libltdl.a 0644 root bin 37852 17048 1058289972 1 e ltdlla lib/libltdl.la ? ? ? 789 1650 1058290601 1 i pkginfo 287 24627 1058779532 1 i postinstall 521 34932 1058292955 07070100009655000041ed0000006400000064000000023f1bb18c00000000000000200000003800000000000000000000000800000000install07070100009656000081a40000006400000064000000013f1442be00000035000000200000003800000000000000000000000fff270887install/dependP UOAlibtlu "LibTool shared libraries and utilities" 07070100009657000081a40000006400000064000000013f1bb11b0000015c0000002000000038000000000000000000000011ff270887install/i.ltdlla#install class for UOAlibtlh INSTALLF="/usr/sbin/installf" MY_CLASS=`basename $0 |awk -F. '{print $2}'` while read src dest do echo "Adjusting $dest" sed -e "s@%%BASEDIR%%@$BASEDIR@g" \ "$src" > "$dest" || exit 2 $INSTALLF -c "$MY_CLASS" $PKGINST "$dest" e 0444 root bin || exit 2 $INSTALLF -f -c "$MY_CLASS" $PKGINST done exit 0 07070100009662000081a40000006400000064000000013f1444db000002090000002000000038000000000000000000000014ff270887install/postinstall# Postinstall script for UOAlibtlh echo "********************************************************"; \ echo "* WARNING:"; \ echo "* This package contains libtool files necessary for"; \ echo "* linking the library. You need to make sure that the"; \ echo "* shared libraries included in UOAlibtlu package"; \ echo "* are also installed under the same BASEDIR ($BASEDIR)"; \ echo "********************************************************"; \ exit 0; 07070100009658000041ed0000006400000064000000043f1bb18c000000000000002000000038000000000000000000000006ff270887reloc0707010000965d000041ed0000006400000064000000023f1bb18c00000000000000200000003800000000000000000000000eff270887reloc/include0707010000965e000081a40000006400000064000000013f14393400002dca0000002000000038000000000000000000000015ff27088dreloc/include/ltdl.h/* ltdl.h -- generic dlopen functions Copyright (C) 1998-2000 Free Software Foundation, Inc. Originally by Thomas Tanner This file is part of GNU Libtool. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License, if you distribute this file as part of a program or library that is built using GNU libtool, you may include it under the same distribution terms that you use for the rest of that program. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* Only include this header file once. */ #ifndef LTDL_H #define LTDL_H 1 #include /* for size_t declaration */ /* --- MACROS FOR PORTABILITY --- */ /* Saves on those hard to debug '\0' typos.... */ #define LT_EOS_CHAR '\0' /* LTDL_BEGIN_C_DECLS should be used at the beginning of your declarations, so that C++ compilers don't mangle their names. Use LTDL_END_C_DECLS at the end of C declarations. */ #ifdef __cplusplus # define LT_BEGIN_C_DECLS extern "C" { # define LT_END_C_DECLS } #else # define LT_BEGIN_C_DECLS /* empty */ # define LT_END_C_DECLS /* empty */ #endif LT_BEGIN_C_DECLS /* LT_PARAMS is a macro used to wrap function prototypes, so that compilers that don't understand ANSI C prototypes still work, and ANSI C compilers can issue warnings about type mismatches. */ #if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus) # define LT_PARAMS(protos) protos # define lt_ptr void* #else # define LT_PARAMS(protos) () # define lt_ptr char* #endif /* LT_STMT_START/END are used to create macros which expand to a a single compound statement in a portable way. */ #if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus) # define LT_STMT_START (void)( # define LT_STMT_END ) #else # if (defined (sun) || defined (__sun__)) # define LT_STMT_START if (1) # define LT_STMT_END else (void)0 # else # define LT_STMT_START do # define LT_STMT_END while (0) # endif #endif /* LT_CONC creates a new concatenated symbol for the compiler in a portable way. */ #if defined(__STDC__) || defined(__cplusplus) # define LT_CONC(s,t) s##t #else # define LT_CONC(s,t) s/**/t #endif /* LT_STRLEN can be used safely on NULL pointers. */ #define LT_STRLEN(s) (((s) && (s)[0]) ? strlen (s) : 0) /* --- WINDOWS SUPPORT --- */ /* Canonicalise Windows and Cygwin recognition macros. */ #ifdef __CYGWIN32__ # ifndef __CYGWIN__ # define __CYGWIN__ __CYGWIN32__ # endif #endif #if defined(_WIN32) || defined(WIN32) # ifndef __WINDOWS__ # ifdef _WIN32 # define __WINDOWS__ _WIN32 # else # ifdef WIN32 # define __WINDOWS__ WIN32 # endif # endif # endif #endif #ifdef __WINDOWS__ # ifndef __CYGWIN__ /* LT_DIRSEP_CHAR is accepted *in addition* to '/' as a directory separator when it is set. */ # define LT_DIRSEP_CHAR '\\' # define LT_PATHSEP_CHAR ';' # endif #endif #ifndef LT_PATHSEP_CHAR # define LT_PATHSEP_CHAR ':' #endif /* DLL building support on win32 hosts; mostly to workaround their ridiculous implementation of data symbol exporting. */ #ifndef LT_SCOPE # ifdef __WINDOWS__ # ifdef DLL_EXPORT /* defined by libtool (if required) */ # define LT_SCOPE __declspec(dllexport) # endif # ifdef LIBLTDL_DLL_IMPORT /* define if linking with this dll */ # define LT_SCOPE extern __declspec(dllimport) # endif # endif # ifndef LT_SCOPE /* static linking or !__WINDOWS__ */ # define LT_SCOPE extern # endif #endif /* --- DYNAMIC MODULE LOADING API --- */ typedef struct lt_dlhandle_struct *lt_dlhandle; /* A loaded module. */ /* Initialisation and finalisation functions for libltdl. */ extern int lt_dlinit LT_PARAMS((void)); extern int lt_dlexit LT_PARAMS((void)); /* Module search path manipulation. */ extern int lt_dladdsearchdir LT_PARAMS((const char *search_dir)); extern int lt_dlinsertsearchdir LT_PARAMS((const char *before, const char *search_dir)); extern int lt_dlsetsearchpath LT_PARAMS((const char *search_path)); extern const char *lt_dlgetsearchpath LT_PARAMS((void)); extern int lt_dlforeachfile LT_PARAMS(( const char *search_path, int (*func) (const char *filename, lt_ptr data), lt_ptr data)); /* Portable libltdl versions of the system dlopen() API. */ extern lt_dlhandle lt_dlopen LT_PARAMS((const char *filename)); extern lt_dlhandle lt_dlopenext LT_PARAMS((const char *filename)); extern lt_ptr lt_dlsym LT_PARAMS((lt_dlhandle handle, const char *name)); extern const char *lt_dlerror LT_PARAMS((void)); extern int lt_dlclose LT_PARAMS((lt_dlhandle handle)); /* Module residency management. */ extern int lt_dlmakeresident LT_PARAMS((lt_dlhandle handle)); extern int lt_dlisresident LT_PARAMS((lt_dlhandle handle)); /* --- MUTEX LOCKING --- */ typedef void lt_dlmutex_lock LT_PARAMS((void)); typedef void lt_dlmutex_unlock LT_PARAMS((void)); typedef void lt_dlmutex_seterror LT_PARAMS((const char *errmsg)); typedef const char *lt_dlmutex_geterror LT_PARAMS((void)); extern int lt_dlmutex_register LT_PARAMS((lt_dlmutex_lock *lock, lt_dlmutex_unlock *unlock, lt_dlmutex_seterror *seterror, lt_dlmutex_geterror *geterror)); /* --- MEMORY HANDLING --- */ /* By default, the realloc function pointer is set to our internal realloc implementation which iself uses lt_dlmalloc and lt_dlfree. libltdl relies on a featureful realloc, but if you are sure yours has the right semantics then you can assign it directly. Generally, it is safe to assign just a malloc() and a free() function. */ LT_SCOPE lt_ptr (*lt_dlmalloc) LT_PARAMS((size_t size)); LT_SCOPE lt_ptr (*lt_dlrealloc) LT_PARAMS((lt_ptr ptr, size_t size)); LT_SCOPE void (*lt_dlfree) LT_PARAMS((lt_ptr ptr)); /* --- PRELOADED MODULE SUPPORT --- */ /* A preopened symbol. Arrays of this type comprise the exported symbols for a dlpreopened module. */ typedef struct { const char *name; lt_ptr address; } lt_dlsymlist; extern int lt_dlpreload LT_PARAMS((const lt_dlsymlist *preloaded)); extern int lt_dlpreload_default LT_PARAMS((const lt_dlsymlist *preloaded)); #define LTDL_SET_PRELOADED_SYMBOLS() LT_STMT_START{ \ extern const lt_dlsymlist lt_preloaded_symbols[]; \ lt_dlpreload_default(lt_preloaded_symbols); \ }LT_STMT_END /* --- MODULE INFORMATION --- */ /* Read only information pertaining to a loaded module. */ typedef struct { char *filename; /* file name */ char *name; /* module name */ int ref_count; /* number of times lt_dlopened minus number of times lt_dlclosed. */ } lt_dlinfo; extern const lt_dlinfo *lt_dlgetinfo LT_PARAMS((lt_dlhandle handle)); extern lt_dlhandle lt_dlhandle_next LT_PARAMS((lt_dlhandle place)); extern int lt_dlforeach LT_PARAMS(( int (*func) (lt_dlhandle handle, lt_ptr data), lt_ptr data)); /* Associating user data with loaded modules. */ typedef unsigned lt_dlcaller_id; extern lt_dlcaller_id lt_dlcaller_register LT_PARAMS((void)); extern lt_ptr lt_dlcaller_set_data LT_PARAMS((lt_dlcaller_id key, lt_dlhandle handle, lt_ptr data)); extern lt_ptr lt_dlcaller_get_data LT_PARAMS((lt_dlcaller_id key, lt_dlhandle handle)); /* --- USER MODULE LOADER API --- */ typedef struct lt_dlloader lt_dlloader; typedef lt_ptr lt_user_data; typedef lt_ptr lt_module; /* Function pointer types for creating user defined module loaders. */ typedef lt_module lt_module_open LT_PARAMS((lt_user_data loader_data, const char *filename)); typedef int lt_module_close LT_PARAMS((lt_user_data loader_data, lt_module handle)); typedef lt_ptr lt_find_sym LT_PARAMS((lt_user_data loader_data, lt_module handle, const char *symbol)); typedef int lt_dlloader_exit LT_PARAMS((lt_user_data loader_data)); struct lt_user_dlloader { const char *sym_prefix; lt_module_open *module_open; lt_module_close *module_close; lt_find_sym *find_sym; lt_dlloader_exit *dlloader_exit; lt_user_data dlloader_data; }; extern lt_dlloader *lt_dlloader_next LT_PARAMS((lt_dlloader *place)); extern lt_dlloader *lt_dlloader_find LT_PARAMS(( const char *loader_name)); extern const char *lt_dlloader_name LT_PARAMS((lt_dlloader *place)); extern lt_user_data *lt_dlloader_data LT_PARAMS((lt_dlloader *place)); extern int lt_dlloader_add LT_PARAMS((lt_dlloader *place, const struct lt_user_dlloader *dlloader, const char *loader_name)); extern int lt_dlloader_remove LT_PARAMS(( const char *loader_name)); /* --- ERROR MESSAGE HANDLING --- */ /* Defining error strings alongside their symbolic names in a macro in this way allows us to expand the macro in different contexts with confidence that the enumeration of symbolic names will map correctly onto the table of error strings. */ #define lt_dlerror_table \ LT_ERROR(UNKNOWN, "unknown error") \ LT_ERROR(DLOPEN_NOT_SUPPORTED, "dlopen support not available") \ LT_ERROR(INVALID_LOADER, "invalid loader") \ LT_ERROR(INIT_LOADER, "loader initialization failed") \ LT_ERROR(REMOVE_LOADER, "loader removal failed") \ LT_ERROR(FILE_NOT_FOUND, "file not found") \ LT_ERROR(DEPLIB_NOT_FOUND, "dependency library not found") \ LT_ERROR(NO_SYMBOLS, "no symbols defined") \ LT_ERROR(CANNOT_OPEN, "can't open the module") \ LT_ERROR(CANNOT_CLOSE, "can't close the module") \ LT_ERROR(SYMBOL_NOT_FOUND, "symbol not found") \ LT_ERROR(NO_MEMORY, "not enough memory") \ LT_ERROR(INVALID_HANDLE, "invalid module handle") \ LT_ERROR(BUFFER_OVERFLOW, "internal buffer overflow") \ LT_ERROR(INVALID_ERRORCODE, "invalid errorcode") \ LT_ERROR(SHUTDOWN, "library already shutdown") \ LT_ERROR(CLOSE_RESIDENT_MODULE, "can't close resident module") \ LT_ERROR(INVALID_MUTEX_ARGS, "invalid mutex handler registration") \ LT_ERROR(INVALID_POSITION, "invalid search path insert position") /* Enumerate the symbolic error names. */ enum { #define LT_ERROR(name, diagnostic) LT_CONC(LT_ERROR_, name), lt_dlerror_table #undef LT_ERROR LT_ERROR_MAX }; /* These functions are only useful from inside custom module loaders. */ extern int lt_dladderror LT_PARAMS((const char *diagnostic)); extern int lt_dlseterror LT_PARAMS((int errorcode)); /* --- SOURCE COMPATIBILITY WITH OLD LIBLTDL --- */ #ifdef LT_NON_POSIX_NAMESPACE # define lt_ptr_t lt_ptr # define lt_module_t lt_module # define lt_module_open_t lt_module_open # define lt_module_close_t lt_module_close # define lt_find_sym_t lt_find_sym # define lt_dlloader_exit_t lt_dlloader_exit # define lt_dlloader_t lt_dlloader # define lt_dlloader_data_t lt_user_data #endif LT_END_C_DECLS #endif /* !LTDL_H */ 0707010000965f000041ed0000006400000064000000023f1bb18c00000000000000200000003800000000000000000000000aff27088dreloc/lib07070100009660000081a40000006400000064000000013f143934000093dc0000002000000038000000000000000000000014ff270889reloc/lib/libltdl.a! / 1058289835 0 0 0 668 ` "ààààààààààààààààààààààààààààààààààlt_dlmalloclt_dlrealloclt_dlfreelt_dlmutex_registerlt_dladderrorlt_dlseterrorlt_dlpreloadlt_dlinitlt_dlloader_addlt_dlloader_nextlt_dlpreload_defaultlt_dlexitlt_dlcloselt_dlopenlt_dlopenextlt_dlforeachfilelt_dlsymlt_dlerrorlt_dladdsearchdirlt_dlinsertsearchdirlt_dlsetsearchpathlt_dlgetsearchpathlt_dlmakeresidentlt_dlisresidentlt_dlgetinfolt_dlhandle_nextlt_dlforeachlt_dlcaller_registerlt_dlcaller_set_datalt_dlcaller_get_datalt_dlloader_removelt_dlloader_findlt_dlloader_namelt_dlloader_dataltdl.o/ 1058289833 100 100 100644 37056 ` ELFŽ4(.shstrtab.text.bss.data.rodata.rodata1.stab.indexstr.stab.index.symtab.strtab.rela.text.rela.data.commentã¿ °H º @;ø`ŸÇ ºHº@’Çà‘èã¿ °@,€¦`@2!â €¤`@ä`€¤ H €¦àæ €¤à@-9è`€¥ @)9€¦à@Çà‘è ú`Ð ¬@@’®@Çà‘è ø`’@”î& ì&`Çà‘è `’ @”";¿ÿЀ¦` ’à@”"<¿ÿË+ ’`@”"=¿ÿÕ€¦àã¿ ¸@G° €¦ @L€¦à@R€§ @  ØO €£ H @€¢‚ ¢‚ @&ÚàŸÃ@°@°Çà‘è äO €¤ @ æO €¤À@ €¤(@ ¢$`èL?ÿ€¥ "H ¢$`À,   €¸ êO ê,   ¸ ìO €¥ OÿìîO î, €¤`H €¦ H;ò`ŸÆ@° ð& â&àÇà‘è  ’à@”"e¿ÿ¶€¦  `’`@”"f¿ÿ°€¦àà’ @”"g¿ÿª€§ ã¿ ¸°@Q´€¦`@V€¦à@]ÒNà€¢`@X€§ @€¦à@  ØNà€£ H @¶ ÿÿBè¶ ÿÿ?èÚ €§ H€¦àÞO?ÿ€£à@ €¦à¸' à €§ @€¦àâO?ÿ€¤`2Oÿú¸' €¦à@  äNà€¤ H @€¦ ¦ ö`î ¨ÀÐ @’ª'¬@ºÇà‘è ø`@”'@’’@”ì& è&`Çà‘è à’ @”"¡¿ÿ¬€¦` `’ @”"¢¿ÿ¦€¦àà’ @”"£¿ÿ¤€§ ã¿ °@€¦`H€¦ €¦ @!€¦`@ /€¦ @€¦ @¶€¦`H€¦@€¦€@;@’ º €§@ H º Çà‘èº €¦`8HºÇà‘è/-à’ @”"Ù¿ÿÞ€¦ ;9`’ @”"à¿ÿãã¿ °@€¦`H€¦ €¦ @€¦`@;€¦ H ¶¦`H ¸úO €§`H¶¦àô/ Oÿû¸' Çàè;/`’à@”#¿ÿ뀦 ã¿ -¨ ø ª €§ H€¦ î ŸÅÀ€¦ @ €¦`H €¦ €¦ H€¦ €¦à@ €¦ @€¦`H €¦ H €¦à@ð% ò%`ö%` €€¦`ô`€¦ @Ðôö`ŸÆÀ€¨ úô¨ ú%`€¦`HŸÆ@Çà‘èã¿ º@#°?ÿ%æ €¤àH¸ è ŸÅî Ð ¬%àª%à@„“- H Ð' ·-`ô ú&€ð ² ò' ú €§`Hú ŸÇ@Çàè#!`’ @”#¼¿ÿÚ%ã¿ ¸ú ° €§`H¶ Â ŸÀ@Æà€§@*€§ @(€§ @Òà€¢`@ —/ ˜ÿ°ÔàÐÀ ŸÂ€€(Ÿ/  ÿ°ÚÀÚ&à€"âà€¤`@ «/ èàäà¦Ðÿ´ŸÄ€€ôà³/ ®€ìÿ´ì&à€Èà€¡ @ÐÿèÊàŸÁ@€° Ðÿè° Ð&àøà€§ HúàŸÇ@Çàèã¿ ;ú`ŸÇ@€¦ H¸€¢ H/òà€¦`@¬àöàпԟÆÀÇà‘èô¿Ôô% Çà‘èã¿ @’€¦`H°€¢ H5ò €¦`@¶ ø ÐÿÔŸÇÇàèúÿÔú&àÇàèã¿ ÿý—®€¥àH°òMà€¦`H@€H€¦ H5ø €§ @¶ ú ÐÿÔŸÇ@ÇàèúÿÔú&àÇàèã¿ @’!°H7øà€§ @ @úàŸÇ@Çàè@;Ð'`Çàèã¿ @° €H5ö €¦à@ @ø ŸÇ€° @;Ð'`° Çàèã¿ @’°H7øà€§ @ @úàŸÇ@Çàè@;Ð'`Çàèã¿ 3° ú`€§`H¶`î`ŸÅÀôà4À&à8€¦ HÐà4@°øà€§ HúàŸÇ@Çàèã¿ /úà€§`H¶àìàŸÅ€úà8€§`H 1ú`H€§`ò ŸÆ@€§`OÿùôàÀ&à8€¦ HøàŸÇÇà‘è ã¿ ÿÿÙÇà‘è ã¿ )¸ ú €§`H¶ æ ŸÄÀêà8€¥`@ ì`€¥€@ê`€¥`Oÿúÿÿ ®@ ’ @” ð%àòà8ò%àî&à8€¸ ôà€¦ HúàŸÇ@Çà‘èã¿ ° øà€§ H àÔàŸÂ€ô 8€¦ @€¦`Ø €£ @Ð?ÌÚ ŸÃ@€/Þ?ÌÞ$ €+H#²`ä æ €¤à@è €¥ 2H ¤ Ð @’€2H¤ €°ê €¥`Oÿòô €¦ Oÿéì €¥ @Ð?Äî ŸÅÀ€ò?Äò$ ö €¦àHú ŸÇ@ÇàèÃà ã¿ ú` €§`@¬`Р@’€@ î  ¬ €¥àOÿ÷€3ð Çàè3ð`€¦ @´`пÐö`ŸÆÀ€ø¿Ðø& Çà‘è ã¿ ° úà€§`H´àÚàŸÃ@â ` `à& `€¤ H5ð& T1'À& \@ ’ @” ¤@ ’ <@”ఀРPÿþó€@€¦ è €¥ @п¼ê ŸÅ@€° 쿼ì& €° Hî €¥à@п´ò ŸÆ@€° ö¿´° ö& ø €§ Hú ŸÇ@Çàèã¿ °@ÿÿ èÿþÞ° /òà€¦`H¶àôàŸÆ€øà4€§ HÐà4@°úà€§`HúàŸÇ@Çàèã¿ 5ú €§`H¶ ò ŸÆ@øàð&à4€§ HúàŸÇ@Çà‘è ã¿ ° ú`€§`H¸`ú`ŸÇ@Þ `ò X€£à@ä €¤ @Ð?ìæ ŸÄÀ€e° ò?ìò' €a° ê `¨¥`è' `H\ì \€¥ H; \ô`(® €¥à@È \Æ Æ' \Ä \€  @Ô \Ò (Š `€¡`OÿõÖ \€¢à@%¢ à \€¤ @¶ à Ú (˜ `€£ 2H¶ ä (ž  €£àH €¤ æ €¤ÀH€¤ @€2H° €¤ Oÿ뀦à@€¦`è \€¥ Oÿߢ`€¦`@ì`ê`Ð`€¥ H €¦@î`ŸÅÀ€2H° €¦@H €¦`"H²ô`ŸÆ€²€¦`OÿêÀ' Xö €¦àHø ŸÇÇàèã¿ /ªúà° €§`@¸àÒ ŸÂ@€¬ì Ô?ø€¢ HÖ?øŸÂÀö Tô P€¦à@€¦àØà€£ H€¦`@€¦àÚà€£`H €¦`HÐà@’€@€¦àöà€¦àOÿꀦà@äࢠâ&àö%`€:à`€¦`@ º ÿýeÐ$ Þ €£àH€¦ €-° ð$ €¦ @€¦ Ð è  ŸÅ’Ð$ æ €¤à@€¦ ô €¦ Oÿõ€¦ @ê`€¥`"H° /Ð`ìàŸÅ€ð'`€ ° ô$ òà€¦`@ôàŸÆ€€ì' ö?ü€¦àHø?üŸÇÇàèã¿ ´@ ¸ ÊN €¡`Hº @º€€¦ º €¦ @=€¦ @C€¦à@I€§`H€¦à¢€àLÿ€¤ /"Hº'`€¦à@  äNà€¤ H @€¬@¬@ª ¨@ÿüÇ ¦@/¸ Çà‘è’à”–@˜€¦`@ ’ ”ÿÿÄ–¸€7ÿÿC’€2H¸ 7ôàŸÆ€Çà‘è ’`@”)”¿ÿ¿€¦  ’à@”)•¿ÿ¹€¦àà’`@”)–¿ÿ³€§`ã¿ ¸@ ÿÿ’€H€¦àÇà‘è €¦à@&€§`@€¦ H €§`’ ”ÿÿ‡–€H€§`Çà‘è €§`@ ;’”`ÿÿz–€HÇà‘è ’ ”ÿÿq–€HÇà‘è Çà‘è ã¿ °@MÊN €¡`@H€¦`@N€¦ @ ÚN €£`H @ÿüG @Çà‘è ÞN €£àH/  ¸ ¶ /ºâN€¤`:@ €¤ "H"¸ äO`€¤ :"H¸ æO`€¤à"H¸ èN€¥ /@êNê*  €¸ ìO`€¥ :"H ¸ îO`€¥à"H ¸ ôO`€¦ /"H¸ ö*  ¸ ôN€¦ Oÿغ`À*Ð&`Çà‘è  ’`@”)ñ¿ÿ´€¦` ’à@”)ò¿ÿ®€¦ ã¿ °@.€¦`@4€¦ @:’ :”ÿú–@!/€¢ @¬àðà€¦ @ôàпԟƀÇà‘è ò¿Ôò% Çà‘è öà€¦à@øàп¨ŸÇÇà‘è ú¿¨ú% Çà‘è Çà‘è #!`’ @”*1¿ÿ΀¦`'%à’ @”*2¿ÿÈ€¦ +)`’ @”*3¿ÿÂ㿈ö# `²ø# \@ À# dèN`€¥ H¬ @¬€š ¬ š À'¿ü/æઠ¨àÚ'¿øÚ'¿ô€¤àH€¦ äàŸÄ€€¦ @e'àN €¤ Ha’¿ôÿÿ4€2@h¤ ’¿øпôÿÿ‹”¿ü€2@a¤ пøÒ¿üÿúp” ¶"@Z¤ ¶º ¸`  /¤ ¢ €¢ @ ® ÖNà€¢àH® @®€°À°À˜ €£ H€¤@€¥`H¢ âàŸÄ@¢ ÿûZª@5€¤@@R@’€¦`HÚN`€£`H ‚@ÞHÿ€£à/H@à-@®à@@’Ò `ŸÆ€Ô \ž@Ð# dпøÒ¿üÿú'”¶Oÿ€¦à€Ð¿øú €§`@Ð?Äø ŸÇ¤ €Ð¿øö?Ĥ ö% пø€¢ "HпôÄàŸÀ€Ð¿ôä'¿ø€¢ H€¥`ÆàŸÀÀä'¿ô€¥`HÈàŸÁÊ €¡`"Hð dÐ ŸÂð dÇàè’@”*x¿ÿ¬ã¿ °@+º ÞN €£à@'€¦`@-€¦ @3-’ @Ð& H@’ /€¢8HÀ* î`€¥àHÐ`7ôàŸÆ€ú&`º ÿûÐ&`ø`€§ "Hº?ÿÇà‘è#!`’ @”* ¿ÿÕ€¦`'%à’ @”*¡¿ÿÏ€¦ +)`’ @”*¢¿ÿÉ-㿘;À'¿ü’–”`ÿþý˜¿üð¿üÇàèã¿ @’ €@Çà‘è ÿý5’€2HÀ&`Çà‘è ã¿ °@º Çà‘è9’” –ºÿþܘ €"Hº Çà‘èÀ" Ãà ã¿ ú €§`H¸ æ €¤àH´ ¶ î ìÀê (¨ `€¥ H´ ò Ð@@¸ú €¦€Oÿò¶àÇà‘èã¿ @’ '€¦`@ ¦èN`€¥ Hº @€ºº ê €¥`H €§`Ð /ìàŸÅ€À& €§`@ôN`€¦ 'H¶$ÀÿúF¸@’`Çà‘è @”&àºÀ/ýø& €À& Çà‘è ã¿ °;H€¦`î`ŸÅÀ€¦`H€¦ ð`ŸÆ€¦ H€¦àø`ŸÇ€¦àHú`ŸÇ@Çà‘è ã¿xÀ'¿ü  °à'¿ø¸ @ö è €¥ @Ç%î €¥à@¢ ê`ŸÅ@Ð# \€€¦`î`€¦`î# \@+ÿùþ ,Ð& Ô €¢ @¶ Çà‘èÐ ’ @” ,ò ¿ôò'¿ôÞ Ö Úà(À ˜`Ø"à(ÿüz’ €"@2È¿ôä €¤ "HŽ¶ 9Ð ¶ â ŸÄ@à& Çà‘èÂN`€ `@“’¿üÿýx€"@пü¶ €bпø@’ /º@º Æ¿ü´'@ÿù @Ð'¿ø¶ €SпøÒ¿ü@”È¿øà)€ €§`Ê¿üº€¢H€§`à'¿üº€¡`@t)ÐO`€¢ @o@’ .¬@¥'@’à€H à'¿ð¬%€¨ à'¿ì¦ à'¿èà'¿äÿù” ¸@¸¶ €%пø€¥ H+´ –`” _®ªÚM`Ø @ €‹ @ÞM`Þ-à€ª`Ô-àª`´ €¦€ Oÿó®àÀ*¿ø€ `H=€¥ Äø€  HÆøŸÀÀÈ`L€¡ HÐ`L”¿øÿþ«’¨Êü€¡`H€¥ ÒüŸÂ@€¥ H €¥ /@àH€¥ ”¿øÿþ—’¨€¥ H €¥ -@ H€¥ ”¿øÿþŠ’¨€¥ H €¥ ) ”¿øÿþ’¨€¥ H€¥ 5’ @¨€¥ @¬$æ €¤à@ ö Ð¼ŸÆÀ¶ €¸Ð¿ø𼶠ð$`€³Ð¿øÿù$´@@¶ €©Ð¿øê €`@³´®$ª$º(’@”€@©€¦ @  ÖN €¢àH @€š€š€ØKÿ€£ @ò €Ž`@@’”´" ’@”€@¬®ª`»/`¿ÿÞ€¦ ÞN €£à H}ÂN € `#Hy3’`@” €@¿ðÿþf’ ¶À€j€¦à’ @” €@¿ìÿþY’  ¶À€]€¦à’à@” €@¿èÿþL’ ¶À€P€¦à ’ @” €@¿äÿþ?’ ¶À€C€¦à ’`@€@¦ €9€¦à’`@€2@Կ𦠀0€¦à€¢ H-€¦à’à@” €H%€¦à¿ðÿþ’ ¶†ÀH€¦àÐ¿ð€¢ H€¦à@’ H€¦àÿø¬ ²"@¶àпð€¢H €¦à€¢ "@ ò'¿ðØ`ŸÃò'¿ð€€¦à€¦à@Þ €‹àOÿU@€¦ H)ò ŸÆ@ÿøR ,Ð&  € `"H¶à€¦à@пðÒ¿ìÔ¿èÿþÖ¿äÄ €  "HÙпøÐ #ä`ŸÄ€à& €ÑпøÆ € à@’ Ð @” ,Ð ÿý¨Ò¿ä€@¿ôÒ Ô¿èÒ'¿ôÒ¿øÖ¿ðØ¿ìÿû˜š€"H пðÐ ÿýš¶à€Ð¿ðпð¶àÒ¿ìÔ¿èÿýâֿ䀦à"@ú¿ôÔ €¢ "H§Ð¿øÐ Ö ŸÂÀà& €ŸÐ¿øÚ €£@"HRÈ¿ôÐ ÿý|€MÈ¿ôÿ÷ý ,Ð& Þ €£à@¶ €ŒÐ¿øÐ ’ @” ,ô ê¿øô'¿ô€¥`@"”¿ôÐ`LÿýM’€2H#Ä¿ô-@ ”¿ôÿýD’€2HÄ¿ô/@à”¿ôÿý;’€2HÄ¿ô”¿ô`ÿý3’€2H Ä¿ô¿ôÿú[’€2HÀ'¿ôÄ¿ô€  2@È¿ôä €¤ "HS¶ Ð 7âචŸÄ@à& €KпøÆ € ÀHÊ €¡`"HÖ¿ôÐ Ò ŸÂ@Ö¿ôÖ& à'¿ôÐ Ø €£ H+è ž Þ% æ Úà €£@Hú ê` €¥`Hî -ô Ðà ŸÆ€ò ø&` ¸ Âø€ `HÄøŸÀ€Ò`TÊ Ò!`È ÆüÈ$`T€ àHÔüŸÂ€Ö €¢à"@ú \Ø ŸÃР\€Ð¿øú$`пø€¢ H€§ #Ú`ŸÃ@à'¿ø€§ "Hпü'äàŸÄ€Ð¿ü€¢ H1è ŸÅÇà‘è `’`@”+Ú¿ý9'-à’ @”+Û¿ý5%;’ `@”+õ¿ýi’¿ü)’` @”,¿ý `’ @”,ã¿þö’ 㿘À'¿ü’ÿý ¿ü€"@ð¿üÇà‘è Çàèã¿ ;´`ú`€§`@° ö ŸÆÀ€Ð ø¿¼€¢"H° Çàè㿘°@À'¿ü@Çà‘èÖN +® º`€¢àH@®@’ .¬"@øM`@’€@’`@€2HøM`@Çà‘è €§ H˜À@˜ÀÿöÜ ²@²Çà‘è @’’@¿üÿü¶’Ú¿ü€£`@a€$@öO`ÿÿ«€H[!öO`´ €¦àH @`´ €§ H€¦€@€¦€@%â ŸÄ@ €¦àH²À@`²Àÿö§`²@²Çà‘è @’€’`À.@’`@¿üÿü~’æ¿ü€¤à@€@/ÿÿs€H€¦`/ðà€¦ @¬àп¼öàŸÆÀ€€¦`ô¿¼€¦`ô% "H° ;ø`ŸÇÇà‘è €¦`"Hð¿ü+è`ŸÅð¿üÇàè!Þ ŸÃÀð¿üÇàèã¿ ’”ÿôä–@!/€¢ @¬àðà€¦ @ôàпԟƀÇà‘è ò¿Ôò% Çà‘è öà€¦à@øàп¨ŸÇÇà‘è ú¿¨ú% Çà‘è Çà‘è ã¿ ¶°@*´ €¦`@/€¦à@59ìNà€¥ @19ú €§`@Ð Ò`ÿõ” ´@@’€¢ @@ Ð Ò`ÿõ”´Oÿôÿÿ¯èÇà‘è ÿÿ«è'%à’ @”-Ý¿ÿÓ€¦`+)`’ @”-Þ¿ÿÍ€¦à/ ’à@”-ß¿ÿÌã¿ °@\¸ €¦`@a€¦à@g€¦ @ ¤ ÔN €¢ H¤ @¤€¢à ¢à @¦@–$à€¢À@®º`ÒMÿÿ@€@˜%à®%à€£Oÿ÷ÚMà€£`."H¦ž$à€£À@ ª$ÀàKà€¤ ."@¦ž#à€£ÀOÿú€ª$Àª$À¶€ÿõ¸à¨à¬@¸ Çà‘è@’/’à@’@”’ø-€ÿÿi”€H5¸ ò ŸÆ@Çà‘è ’`@”-û¿ÿ¡€¦`  ’à@”-ü¿ÿ›€¦à `’`@”-ý¿ÿ•€¦ ã¿ °@;º ØN €£ @7€¦`@=€¦ @C€¦ @  èN €¥ H @€¬¬êM¿ÿ€¥`/@<@¸"@º @–@öJà €¦à.H ’ÿÿ_”€H€º @–Oÿð@Çà‘èÇà‘èà’`@”.8¿ÿÅ€¦`#!`’ @”.9¿ÿ¿€¦ '%à’ @”.:¿ÿ¹€¦ 7/à’à@”.;¿ÿÀ㿘¸ À'¿ü’¿üø'¿øÿÿ”¿ø€Hпü€¢ "HпüÒ¿øÿô” °@ ŸÆ@’¸@пüÒ¿øÿóù”°Oÿ÷пü€¢ H;ö`ŸÆÀÇà‘èã¿ °¶@¸/´à² ÿù>è51Р´ ’ ”–ÿù5˜°H €¦ 3@`”’ –ÿù*˜°€¦ H €¦ ;@`”’ –ÿù˜°€¦ @;@`°² ÿùèÇàèã¿ #¶ú`° €§`H´`à`ŸÄò \€¦`¤H €¤ €¦À@ €¤ ²ä €¤ @€¦À2Oÿü²€¤ @æ €¤à@пàè ŸÅ€\° ê¿àê& €X° Âà® `î&àìà€¥ @?Æà(„à€  @:ÊàÈ \Ð`€¦À@9ÒàÒ&`€ÔàÔ& \ÚàÒàØ`ŸÃºÿùõÖà$°@€¢àH² Þ Ðà$ŸÃÀ² À&à$àà€¤ Hâ ÐàŸÄ@ò&àäà €¤ H€¦àæ Ðà ŸÄÀò&à €¦àHè ŸÅ€ìà(ª  €¥`Hî €¥à@ð Ð¿ðŸÆ€° ò¿ð° ò& ö €¦àHø ŸÇÇàèã¿ °@7ôà€¦ @¨àÐ?ØÂàŸÀ@¶ Çà‘èÄ?ض Ä% Çà‘è²@ Ê €¡`@† ò ÐÿПÆ@¶ Çà‘èðÿж ð àÇà‘èÒN`€¢`Hª @ªî ìà€¥ @º Ø Ö ÔJà€¢ Hº Ú Ð`@€ºÞ €£à@  ø àO €¤ H Ð @€¦@¦@¢À¤`€¤ €@€¸¿€ÿóæ`¸@7ôà€¦ @¨àÐ?ÜÂàŸÀ@¶ Çà‘èÄ?ܶ Ä% Çà‘èÈ Æ ú € à@C-Ê €¡`@ª Ð`ŸÂ€®î`Ô Ò €¢`@ Ö Òà@Ò @€Ò @’à@@’Ú Ò Ø`ŸÃ”¶@ ¿€€§H6€§ H3%â ŸÄ@Çà‘èæ €¤à@è ŸÅ€î%`ì ê €¥`@ î Òà@@’€@’ö Ò òàŸÆ@”°¿€€§H ¶€§ H;ô`ŸÆ€Çà‘èã¿ 5ú €§`@¶ ðàŸÆ€ºúàò €¦`@ø ŸÇ €€§`À&à€§`"@úÿ¨Çà‘èã¿À'¿ü¶ °ö'¿øº@}ö'¿ô€¦ @ƒ!ÚN €£`@~’¿üÿöå€"@â¿ü¶ €\пü€¤`@{)äL`€¤ @w)ê €¥`@€¦`@x€¦ @~ÿó^Ð& ú €§`HV¶ Çà‘耦 @z € `@u’¿øÐ ÿ÷”¿ô€@€¦`¶ €3пüH¿øÈ €¡@nÐ @Ö ”&@ €¢€@mÞ¿øâ ¿ø &@ºÀ’¿ô”ÿü––€"@пø¶ €Ð¿üÒ¿ôÿò” :ä æ¿ø€¤€"Hпüè €¥ "Hî¿øÐ -ê ŸÅ@î¿øî& пüö'¿ø€¢ "Hпø5ò ŸÆ@пøÀ'¿ü€¢ H;ø`ŸÇÇà‘è ’à@”/`¿ÿ€€¦ !’à @”/a¿ÿ~’¿ü' ’à@”/i¿ÿ†/-à’ @”/n¿ÿ„€¦ 93 ’`@”/o¿ÿ~à’ @”/x¿ÿ‡’¿ø `’`@”/‡¿ÿ`’ @”/ˆ¿ÿÞ¿øã¿ °H¸ ìN €¥ H/òà¶à€¦`HàTôàŸÆ€àT’ ÿÿ,”€2H¸ úà€§`HúàŸÇ@Çà‘èã¿ ;°¸`@=´ Ò`€¢`HÔ`ŸÂ€Ö T€¦ @Ø T€£ @  Þ TÚKà€£`H Ð T@â T @€¦@ æ €¤àH€¦`è ŸÅ€€¦`ä €¤ Hð ŸÆò €¦`@Ð?øø ŸÇ´ Çà‘èô?øô' ´ Çà‘耦`HêN`€¥`Hì`€¥ H Tî`ŸÅÀ T’ÿþÍ”€2H´ ö €¦àHú ŸÇ@Çà‘èã¿ 7º ôà€¦ H¸àààŸÄâ T€¤`HÐ T'äàŸÄ€ú' Tè €¥ H€¦ ê ŸÅ@€¦ "@!º ìN €¥ "Hº @€"Hº îà€¥àH’ TòàŸÆ@’ Tÿõ„€2Hº ö €¦àHø ŸÇÇà‘èÇà‘èã¿ 7úà€§`H´àòàŸÆ@ø ð T€§ Hú ŸÇ@Çàèã¿ °@3î`€¥à@¬`ô`п؟ƀ¸ Çà‘èö¿Ø¸ ö% Çà‘èú (¸ º`ú& (Çà‘èã¿ °@+ì`€¥ @¨`î`Ð?ØŸÅÀÇà‘è?ÿò?Øò% Çà‘è?ÿú (¸`¶ Ÿ6àš µ3p?° Çàèã¿ °@3ö`€¦à@´`ø`п؟ÇÇà‘è ú¿Øú& Çà‘è Çà‘î @Ð ÃàÐ`Ãàã¿ /º ôà€¦ HªàìàŸÅ€ô`\€¦ @ ô ŸÆ’€@€¦ Oÿú€º ö`€¦àHø`ŸÇÇà‘èã¿ 3ú`€§`H´`î`ŸÅÀø dö ° ð& d€¦àHú ŸÇ@Çàèã¿ 9 ö ¤ ° €¦àHº ö ŸÆÀÂ`$€ `H¢ Æ`$Äà€  H ¢ ˆ ˆ Ò`$¤ Ê €¡`Oÿüˆ ¢ €¤ H€¤@” Ø`$Ö €¢À@¢`€¤@Oÿù” €€¤@Þ`$±,`€¤@šÀð`@¦ Ð`$@“,à@€° Ð&`$©,`î`$à%ì`$ª€À%`€©,`ö`$²Àô&`ø`€§ Hú`ŸÇ@Çàèã¿  øà° €§ HºàÚàŸÃ@ä`$â €¤`H¨ ¦ ì`$ꀀ¥@@ ¦àô`$îÀ€¥àOÿø¨ €ò`$·- °@ð ø`€§ Hú`ŸÇ@Çàèã¿ ²"@r3ê`€¥`"Hn3ì`€¥ "Hj3î` €¥à@e¶ ÿ𥠺@¶ Çà‘èÀ" ô" Ø`Ø" Ö`Ö" Ô`Ô" Ò`Ò" Ð` Ð'`Ê`Ê'`Èà€¡ H¸àÚàŸÃ@Þ X€£à@€¦ ú' X€7@à Xâ €¤`@à ä €¤ Oÿýú$ €(æ X€¤À@ð'`ú' X€ è Xê €¥@@è ì €¥€Oÿýî €¥À@𠀦 @Ð?¸ò ŸÆ@€¶ ö?¸ö' €¶ ð'`ú% ô €¦ Hú ŸÇ@Çà‘è3ö`€¦à@´`п°Â`ŸÀ@€¶ Ä¿°¶ Ä& Çà‘èã¿ @;´¸`@´ô €¦ @Ð?¸Â ŸÀ@² Çà‘èÄ?¸² Ä' Çà‘èÆ`€ àH² È`ŸÁÊ \€¡`@Ð`€¢@Ê`€¡`Oÿú€Ò €¢`@Ð?ÀÔ ŸÂ€€4² Ö?ÀÖ' €0² Ø X€¦€ @Þ XÚàÚ' X€à Xâ €¤`@ä Р@’€@à æ €¤àOÿöê ô è`è$ ì €¥ H€¦ ò Ð ŸÆ@²€¦ H1î ŸÅÀö €¦àHú ŸÇ@Çà‘èã¿ 5ú ¶ €§`H€¦ ò ŸÆ@€¦ @ð €ðàXøà€§ HúàŸÇ@Çàèã¿ -°@ª î €¥àHò ŸÆ@ô`𠀦 Hö`ŸÆÀÇàèø`€§ @° ú`иŸÇ@Çàèú¸ú%`Çàèã¿ -°@ª î €¥àHò ŸÆ@ô`€¦ H° ö`ŸÆÀÇàèø`€§ @° ú`иŸÇ@Çàèú¸ú%`Çàèã¿ 5®ú €§`H¶ ò ŸÆ@ðàX€¦ @ Ð @’€@𠀦 Oÿøøà€§ HúàŸÇ@Çàè.libs/.la.so/lib:/usr/libpargzltdl.cpargz_lenltdl.c(*pargz && *pargz_len) || (!*pargz && !*pargz_len)ltdl.cstrltdl.cpargzltdl.cpargz_lenltdl.cpargzltdl.cpargz_lenltdl.centry && *entryltdl.c(argz && argz_len) || (!argz && !argz_len)ltdl.c(!argz && !argz_len) || ((argz <= entry) && (entry < (argz + argz_len)))ltdl.c(argz && argz_len) || (!argz && !argz_len)ltdl.cunknown errordlopen support not availableinvalid loaderloader initialization failedloader removal failedfile not founddependency library not foundno symbols definedcan't open the modulecan't close the modulesymbol not foundnot enough memoryinvalid module handleinternal buffer overflowinvalid errorcodelibrary already shutdowncan't close resident moduleinvalid mutex handler registrationinvalid search path insert positiondiagnosticltdl.c@PROGRAM@dlopendlpreloadhandleltdl.cdirnameltdl.cdlnameltdl.c%.*s/%spath && *pathltdl.cpcanonicalltdl.cpathltdl.cpargzltdl.cpargz_lenltdl.cfilenamesize > lendirltdl.cfilename && *filenameltdl.cpdirltdl.cpfileltdl.crphandleltdl.c*phandle == 0ltdl.cfilename && *filenameltdl.cbase_name && *base_nameltdl.cLTDL_LIBRARY_PATHLD_LIBRARY_PATHrdlname=old_library=libdir=dependency_libs=installed=yes installed=no library_names=*phandleltdl.cLTDL_LIBRARY_PATHLD_LIBRARY_PATHfilenameltdl.cpargzltdl.cpargz_lenltdl.centry && *entryltdl.cpargzltdl.cpargz_lenltdl.cdpltdl.c.0123456789bufltdl.c/dirnam && *dirnamltdl.cpargzltdl.cpargz_lenltdl.cdirnam[LT_STRLEN(dirnam) -1] != '/'ltdl.cLTDL_LIBRARY_PATHLD_LIBRARY_PATH/lib:/usr/lib_LTX_ppathltdl.cdir && *dirltdl.ccanonical && *canonicalltdl.c!beforeltdl.cdirltdl.cppath && *ppathltdl.c*ppath <= beforeltdl.cbefore - *ppath <= strlen (*ppath)ltdl.c<?8£X4ltdl.cV=8.0;DBG_GEN=4.0.145;Xa;O;R=Forte Developer 7 C 5.4 Patch 111708-07 2003/06/19/DEVEL/litool/UOAlibtl.sources/libtool-1.5/libltdl; /opt/SUNWspro/bin/../prod/bin/cc -DHAVE_CONFIG_H -I. -I. -I. -xtarget=ultra2 -xarch=v8plusa -O -c -o ltdl.o ltdl.cÿñ+ P>EQ [k\€`—d°hÉlÙpìt÷xþ (` ˆd ì`"<”N˜U 8adnly T…°–´ž¸¦¼²D½DÍT„áØ°ñˆàÿhŒ ,dÄh)  ˆ4 Lp@ ¼ˆU h´hðv‹Ð—`x©Ø ¶øÜÈÔÛè0å@úXL¤ °t"$Ì'ðp1 ` Ä<,TLK/8¨Z/àp0ðØ‚2Èt”4<¤©;½ÉÐÝåïôû !ôè5Ü´C4QX`hn,„{‚‰ü0“Eð £IÐh´°LÉüÓ5¸(Þæìôû ',$01, ˜>EMU]f4àØw7àD€;$l‹>”„?|²@”üÅALØAÜdêB@lúB¬PBü$C ˆ%C¨T:CüHOED¬dH ÄwKT„ˆJ8™JÈŒltdl.cBbss.bssDdata.dataDrodata.rodatalt_dlerror_stringsobjdirarchive_extshlib_extsys_search_pathlt_dlmutex_lock_funclt_dlmutex_unlock_funclt_dlmutex_seterror_funclt_dlmutex_geterror_funclt_dllast_erroruser_error_stringserrorcountsys_dlsys_dl_opensys_dl_closesys_dl_symdefault_preloaded_symbolspreloaded_symbolspresympresym_openpresym_closepresym_sympresym_exituser_search_pathloadershandlesinitializedrpl_strduprpl_argz_appendrpl_argz_create_seprpl_argz_insertrpl_argz_nextrpl_argz_stringifylt_erealloclt_emalloclt_estrduppresym_initpresym_free_symlistspresym_add_symlisttryall_dlopentryall_dlopen_modulefind_modulecanonicalize_pathargzize_pathforeach_dirinpathfind_file_callbackfind_filefind_handle_callbackfind_handleload_deplibsunload_deplibstrimfree_varstry_dlopenfile_not_foundlt_argz_insertlt_argz_insertinorderlt_argz_insertdirlist_files_by_dirforeachfile_callbacklt_dlpath_insertdirlt_dlmallocmalloclt_dlreallocrealloclt_dlfreefreestrlenstrcpy__assertmemcpymemmovestrchrlt_dlmutex_registerlt_dladderrorlt_dlseterrordlopendlerrordlclosedlsymlt_dlpreloadmemsetstrcmplt_dlinitlt_dlloader_addlt_dlloader_nextlt_dlpreload_defaultlt_dlexitlt_dlclosesprintffopenstrrchraccessstrncpy__ctypegetenvfclosefgetsstrncmplt_dlopenlt_dlopenextstrcatstrncatopendirreaddirclosedirlt_dlforeachfilelt_dlsymlt_dlerrorlt_dladdsearchdirlt_dlinsertsearchdirlt_dlsetsearchpathlt_dlgetsearchpathlt_dlmakeresidentlt_dlisresidentlt_dlgetinfolt_dlhandle_nextlt_dlforeachlt_dlcaller_registerlt_dlcaller_set_datalt_dlcaller_get_datalt_dlloader_removelt_dlloader_findlt_dlloader_namelt_dlloader_dataOI I 4PX ˆ $˜ $¼LäRü     Q  $ (Q8 X< $@ XDQO¨I ¬I TM XM x `| d€ `„ dˆQ˜ lœ t  l¤ t¨Q¸ |¼ ˆÀ |Ä ˆÈQü ´0O°OÔLSR( , ˜0 4 ˜8QH  L ¬P  T ¬XQh ´l Äp ´t ÄxQ° Ìä ìT( Ì, ø0 Ì4 ø8QH L LP T LXQ TÔ TØ €Ü Tà €äQø \ \ \ \x \ì \ð \ü \ \p dt px d| p€QŒ \” \œ \¬ \° \ÈI ÌI ð dô d  d  d 4L T d X d d d h d ÌO ì d ð d ü d  d 0X D d H d XY ` d tY x l | l Z ¤ d ¨ d ¸Y À d ÔY Ø l Ü l ô[  d  d Y $ d 8Y < l @ l P \ X \ d \ h \ Œ\ À \ Ä \ Ð \ Ô \ ðM M l \ t \ € \ „ \ Ô]  \ ( \ 4 \ 8 \ ” x ˜ x Ä^„^° dÀ dÄ dÐ dØ d \ \ \ \@ „D ŒLaX`\ „dap`t ŒL \P \\ \` \€\´ \¸ \Ä \È \ \ \ \ \M @dÌM  d d, d´^M ˜M ´ dÄ d OŒO¸ ÈÈ ÈÔeM M M 0 ˜4  8 ˜<  @QP ¨T °X ¨\ °`Qp ¸t Àx ¸| À€Q   l РO˜ Ðœ à  Ð¤ à¨Q¸ è¼ ôÀ èÄ ôÈQ d d  d0 dX dh d˜ üœ   ü¤ ¨Q¸  ¼ À  Ä ÈQØ Ü (à ä (èQ O@ \D \L \d \xM Ü 0à Hè 0ì HOLM |PÀPLM lM ˆM ÄQ  f$gLM PM ˆ PŒ h P” h˜Q¨ p¬ x° p´ x¸QÈ €Ì ˆÐ €Ô ˆØQä ì Ôü Ô hp x d,gPOxM |M ÈiøM M M 4M LM Œ d  d œ d ü]!LM !XM ! g!ài" Ü"0g"@ "D^"H " j "¨j #p ü#tk#x ü#¤ #¨k#¬ #Ø #Ü #ü  $  $f$ d$, d$pl$¨m$ÔO%L% m%l $%t $%xn%  ,%¨ ,%¬n%Ô <%Ü <%àn& D& D&n&< X&@ X&D^&T h&d h&h^&” x&˜ x& n&Üg' M '$M 'Xl'lM 'pM 'ÈM 'ÌM 'ø](M (”M )])8 œ)<k)@ œ)\ °)`k)d °)€ )ˆ )ÜM )àM * M *$M *ˆM *ŒM *ô d+ d+,M +0M +LM +PM +lM +pM +„ ”+ˆ œ+Œ ”+ œ+”Q+¤ ¤+¨ ´+¬ ¤+° ´+´Q+À d+Ä Ô+È ¼+Ì Ô+Ð ¼+ÔQ+ä Ü+è ô+ì ô+ð Ü+ôQ, ˆ, ”, ˆ, ”,Q,X d,\ d,` d,°o,Ä ,Ì ,ÜO,ìg,ü -^-^-$ -(o-HO-pP-|q-¸M -ÐO-ìO-üM .M .O.DP.\q.„ d.œ d.  d.¬ d.´ d.ÜM .àM /M /M /M / M /X d/d d/h d/x d/  d/° d0 ø0 ø0D^0” Ô0˜ Ü0œ Ô0  Ü0¤Q0´ ä0¸ ð0¼ ä0À ð0ÄQ0Ô 0Ø ø0Ü 0àQ1,O1DO1` @1d @1lT2P2 X2 X2q2(r2LM 2TM 2h 2l 2p 2t 2xQ2ˆ  2Œ ,2  2” ,2˜Q2¨ 42¬ 82° 42´ 82¸Q3O34s3Ht3t3¤u3¼ \3À p3Ä \3È p3ÌQ3Ü x3à €3ä x3è €3ìQ3ü ˆ4 ”4 ˆ4 ”4 Q4 œ4 À4$ œ4( À4,Q4ÈM 4ÌM 4ô 4<4ø 4<5 °5  4<5 °5 4<58 È5<k5@ È5h Ü5lk5p Ü5” ì5˜k5œ ì5¼ \5Ä \5Ô \5Ø \6¨M 6øM 7M 7@M 7`M 7ì d7ð d7ü d8 d84 d88 d8D d8H d8„O8ÄO8üO9< d9@ d9L d9T d9 d9” d9  d9ØP9äq9ð ü9øP: ü: ü:q:q:XM :\M :p d:€ d:´P:Àq:ÐP; M ;M ;( d;, d;8 d;T d;d d;¸ ;ô (< ( H> P>Q> X> \> X>$ \>(Q>8 d>< t>@ d>D t>HQ>X >\ |>` >dQ>t ˜>x ¼>| ˜>€ ¼>„Q>´ \>¸ \>¼ \>Ì \? \?$ \?0 \?@ \?„O@8 \@H \@˜ \@  \@¬ \@° \@ÐM @ÔM AOA0 \A@ \A” \A˜ \A¤ \A¨ \Aè dAì dAø dAü dBL dBP dB\ dB` dB¸ dB¼ dBÈ dBÌ dC ¸C ¸C$ \C, \C8 \C< \C¬ \C° \C¼ \CÀ \D \D \D \D  \DÐLEH \EP \E` \Ed \Eü dF  dF dFT \FŒ \F˜ \Fœ \G¼ dGÀ dGÌ dGÔ dH†H \H  \Hh \Hx \I4^IœM I M IÔ \IØ \IÜ \Iì \J< \JH \JL \J\ \JÌ \JØ \JÜ \Jì \KX \K` \Kl \Kp \K^JLN ˆ ˜ ¸ È è $ ( 0, D0 \4 t8 ˆ< œ@ ´D ÐH äL P T @| (€ ˆ„ ìœ  d¤l¨ Tcg: Forte Developer 7 Compiler Common 7.0 Patch 111704-09 2003/06/19@(#)unistd.h 1.60 01/07/29 SMI@(#)feature_tests.h 1.18 99/07/26 SMI@(#)isa_defs.h 1.20 99/05/04 SMI@(#)types.h 1.73 02/10/10 SMI@(#)machtypes.h 1.13 99/05/04 SMI@(#)int_types.h 1.6 97/08/20 SMI@(#)select.h 1.17 01/08/15 SMI@(#)time.h 2.70 02/01/28 SMI@(#)time.h 1.39 99/08/10 SMI@(#)time_iso.h 1.1 99/08/09 SMI@(#)time_impl.h 1.7 01/09/06 SMI@(#)unistd.h 1.39 01/07/29 SMI@(#)stdio.h 1.79 01/04/16 SMI@(#)stdio_iso.h 1.2 99/10/25 SMI@(#)va_list.h 1.13 01/02/08 SMI@(#)stdio_tag.h 1.3 98/04/20 SMI@(#)stdio_impl.h 1.13 01/11/16 SMI@(#)stdlib.h 1.48 00/04/13 SMI@(#)stdlib_iso.h 1.3 01/03/09 SMI@(#)string.h 1.24 99/08/10 SMI@(#)string_iso.h 1.2 99/11/09 SMI@(#)ctype.h 1.33 99/08/10 SMI@(#)ctype_iso.h 1.1 99/08/09 SMI@(#)malloc.h 1.11 97/08/23 SMI@(#)memory.h 1.13 00/02/17 SMI@(#)errno.h 1.16 99/07/26 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)dirent.h 1.31 01/07/29 SMI@(#)dirent.h 1.32 99/05/04 SMI@(#)assert.h 1.9 92/07/14 SMI@(#)dlfcn.h 1.35 01/07/27 SMI@(#)dl.h 1.15 97/04/25 SMIacomp: Forte Developer 7 C 5.4 Patch 111708-07 2003/06/194w ¬KØL„L„ÄMH$MhÃ<U,$ -UPHVP IP^àªXeŒ#4  cˆÀ\  nŠs07070100009661000081a40000006400000064000000013f143ba9000003150000002000000038000000000000000000000015ff270889reloc/lib/libltdl.la# libltdl.la - a libtool library file # Generated by ltmain.sh - GNU libtool 1.5 (1.1220 2003/04/05 19:32:58) # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='libltdl.so.3' # Names of this library. library_names='libltdl.so.3.1.0 libltdl.so.3 libltdl.so' # The name of the static archive. old_library='libltdl.a' # Libraries that this one depends upon. dependency_libs=' -ldl' # Version information for libltdl. current=4 age=1 revision=0 # Is this an already installed library? installed=yes # Should we warn about portability when linking against -modules? shouldnotlink=no # Files to dlopen/dlpreopen dlopen='' dlpreopen='' # Directory that this library needs to be installed in: libdir='%%BASEDIR%%/lib' 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!07070100009665000081a40000006400000064000000013f1bb192000000d6000000200000003800000000000000000000000800000000pkginfoPKG=UOAlibtld NAME=LibTool Documentation ARCH=sparc VERSION=1.5.0-1.1 CATEGORY=system CLASSES=none BASEDIR=/usr/local DESC=Documentation for libtool EMAIL=solaris-packaging@noc.uoa.gr PSTAMP=atlantic20030721122538 07070100009664000081a40000006400000064000000013f1bb19200000216000000200000003800000000000000000000000700000000pkgmap: 1 472 1 d none info 0755 root bin 1 f none info/libtool.info 0444 root bin 3618 44210 1058289973 1 f none info/libtool.info-1 0444 root bin 49847 2408 1058289973 1 f none info/libtool.info-2 0444 root bin 49997 24978 1058289973 1 f none info/libtool.info-3 0444 root bin 49918 27713 1058289973 1 f none info/libtool.info-4 0444 root bin 36584 47005 1058289974 1 f none info/libtool.info-5 0444 root bin 41104 61394 1058289974 1 i pkginfo 214 17649 1058779538 1 i postinstall 642 49466 1058293022 1 i postremove 651 50258 1058293030 0707010000966e000041ed0000006400000064000000023f1bb19200000000000000200000003800000000000000000000000800000000install0707010000966f000081a40000006400000064000000013f14451e000002820000002000000038000000000000000000000014ff270887install/postinstall# PostInstall script for UOAlibtld PATH=/usr/local/bin:/usr/sfw/bin:$PATH INSTALL_INFO=install-info INPATH=NO for path in `echo $PATH|tr ":" " "` do if [ -x $path/$INSTALL_INFO ]; then INPATH=YES break; fi done if [ "$INPATH" = "YES" ];then RESULT=`( $INSTALL_INFO $BASEDIR/info/libtool.info $BASEDIR/info/dir >/dev/null);echo $?` if [ "$RESULT" != "0" ]; then echo "Sorry, couldn't append $PKG's info page into $BASEDIR/info/dir" else echo "Succefully updated $BASEDIR info's dir" fi else echo "It seems that $INSTALL_INFO isn't in your PATH" echo "Sorry, couldn't append $PKG's info page into $BASEDIR/info/dir" fi 07070100009670000081a40000006400000064000000013f1445260000028b0000002000000038000000000000000000000013ff270887install/postremove# PostInstall script for UOAlibtld PATH=/usr/local/bin:/usr/sfw/bin:$PATH INSTALL_INFO=install-info INPATH=NO for path in `echo $PATH|tr ":" " "` do if [ -x $path/$INSTALL_INFO ]; then INPATH=YES break; fi done if [ "$INPATH" = "YES" ];then RESULT=`( $INSTALL_INFO --delete $BASEDIR/info/libtool.info $BASEDIR/info/dir >/dev/null);echo $?` if [ "$RESULT" != "0" ]; then echo "Sorry, couldn't remove $PKG's info page from $BASEDIR/info/dir" else echo "Succefully removed $BASEDIR info's dir" fi else echo "It seems that $INSTALL_INFO isn't in your PATH" echo "Sorry, couldn't remove $PKG's info page from $BASEDIR/info/dir" fi 07070100009666000041ed0000006400000064000000033f1bb192000000000000002000000038000000000000000000000006ff270887reloc07070100009667000041ed0000006400000064000000023f1bb19200000000000000200000003800000000000000000000000bff270887reloc/info07070100009668000081a40000006400000064000000013f14393500000e220000002000000038000000000000000000000018ff27088areloc/info/libtool.infoThis is libtool.info, produced by makeinfo version 4.5 from libtool.texi. INFO-DIR-SECTION GNU programming tools START-INFO-DIR-ENTRY * Libtool: (libtool). Generic shared library support script. END-INFO-DIR-ENTRY INFO-DIR-SECTION Individual utilities START-INFO-DIR-ENTRY * libtoolize: (libtool)Invoking libtoolize. Adding libtool support. END-INFO-DIR-ENTRY This file documents GNU Libtool 1.5 Copyright (C) 1996-2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".  Indirect: libtool.info-1: 863 libtool.info-2: 49847 libtool.info-3: 98981 libtool.info-4: 148036 libtool.info-5: 183757  Tag Table: (Indirect) Node: Top863 Node: Introduction6705 Node: Motivation8526 Node: Issues9841 Node: Other implementations11306 Node: Postmortem11844 Node: Libtool paradigm13460 Node: Using libtool14404 Node: Creating object files16517 Node: Linking libraries19026 Ref: Linking libraries-Footnote-121953 Node: Linking executables22094 Ref: Linking executables-Footnote-127075 Node: Debugging executables27368 Node: Installing libraries30091 Ref: Installing libraries-Footnote-133254 Node: Installing executables33336 Node: Static libraries34124 Node: Invoking libtool37355 Node: Compile mode40600 Node: Link mode42596 Node: Execute mode49072 Node: Install mode49847 Node: Finish mode51848 Node: Uninstall mode52278 Node: Clean mode52714 Node: Integrating libtool53168 Node: Makefile rules53850 Node: Using Automake54921 Node: Configuring57494 Node: AC_PROG_LIBTOOL58663 Ref: AC_PROG_LIBTOOL-Footnote-165965 Node: Distributing66226 Node: Invoking libtoolize67077 Node: Autoconf .o macros68803 Node: Static-only libraries70046 Ref: Static-only libraries-Footnote-171400 Node: Versioning71509 Node: Interfaces72880 Node: Libtool versioning73508 Node: Updating version info75716 Node: Release numbers77589 Node: Library tips79431 Node: C header files82239 Ref: C header files-Footnote-185935 Node: Inter-library dependencies86144 Node: Dlopened modules88805 Ref: Dlopened modules-Footnote-190714 Node: Building modules90780 Node: Dlpreopening91983 Node: Finding the dlname94810 Ref: Finding the dlname-Footnote-196104 Node: Dlopen issues96157 Node: Using libltdl97205 Node: Libltdl interface98981 Node: Modules for libltdl108703 Node: Thread Saftey in libltdl111203 Node: User defined module data113403 Node: Module loaders for libltdl118226 Ref: Module loaders for libltdl-Footnote-1127580 Node: Distributing libltdl127686 Ref: Distributing libltdl-Footnote-1134143 Node: Other languages134368 Node: C++ libraries134997 Node: Troubleshooting136417 Node: Libtool test suite136949 Node: Test descriptions137675 Node: When tests fail144115 Node: Reporting bugs144999 Node: Maintaining146610 Node: New ports147350 Node: Information sources148036 Node: Porting inter-library dependencies150493 Node: Tested platforms153199 Node: Platform quirks161627 Node: References162593 Node: Compilers163439 Ref: Compilers-Footnote-1165004 Node: Reloadable objects165320 Node: Multiple dependencies165668 Node: Archivers166548 Node: libtool script contents167103 Node: Cheap tricks182261 Node: GNU Free Documentation License183757 Node: Index202485  End Tag Table 07070100009669000081a40000006400000064000000013f1439350000c2b7000000200000003800000000000000000000001aff27088areloc/info/libtool.info-1This is libtool.info, produced by makeinfo version 4.5 from libtool.texi. INFO-DIR-SECTION GNU programming tools START-INFO-DIR-ENTRY * Libtool: (libtool). Generic shared library support script. END-INFO-DIR-ENTRY INFO-DIR-SECTION Individual utilities START-INFO-DIR-ENTRY * libtoolize: (libtool)Invoking libtoolize. Adding libtool support. END-INFO-DIR-ENTRY This file documents GNU Libtool 1.5 Copyright (C) 1996-2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".  File: libtool.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) Shared library support for GNU ****************************** This file documents GNU Libtool, a script that allows package developers to provide generic shared library support. This edition documents version 1.5. *Note Reporting bugs::, for information on how to report problems with libtool. * Menu: * Introduction:: What the heck is libtool? * Libtool paradigm:: How libtool's view of libraries is different. * Using libtool:: Example of using libtool to build libraries. * Invoking libtool:: Running the `libtool' script. * Integrating libtool:: Using libtool in your own packages. * Versioning:: Using library interface versions. * Library tips:: Tips for library interface design. * Inter-library dependencies:: Libraries that depend on other libraries. * Dlopened modules:: `dlopen'ing libtool-created libraries. * Using libltdl:: Libtool's portable `dlopen' wrapper library. * Other languages:: Using libtool without a C compiler. * Troubleshooting:: When libtool doesn't work as advertised. * Maintaining:: Information used by the libtool maintainer. * GNU Free Documentation License:: License for this manual. * Index:: Full index. Introduction * Motivation:: Why does GNU need a libtool? * Issues:: The problems that need to be addressed. * Other implementations:: How other people have solved these issues. * Postmortem:: Learning from past difficulties. Using libtool * Creating object files:: Compiling object files for libraries. * Linking libraries:: Creating libraries from object files. * Linking executables:: Linking object files against libtool libraries. * Debugging executables:: Running GDB on libtool-generated programs. * Installing libraries:: Making libraries available to users. * Installing executables:: Making programs available to users. * Static libraries:: When shared libraries are not wanted. Invoking `libtool' * Compile mode:: Creating library object files. * Link mode:: Generating executables and libraries. * Execute mode:: Debugging libtool-generated programs. * Install mode:: Making libraries and executables public. * Finish mode:: Completing a library installation. * Uninstall mode:: Removing installed executables and libraries. * Clean mode:: Removing uninstalled executables and libraries. Integrating libtool with your package * Makefile rules:: Writing `Makefile' rules for libtool. * Using Automake:: Automatically supporting libtool. * Configuring:: Configuring libtool for a host system. * Distributing:: What files to distribute with your package. * Static-only libraries:: Sometimes shared libraries are just a pain. Configuring libtool * AC_PROG_LIBTOOL:: Configuring `libtool' in `configure.in'. Including libtool in your package * Invoking libtoolize:: `libtoolize' command line options. * Autoconf .o macros:: Autoconf macros that set object file names. Library interface versions * Interfaces:: What are library interfaces? * Libtool versioning:: Libtool's versioning system. * Updating version info:: Changing version information before releases. * Release numbers:: Breaking binary compatibility for aesthetics. Tips for interface design * C header files:: How to write portable include files. Dlopened modules * Building modules:: Creating dlopenable objects and libraries. * Dlpreopening:: Dlopening that works on static platforms. * Finding the dlname:: Choosing the right file to `dlopen'. * Dlopen issues:: Unresolved problems that need your attention. Using libltdl * Libltdl interface:: How to use libltdl in your programs. * Modules for libltdl:: Creating modules that can be `dlopen'ed. * Thread Saftey in libltdl:: Registering callbacks for multi-thread safety. * User defined module data:: Associating data with loaded modules. * Module loaders for libltdl:: Creating user defined module loaders. * Distributing libltdl:: How to distribute libltdl with your package. Using libtool with other languages * C++ libraries:: Troubleshooting * Libtool test suite:: Libtool's self-tests. * Reporting bugs:: How to report problems with libtool. The libtool test suite * Test descriptions:: The contents of the test suite. * When tests fail:: What to do when a test fails. Maintenance notes for libtool * New ports:: How to port libtool to new systems. * Tested platforms:: When libtool was last tested. * Platform quirks:: Information about different library systems. * libtool script contents:: Configuration information that libtool uses. * Cheap tricks:: Making libtool maintainership easier. Porting libtool to new systems * Information sources:: Where to find relevant documentation * Porting inter-library dependencies:: Implementation details explained Platform quirks * References:: Finding more information. * Compilers:: Creating object files from source files. * Reloadable objects:: Binding object files together. * Multiple dependencies:: Removing duplicate dependent libraries. * Archivers:: Programs that create static archives.  File: libtool.info, Node: Introduction, Next: Libtool paradigm, Prev: Top, Up: Top Introduction ************ In the past, if a source code package developer wanted to take advantage of the power of shared libraries, he needed to write custom support code for each platform on which his package ran. He also had to design a configuration interface so that the package installer could choose what sort of libraries were built. GNU Libtool simplifies the developer's job by encapsulating both the platform-specific dependencies, and the user interface, in a single script. GNU Libtool is designed so that the complete functionality of each host type is available via a generic interface, but nasty quirks are hidden from the programmer. GNU Libtool's consistent interface is reassuring... users don't need to read obscure documentation in order to have their favorite source package build shared libraries. They just run your package `configure' script (or equivalent), and libtool does all the dirty work. There are several examples throughout this document. All assume the same environment: we want to build a library, `libhello', in a generic way. `libhello' could be a shared library, a static library, or both... whatever is available on the host system, as long as libtool has been ported to it. This chapter explains the original design philosophy of libtool. Feel free to skip to the next chapter, unless you are interested in history, or want to write code to extend libtool in a consistent way. * Menu: * Motivation:: Why does GNU need a libtool? * Issues:: The problems that need to be addressed. * Other implementations:: How other people have solved these issues. * Postmortem:: Learning from past difficulties.  File: libtool.info, Node: Motivation, Next: Issues, Up: Introduction Motivation for writing libtool ============================== Since early 1995, several different GNU developers have recognized the importance of having shared library support for their packages. The primary motivation for such a change is to encourage modularity and reuse of code (both conceptually and physically) in GNU programs. Such a demand means that the way libraries are built in GNU packages needs to be general, to allow for any library type the package installer might want. The problem is compounded by the absence of a standard procedure for creating shared libraries on different platforms. The following sections outline the major issues facing shared library support in GNU, and how shared library support could be standardized with libtool. The following specifications were used in developing and evaluating this system: 1. The system must be as elegant as possible. 2. The system must be fully integrated with the GNU Autoconf and Automake utilities, so that it will be easy for GNU maintainers to use. However, the system must not require these tools, so that it can be used by non-GNU packages. 3. Portability to other (non-GNU) architectures and tools is desirable.  File: libtool.info, Node: Issues, Next: Other implementations, Prev: Motivation, Up: Introduction Implementation issues ===================== The following issues need to be addressed in any reusable shared library system, specifically libtool: 1. The package installer should be able to control what sort of libraries are built. 2. It can be tricky to run dynamically linked programs whose libraries have not yet been installed. `LD_LIBRARY_PATH' must be set properly (if it is supported), or programs fail to run. 3. The system must operate consistently even on hosts which don't support shared libraries. 4. The commands required to build shared libraries may differ wildly from host to host. These need to be determined at configure time in a consistent way. 5. It is not always obvious with which suffix a shared library should be installed. This makes it difficult for `Makefile' rules, since they generally assume that file names are the same from host to host. 6. The system needs a simple library version number abstraction, so that shared libraries can be upgraded in place. The programmer should be informed how to design the interfaces to the library to maximize binary compatibility. 7. The install `Makefile' target should warn the package installer to set the proper environment variables (`LD_LIBRARY_PATH' or equivalent), or run `ldconfig'.  File: libtool.info, Node: Other implementations, Next: Postmortem, Prev: Issues, Up: Introduction Other implementations ===================== Even before libtool was developed, many free software packages built and installed their own shared libraries. At first, these packages were examined to avoid reinventing existing features. Now it is clear that none of these packages have documented the details of shared library systems that libtool requires. So, other packages have been more or less abandoned as influences.  File: libtool.info, Node: Postmortem, Prev: Other implementations, Up: Introduction A postmortem analysis of other implementations ============================================== In all fairness, each of the implementations that were examined do the job that they were intended to do, for a number of different host systems. However, none of these solutions seem to function well as a generalized, reusable component. Most were too complex to use (much less modify) without understanding exactly what the implementation does, and they were generally not documented. The main difficulty is that different vendors have different views of what libraries are, and none of the packages which were examined seemed to be confident enough to settle on a single paradigm that just _works_. Ideally, libtool would be a standard that would be implemented as series of extensions and modifications to existing library systems to make them work consistently. However, it is not an easy task to convince operating system developers to mend their evil ways, and people want to build shared libraries right now, even on buggy, broken, confused operating systems. For this reason, libtool was designed as an independent shell script. It isolates the problems and inconsistencies in library building that plague `Makefile' writers by wrapping the compiler suite on different platforms with a consistent, powerful interface. With luck, libtool will be useful to and used by the GNU community, and that the lessons that were learned in writing it will be taken up by designers of future library systems.  File: libtool.info, Node: Libtool paradigm, Next: Using libtool, Prev: Introduction, Up: Top The libtool paradigm ******************** At first, libtool was designed to support an arbitrary number of library object types. After libtool was ported to more platforms, a new paradigm gradually developed for describing the relationship between libraries and programs. In summary, "libraries are programs with multiple entry points, and more formally defined interfaces." Version 0.7 of libtool was a complete redesign and rewrite of libtool to reflect this new paradigm. So far, it has proved to be successful: libtool is simpler and more useful than before. The best way to introduce the libtool paradigm is to contrast it with the paradigm of existing library systems, with examples from each. It is a new way of thinking, so it may take a little time to absorb, but when you understand it, the world becomes simpler.  File: libtool.info, Node: Using libtool, Next: Invoking libtool, Prev: Libtool paradigm, Up: Top Using libtool ************* It makes little sense to talk about using libtool in your own packages until you have seen how it makes your life simpler. The examples in this chapter introduce the main features of libtool by comparing the standard library building procedure to libtool's operation on two different platforms: `a23' An Ultrix 4.2 platform with only static libraries. `burger' A NetBSD/i386 1.2 platform with shared libraries. You can follow these examples on your own platform, using the preconfigured libtool script that was installed with libtool (*note Configuring::). Source files for the following examples are taken from the `demo' subdirectory of the libtool distribution. Assume that we are building a library, `libhello', out of the files `foo.c' and `hello.c'. Note that the `foo.c' source file uses the `cos' math library function, which is usually found in the standalone math library, and not the C library (*note Trigonometric Functions: (libc)Trig Functions.). So, we need to add `-lm' to the end of the link line whenever we link `foo.o' or `foo.lo' into an executable or a library (*note Inter-library dependencies::). The same rule applies whenever you use functions that don't appear in the standard C library... you need to add the appropriate `-lNAME' flag to the end of the link line when you link against those objects. After we have built that library, we want to create a program by linking `main.o' against `libhello'. * Menu: * Creating object files:: Compiling object files for libraries. * Linking libraries:: Creating libraries from object files. * Linking executables:: Linking object files against libtool libraries. * Debugging executables:: Running GDB on libtool-generated programs. * Installing libraries:: Making libraries available to users. * Installing executables:: Making programs available to users. * Static libraries:: When shared libraries are not wanted.  File: libtool.info, Node: Creating object files, Next: Linking libraries, Up: Using libtool Creating object files ===================== To create an object file from a source file, the compiler is invoked with the `-c' flag (and any other desired flags): burger$ gcc -g -O -c main.c burger$ The above compiler command produces an object file, `main.o', from the source file `main.c'. For most library systems, creating object files that become part of a static library is as simple as creating object files that are linked to form an executable: burger$ gcc -g -O -c foo.c burger$ gcc -g -O -c hello.c burger$ Shared libraries, however, may only be built from "position-independent code" (PIC). So, special flags must be passed to the compiler to tell it to generate PIC rather than the standard position-dependent code. Since this is a library implementation detail, libtool hides the complexity of PIC compiler flags by using separate library object files (which end in `.lo' instead of `.o'). On systems without shared libraries (or without special PIC compiler flags), these library object files are identical to "standard" object files. To create library object files for `foo.c' and `hello.c', simply invoke libtool with the standard compilation command as arguments (*note Compile mode::): a23$ libtool --mode=compile gcc -g -O -c foo.c gcc -g -O -c foo.c echo timestamp > foo.lo a23$ libtool --mode=compile gcc -g -O -c hello.c gcc -g -O -c hello.c echo timestamp > hello.lo a23$ Note that libtool creates two files for each invocation. The `.lo' file is a library object, which may be built into a shared library, and the `.o' file is a standard object file. On `a23', the library objects are just timestamps, because only static libraries are supported. On shared library systems, libtool automatically inserts the PIC generation flags into the compilation command, so that the library object and the standard object differ: burger$ libtool --mode=compile gcc -g -O -c foo.c gcc -g -O -c -fPIC -DPIC foo.c mv -f foo.o foo.lo gcc -g -O -c foo.c >/dev/null 2>&1 burger$ libtool --mode=compile gcc -g -O -c hello.c gcc -g -O -c -fPIC -DPIC hello.c mv -f hello.o hello.lo gcc -g -O -c hello.c >/dev/null 2>&1 burger$ Notice that the second run of GCC has its output discarded. This is done so that compiler warnings aren't annoyingly duplicated.  File: libtool.info, Node: Linking libraries, Next: Linking executables, Prev: Creating object files, Up: Using libtool Linking libraries ================= Without libtool, the programmer would invoke the `ar' command to create a static library: burger$ ar cru libhello.a hello.o foo.o burger$ But of course, that would be too simple, so many systems require that you run the `ranlib' command on the resulting library (to give it better karma, or something): burger$ ranlib libhello.a burger$ It seems more natural to use the C compiler for this task, given libtool's "libraries are programs" approach. So, on platforms without shared libraries, libtool simply acts as a wrapper for the system `ar' (and possibly `ranlib') commands. Again, the libtool library name differs from the standard name (it has a `.la' suffix instead of a `.a' suffix). The arguments to libtool are the same ones you would use to produce an executable named `libhello.la' with your compiler (*note Link mode::): a23$ libtool --mode=link gcc -g -O -o libhello.la foo.o hello.o libtool: cannot build libtool library `libhello.la' from non-libtool \ objects a23$ Aha! Libtool caught a common error... trying to build a library from standard objects instead of library objects. This doesn't matter for static libraries, but on shared library systems, it is of great importance. So, let's try again, this time with the library object files. Remember also that we need to add `-lm' to the link command line because `foo.c' uses the `cos' math library function (*note Using libtool::). Another complication in building shared libraries is that we need to specify the path to the directory in which they (eventually) will be installed (in this case, `/usr/local/lib')(1): a23$ libtool --mode=link gcc -g -O -o libhello.la foo.lo hello.lo \ -rpath /usr/local/lib -lm mkdir .libs ar cru .libs/libhello.a foo.o hello.o ranlib .libs/libhello.a creating libhello.la a23$ Now, let's try the same trick on the shared library platform: burger$ libtool --mode=link gcc -g -O -o libhello.la foo.lo hello.lo \ -rpath /usr/local/lib -lm mkdir .libs ld -Bshareable -o .libs/libhello.so.0.0 foo.lo hello.lo -lm ar cru .libs/libhello.a foo.o hello.o ranlib .libs/libhello.a creating libhello.la burger$ Now that's significantly cooler... libtool just ran an obscure `ld' command to create a shared library, as well as the static library. Note how libtool creates extra files in the `.libs' subdirectory, rather than the current directory. This feature is to make it easier to clean up the build directory, and to help ensure that other programs fail horribly if you accidentally forget to use libtool when you should. ---------- Footnotes ---------- (1) If you don't specify an `rpath', then libtool builds a libtool convenience archive, not a shared library (*note Static libraries::).  File: libtool.info, Node: Linking executables, Next: Debugging executables, Prev: Linking libraries, Up: Using libtool Linking executables =================== If you choose at this point to "install" the library (put it in a permanent location) before linking executables against it, then you don't need to use libtool to do the linking. Simply use the appropriate `-L' and `-l' flags to specify the library's location. Some system linkers insist on encoding the full directory name of each shared library in the resulting executable. Libtool has to work around this misfeature by special magic to ensure that only permanent directory names are put into installed executables. The importance of this bug must not be overlooked: it won't cause programs to crash in obvious ways. It creates a security hole, and possibly even worse, if you are modifying the library source code after you have installed the package, you will change the behaviour of the installed programs! So, if you want to link programs against the library before you install it, you must use libtool to do the linking. Here's the old way of linking against an uninstalled library: burger$ gcc -g -O -o hell.old main.o libhello.a -lm burger$ Libtool's way is almost the same(1) (*note Link mode::): a23$ libtool --mode=link gcc -g -O -o hell main.o libhello.la -lm gcc -g -O -o hell main.o ./.libs/libhello.a -lm a23$ That looks too simple to be true. All libtool did was transform `libhello.la' to `./.libs/libhello.a', but remember that `a23' has no shared libraries. On `burger' the situation is different: burger$ libtool --mode=link gcc -g -O -o hell main.o libhello.la -lm gcc -g -O -o .libs/hell main.o -L./.libs -R/usr/local/lib -lhello -lm creating hell burger$ Now assume `libhello.la' had already been installed, and you want to link a new program with it. You could figure out where it lives by yourself, then run: burger$ gcc -g -O -o test test.o -L/usr/local/lib -lhello However, unless `/usr/local/lib' is in the standard library search path, you won't be able to run `test'. However, if you use libtool to link the already-installed libtool library, it will do The Right Thing (TM) for you: burger$ libtool --mode=link gcc -g -O -o test test.o /usr/local/lib/libhello.la gcc -g -O -o .libs/test test.o -Wl,--rpath -Wl,/usr/local/lib /usr/local/lib/libhello.a -lm creating test burger$ Note that libtool added the necessary run-time path flag, as well as `-lm', the library libhello.la depended upon. Nice, huh? Since libtool created a wrapper script, you should use libtool to install it and debug it too. However, since the program does not depend on any uninstalled libtool library, it is probably usable even without the wrapper script. Libtool could probably be made smarter to avoid the creation of the wrapper script in this case, but this is left as an exercise for the reader. Notice that the executable, `hell', was actually created in the `.libs' subdirectory. Then, a wrapper script was created in the current directory. On NetBSD 1.2, libtool encodes the installation directory of `libhello', by using the `-R/usr/local/lib' compiler flag. Then, the wrapper script guarantees that the executable finds the correct shared library (the one in `./.libs') until it is properly installed. Let's compare the two different programs: burger$ time ./hell.old Welcome to GNU Hell! ** This is not GNU Hello. There is no built-in mail reader. ** 0.21 real 0.02 user 0.08 sys burger$ time ./hell Welcome to GNU Hell! ** This is not GNU Hello. There is no built-in mail reader. ** 0.63 real 0.09 user 0.59 sys burger$ The wrapper script takes significantly longer to execute, but at least the results are correct, even though the shared library hasn't been installed yet. So, what about all the space savings that shared libraries are supposed to yield? burger$ ls -l hell.old libhello.a -rwxr-xr-x 1 gord gord 15481 Nov 14 12:11 hell.old -rw-r--r-- 1 gord gord 4274 Nov 13 18:02 libhello.a burger$ ls -l .libs/hell .libs/libhello.* -rwxr-xr-x 1 gord gord 11647 Nov 14 12:10 .libs/hell -rw-r--r-- 1 gord gord 4274 Nov 13 18:44 .libs/libhello.a -rwxr-xr-x 1 gord gord 12205 Nov 13 18:44 .libs/libhello.so.0.0 burger$ Well, that sucks. Maybe I should just scrap this project and take up basket weaving. Actually, it just proves an important point: shared libraries incur overhead because of their (relative) complexity. In this situation, the price of being dynamic is eight kilobytes, and the payoff is about four kilobytes. So, having a shared `libhello' won't be an advantage until we link it against at least a few more programs. ---------- Footnotes ---------- (1) However, you should avoid using `-L' or `-l' flags to link against an uninstalled libtool library. Just specify the relative path to the `.la' file, such as `../intl/libintl.la'. This is a design decision to eliminate any ambiguity when linking against uninstalled shared libraries.  File: libtool.info, Node: Debugging executables, Next: Installing libraries, Prev: Linking executables, Up: Using libtool Debugging executables ===================== If `hell' was a complicated program, you would certainly want to test and debug it before installing it on your system. In the above section, you saw how the libtool wrapper script makes it possible to run the program directly, but unfortunately, this mechanism interferes with the debugger: burger$ gdb hell GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is no warranty for GDB; type "show warranty" for details. GDB 4.16 (i386-unknown-netbsd), (C) 1996 Free Software Foundation, Inc. "hell": not in executable format: File format not recognized (gdb) quit burger$ Sad. It doesn't work because GDB doesn't know where the executable lives. So, let's try again, by invoking GDB directly on the executable: burger$ gdb .libs/hell trick:/home/src/libtool/demo$ gdb .libs/hell GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is no warranty for GDB; type "show warranty" for details. GDB 4.16 (i386-unknown-netbsd), (C) 1996 Free Software Foundation, Inc. (gdb) break main Breakpoint 1 at 0x8048547: file main.c, line 29. (gdb) run Starting program: /home/src/libtool/demo/.libs/hell /home/src/libtool/demo/.libs/hell: can't load library 'libhello.so.2' Program exited with code 020. (gdb) quit burger$ Argh. Now GDB complains because it cannot find the shared library that `hell' is linked against. So, we must use libtool in order to properly set the library path and run the debugger. Fortunately, we can forget all about the `.libs' directory, and just run it on the executable wrapper (*note Execute mode::): burger$ libtool --mode=execute gdb hell GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is no warranty for GDB; type "show warranty" for details. GDB 4.16 (i386-unknown-netbsd), (C) 1996 Free Software Foundation, Inc. (gdb) break main Breakpoint 1 at 0x8048547: file main.c, line 29. (gdb) run Starting program: /home/src/libtool/demo/.libs/hell Breakpoint 1, main (argc=1, argv=0xbffffc40) at main.c:29 29 printf ("Welcome to GNU Hell!\n"); (gdb) quit The program is running. Quit anyway (and kill it)? (y or n) y burger$  File: libtool.info, Node: Installing libraries, Next: Installing executables, Prev: Debugging executables, Up: Using libtool Installing libraries ==================== Installing libraries on a non-libtool system is quite straightforward... just copy them into place:(1) burger$ su Password: ******** burger# cp libhello.a /usr/local/lib/libhello.a burger# Oops, don't forget the `ranlib' command: burger# ranlib /usr/local/lib/libhello.a burger# Libtool installation is quite simple, as well. Just use the `install' or `cp' command that you normally would (*note Install mode::): a23# libtool --mode=install cp libhello.la /usr/local/lib/libhello.la cp libhello.la /usr/local/lib/libhello.la cp .libs/libhello.a /usr/local/lib/libhello.a ranlib /usr/local/lib/libhello.a a23# Note that the libtool library `libhello.la' is also installed, to help libtool with uninstallation (*note Uninstall mode::) and linking (*note Linking executables::) and to help programs with dlopening (*note Dlopened modules::). Here is the shared library example: burger# libtool --mode=install install -c libhello.la /usr/local/lib/libhello.la install -c .libs/libhello.so.0.0 /usr/local/lib/libhello.so.0.0 install -c libhello.la /usr/local/lib/libhello.la install -c .libs/libhello.a /usr/local/lib/libhello.a ranlib /usr/local/lib/libhello.a burger# It is safe to specify the `-s' (strip symbols) flag if you use a BSD-compatible install program when installing libraries. Libtool will either ignore the `-s' flag, or will run a program that will strip only debugging and compiler symbols from the library. Once the libraries have been put in place, there may be some additional configuration that you need to do before using them. First, you must make sure that where the library is installed actually agrees with the `-rpath' flag you used to build it. Then, running `libtool -n --mode=finish LIBDIR' can give you further hints on what to do (*note Finish mode::): burger# libtool -n --mode=finish /usr/local/lib PATH="$PATH:/sbin" ldconfig -m /usr/local/lib ----------------------------------------------------------------- Libraries have been installed in: /usr/local/lib To link against installed libraries in a given directory, LIBDIR, you must use the `-LLIBDIR' flag during linking. You will also need to do one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-RLIBDIR' linker flag See any operating system documentation about shared libraries for more information, such as the ld and ld.so manual pages. ----------------------------------------------------------------- burger# After you have completed these steps, you can go on to begin using the installed libraries. You may also install any executables that depend on libraries you created. ---------- Footnotes ---------- (1) Don't accidentally strip the libraries, though, or they will be unusable.  File: libtool.info, Node: Installing executables, Next: Static libraries, Prev: Installing libraries, Up: Using libtool Installing executables ====================== If you used libtool to link any executables against uninstalled libtool libraries (*note Linking executables::), you need to use libtool to install the executables after the libraries have been installed (*note Installing libraries::). So, for our Ultrix example, we would run: a23# libtool install -c hell /usr/local/bin/hell install -c hell /usr/local/bin/hell a23# On shared library systems, libtool just ignores the wrapper script and installs the correct binary: burger# libtool install -c hell /usr/local/bin/hell install -c .libs/hell /usr/local/bin/hell burger#  File: libtool.info, Node: Static libraries, Prev: Installing executables, Up: Using libtool Linking static libraries ======================== Why return to `ar' and `ranlib' silliness when you've had a taste of libtool? Well, sometimes it is desirable to create a static archive that can never be shared. The most frequent case is when you have a set of object files that you use to build several different programs. You can create a "convenience library" out of those objects, and link programs with the library, instead of listing all object files for every program. This technique is often used to overcome GNU automake's lack of support for linking object files built from sources in other directories, because it supports linking with libraries from other directories. This limitation applies to GNU automake up to release 1.4; newer releases should support sources in other directories. If you just want to link this convenience library into programs, then you could just ignore libtool entirely, and use the old `ar' and `ranlib' commands (or the corresponding GNU automake `_LIBRARIES' rules). You can even install a convenience library (but you probably don't want to) using libtool: burger$ libtool --mode=install ./install-sh -c libhello.a /local/lib/libhello.a ./install-sh -c libhello.a /local/lib/libhello.a ranlib /local/lib/libhello.a burger$ Using libtool for static library installation protects your library from being accidentally stripped (if the installer used the `-s' flag), as well as automatically running the correct `ranlib' command. But libtool libraries are more than just collections of object files: they can also carry library dependency information, which old archives do not. If you want to create a libtool static convenience library, you can omit the `-rpath' flag and use `-static' to indicate that you're only interested in a static library. When you link a program with such a library, libtool will actually link all object files and dependency libraries into the program. If you omit both `-rpath' and `-static', libtool will create a convenience library that can be used to create other libtool libraries, even shared ones. Just like in the static case, the library behaves as an alias to a set of object files and dependency libraries, but in this case the object files are suitable for inclusion in shared libraries. But be careful not to link a single convenience library, directly or indirectly, into a single program or library, otherwise you may get errors about symbol redefinitions. When GNU automake is used, you should use `noinst_LTLIBRARIES' instead of `lib_LTLIBRARIES' for convenience libraries, so that the `-rpath' option is not passed when they are linked. As a rule of thumb, link a libtool convenience library into at most one libtool library, and never into a program, and link libtool static convenience libraries only into programs, and only if you need to carry library dependency information to the user of the static convenience library. Another common situation where static linking is desirable is in creating a standalone binary. Use libtool to do the linking and add the `-all-static' flag.  File: libtool.info, Node: Invoking libtool, Next: Integrating libtool, Prev: Using libtool, Up: Top Invoking `libtool' ****************** The `libtool' program has the following synopsis: libtool [OPTION]... [MODE-ARG]... and accepts the following options: `--config' Display libtool configuration variables and exit. `--debug' Dump a trace of shell script execution to standard output. This produces a lot of output, so you may wish to pipe it to `less' (or `more') or redirect to a file. `-n' `--dry-run' Don't create, modify, or delete any files, just show what commands would be executed by libtool. `--features' Display basic configuration options. This provides a way for packages to determine whether shared or static libraries will be built. `--preserve-dup-deps' Do not remove duplicate dependencies in libraries. When building packages with static libraries, the libraries may depend circularly on each other (shared libs can too, but for those it doesn't matter), so there are situations, where -la -lb -la is required, and the second -la may not be stripped or the link will fail. In cases where these duplications are required, this option will preserve them, only stripping the libraries that libtool knows it can safely. `--finish' Same as `--mode=finish'. `--help' Display a help message and exit. If `--mode=MODE' is specified, then detailed help for MODE is displayed. `--mode=MODE' Use MODE as the operation mode. If not specified, an attempt is made to inferr the operation mode from the MODE-ARGS. Not specifying the MODE is currently deprecated, as there are too many situations where it is not possible to guess. Future versions of Libtool will require that MODE be explicity set. MODE must be set to one of the following: `compile' Compile a source file into a libtool object. `execute' Automatically set the library path so that another program can use uninstalled libtool-generated programs or libraries. `finish' Complete the installation of libtool libraries on the system. `install' Install libraries or executables. `link' Create a library or an executable. `uninstall' Delete installed libraries or executables. `clean' Delete uninstalled libraries or executables. `--version' Print libtool version information and exit. The MODE-ARGS are a variable number of arguments, depending on the selected operation mode. In general, each MODE-ARG is interpreted by programs libtool invokes, rather than libtool itself. * Menu: * Compile mode:: Creating library object files. * Link mode:: Generating executables and libraries. * Execute mode:: Debugging libtool-generated programs. * Install mode:: Making libraries and executables public. * Finish mode:: Completing a library installation. * Uninstall mode:: Removing installed executables and libraries. * Clean mode:: Removing uninstalled executables and libraries.  File: libtool.info, Node: Compile mode, Next: Link mode, Up: Invoking libtool Compile mode ============ For "compile" mode, MODE-ARGS is a compiler command to be used in creating a `standard' object file. These arguments should begin with the name of the C compiler, and contain the `-c' compiler flag so that only an object file is created. Libtool determines the name of the output file by removing the directory component from the source file name, then substituting the source code suffix (e.g. `.c' for C source code) with the library object suffix, `.lo'. If shared libraries are being built, any necessary PIC generation flags are substituted into the compilation command. You can pass link specific flags to the compiler driver using `-XCClinker FLAG' or pass linker flags with `-Wl,FLAG' and `-Xlinker FLAG'. You can also pass compile specific flags using `-Wc,FLAG' and `-Xcompiler FLAG'. If the `-static' option is given, then a `.o' file is built, even if libtool was configured with `--disable-static'. Note that the `-o' option is now fully supported. It is emulated on the platforms that don't support it (by locking and moving the objects), so it is really easy to use libtool, just with minor modifications to your Makefiles. Typing for example libtool gcc -c foo/x.c -o foo/x.lo will do what you expect. Note, however, that, if the compiler does not support `-c' and `-o', it is impossible to compile `foo/x.c' without overwriting an existing `./x.o'. Therefore, if you do have a source file `./x.c', make sure you introduce dependencies in your `Makefile' to make sure `./x.o' (or `./x.lo') is re-created after any sub-directory's `x.lo': x.o x.lo: foo/x.lo bar/x.lo This will also ensure that make won't try to use a temporarily corrupted `x.o' to create a program or library. It may cause needless recompilation on platforms that support `-c' and `-o' together, but it's the only way to make it safe for those that don't.  File: libtool.info, Node: Link mode, Next: Execute mode, Prev: Compile mode, Up: Invoking libtool Link mode ========= "Link" mode links together object files (including library objects) to form another library or to create an executable program. MODE-ARGS consist of a command using the C compiler to create an output file (with the `-o' flag) from several object files. The following components of MODE-ARGS are treated specially: `-all-static' If OUTPUT-FILE is a program, then do not link it against any shared libraries at all. If OUTPUT-FILE is a library, then only create a static library. `-avoid-version' Tries to avoid versioning (*note Versioning::) for libraries and modules, i.e. no version information is stored and no symbolic links are created. If the platform requires versioning, this option has no effect. `-dlopen FILE' Same as `-dlpreopen FILE', if native dlopening is not supported on the host platform (*note Dlopened modules::) or if the program is linked with `-static' or `-all-static'. Otherwise, no effect. If FILE is `self' libtool will make sure that the program can `dlopen' itself, either by enabling `-export-dynamic' or by falling back to `-dlpreopen self'. `-dlpreopen FILE' Link FILE into the output program, and add its symbols to LT_PRELOADED_SYMBOLS (*note Dlpreopening::). If FILE is `self', the symbols of the program itself will be added to LT_PRELOADED_SYMBOLS. If FILE is `force' libtool will make sure that LT_PRELOADED_SYMBOLS is always _defined_, regardless of whether it's empty or not. `-export-dynamic' Allow symbols from OUTPUT-FILE to be resolved with `dlsym' (*note Dlopened modules::). `-export-symbols SYMFILE' Tells the linker to export only the symbols listed in SYMFILE. The symbol file should end in `.sym' and must contain the name of one symbol per line. This option has no effect on some platforms. By default all symbols are exported. `-export-symbols-regex REGEX' Same as `-export-symbols', except that only symbols matching the regular expression REGEX are exported. By default all symbols are exported. `-LLIBDIR' Search LIBDIR for required libraries that have already been installed. `-lNAME' OUTPUT-FILE requires the installed library `libNAME'. This option is required even when OUTPUT-FILE is not an executable. `-module' Creates a library that can be dlopened (*note Dlopened modules::). This option doesn't work for programs. Module names don't need to be prefixed with 'lib'. In order to prevent name clashes, however, 'libname' and 'name' must not be used at the same time in your package. `-no-fast-install' Disable fast-install mode for the executable OUTPUT-FILE. Useful if the program won't be necessarily installed. `-no-install' Link an executable OUTPUT-FILE that can't be installed and therefore doesn't need a wrapper script. Useful if the program is only used in the build tree, e.g., for testing or generating other files. `-no-undefined' Declare that OUTPUT-FILE does not depend on any other libraries. Some platforms cannot create shared libraries that depend on other libraries (*note Inter-library dependencies::). `-o OUTPUT-FILE' Create OUTPUT-FILE from the specified objects and libraries. `-release RELEASE' Specify that the library was generated by release RELEASE of your package, so that users can easily tell which versions are newer than others. Be warned that no two releases of your package will be binary compatible if you use this flag. If you want binary compatibility, use the `-version-info' flag instead (*note Versioning::). `-rpath LIBDIR' If OUTPUT-FILE is a library, it will eventually be installed in LIBDIR. If OUTPUT-FILE is a program, add LIBDIR to the run-time path of the program. `-shrext SUFFIX' If OUTPUT-FILE is a libtool library, replace the system's standard file name extension for shared libraries with SUFFIX (most systems use `.so' here). This option is helpful in certain cases where an application requires that shared libraries (typically modules) have an extension other than the default one. Please note you must supply the full file name extension including any leading dot. `-R LIBDIR' If OUTPUT-FILE is a program, add LIBDIR to its run-time path. If OUTPUT-FILE is a library, add -RLIBDIR to its DEPENDENCY_LIBS, so that, whenever the library is linked into a program, LIBDIR will be added to its run-time path. `-static' If OUTPUT-FILE is a program, then do not link it against any uninstalled shared libtool libraries. If OUTPUT-FILE is a library, then only create a static library. `-version-info CURRENT[:REVISION[:AGE]]' If OUTPUT-FILE is a libtool library, use interface version information CURRENT, REVISION, and AGE to build it (*note Versioning::). Do *not* use this flag to specify package release information, rather see the `-release' flag. `-version-number MAJOR[:MINOR[:REVISION]]' If OUTPUT-FILE is a libtool library, compute interface version information so that the resulting library uses the specified major, minor and revision numbers. This is designed to permit libtool to be used with existing projects where identical version numbers are already used across operating systems. New projects should use the `-version-info' flag instead. `-Wl,FLAG' `-Xlinker FLAG' Pass a linker specific flag directly to the linker. `-XCClinker FLAG' Pass a link specific flag to the compiler driver (CC) during linking. If the OUTPUT-FILE ends in `.la', then a libtool library is created, which must be built only from library objects (`.lo' files). The `-rpath' option is required. In the current implementation, libtool libraries may not depend on other uninstalled libtool libraries (*note Inter-library dependencies::). If the OUTPUT-FILE ends in `.a', then a standard library is created using `ar' and possibly `ranlib'. If OUTPUT-FILE ends in `.o' or `.lo', then a reloadable object file is created from the input files (generally using `ld -r'). This method is often called "partial linking". Otherwise, an executable program is created.  File: libtool.info, Node: Execute mode, Next: Install mode, Prev: Link mode, Up: Invoking libtool Execute mode ============ For "execute" mode, the library path is automatically set, then a program is executed. The first of the MODE-ARGS is treated as a program name, with the rest as arguments to that program. The following components of MODE-ARGS are treated specially: `-dlopen FILE' Add the directory containing FILE to the library path. This mode sets the library path environment variable according to any `-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into the name of their corresponding uninstalled binary, and any of their required library directories are added to the library path. 0707010000966a000081a40000006400000064000000013f1439350000c34d000000200000003800000000000000000000001aff27088areloc/info/libtool.info-2This is libtool.info, produced by makeinfo version 4.5 from libtool.texi. INFO-DIR-SECTION GNU programming tools START-INFO-DIR-ENTRY * Libtool: (libtool). Generic shared library support script. END-INFO-DIR-ENTRY INFO-DIR-SECTION Individual utilities START-INFO-DIR-ENTRY * libtoolize: (libtool)Invoking libtoolize. Adding libtool support. END-INFO-DIR-ENTRY This file documents GNU Libtool 1.5 Copyright (C) 1996-2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".  File: libtool.info, Node: Install mode, Next: Finish mode, Prev: Execute mode, Up: Invoking libtool Install mode ============ In "install" mode, libtool interprets most of the elements of MODE-ARGS as an installation command beginning with `cp', or a BSD-compatible `install' program. The following components of MODE-ARGS are treated specially: `-inst-prefix INST-PREFIX-DIR' When installing into a temporary staging area, rather than the final PREFIX, this argument is used to reflect the temporary path, in much the same way `automake' uses DESTDIR. For instance, if PREFIX is `/usr/local', but INST-PREFIX-DIR is `/tmp', then the object will be installed under `/tmp/usr/local/'. If the installed object is a libtool library, then the internal fields of that library will reflect only PREFIX, not INST-PREFIX-DIR: # Directory that this library needs to be installed in: libdir='/usr/local/lib' not # Directory that this library needs to be installed in: libdir='/tmp/usr/local/lib' `inst-prefix' is also used to insure that if the installed object must be relinked upon installation, that it is relinked against the libraries in INST-PREFIX-DIR/PREFIX, not PREFIX. In truth, this option is not really intended for use when calling libtool directly; it is automatically used when `libtool --mode=install' calls `libtool --mode=relink'. Libtool does this by analyzing the destination path given in the original `libtool --mode=install' command and comparing it to the expected installation path established during `libtool --mode=link'. Thus, end-users need change nothing, and `automake'-style `make install DESTDIR=/tmp' will Just Work(tm). The rest of the MODE-ARGS are interpreted as arguments to the `cp' or `install' command. The command is run, and any necessary unprivileged post-installation commands are also completed.  File: libtool.info, Node: Finish mode, Next: Uninstall mode, Prev: Install mode, Up: Invoking libtool Finish mode =========== "Finish" mode helps system administrators install libtool libraries so that they can be located and linked into user programs. Each MODE-ARG is interpreted as the name of a library directory. Running this command may require superuser privileges, so the `--dry-run' option may be useful.  File: libtool.info, Node: Uninstall mode, Next: Clean mode, Prev: Finish mode, Up: Invoking libtool Uninstall mode ============== "Uninstall" mode deletes installed libraries, executables and objects. The first MODE-ARG is the name of the program to use to delete files (typically `/bin/rm'). The remaining MODE-ARGS are either flags for the deletion program (beginning with a `-'), or the names of files to delete.  File: libtool.info, Node: Clean mode, Prev: Uninstall mode, Up: Invoking libtool Clean mode ========== "Clean" mode deletes uninstalled libraries, executables, objects and libtool's temporary files associated with them. The first MODE-ARG is the name of the program to use to delete files (typically `/bin/rm'). The remaining MODE-ARGS are either flags for the deletion program (beginning with a `-'), or the names of files to delete.  File: libtool.info, Node: Integrating libtool, Next: Versioning, Prev: Invoking libtool, Up: Top Integrating libtool with your package ************************************* This chapter describes how to integrate libtool with your packages so that your users can install hassle-free shared libraries. * Menu: * Makefile rules:: Writing `Makefile' rules for libtool. * Using Automake:: Automatically supporting libtool. * Configuring:: Configuring libtool for a host system. * Distributing:: What files to distribute with your package. * Static-only libraries:: Sometimes shared libraries are just a pain.  File: libtool.info, Node: Makefile rules, Next: Using Automake, Up: Integrating libtool Writing `Makefile' rules for libtool ==================================== Libtool is fully integrated with Automake (*note Introduction: (automake)Top.), starting with Automake version 1.2. If you want to use libtool in a regular `Makefile' (or `Makefile.in'), you are on your own. If you're not using Automake 1.2, and you don't know how to incorporate libtool into your package you need to do one of the following: 1. Download Automake (version 1.2 or later) from your nearest GNU mirror, install it, and start using it. 2. Learn how to write `Makefile' rules by hand. They're sometimes complex, but if you're clever enough to write rules for compiling your old libraries, then you should be able to figure out new rules for libtool libraries (hint: examine the `Makefile.in' in the `demo' subdirectory of the libtool distribution... note especially that it was automatically generated from the `Makefile.am' by Automake).  File: libtool.info, Node: Using Automake, Next: Configuring, Prev: Makefile rules, Up: Integrating libtool Using Automake with libtool =========================== Libtool library support is implemented under the `LTLIBRARIES' primary. Here are some samples from the Automake `Makefile.am' in the libtool distribution's `demo' subdirectory. First, to link a program against a libtool library, just use the `program_LDADD' variable: bin_PROGRAMS = hell hell.debug # Build hell from main.c and libhello.la hell_SOURCES = main.c hell_LDADD = libhello.la # Create an easier-to-debug version of hell. hell_debug_SOURCES = main.c hell_debug_LDADD = libhello.la hell_debug_LDFLAGS = -static The flags `-dlopen' or `-dlpreopen' (*note Link mode::) would fit better in the PROGRAM_LDADD variable. Unfortunately, GNU automake, up to release 1.4, doesn't accept these flags in a PROGRAM_LDADD variable, so you have the following alternatives: * add them to PROGRAM_LDFLAGS, and list the libraries in PROGRAM_DEPENDENCIES, then wait for a release of GNU automake that accepts these flags where they belong; * surround the flags between quotes, but then you must set PROGRAM_DEPENDENCIES too: program_LDADD = "-dlopen" libfoo.la program_DEPENDENCIES = libfoo.la * set and `AC_SUBST' variables DLOPEN and DLPREOPEN in `configure.in' and use `@DLOPEN@' and `@DLPREOPEN@' as replacements for the explicit flags `-dlopen' and `-dlpreopen' in `program_LDADD'. Automake will discard `AC_SUBST'ed variables from dependencies, so it will behave exactly as we expect it to behave when it accepts these flags in `program_LDADD'. But hey!, this is ugly! You may use the `program_LDFLAGS' variable to stuff in any flags you want to pass to libtool while linking `program' (such as `-static' to avoid linking uninstalled shared libtool libraries). Building a libtool library is almost as trivial... note the use of `libhello_la_LDFLAGS' to pass the `-version-info' (*note Versioning::) option to libtool: # Build a libtool library, libhello.la for installation in libdir. lib_LTLIBRARIES = libhello.la libhello_la_SOURCES = hello.c foo.c libhello_la_LDFLAGS = -version-info 3:12:1 The `-rpath' option is passed automatically by Automake (except for libraries listed as `noinst_LTLIBRARIES'), so you should not specify it. *Note Building a Shared Library: (automake)A Shared Library, for more information.  File: libtool.info, Node: Configuring, Next: Distributing, Prev: Using Automake, Up: Integrating libtool Configuring libtool =================== Libtool requires intimate knowledge of your compiler suite and operating system in order to be able to create shared libraries and link against them properly. When you install the libtool distribution, a system-specific libtool script is installed into your binary directory. However, when you distribute libtool with your own packages (*note Distributing::), you do not always know which compiler suite and operating system are used to compile your package. For this reason, libtool must be "configured" before it can be used. This idea should be familiar to anybody who has used a GNU `configure' script. `configure' runs a number of tests for system features, then generates the `Makefiles' (and possibly a `config.h' header file), after which you can run `make' and build the package. Libtool adds its own tests to your `configure' script in order to generate a libtool script for the installer's host machine. * Menu: * AC_PROG_LIBTOOL:: Configuring `libtool' in `configure.in'.  File: libtool.info, Node: AC_PROG_LIBTOOL, Up: Configuring The `AC_PROG_LIBTOOL' macro --------------------------- If you are using GNU Autoconf (or Automake), you should add a call to `AC_PROG_LIBTOOL' to your `configure.in' file. This macro adds many new tests to the `configure' script so that the generated libtool script will understand the characteristics of the host: - Macro: AC_PROG_LIBTOOL - Macro: AM_PROG_LIBTOOL Add support for the `--enable-shared' and `--disable-shared' `configure' flags.(1) `AM_PROG_LIBTOOL' was the old name for this macro, and although supported at the moment is deprecated. By default, this macro turns on shared libraries if they are available, and also enables static libraries if they don't conflict with the shared libraries. You can modify these defaults by calling either the `AC_DISABLE_SHARED' or `AC_DISABLE_STATIC' macros: # Turn off shared libraries during beta-testing, since they # make the build process take too long. AC_DISABLE_SHARED AC_PROG_LIBTOOL The user may specify modified forms of the configure flags `--enable-shared' and `--enable-static' to choose whether shared or static libraries are built based on the name of the package. For example, to have shared `bfd' and `gdb' libraries built, but not shared `libg++', you can run all three `configure' scripts as follows: trick$ ./configure --enable-shared=bfd,gdb In general, specifying `--enable-shared=PKGS' is the same as configuring with `--enable-shared' every package named in the comma-separated PKGS list, and every other package with `--disable-shared'. The `--enable-static=PKGS' flag behaves similarly, but it uses `--enable-static' and `--disable-static'. The same applies to the `--enable-fast-install=PKGS' flag, which uses `--enable-fast-install' and `--disable-fast-install'. The package name `default' matches any packages which have not set their name in the `PACKAGE' environment variable. This macro also sets the shell variable LIBTOOL_DEPS, that you can use to automatically update the libtool script if it becomes out-of-date. In order to do that, add to your `configure.in': AC_PROG_LIBTOOL AC_SUBST(LIBTOOL_DEPS) and, to `Makefile.in' or `Makefile.am': LIBTOOL_DEPS = @LIBTOOL_DEPS@ libtool: $(LIBTOOL_DEPS) $(SHELL) ./config.status --recheck If you are using GNU automake, you can omit the assignment, as automake will take care of it. You'll obviously have to create some dependency on `libtool'. - Macro: AC_LIBTOOL_DLOPEN Enable checking for dlopen support. This macro should be used if the package makes use of the `-dlopen' and `-dlpreopen' flags, otherwise libtool will assume that the system does not support dlopening. The macro must be called *before* `AC_PROG_LIBTOOL'. - Macro: AC_LIBTOOL_WIN32_DLL This macro should be used if the package has been ported to build clean dlls on win32 platforms. Usually this means that any library data items are exported with `__declspec(dllexport)' and imported with `__declspec(dllimport)'. If this macro is not used, libtool will assume that the package libraries are not dll clean and will build only static libraries on win32 hosts. This macro must be called *before* `AC_PROG_LIBTOOL', and provision must be made to pass `-no-undefined' to `libtool' in link mode from the package `Makefile'. Naturally, if you pass `-no-undefined', you must ensure that all the library symbols *really are* defined at link time! - Macro: AC_DISABLE_FAST_INSTALL Change the default behaviour for `AC_PROG_LIBTOOL' to disable optimization for fast installation. The user may still override this default, depending on platform support, by specifying `--enable-fast-install'. - Macro: AC_DISABLE_SHARED - Macro: AM_DISABLE_SHARED Change the default behaviour for `AC_PROG_LIBTOOL' to disable shared libraries. The user may still override this default by specifying `--enable-shared'. - Macro: AC_DISABLE_STATIC - Macro: AM_DISABLE_STATIC Change the default behaviour for `AC_PROG_LIBTOOL' to disable static libraries. The user may still override this default by specifying `--enable-static'. The tests in `AC_PROG_LIBTOOL' also recognize the following environment variables: - Variable: CC The C compiler that will be used by the generated `libtool'. If this is not set, `AC_PROG_LIBTOOL' will look for `gcc' or `cc'. - Variable: CFLAGS Compiler flags used to generate standard object files. If this is not set, `AC_PROG_LIBTOOL' will not use any such flags. It affects only the way `AC_PROG_LIBTOOL' runs tests, not the produced `libtool'. - Variable: CPPFLAGS C preprocessor flags. If this is not set, `AC_PROG_LIBTOOL' will not use any such flags. It affects only the way `AC_PROG_LIBTOOL' runs tests, not the produced `libtool'. - Variable: LD The system linker to use (if the generated `libtool' requires one). If this is not set, `AC_PROG_LIBTOOL' will try to find out what is the linker used by CC. - Variable: LDFLAGS The flags to be used by `libtool' when it links a program. If this is not set, `AC_PROG_LIBTOOL' will not use any such flags. It affects only the way `AC_PROG_LIBTOOL' runs tests, not the produced `libtool'. - Variable: LIBS The libraries to be used by `AC_PROG_LIBTOOL' when it links a program. If this is not set, `AC_PROG_LIBTOOL' will not use any such flags. It affects only the way `AC_PROG_LIBTOOL' runs tests, not the produced `libtool'. - Variable: NM Program to use rather than checking for `nm'. - Variable: RANLIB Program to use rather than checking for `ranlib'. - Variable: LN_S A command that creates a link of a program, a soft-link if possible, a hard-link otherwise. `AC_PROG_LIBTOOL' will check for a suitable program if this variable is not set. - Variable: DLLTOOL Program to use rather than checking for `dlltool'. Only meaningful for Cygwin/MS-Windows. - Variable: OBJDUMP Program to use rather than checking for `objdump'. Only meaningful for Cygwin/MS-Windows. - Variable: AS Program to use rather than checking for `as'. Only used on Cygwin/MS-Windows at the moment. When you invoke the `libtoolize' program (*note Invoking libtoolize::), it will tell you where to find a definition of `AC_PROG_LIBTOOL'. If you use Automake, the `aclocal' program will automatically add `AC_PROG_LIBTOOL' support to your `configure' script. Nevertheless, it is advisable to include a copy of `libtool.m4' in `acinclude.m4', so that, even if `aclocal.m4' and `configure' are rebuilt for any reason, the appropriate libtool macros will be used. The alternative is to hope the user will have a compatible version of `libtool.m4' installed and accessible for `aclocal'. This may lead to weird errors when versions don't match. ---------- Footnotes ---------- (1) `AC_PROG_LIBTOOL' requires that you define the `Makefile' variable `top_builddir' in your `Makefile.in'. Automake does this automatically, but Autoconf users should set it to the relative path to the top of your build directory (`../..', for example).  File: libtool.info, Node: Distributing, Next: Static-only libraries, Prev: Configuring, Up: Integrating libtool Including libtool in your package ================================= In order to use libtool, you need to include the following files with your package: `config.guess' Attempt to guess a canonical system name. `config.sub' Canonical system name validation subroutine script. `ltmain.sh' A generic script implementing basic libtool functionality. Note that the libtool script itself should _not_ be included with your package. *Note Configuring::. You should use the `libtoolize' program, rather than manually copying these files into your package. * Menu: * Invoking libtoolize:: `libtoolize' command line options. * Autoconf .o macros:: Autoconf macros that set object file names.  File: libtool.info, Node: Invoking libtoolize, Next: Autoconf .o macros, Up: Distributing Invoking `libtoolize' --------------------- The `libtoolize' program provides a standard way to add libtool support to your package. In the future, it may implement better usage checking, or other features to make libtool even easier to use. The `libtoolize' program has the following synopsis: libtoolize [OPTION]... and accepts the following options: `--automake' Work silently, and assume that Automake libtool support is used. `libtoolize --automake' is used by Automake to add libtool files to your package, when `AC_PROG_LIBTOOL' appears in your `configure.in'. `--copy' `-c' Copy files from the libtool data directory rather than creating symlinks. `--debug' Dump a trace of shell script execution to standard output. This produces a lot of output, so you may wish to pipe it to `less' (or `more') or redirect to a file. `--dry-run' `-n' Don't run any commands that modify the file system, just print them out. `--force' `-f' Replace existing libtool files. By default, `libtoolize' won't overwrite existing files. `--help' Display a help message and exit. `--ltdl' Install libltdl in a subdirectory of your package. `--ltdl-tar' Add the file libltdl.tar.gz to your package. `--version' Print `libtoolize' version information and exit. If `libtoolize' detects an explicit call to `AC_CONFIG_AUX_DIR' (*note The Autoconf Manual: (autoconf)Input.) in your `configure.in', it will put the files in the specified directory. `libtoolize' displays hints for adding libtool support to your package, as well.  File: libtool.info, Node: Autoconf .o macros, Prev: Invoking libtoolize, Up: Distributing Autoconf `.o' macros -------------------- The Autoconf package comes with a few macros that run tests, then set a variable corresponding to the name of an object file. Sometimes it is necessary to use corresponding names for libtool objects. Here are the names of variables that list libtool objects: - Variable: LTALLOCA Substituted by `AC_FUNC_ALLOCA' (*note Particular Function Checks: (autoconf)Particular Functions.). Is either empty, or contains `alloca.lo'. - Variable: LTLIBOBJS Substituted by `AC_REPLACE_FUNCS' (*note Generic Function Checks: (autoconf)Generic Functions.), and a few other functions. Unfortunately, the stable release of Autoconf (2.13, at the time of this writing) does not have any way for libtool to provide support for these variables. So, if you depend on them, use the following code immediately before the call to `AC_OUTPUT' in your `configure.in': LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` AC_SUBST(LTLIBOBJS) LTALLOCA=`echo "$ALLOCA" | sed 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` AC_SUBST(LTALLOCA) AC_OUTPUT(...)  File: libtool.info, Node: Static-only libraries, Prev: Distributing, Up: Integrating libtool Static-only libraries ===================== When you are developing a package, it is often worthwhile to configure your package with the `--disable-shared' flag, or to override the defaults for `AC_PROG_LIBTOOL' by using the `AC_DISABLE_SHARED' Autoconf macro (*note The `AC_PROG_LIBTOOL' macro: AC_PROG_LIBTOOL.). This prevents libtool from building shared libraries, which has several advantages: * compilation is twice as fast, which can speed up your development cycle, * debugging is easier because you don't need to deal with any complexities added by shared libraries, and * you can see how libtool behaves on static-only platforms. You may want to put a small note in your package `README' to let other developers know that `--disable-shared' can save them time. The following example note is taken from the GIMP(1) distribution `README': The GIMP uses GNU Libtool in order to build shared libraries on a variety of systems. While this is very nice for making usable binaries, it can be a pain when trying to debug a program. For that reason, compilation of shared libraries can be turned off by specifying the `--disable-shared' option to `configure'. ---------- Footnotes ---------- (1) GNU Image Manipulation Program, for those who haven't taken the plunge. See .  File: libtool.info, Node: Versioning, Next: Library tips, Prev: Integrating libtool, Up: Top Library interface versions ************************** The most difficult issue introduced by shared libraries is that of creating and resolving runtime dependencies. Dependencies on programs and libraries are often described in terms of a single name, such as `sed'. So, one may say "libtool depends on sed," and that is good enough for most purposes. However, when an interface changes regularly, we need to be more specific: "Gnus 5.1 requires Emacs 19.28 or above." Here, the description of an interface consists of a name, and a "version number." Even that sort of description is not accurate enough for some purposes. What if Emacs 20 changes enough to break Gnus 5.1? The same problem exists in shared libraries: we require a formal version system to describe the sorts of dependencies that programs have on shared libraries, so that the dynamic linker can guarantee that programs are linked only against libraries that provide the interface they require. * Menu: * Interfaces:: What are library interfaces? * Libtool versioning:: Libtool's versioning system. * Updating version info:: Changing version information before releases. * Release numbers:: Breaking binary compatibility for aesthetics.  File: libtool.info, Node: Interfaces, Next: Libtool versioning, Up: Versioning What are library interfaces? ============================ Interfaces for libraries may be any of the following (and more): * global variables: both names and types * global functions: argument types and number, return types, and function names * standard input, standard output, standard error, and file formats * sockets, pipes, and other inter-process communication protocol formats Note that static functions do not count as interfaces, because they are not directly available to the user of the library.  File: libtool.info, Node: Libtool versioning, Next: Updating version info, Prev: Interfaces, Up: Versioning Libtool's versioning system =========================== Libtool has its own formal versioning system. It is not as flexible as some, but it is definitely the simplest of the more powerful versioning systems. Think of a library as exporting several sets of interfaces, arbitrarily represented by integers. When a program is linked against a library, it may use any subset of those interfaces. Libtool's description of the interfaces that a program uses is simple: it encodes the least and the greatest interface numbers in the resulting binary (FIRST-INTERFACE, LAST-INTERFACE). The dynamic linker is guaranteed that if a library supports _every_ interface number between FIRST-INTERFACE and LAST-INTERFACE, then the program can be relinked against that library. Note that this can cause problems because libtool's compatibility requirements are actually stricter than is necessary. Say `libhello' supports interfaces 5, 16, 17, 18, and 19, and that libtool is used to link `test' against `libhello'. Libtool encodes the numbers 5 and 19 in `test', and the dynamic linker will only link `test' against libraries that support _every_ interface between 5 and 19. So, the dynamic linker refuses to link `test' against `libhello'! In order to eliminate this problem, libtool only allows libraries to declare consecutive interface numbers. So, `libhello' can declare at most that it supports interfaces 16 through 19. Then, the dynamic linker will link `test' against `libhello'. So, libtool library versions are described by three integers: CURRENT The most recent interface number that this library implements. REVISION The implementation number of the CURRENT interface. AGE The difference between the newest and oldest interfaces that this library implements. In other words, the library implements all the interface numbers in the range from number `CURRENT - AGE' to `CURRENT'. If two libraries have identical CURRENT and AGE numbers, then the dynamic linker chooses the library with the greater REVISION number.  File: libtool.info, Node: Updating version info, Next: Release numbers, Prev: Libtool versioning, Up: Versioning Updating library version information ==================================== If you want to use libtool's versioning system, then you must specify the version information to libtool using the `-version-info' flag during link mode (*note Link mode::). This flag accepts an argument of the form `CURRENT[:REVISION[:AGE]]'. So, passing `-version-info 3:12:1' sets CURRENT to 3, REVISION to 12, and AGE to 1. If either REVISION or AGE are omitted, they default to 0. Also note that AGE must be less than or equal to the CURRENT interface number. Here are a set of rules to help you update your library version information: 1. Start with version information of `0:0:0' for each libtool library. 2. Update the version information only immediately before a public release of your software. More frequent updates are unnecessary, and only guarantee that the current interface number gets larger faster. 3. If the library source code has changed at all since the last update, then increment REVISION (`C:R:A' becomes `C:r+1:A'). 4. If any interfaces have been added, removed, or changed since the last update, increment CURRENT, and set REVISION to 0. 5. If any interfaces have been added since the last public release, then increment AGE. 6. If any interfaces have been removed since the last public release, then set AGE to 0. *_Never_* try to set the interface numbers so that they correspond to the release number of your package. This is an abuse that only fosters misunderstanding of the purpose of library versions. Instead, use the `-release' flag (*note Release numbers::), but be warned that every release of your package will not be binary compatible with any other release.  File: libtool.info, Node: Release numbers, Prev: Updating version info, Up: Versioning Managing release information ============================ Often, people want to encode the name of the package release into the shared library so that it is obvious to the user which package their programs are linked against. This convention is used especially on GNU/Linux: trick$ ls /usr/lib/libbfd* /usr/lib/libbfd.a /usr/lib/libbfd.so.2.7.0.2 /usr/lib/libbfd.so trick$ On `trick', `/usr/lib/libbfd.so' is a symbolic link to `libbfd.so.2.7.0.2', which was distributed as a part of `binutils-2.7.0.2'. Unfortunately, this convention conflicts directly with libtool's idea of library interface versions, because the library interface rarely changes at the same time that the release number does, and the library suffix is never the same across all platforms. So, in order to accommodate both views, you can use the `-release' flag in order to set release information for libraries which you do not want to use `-version-info'. For the `libbfd' example, the next release which uses libtool should be built with `-release 2.9.0', which will produce the following files on GNU/Linux: trick$ ls /usr/lib/libbfd* /usr/lib/libbfd-2.9.0.so /usr/lib/libbfd.a /usr/lib/libbfd.so trick$ In this case, `/usr/lib/libbfd.so' is a symbolic link to `libbfd-2.9.0.so'. This makes it obvious that the user is dealing with `binutils-2.9.0', without compromising libtool's idea of interface versions. Note that this option causes a modification of the library name, so do not use it unless you want to break binary compatibility with any past library releases. In general, you should only use `-release' for package-internal libraries or for ones whose interfaces change very frequently.  File: libtool.info, Node: Library tips, Next: Inter-library dependencies, Prev: Versioning, Up: Top Tips for interface design ************************* Writing a good library interface takes a lot of practice and thorough understanding of the problem that the library is intended to solve. If you design a good interface, it won't have to change often, you won't have to keep updating documentation, and users won't have to keep relearning how to use the library. Here is a brief list of tips for library interface design, which may help you in your exploits: Plan ahead Try to make every interface truly minimal, so that you won't need to delete entry points very often. Avoid interface changes Some people love redesigning and changing entry points just for the heck of it (note: _renaming_ a function is considered changing an entry point). Don't be one of those people. If you must redesign an interface, then try to leave compatibility functions behind so that users don't need to rewrite their existing code. Use opaque data types The fewer data type definitions a library user has access to, the better. If possible, design your functions to accept a generic pointer (which you can cast to an internal data type), and provide access functions rather than allowing the library user to directly manipulate the data. That way, you have the freedom to change the data structures without changing the interface. This is essentially the same thing as using abstract data types and inheritance in an object-oriented system. Use header files If you are careful to document each of your library's global functions and variables in header files, and include them in your library source files, then the compiler will let you know if you make any interface changes by accident (*note C header files::). Use the `static' keyword (or equivalent) whenever possible The fewer global functions your library has, the more flexibility you'll have in changing them. Static functions and variables may change forms as often as you like... your users cannot access them, so they aren't interface changes. Be careful with array dimensions The number of elements in a global array is part of an interface, even if the header just declares `extern int foo[];'. This is because on i386 and some other SVR4/ELF systems, when an application references data in a shared library the size of that data (whatever its type) is included in the application executable. If you might want to change the size of an array or string then provide a pointer not the actual array. * Menu: * C header files:: How to write portable include files.  File: libtool.info, Node: C header files, Up: Library tips Writing C header files ====================== Writing portable C header files can be difficult, since they may be read by different types of compilers: C++ compilers C++ compilers require that functions be declared with full prototypes, since C++ is more strongly typed than C. C functions and variables also need to be declared with the `extern "C"' directive, so that the names aren't mangled. *Note C++ libraries::, for other issues relevant to using C++ with libtool. ANSI C compilers ANSI C compilers are not as strict as C++ compilers, but functions should be prototyped to avoid unnecessary warnings when the header file is `#include'd. non-ANSI C compilers Non-ANSI compilers will report errors if functions are prototyped. These complications mean that your library interface headers must use some C preprocessor magic in order to be usable by each of the above compilers. `foo.h' in the `demo' subdirectory of the libtool distribution serves as an example for how to write a header file that can be safely installed in a system directory. Here are the relevant portions of that file: /* BEGIN_C_DECLS should be used at the beginning of your declarations, so that C++ compilers don't mangle their names. Use END_C_DECLS at the end of C declarations. */ #undef BEGIN_C_DECLS #undef END_C_DECLS #ifdef __cplusplus # define BEGIN_C_DECLS extern "C" { # define END_C_DECLS } #else # define BEGIN_C_DECLS /* empty */ # define END_C_DECLS /* empty */ #endif /* PARAMS is a macro used to wrap function prototypes, so that compilers that don't understand ANSI C prototypes still work, and ANSI C compilers can issue warnings about type mismatches. */ #undef PARAMS #if defined (__STDC__) || defined (_AIX) \ || (defined (__mips) && defined (_SYSTYPE_SVR4)) \ || defined(WIN32) || defined(__cplusplus) # define PARAMS(protos) protos #else # define PARAMS(protos) () #endif These macros are used in `foo.h' as follows: #ifndef FOO_H #define FOO_H 1 /* The above macro definitions. */ #include "..." BEGIN_C_DECLS int foo PARAMS((void)); int hello PARAMS((void)); END_C_DECLS #endif /* !FOO_H */ Note that the `#ifndef FOO_H' prevents the body of `foo.h' from being read more than once in a given compilation. Also the only thing that must go outside the `BEGIN_C_DECLS'/`END_C_DECLS' pair are `#include' lines. Strictly speaking it is only C symbol names that need to be protected, but your header files will be more maintainable if you have a single pair of of these macros around the majority of the header contents. You should use these definitions of `PARAMS', `BEGIN_C_DECLS', and `END_C_DECLS' into your own headers. Then, you may use them to create header files that are valid for C++, ANSI, and non-ANSI compilers(1). Do not be naive about writing portable code. Following the tips given above will help you miss the most obvious problems, but there are definitely other subtle portability issues. You may need to cope with some of the following issues: * Pre-ANSI compilers do not always support the `void *' generic pointer type, and so need to use `char *' in its place. * The `const', `inline' and `signed' keywords are not supported by some compilers, especially pre-ANSI compilers. * The `long double' type is not supported by many compilers. ---------- Footnotes ---------- (1) We used to recommend `__P', `__BEGIN_DECLS' and `__END_DECLS'. This was bad advice since symbols (even preprocessor macro names) that begin with an underscore are reserved for the use of the compiler.  File: libtool.info, Node: Inter-library dependencies, Next: Dlopened modules, Prev: Library tips, Up: Top Inter-library dependencies ************************** By definition, every shared library system provides a way for executables to depend on libraries, so that symbol resolution is deferred until runtime. An "inter-library dependency" is one in which a library depends on other libraries. For example, if the libtool library `libhello' uses the `cos' function, then it has an inter-library dependency on `libm', the math library that implements `cos'. Some shared library systems provide this feature in an internally-consistent way: these systems allow chains of dependencies of potentially infinite length. However, most shared library systems are restricted in that they only allow a single level of dependencies. In these systems, programs may depend on shared libraries, but shared libraries may not depend on other shared libraries. In any event, libtool provides a simple mechanism for you to declare inter-library dependencies: for every library `libNAME' that your own library depends on, simply add a corresponding `-lNAME' option to the link line when you create your library. To make an example of our `libhello' that depends on `libm': burger$ libtool --mode=link gcc -g -O -o libhello.la foo.lo hello.lo \ -rpath /usr/local/lib -lm burger$ When you link a program against `libhello', you don't need to specify the same `-l' options again: libtool will do that for you, in order to guarantee that all the required libraries are found. This restriction is only necessary to preserve compatibility with static library systems and simple dynamic library systems. Some platforms, such as AIX, do not even allow you this flexibility. In order to build a shared library, it must be entirely self-contained (that is, have references only to symbols that are found in the `.lo' files or the specified `-l' libraries), and you need to specify the -NO-UNDEFINED flag. By default, libtool builds only static libraries on these kinds of platforms. The simple-minded inter-library dependency tracking code of libtool releases prior to 1.2 was disabled because it was not clear when it was possible to link one library with another, and complex failures would occur. A more complex implementation of this concept was re-introduced before release 1.3, but it has not been ported to all platforms that libtool supports. The default, conservative behavior is to avoid linking one library with another, introducing their inter-dependencies only when a program is linked with them.  File: libtool.info, Node: Dlopened modules, Next: Using libltdl, Prev: Inter-library dependencies, Up: Top Dlopened modules **************** It can sometimes be confusing to discuss "dynamic linking", because the term is used to refer to two different concepts: 1. Compiling and linking a program against a shared library, which is resolved automatically at run time by the dynamic linker. In this process, dynamic linking is transparent to the application. 2. The application calling functions such as `dlopen',(1) which load arbitrary, user-specified modules at runtime. This type of dynamic linking is explicitly controlled by the application. To mitigate confusion, this manual refers to the second type of dynamic linking as "dlopening" a module. The main benefit to dlopening object modules is the ability to access compiled object code to extend your program, rather than using an interpreted language. In fact, dlopen calls are frequently used in language interpreters to provide an efficient way to extend the language. As of version 1.5, libtool provides support for dlopened modules. However, you should indicate that your package is willing to use such support, by using the macro `AC_LIBTOOL_DLOPEN' in `configure.in'. If this macro is not used (or it is used _after_ `AC_PROG_LIBTOOL'), libtool will assume no dlopening mechanism is available, and will try to simulate it. This chapter discusses how you as a dlopen application developer might use libtool to generate dlopen-accessible modules. * Menu: * Building modules:: Creating dlopenable objects and libraries. * Dlpreopening:: Dlopening that works on static platforms. * Finding the dlname:: Choosing the right file to `dlopen'. * Dlopen issues:: Unresolved problems that need your attention. ---------- Footnotes ---------- (1) HP-UX, to be different, uses a function named `shl_load'.  File: libtool.info, Node: Building modules, Next: Dlpreopening, Up: Dlopened modules Building modules to dlopen ========================== On some operating systems, a program symbol must be specially declared in order to be dynamically resolved with the `dlsym' (or equivalent) function. Libtool provides the `-export-dynamic' and `-module' link flags (*note Link mode::), which do this declaration. You need to use these flags if you are linking an application program that dlopens other modules or a libtool library that will also be dlopened. For example, if we wanted to build a shared library, `libhello', that would later be dlopened by an application, we would add `-module' to the other link flags: burger$ libtool --mode=link gcc -module -o libhello.la foo.lo \ hello.lo -rpath /usr/local/lib -lm burger$ If symbols from your _executable_ are needed to satisfy unresolved references in a library you want to dlopen you will have to use the flag `-export-dynamic'. You should use `-export-dynamic' while linking the executable that calls dlopen: burger$ libtool --mode=link gcc -export-dynamic -o hell-dlopener main.o burger$  File: libtool.info, Node: Dlpreopening, Next: Finding the dlname, Prev: Building modules, Up: Dlopened modules Dlpreopening ============ Libtool provides special support for dlopening libtool object and libtool library files, so that their symbols can be resolved _even on platforms without any `dlopen' and `dlsym' functions_. Consider the following alternative ways of loading code into your program, in order of increasing "laziness": 1. Linking against object files that become part of the program executable, whether or not they are referenced. If an object file cannot be found, then the linker refuses to create the executable. 2. Declaring a static library to the linker, so that it is searched at link time in order to satisfy any undefined references in the above object files. If the static library cannot be found, then the linker refuses to link the executable. 3. Declaring a shared library to the runtime linker, so that it is searched at runtime in order to satisfy any undefined references in the above files. If the shared library cannot be found, then the dynamic linker aborts the program before it runs. 4. Dlopening a module, so that the application can resolve its own, dynamically-computed references. If there is an error opening the module, or the module is not found, then the application can recover without crashing. Libtool emulates `-dlopen' on static platforms by linking objects into the program at compile time, and creating data structures that represent the program's symbol table. In order to use this feature, you must declare the objects you want your application to dlopen by using the `-dlopen' or `-dlpreopen' flags when you link your program (*note Link mode::). - Structure: struct lt_dlsymlist { const char *NAME; lt_ptr ADDRESS; } The NAME attribute is a null-terminated character string of the symbol name, such as `"fprintf"'. The ADDRESS attribute is a generic pointer to the appropriate object, such as `&fprintf'. - Variable: const lt_dlsymlist * lt_preloaded_symbols An array of LT_SYMBOL structures, representing all the preloaded symbols linked into the program. For each `-dlpreloaded' file there is an element with the NAME of the file and a ADDRESS of `0', followed by all symbols exported from this file. For the executable itself the special name @PROGRAM@ is used. The last element has a NAME and ADDRESS of `0'. Some compilers may allow identifiers which are not valid in ANSI C, such as dollar signs. Libtool only recognizes valid ANSI C symbols (an initial ASCII letter or underscore, followed by zero or more ASCII letters, digits, and underscores), so non-ANSI symbols will not appear in LT_PRELOADED_SYMBOLS.  File: libtool.info, Node: Finding the dlname, Next: Dlopen issues, Prev: Dlpreopening, Up: Dlopened modules Finding the correct name to dlopen ================================== After a library has been linked with `-module', it can be dlopened. Unfortunately, because of the variation in library names, your package needs to determine the correct file to dlopen. The most straightforward and flexible implementation is to determine the name at runtime, by finding the installed `.la' file, and searching it for the following lines: # The name that we can `dlopen'. dlname='DLNAME' If DLNAME is empty, then the library cannot be dlopened. Otherwise, it gives the dlname of the library. So, if the library was installed as `/usr/local/lib/libhello.la', and the DLNAME was `libhello.so.3', then `/usr/local/lib/libhello.so.3' should be dlopened. If your program uses this approach, then it should search the directories listed in the `LD_LIBRARY_PATH'(1) environment variable, as well as the directory where libraries will eventually be installed. Searching this variable (or equivalent) will guarantee that your program can find its dlopened modules, even before installation, provided you have linked them using libtool. ---------- Footnotes ---------- (1) `LIBPATH' on AIX, and `SHLIB_PATH' on HP-UX.  File: libtool.info, Node: Dlopen issues, Prev: Finding the dlname, Up: Dlopened modules Unresolved dlopen issues ======================== The following problems are not solved by using libtool's dlopen support: * Dlopen functions are generally only available on shared library platforms. If you want your package to be portable to static platforms, you have to use either libltdl (*note Using libltdl::) or develop your own alternatives to dlopening dynamic code. Most reasonable solutions involve writing wrapper functions for the `dlopen' family, which do package-specific tricks when dlopening is unsupported or not available on a given platform. * There are major differences in implementations of the `dlopen' family of functions. Some platforms do not even use the same function names (notably HP-UX, with its `shl_load' family). * The application developer must write a custom search function in order to discover the correct module filename to supply to `dlopen'.  File: libtool.info, Node: Using libltdl, Next: Other languages, Prev: Dlopened modules, Up: Top Using libltdl ************* Libtool provides a small library, called `libltdl', that aims at hiding the various difficulties of dlopening libraries from programmers. It consists of a header-file and a small C source file that can be distributed with applications that need dlopening functionality. On some platforms, whose dynamic linkers are too limited for a simple implementation of `libltdl' services, it requires GNU DLD, or it will only emulate dynamic linking with libtool's dlpreopening mechanism. libltdl supports currently the following dynamic linking mechanisms: * `dlopen' (Solaris, Linux and various BSD flavors) * `shl_load' (HP-UX) * `LoadLibrary' (Win16 and Win32) * `load_add_on' (BeOS) * GNU DLD (emulates dynamic linking for static libraries) * libtool's dlpreopen (see *note Dlpreopening::) libltdl is licensed under the terms of the GNU Library General Public License, with the following exception: As a special exception to the GNU Lesser General Public License, if you distribute this file as part of a program or library that is built using GNU libtool, you may include it under the same distribution terms that you use for the rest of that program. * Menu: * Libltdl interface:: How to use libltdl in your programs. * Modules for libltdl:: Creating modules that can be `dlopen'ed. * Thread Saftey in libltdl:: Registering callbacks for multi-thread safety. * User defined module data:: Associating data with loaded modules. * Module loaders for libltdl:: Creating user defined module loaders. * Distributing libltdl:: How to distribute libltdl with your package. 0707010000966b000081a40000006400000064000000013f1439350000c2fe000000200000003800000000000000000000001aff27088areloc/info/libtool.info-3This is libtool.info, produced by makeinfo version 4.5 from libtool.texi. INFO-DIR-SECTION GNU programming tools START-INFO-DIR-ENTRY * Libtool: (libtool). Generic shared library support script. END-INFO-DIR-ENTRY INFO-DIR-SECTION Individual utilities START-INFO-DIR-ENTRY * libtoolize: (libtool)Invoking libtoolize. Adding libtool support. END-INFO-DIR-ENTRY This file documents GNU Libtool 1.5 Copyright (C) 1996-2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".  File: libtool.info, Node: Libltdl interface, Next: Modules for libltdl, Up: Using libltdl How to use libltdl in your programs =================================== The libltdl API is similar to the dlopen interface of Solaris and Linux, which is very simple but powerful. To use libltdl in your program you have to include the header file `ltdl.h': #include The last release of libltdl used some symbols that violated the POSIX namespace conventions. These symbols are now deprecated, and have been replaced by those described here. If you have code that relies on the old deprecated symbol names, defining `LT_NON_POSIX_NAMESPACE' before you include `ltdl.h' provides conversion macros. Whichever set of symbols you use, the new api is not binary compatible with the last, so you will need to recompile your application in order to use this version of libltdl. Note that libltdl is not threadsafe, i.e. a multithreaded application has to use a mutex for libltdl. It was reported that GNU/Linux's glibc 2.0's `dlopen' with `RTLD_LAZY' (which libltdl uses by default) is not thread-safe, but this problem is supposed to be fixed in glibc 2.1. On the other hand, `RTLD_NOW' was reported to introduce problems in multi-threaded applications on FreeBSD. Working around these problems is left as an exercise for the reader; contributions are certainly welcome. The following types are defined in `ltdl.h': - Type: lt_ptr `lt_ptr' is a generic pointer. - Type: lt_dlhandle `lt_dlhandle' is a module "handle". Every lt_dlopened module has a handle associated with it. - Type: lt_dlsymlist `lt_dlsymlist' is a symbol list for dlpreopened modules. This structure is described in *note Dlpreopening::. libltdl provides the following functions: - Function: int lt_dlinit (void) Initialize libltdl. This function must be called before using libltdl and may be called several times. Return 0 on success, otherwise the number of errors. - Function: int lt_dlexit (void) Shut down libltdl and close all modules. This function will only then shut down libltdl when it was called as many times as `lt_dlinit' has been successfully called. Return 0 on success, otherwise the number of errors. - Function: lt_dlhandle lt_dlopen (const char *FILENAME) Open the module with the file name FILENAME and return a handle for it. `lt_dlopen' is able to open libtool dynamic modules, preloaded static modules, the program itself and native dynamic libraries. Unresolved symbols in the module are resolved using its dependency libraries (not implemented yet) and previously dlopened modules. If the executable using this module was linked with the `-export-dynamic' flag, then the global symbols in the executable will also be used to resolve references in the module. If FILENAME is `NULL' and the program was linked with `-export-dynamic' or `-dlopen self', `lt_dlopen' will return a handle for the program itself, which can be used to access its symbols. If libltdl cannot find the library and the file name FILENAME does not have a directory component it will additionally search in the following search paths for the module (in the order as follows): 1. user-defined search path: This search path can be changed by the program using the functions `lt_dlsetsearchpath', `lt_dladdsearchdir' and `lt_dlinsertsearchdir'. 2. libltdl's search path: This search path is the value of the environment variable LTDL_LIBRARY_PATH. 3. system library search path: The system dependent library search path (e.g. on Linux it is LD_LIBRARY_PATH). Each search path must be a colon-separated list of absolute directories, for example, `"/usr/lib/mypkg:/lib/foo"'. If the same module is loaded several times, the same handle is returned. If `lt_dlopen' fails for any reason, it returns `NULL'. - Function: lt_dlhandle lt_dlopenext (const char *FILENAME) The same as `lt_dlopen', except that it tries to append different file name extensions to the file name. If the file with the file name FILENAME cannot be found libltdl tries to append the following extensions: 1. the libtool archive extension `.la' 2. the extension used for native dynamic libraries on the host platform, e.g., `.so', `.sl', etc. This lookup strategy was designed to allow programs that don't have knowledge about native dynamic libraries naming conventions to be able to `dlopen' such libraries as well as libtool modules transparently. - Function: int lt_dlclose (lt_dlhandle HANDLE) Decrement the reference count on the module HANDLE. If it drops to zero and no other module depends on this module, then the module is unloaded. Return 0 on success. - Function: lt_ptr lt_dlsym (lt_dlhandle HANDLE, const char *NAME) Return the address in the module HANDLE, where the symbol given by the null-terminated string NAME is loaded. If the symbol cannot be found, `NULL' is returned. - Function: const char * lt_dlerror (void) Return a human readable string describing the most recent error that occurred from any of libltdl's functions. Return `NULL' if no errors have occurred since initialization or since it was last called. - Function: int lt_dlpreload (const lt_dlsymlist *PRELOADED) Register the list of preloaded modules PRELOADED. If PRELOADED is `NULL', then all previously registered symbol lists, except the list set by `lt_dlpreload_default', are deleted. Return 0 on success. - Function: int lt_dlpreload_default (const lt_dlsymlist *PRELOADED) Set the default list of preloaded modules to PRELOADED, which won't be deleted by `lt_dlpreload'. Note that this function does _not_ require libltdl to be initialized using `lt_dlinit' and can be used in the program to register the default preloaded modules. Instead of calling this function directly, most programs will use the macro `LTDL_SET_PRELOADED_SYMBOLS'. Return 0 on success. - Macro: LTDL_SET_PRELOADED_SYMBOLS Set the default list of preloaded symbols. Should be used in your program to initialize libltdl's list of preloaded modules. #include int main() { /* ... */ LTDL_SET_PRELOADED_SYMBOLS(); /* ... */ } - Function: int lt_dladdsearchdir (const char *SEARCH_DIR) Append the search directory SEARCH_DIR to the current user-defined library search path. Return 0 on success. - Function: int lt_dlinsertsearchdir (const char *BEFORE, const char *SEARCH_DIR) Insert the search directory SEARCH_DIR into the user-defined library search path, immediately before the element starting at address BEFORE. If BEFORE is `NULL', then SEARCH_DIR is appending as if `lt_dladdsearchdir' had been called. Return 0 on success. - Function: int lt_dlsetsearchpath (const char *SEARCH_PATH) Replace the current user-defined library search path with SEARCH_PATH, which must be a colon-separated list of absolute directories. Return 0 on success. - Function: const char * lt_dlgetsearchpath (void) Return the current user-defined library search path. - Function: int lt_dlforeachfile (const char *SEARCH_PATH, int (*FUNC) (const char *FILENAME, lt_ptr DATA), lt_ptr DATA) In some applications you may not want to load individual modules with known names, but rather find all of the modules in a set of directories and load them all during initialisation. With this function you can have libltdl scan the colon delimited directory list in SEARCH_PATH for candidates, and pass them, along with DATA to your own callback function, FUNC. If SEACH_PATH is `NULL', then search all of the standard locations that `lt_dlopen' would examine. This function will continue to make calls to FUNC for each file that it discovers in SEARCH_PATH until one of these calls returns non-zero, or until the files are exhausted. `lt_dlforeachfile' returns value returned by the last call made to FUNC. For example you could define FUNC to build an ordered "argv"-like vector of files using DATA to hold the address of the start of the vector. - Function: int lt_dlmakeresident (lt_dlhandle HANDLE) Mark a module so that it cannot be `lt_dlclose'd. This can be useful if a module implements some core functionality in your project, which would cause your code to crash if removed. Return 0 on success. If you use `lt_dlopen (NULL)' to get a HANDLE for the running binary, that handle will always be marked as resident, and consequently cannot be successfully `lt_dlclose'd. - Function: int lt_dlisresident (lt_dlhandle HANDLE) Check whether a particular module has been marked as resident, returning 1 if it has or 0 otherwise. If there is an error while executing this function, return -1 and set an error message for retrieval with `lt_dlerror'. - Variable: lt_ptr (*) (size_t SIZE) lt_dlmalloc - Variable: void (*) (lt_ptr PTR) lt_dlfree These variables are set to `malloc' and `free', by default, but you can set them to any other functions that provides equivalent functionality. However, you must not modify their values after calling any libltdl function other than `lt_dlpreopen_default' or the macro `LTDL_SET_PRELOADED_SYMBOLS'.  File: libtool.info, Node: Modules for libltdl, Next: Thread Saftey in libltdl, Prev: Libltdl interface, Up: Using libltdl Creating modules that can be `dlopen'ed ======================================= Libtool modules are like normal libtool libraries with a few exceptions: You have to link the module with libtool's `-module' switch, and you should link any program that is intended to dlopen the module with `-dlopen modulename.la' so that libtool can dlpreopen the module on platforms which don't support dlopening. If the module depends on any other libraries, make sure you specify them either when you link the module or when you link programs that dlopen it. If you want to disable *note Versioning:: for a specific module you should link it with the `-avoid-version' switch. Note that libtool modules don't need to have a "lib" prefix. However, automake 1.4 or higher is required to build such modules. Usually a set of modules provide the same interface, i.e, exports the same symbols, so that a program can dlopen them without having to know more about their internals. In order to avoid symbol conflicts all exported symbols must be prefixed with "modulename_LTX_" (`modulename' is the name of the module). Internal symbols must be named in such a way that they won't conflict with other modules, for example, by prefixing them with "_modulename_". Although some platforms support having the same symbols defined more than once it is generally not portable and it makes it impossible to dlpreopen such modules. libltdl will automatically cut the prefix off to get the real name of the symbol. Additionally, it supports modules which don't use a prefix so that you can also dlopen non-libtool modules. `foo1.c' gives an example of a portable libtool module. Exported symbols are prefixed with "foo1_LTX_", internal symbols with "_foo1_". Aliases are defined at the beginning so that the code is more readable. /* aliases for the exported symbols */ #define foo foo1_LTX_foo #define bar foo1_LTX_bar /* a global variable definition */ int bar = 1; /* a private function */ int _foo1_helper() { return bar; } /* an exported function */ int foo() { return _foo1_helper(); } The `Makefile.am' contains the necessary rules to build the module `foo1.la': ... lib_LTLIBRARIES = foo1.la foo1_la_SOURCES = foo1.c foo1_la_LDFLAGS = -module ...  File: libtool.info, Node: Thread Saftey in libltdl, Next: User defined module data, Prev: Modules for libltdl, Up: Using libltdl Using libtldl in a multi threaded environment ============================================= Using the `lt_dlmutex_register()' function, and by providing some appropriate callback function definitions, libltdl can be used in a multi-threaded environment. - Type: void lt_dlmutex_lock (void) This is the type of a function pointer holding the address of a function which will be called at the start of parts of the libltdl implementation code which require a mutex lock. Because libltdl is inherantly recursive, it is important that the locking mechanism employed by these callback functions are reentrant, or else strange problems will occur. - Type: void lt_dlmutex_unlock (void) The type of a matching unlock function. - Type: void lt_dlmutex_seterror (const char *ERROR); Many of the functions in the libltdl API have a special return value to indicate to the client that an error has occured. Normally (in single threaded applications) a string describing that error can be retrieved from internal storage with `lt_dlerror()'. A function of this type must be registered with the library in order for it to work in a multi-threaded context. The function should store any error message passed in thread local storage. - Type: const char * lt_dlmutex_geterror (void) The type of a matching callback function to retrieve the last stored error message from thread local storage. When regeistered correctly this function will be used by `lt_dlerror())' from all threads to retrieve error messages for the client. - Function: int lt_dlmutex_register (lt_dlmutex_lock *LOCK, lt_dlmutex_unlock *UNLOCK, lt_dlmutex_set_error *SETERROR, lt_dlmutex_geterror *GETERROR) Use this function to register one of each of function ttypes described above in preparation for multi-threaded use of libltdl. All arguments must be valid non-`NULL' function addresses, or else all `NULL' to return to single threaded operation.  File: libtool.info, Node: User defined module data, Next: Module loaders for libltdl, Prev: Thread Saftey in libltdl, Up: Using libltdl Data associated with loaded modules =================================== Some of the internal information about each loaded module that is maintained by libltdl is available to the user, in the form of this structure: - Type: struct lt_dlinfo { char *FILENAME; char *NAME; int REF_COUNT; } `lt_dlinfo' is used to store information about a module. The FILENAME attribute is a null-terminated character string of the real module file name. If the module is a libtool module then NAME is its module name (e.g. `"libfoo"' for `"dir/libfoo.la"'), otherwise it is set to `NULL'. The REF_COUNT attribute is a reference counter that describes how often the same module is currently loaded. The following function will return a pointer to libltdl's internal copy of this structure for the given HANDLE: - Function: const lt_dlinfo * lt_dlgetinfo (lt_dlhandle HANDLE) Return a pointer to a struct that contains some information about the module HANDLE. The contents of the struct must not be modified. Return `NULL' on failure. Furthermore, in order to save you from having to keep a list of the handles of all the modules you have loaded, these functions allow you to iterate over libltdl's list of loaded modules: - Function: int lt_dlforeach (int (*FUNC) (lt_dlhandle HANDLE, lt_ptr DATA), lt_ptr DATA) For each loaded module call the function FUNC. The argument HANDLE is the handle of one of the loaded modules, DATA is the DATA argument passed to `lt_dlforeach'. As soon as FUNC returns a non-zero value for one of the handles, `lt_dlforeach' will stop calling FUNC and immediately return 1. Otherwise 0 is returned. - Function: lt_dlhandle lt_dlhandle_next (lt_dlhandle place) Iterate over the loaded module handles, returning the first handle in the list if PLACE is `NULL', and the next one on subsequent calls. If PLACE is the last element in the list of loaded modules, this function returns `NULL'. Of course, you would still need to maintain your own list of loaded module handles to parallel the list maintained by libltdl if there are any other data that you need to associate with each handle for the purposes of your application. However, if you use the following API calls to associate your application data with individual module handles as they are loaded there is actually no need to do that. You must first obtain a unique caller id from libltdl which you subsequently use to retrieve the data you stored earlier. This allows for different libraries that each wish to store their own data against loaded modules to do so without interfering with one another's data. - Type: lt_dlcaller_id The opaque type used to hold individual data set keys. - Function: lt_dlcaller_id lt_dlcaller_register (void) Use this to obtain a unique key to store and retrieve individual sets of per module data. - Function: lt_ptr lt_dlcaller_set_data (lt_dlcaller_id KEY, lt_dlhandle HANDLE, lt_ptr DATA) Set DATA as the set of data uniquely associated with KEY and HANDLE for later retrieval. This function returns the DATA previously associated with KEY and HANDLE if any. A result of 0, may indicate that a diagnostic for the last error (if any) is available from `lt_dlerror()'. For example, to correctly remove some associated data: lt_ptr stale = lt_dlcaller_set_data (key, handle, 0); if (stale == NULL) { char *error_msg = lt_dlerror (); if (error_msg != NULL) { my_error_handler (error_msg); return STATUS_FAILED; } } else { free (stale); } - Function: lt_ptr lt_dlcaller_get_data (lt_dlcaller_id KEY, lt_dlhandle HANDLE) Return the address of the data associated with KEY and HANDLE, or else `NULL' if there is none. The preceding functions can be combined with `lt_dlforeach' to implement search and apply operations without the need for your application to track the modules that have been loaded and unloaded: int my_dlcaller_callback (lt_dlhandle handle, lt_ptr key_ptr) { struct my_module_data *my_data; my_data = lt_dlcaller_get_data (handle, (lt_dlcaller_id) *key_ptr); return process (my_data); } int my_dlcaller_foreach (lt_dlcaller_id key) { lt_dlforeach (my_dlcaller_callback, (lt_ptr) &key); }  File: libtool.info, Node: Module loaders for libltdl, Next: Distributing libltdl, Prev: User defined module data, Up: Using libltdl How to create and register new module loaders ============================================= Sometimes libltdl's many ways of gaining access to modules are not sufficient for the purposes of a project. You can write your own loader, and register it with libltdl so that `lt_dlopen' will be able to use it. Writing a loader involves writing at least three functions which can be called by `lt_dlopen', `lt_dlsym' and `lt_dlclose'. Optionally, you can provide a finalisation function to perform any cleanup operations when `lt_dlexit' executes, and a symbol prefix string which will be prepended to any symbols passed to `lt_dlsym'. These functions must match the function pointer types below, after which they can be allocated to an instance of `lt_user_dlloader' and registered. Registering the loader requires that you choose a name for it, so that it can be recognised by `lt_dlloader_find' and removed with `lt_dlloader_remove'. The name you choose must be unique, and not already in use by libltdl's builtin loaders: "dlopen" The system dynamic library loader, if one exists. "dld" The GNU dld loader, if `libdld' was installed when libltdl was built. "dlpreload" The loader for `lt_dlopen'ing of preloaded static modules. The prefix "dl" is reserved for loaders supplied with future versions of libltdl, so you should not use that for your own loader names. The following types are defined in `ltdl.h': - Type: lt_module `lt_module' is a dlloader dependent module. The dynamic module loader extensions communicate using these low level types. - Type: lt_dlloader `lt_dlloader' is a handle for module loader types. - Type: lt_user_data `lt_user_data' is used for specifying loader instance data. - Type: struct lt_user_dlloader {const char *SYM_PREFIX; lt_module_open *MODULE_OPEN; lt_module_close *MODULE_CLOSE; lt_find_sym *FIND_SYM; lt_dlloader_exit *DLLOADER_EXIT; } If you want to define a new way to open dynamic modules, and have the `lt_dlopen' API use it, you need to instantiate one of these structures and pass it to `lt_dlloader_add'. You can pass whatever you like in the DLLOADER_DATA field, and it will be passed back as the value of the first parameter to each of the functions specified in the function pointer fields. - Type: lt_module lt_module_open (const char *FILENAME) The type of the loader function for an `lt_dlloader' module loader. The value set in the dlloader_data field of the `struct lt_user_dlloader' structure will be passed into this function in the LOADER_DATA parameter. Implementation of such a function should attempt to load the named module, and return an `lt_module' suitable for passing in to the associated `lt_module_close' and `lt_sym_find' function pointers. If the function fails it should return `NULL', and set the error message with `lt_dlseterror'. - Type: int lt_module_close (lt_user_data LOADER_DATA, lt_module MODULE) The type of the unloader function for a user defined module loader. Implementatation of such a function should attempt to release any resources tied up by the MODULE module, and then unload it from memory. If the function fails for some reason, set the error message with `lt_dlseterror' and return non-zero. - Type: lt_ptr lt_find_sym (lt_module MODULE, const char *SYMBOL) The type of the symbol lookup function for a user defined module loader. Implementation of such a function should return the address of the named SYMBOL in the module MODULE, or else set the error message with `lt_dlseterror' and return `NULL' if lookup fails. - Type: int lt_dlloader_exit (lt_user_data LOADER_DATA) The type of the finalisation function for a user defined module loader. Implementation of such a function should free any resources associated with the loader, including any user specified data in the `dlloader_data' field of the `lt_user_dlloader'. If non-`NULL', the function will be called by `lt_dlexit', and `lt_dlloader_remove'. For example: int register_myloader (void) { lt_user_dlloader dlloader; /* User modules are responsible for their own initialisation. */ if (myloader_init () != 0) return MYLOADER_INIT_ERROR; dlloader.sym_prefix = NULL; dlloader.module_open = myloader_open; dlloader.module_close = myloader_close; dlloader.find_sym = myloader_find_sym. dlloader.dlloader_exit = myloader_exit; dlloader.dlloader_data = (lt_user_data)myloader_function; /* Add my loader as the default module loader. */ if (lt_dlloader_add (lt_dlloader_next (NULL), &dlloader, "myloader") != 0) return ERROR; return OK; } Note that if there is any initialisation required for the loader, it must be performed manually before the loader is registered - libltdl doesn't handle user loader initialisation. Finalisation _is_ handled by libltdl however, and it is important to ensure the `dlloader_exit' callback releases any resources claimed during the initialisation phase. libltdl provides the following functions for writing your own module loaders: - Function: int lt_dlloader_add (lt_dlloader *PLACE, lt_user_dlloader *DLLOADER, const char *LOADER_NAME) Add a new module loader to the list of all loaders, either as the last loader (if PLACE is `NULL'), else immediately before the loader passed as PLACE. LOADER_NAME will be returned by `lt_dlloader_name' if it is subsequently passed a newly registered loader. These LOADER_NAMEs must be unique, or `lt_dlloader_remove' and `lt_dlloader_find' cannot work. Returns 0 for success. { /* Make myloader be the last one. */ if (lt_dlloader_add (NULL, myloader) != 0) perror (lt_dlerror ()); } - Function: int lt_dlloader_remove (const char *LOADER_NAME) Remove the loader identified by the unique name, LOADER_NAME. Before this can succeed, all modules opened by the named loader must have been closed. Returns 0 for success, otherwise an error message can be obtained from `lt_dlerror'. { /* Remove myloader. */ if (lt_dlloader_remove ("myloader") != 0) perror (lt_dlerror ()); } - Function: lt_dlloader * lt_dlloader_next (lt_dlloader *PLACE) Iterate over the module loaders, returning the first loader if PLACE is `NULL', and the next one on subsequent calls. The handle is for use with `lt_dlloader_add'. { /* Make myloader be the first one. */ if (lt_dlloader_add (lt_dlloader_next (NULL), myloader) != 0) return ERROR; } - Function: lt_dlloader * lt_dlloader_find (const char *LOADER_NAME) Return the first loader with a matching LOADER_NAME identifier, or else `NULL', if the identifier is not found. The identifiers which may be used by libltdl itself, if the host architecture supports them are "dlopen"(1), "dld" and "dlpreload". { /* Add a user loader as the next module loader to be tried if the standard dlopen loader were to fail when lt_dlopening. */ if (lt_dlloader_add (lt_dlloader_find ("dlopen"), myloader) != 0) return ERROR; } - Function: const char * lt_dlloader_name (lt_dlloader *PLACE) Return the identifying name of PLACE, as obtained from `lt_dlloader_next' or `lt_dlloader_find'. If this function fails, it will return `NULL' and set an error for retrieval with `lt_dlerror'. - Function: lt_user_data * lt_dlloader_data (lt_dlloader *PLACE) Return the address of the `dlloader_data' of PLACE, as obtained from `lt_dlloader_next' or `lt_dlloader_find'. If this function fails, it will return `NULL' and set an error for retrieval with `lt_dlerror'. Error handling within user module loaders ----------------------------------------- - Function: int lt_dladderror (const char *DIAGNOSTIC) This function allows you to integrate your own error messages into `lt_dlerror'. Pass in a suitable diagnostic message for return by `lt_dlerror', and an error identifier for use with `lt_dlseterror' is returned. If the allocation of an identifier fails, this function returns -1. int myerror = lt_dladderror ("Doh!"); if (myerror < 0) perror (lt_dlerror ()); - Function: int lt_dlseterror (int ERRORCODE) When writing your own module loaders, you should use this function to raise errors so that they are propogated through the `lt_dlerror' interface. All of the standard errors used by libltdl are declared in `ltdl.h', or you can add more of your own with `lt_dladderror'. This function returns 0 on success. if (lt_dlseterror (LTDL_ERROR_NO_MEMORY) != 0) perror (lt_dlerror ()); ---------- Footnotes ---------- (1) This is used for the host dependent module loading API - `shl_load' and `LoadLibrary' for example  File: libtool.info, Node: Distributing libltdl, Prev: Module loaders for libltdl, Up: Using libltdl How to distribute libltdl with your package =========================================== Even though libltdl is installed together with libtool, you may wish to include libltdl in the distribution of your package, for the convenience of users of your package that don't have libtool or libltdl installed. In this case, you must decide whether to manually add the `ltdl' objects to your package, or else which flavor of libltdl you want to use: a convenience library or an installable libtool library. The most simplistic way to add `libltdl' to your package is to copy the source files, `ltdl.c' and `ltdl.h', to a source directory withing your package and to build and link them along with the rest of your sources. To help you do this, the m4 macros for autoconf are available in `ltdl.m4'. You must ensure that they are available in `aclocal.m4' before you run autoconf - by appending the contents of `ltdl.m4' to `acinclude.m4', if you are using automake, or to `aclocal.m4' if you are not. Having made the macros available, you must add a call to the `AC_LIB_LTDL' macro to your package's `configure.in' to perform the configure time checks required to build `ltdl.o' correctly. This method has problems if you then try to link the package binaries with an installed libltdl, or a library which depends on libltdl: you may have problems with duplicate symbol definitions. One advantage of the convenience library is that it is not installed, so the fact that you use libltdl will not be apparent to the user, and it will not overwrite a pre-installed version of libltdl a user might have. On the other hand, if you want to upgrade libltdl for any reason (e.g. a bugfix) you'll have to recompile your package instead of just replacing an installed version of libltdl. However, if your programs or libraries are linked with other libraries that use such a pre-installed version of libltdl, you may get linker errors or run-time crashes. Another problem is that you cannot link the convenience library into more than one libtool library, then link a single program with these libraries, because you may get duplicate symbols. In general you can safely use the convenience library in programs which don't depend on other libraries that might use libltdl too. In order to enable this flavor of libltdl, you should add the line `AC_LIBLTDL_CONVENIENCE' to your `configure.in', _before_ `AC_PROG_LIBTOOL'. In order to select the installable version of libltdl, you should add a call of the macro `AC_LIBLTDL_INSTALLABLE' to your `configure.in' _before_ `AC_PROG_LIBTOOL'. This macro will check whether libltdl is already installed and, if not, request the libltdl embedded in your package to be built and installed. Note, however, that no version checking is performed. The user may override the test and determine that the libltdl embedded must be installed, regardless of the existence of another version, using the configure switch `--enable-ltdl-install'. In order to embed libltdl into your package, just add `--ltdl' to the `libtoolize' command line. It will copy the libltdl sources to a subdirectory `libltdl' in your package. Both macros accept an optional argument to specify the location of the `libltdl' directory. By the default both macros assume that it is `${top_srcdir}/libltdl'. Whatever macro you use, it is up to you to ensure that your `configure.in' will configure libltdl, using `AC_CONFIG_SUBDIRS', and that your `Makefile's will start sub-makes within libltdl's directory, using automake's SUBDIRS, for example. Both macros define the shell variables LIBLTDL, to the link flag that you should use to link with libltdl, and LTDLINCL, to the preprocessor flag that you should use to compile with programs that include `ltdl.h'. It is up to you to use `AC_SUBST' to ensure that this variable will be available in `Makefile's, or add them to variables that are `AC_SUBST'ed by default, such as LIBS and CPPFLAGS. If you're using the convenience libltdl, LIBLTDL will be the pathname for the convenience version of libltdl and LTDLINCL will be `-I' followed by the directory that contains libltdl, both starting with `${top_builddir}/' or `${top_srcdir}/', respectively. If you request an installed version of libltdl and one is found(1), LIBLTDL will be set to `-lltdl' and LTDLINCL will be empty (which is just a blind assumption that `ltdl.h' is somewhere in the include path if libltdl is in the library path). If an installable version of libltdl must be built, its pathname, starting with `${top_builddir}/', will be stored in LIBLTDL, and LTDLINCL will be set just like in the case of convenience library. So, when you want to link a program with libltdl, be it a convenience, installed or installable library, just compile with `$(LTDLINCL)' and link it with `$(LIBLTDL)', using libtool. You should probably also add `AC_LIBTOOL_DLOPEN' to your `configure.in' _before_ `AC_PROG_LIBTOOL', otherwise libtool will assume no dlopening mechanism is supported, and revert to dlpreopening, which is probably not what you want. Avoid using the `-static' or `-all-static' switches when linking programs with libltdl. This will not work on all platforms, because the dlopening functions may not be available for static linking. The following example shows you how to embed the convenience libltdl in your package. In order to use the installable variant just replace `AC_LIBLTDL_CONVENIENCE' with `AC_LIBLTDL_INSTALLABLE'. We assume that libltdl was embedded using `libtoolize --ltdl'. configure.in: ... dnl Enable building of the convenience library dnl and set LIBLTDL accordingly AC_LIBLTDL_CONVENIENCE dnl Substitute LTDLINCL and LIBLTDL in the Makefiles AC_SUBST(LTDLINCL) AC_SUBST(LIBLTDL) dnl Check for dlopen support AC_LIBTOOL_DLOPEN dnl Configure libtool AC_PROG_LIBTOOL dnl Configure libltdl AC_CONFIG_SUBDIRS(libltdl) ... Makefile.am: ... SUBDIRS = libltdl INCLUDES = $(LTDLINCL) myprog_LDFLAGS = -export-dynamic # The quotes around -dlopen below fool automake <= 1.4 into accepting it myprog_LDADD = $(LIBLTDL) "-dlopen" self "-dlopen" foo1.la myprog_DEPENDENCIES = $(LIBLTDL) foo1.la ... ---------- Footnotes ---------- (1) Even if libltdl is installed, `AC_LIBLTDL_INSTALLABLE' may fail to detect it, if libltdl depends on symbols provided by libraries other than the C library. In this case, it will needlessly build and install libltdl.  File: libtool.info, Node: Other languages, Next: Troubleshooting, Prev: Using libltdl, Up: Top Using libtool with other languages ********************************** Libtool was first implemented in order to add support for writing shared libraries in the C language. However, over time, libtool is being integrated with other languages, so that programmers are free to reap the benefits of shared libraries in their favorite programming language. This chapter describes how libtool interacts with other languages, and what special considerations you need to make if you do not use C. * Menu: * C++ libraries::  File: libtool.info, Node: C++ libraries, Up: Other languages Writing libraries for C++ ========================= Creating libraries of C++ code should be a fairly straightforward process, because its object files differ from C ones in only three ways: 1. Because of name mangling, C++ libraries are only usable by the C++ compiler that created them. This decision was made by the designers of C++ in order to protect users from conflicting implementations of features such as constructors, exception handling, and RTTI. 2. On some systems, the C++ compiler must take special actions for the dynamic linker to run dynamic (i.e., run-time) initializers. This means that we should not call `ld' directly to link such libraries, and we should use the C++ compiler instead. 3. C++ compilers will link some Standard C++ library in by default, but libtool does not know which are these libraries, so it cannot even run the inter-library dependence analyzer to check how to link it in. Therefore, running `ld' to link a C++ program or library is deemed to fail. Because of these three issues, Libtool has been designed to always use the C++ compiler to compile and link C++ programs and libraries. In some instances the `main()' function of a program must also be compiled with the C++ compiler for static C++ objects to be properly initialized.  File: libtool.info, Node: Troubleshooting, Next: Maintaining, Prev: Other languages, Up: Top Troubleshooting *************** Libtool is under constant development, changing to remain up-to-date with modern operating systems. If libtool doesn't work the way you think it should on your platform, you should read this chapter to help determine what the problem is, and how to resolve it. * Menu: * Libtool test suite:: Libtool's self-tests. * Reporting bugs:: How to report problems with libtool.  File: libtool.info, Node: Libtool test suite, Next: Reporting bugs, Up: Troubleshooting The libtool test suite ====================== Libtool comes with its own set of programs that test its capabilities, and report obvious bugs in the libtool program. These tests, too, are constantly evolving, based on past problems with libtool, and known deficiencies in other operating systems. As described in the `INSTALL' file, you may run `make check' after you have built libtool (possibly before you install it) in order to make sure that it meets basic functional requirements. * Menu: * Test descriptions:: The contents of the test suite. * When tests fail:: What to do when a test fails.  File: libtool.info, Node: Test descriptions, Next: When tests fail, Up: Libtool test suite Description of test suite ------------------------- Here is a list of the current programs in the test suite, and what they test for: `cdemo-conf.test' `cdemo-exec.test' `cdemo-make.test' `cdemo-static.test' `cdemo-shared.test' These programs check to see that the `cdemo' subdirectory of the libtool distribution can be configured and built correctly. The `cdemo' subdirectory contains a demonstration of libtool convenience libraries, a mechanism that allows build-time static libraries to be created, in a way that their components can be later linked into programs or other libraries, even shared ones. The tests `cdemo-make.test' and `cdemo-exec.test' are executed three times, under three different libtool configurations: `cdemo-conf.test' configures `cdemo/libtool' to build both static and shared libraries (the default for platforms that support both), `cdemo-static.test' builds only static libraries (`--disable-shared'), and `cdemo-shared.test' builds only shared libraries (`--disable-static'). `demo-conf.test' `demo-exec.test' `demo-inst.test' `demo-make.test' `demo-unst.test' `demo-static.test' `demo-shared.test' `demo-nofast.test' `demo-pic.test' `demo-nopic.test' These programs check to see that the `demo' subdirectory of the libtool distribution can be configured, built, installed, and uninstalled correctly. The `demo' subdirectory contains a demonstration of a trivial package that uses libtool. The tests `demo-make.test', `demo-exec.test', `demo-inst.test' and `demo-unst.test' are executed four times, under four different libtool configurations: `demo-conf.test' configures `demo/libtool' to build both static and shared libraries, `demo-static.test' builds only static libraries (`--disable-shared'), and `demo-shared.test' builds only shared libraries (`--disable-static'). `demo-nofast.test' configures `demo/libtool' to disable the fast-install mode (`--enable-fast-install=no'). `demo-pic.test' configures `demo/libtool' to prefer building PIC code (`--with-pic'), `demo-nopic.test' to prefer non-PIC code (`--without-pic'). `deplibs.test' Many systems cannot link static libraries into shared libraries. libtool uses a `deplibs_check_method' to prevent such cases. This tests checks whether libtool's `deplibs_check_method' works properly. `hardcode.test' On all systems with shared libraries, the location of the library can be encoded in executables that are linked against it *note Linking executables::. This test checks the conditions under which your system linker hardcodes the library location, and guarantees that they correspond to libtool's own notion of how your linker behaves. `build-relink.test' Checks whether variable SHLIBPATH_OVERRIDES_RUNPATH is properly set. If the test fails and VERBOSE is set, it will indicate what the variable should have been set to. `noinst-link.test' Checks whether libtool will not try to link with a previously installed version of a library when it should be linking with a just-built one. `depdemo-conf.test' `depdemo-exec.test' `depdemo-inst.test' `depdemo-make.test' `depdemo-unst.test' `depdemo-static.test' `depdemo-shared.test' `depdemo-nofast.test' These programs check to see that the `depdemo' subdirectory of the libtool distribution can be configured, built, installed, and uninstalled correctly. The `depdemo' subdirectory contains a demonstration of inter-library dependencies with libtool. The test programs link some interdependent libraries. The tests `depdemo-make.test', `depdemo-exec.test', `depdemo-inst.test' and `depdemo-unst.test' are executed four times, under four different libtool configurations: `depdemo-conf.test' configures `depdemo/libtool' to build both static and shared libraries, `depdemo-static.test' builds only static libraries (`--disable-shared'), and `depdemo-shared.test' builds only shared libraries (`--disable-static'). `depdemo-nofast.test' configures `depdemo/libtool' to disable the fast-install mode (`--enable-fast-install=no'. `mdemo-conf.test' `mdemo-exec.test' `mdemo-inst.test' `mdemo-make.test' `mdemo-unst.test' `mdemo-static.test' `mdemo-shared.test' These programs check to see that the `mdemo' subdirectory of the libtool distribution can be configured, built, installed, and uninstalled correctly. The `mdemo' subdirectory contains a demonstration of a package that uses libtool and the system independent dlopen wrapper `libltdl' to load modules. The library `libltdl' provides a dlopen wrapper for various platforms (Linux, Solaris, HP/UX etc.) including support for dlpreopened modules (*note Dlpreopening::). The tests `mdemo-make.test', `mdemo-exec.test', `mdemo-inst.test' and `mdemo-unst.test' are executed three times, under three different libtool configurations: `mdemo-conf.test' configures `mdemo/libtool' to build both static and shared libraries, `mdemo-static.test' builds only static libraries (`--disable-shared'), and `mdemo-shared.test' builds only shared libraries (`--disable-static'). `dryrun.test' This test checks whether libtool's `--dry-run' mode works properly. `assign.test' Checks whether we don't put break or continue on the same line as an assignment in the libtool script. `link.test' This test guarantees that linking directly against a non-libtool static library works properly. `link-2.test' This test makes sure that files ending in `.lo' are never linked directly into a program file. `nomode.test' Check whether we can actually get help for libtool. `quote.test' This program checks libtool's metacharacter quoting. `sh.test' Checks whether a `test' command was forgotten in libtool. `suffix.test' When other programming languages are used with libtool (*note Other languages::), the source files may end in suffixes other than `.c'. This test validates that libtool can handle suffixes for all the file types that it supports, and that it fails when the suffix is invalid.  File: libtool.info, Node: When tests fail, Prev: Test descriptions, Up: Libtool test suite When tests fail --------------- Each of the above tests are designed to produce no output when they are run via `make check'. The exit status of each program tells the `Makefile' whether or not the test succeeded. If a test fails, it means that there is either a programming error in libtool, or in the test program itself. To investigate a particular test, you may run it directly, as you would a normal program. When the test is invoked in this way, it produces output which may be useful in determining what the problem is. Another way to have the test programs produce output is to set the VERBOSE environment variable to `yes' before running them. For example, `env VERBOSE=yes make check' runs all the tests, and has each of them display debugging information.  File: libtool.info, Node: Reporting bugs, Prev: Libtool test suite, Up: Troubleshooting Reporting bugs ============== If you think you have discovered a bug in libtool, you should think twice: the libtool maintainer is notorious for passing the buck (or maybe that should be "passing the bug"). Libtool was invented to fix known deficiencies in shared library implementations, so, in a way, most of the bugs in libtool are actually bugs in other operating systems. However, the libtool maintainer would definitely be happy to add support for somebody else's buggy operating system. [I wish there was a good way to do winking smiley-faces in Texinfo.] Genuine bugs in libtool include problems with shell script portability, documentation errors, and failures in the test suite (*note Libtool test suite::). First, check the documentation and help screens to make sure that the behaviour you think is a problem is not already mentioned as a feature. Then, you should read the Emacs guide to reporting bugs (*note Reporting Bugs: (emacs)Bugs.). Some of the details listed there are specific to Emacs, but the principle behind them is a general one. Finally, send a bug report to the libtool bug reporting address with any appropriate _facts_, such as test suite output (*note When tests fail::), all the details needed to reproduce the bug, and a brief description of why you think the behaviour is a bug. Be sure to include the word "libtool" in the subject line, as well as the version number you are using (which can be found by typing `libtool --version').  File: libtool.info, Node: Maintaining, Next: GNU Free Documentation License, Prev: Troubleshooting, Up: Top Maintenance notes for libtool ***************************** This chapter contains information that the libtool maintainer finds important. It will be of no use to you unless you are considering porting libtool to new systems, or writing your own libtool. * Menu: * New ports:: How to port libtool to new systems. * Tested platforms:: When libtool was last tested. * Platform quirks:: Information about different library systems. * libtool script contents:: Configuration information that libtool uses. * Cheap tricks:: Making libtool maintainership easier.  File: libtool.info, Node: New ports, Next: Tested platforms, Up: Maintaining Porting libtool to new systems ============================== Before you embark on porting libtool to an unsupported system, it is worthwhile to send e-mail to the libtool mailing list , to make sure that you are not duplicating existing work. If you find that any porting documentation is missing, please complain! Complaints with patches and improvements to the documentation, or to libtool itself, are more than welcome. * Menu: * Information sources:: Where to find relevant documentation * Porting inter-library dependencies:: Implementation details explained 0707010000966c000081a40000006400000064000000013f14393600008ee8000000200000003800000000000000000000001aff27088areloc/info/libtool.info-4This is libtool.info, produced by makeinfo version 4.5 from libtool.texi. INFO-DIR-SECTION GNU programming tools START-INFO-DIR-ENTRY * Libtool: (libtool). Generic shared library support script. END-INFO-DIR-ENTRY INFO-DIR-SECTION Individual utilities START-INFO-DIR-ENTRY * libtoolize: (libtool)Invoking libtoolize. Adding libtool support. END-INFO-DIR-ENTRY This file documents GNU Libtool 1.5 Copyright (C) 1996-2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".  File: libtool.info, Node: Information sources, Next: Porting inter-library dependencies, Up: New ports Information sources ------------------- Once it is clear that a new port is necessary, you'll generally need the following information: canonical system name You need the output of `config.guess' for this system, so that you can make changes to the libtool configuration process without affecting other systems. man pages for `ld' and `cc' These generally describe what flags are used to generate PIC, to create shared libraries, and to link against only static libraries. You may need to follow some cross references to find the information that is required. man pages for `ld.so', `rtld', or equivalent These are a valuable resource for understanding how shared libraries are loaded on the system. man page for `ldconfig', or equivalent This page usually describes how to install shared libraries. output from `ls -l /lib /usr/lib' This shows the naming convention for shared libraries on the system, including which names should be symbolic links. any additional documentation Some systems have special documentation on how to build and install shared libraries. If you know how to program the Bourne shell, then you can complete the port yourself; otherwise, you'll have to find somebody with the relevant skills who will do the work. People on the libtool mailing list are usually willing to volunteer to help you with new ports, so you can send the information to them. To do the port yourself, you'll definitely need to modify the `libtool.m4' macros in order to make platform-specific changes to the configuration process. You should search that file for the `PORTME' keyword, which will give you some hints on what you'll need to change. In general, all that is involved is modifying the appropriate configuration variables (*note libtool script contents::). Your best bet is to find an already-supported system that is similar to yours, and make your changes based on that. In some cases, however, your system will differ significantly from every other supported system, and it may be necessary to add new configuration variables, and modify the `ltmain.in' script accordingly. Be sure to write to the mailing list before you make changes to `ltmain.in', since they may have advice on the most effective way of accomplishing what you want.  File: libtool.info, Node: Porting inter-library dependencies, Prev: Information sources, Up: New ports Porting inter-library dependencies support ------------------------------------------ Since version 1.2c, libtool has re-introduced the ability to do inter-library dependency on some platforms, thanks to a patch by Toshio Kuratomi . Here's a shortened version of the message that contained his patch: The basic architecture is this: in `libtool.m4', the person who writes libtool makes sure `$deplibs' is included in `$archive_cmds' somewhere and also sets the variable `$deplibs_check_method', and maybe `$file_magic_cmd' when `deplibs_check_method' is file_magic. `deplibs_check_method' can be one of five things: `file_magic [REGEX]' looks in the library link path for libraries that have the right libname. Then it runs `$file_magic_cmd' on the library and checks for a match against the extended regular expression REGEX. When FILE_MAGIC_TEST_FILE is set by `libtool.m4', it is used as an argument to `$file_magic_cmd' in order to verify whether the regular expression matches its output, and warn the user otherwise. `test_compile' just checks whether it is possible to link a program out of a list of libraries, and checks which of those are listed in the output of `ldd'. It is currently unused, and will probably be dropped in the future. `pass_all' will pass everything without any checking. This may work on platforms in which code is position-independent by default and inter-library dependencies are properly supported by the dynamic linker, for example, on DEC OSF/1 3 and 4. `none' It causes deplibs to be reassigned deplibs="". That way `archive_cmds' can contain deplibs on all platforms, but not have deplibs used unless needed. `unknown' is the default for all systems unless overridden in `libtool.m4'. It is the same as `none', but it documents that we really don't know what the correct value should be, and we welcome patches that improve it. Then in `ltmain.in' we have the real workhorse: a little initialization and postprocessing (to setup/release variables for use with eval echo libname_spec etc.) and a case statement that decides which method is being used. This is the real code... I wish I could condense it a little more, but I don't think I can without function calls. I've mostly optimized it (moved things out of loops, etc) but there is probably some fat left. I thought I should stop while I was ahead, work on whatever bugs you discover, etc before thinking about more than obvious optimizations.  File: libtool.info, Node: Tested platforms, Next: Platform quirks, Prev: New ports, Up: Maintaining Tested platforms ================ This table describes when libtool was last known to be tested on platforms where it claims to support shared libraries: ------------------------------------------------------- canonical host name compiler libtool results (tools versions) release ------------------------------------------------------- alpha-dec-osf5.1 cc 1.3e ok (1.910) alpha-dec-osf4.0f gcc 1.3e ok (1.910) alpha-dec-osf4.0f cc 1.3e ok (1.910) alpha-dec-osf3.2 gcc 0.8 ok alpha-dec-osf3.2 cc 0.8 ok alpha-dec-osf2.1 gcc 1.2f NS alpha*-unknown-linux-gnu gcc 1.3b ok (egcs-1.1.2, GNU ld 2.9.1.0.23) hppa2.0w-hp-hpux11.00 cc 1.2f ok hppa2.0-hp-hpux10.20 cc 1.3.2 ok hppa1.1-hp-hpux10.20 gcc 1.2f ok hppa1.1-hp-hpux10.20 cc 1.3c ok (1.821) hppa1.1-hp-hpux10.10 gcc 1.2f ok hppa1.1-hp-hpux10.10 cc 1.2f ok hppa1.1-hp-hpux9.07 gcc 1.2f ok hppa1.1-hp-hpux9.07 cc 1.2f ok hppa1.1-hp-hpux9.05 gcc 1.2f ok hppa1.1-hp-hpux9.05 cc 1.2f ok hppa1.1-hp-hpux9.01 gcc 1.2f ok hppa1.1-hp-hpux9.01 cc 1.2f ok i*86-*-beos gcc 1.2f ok i*86-*-bsdi4.0.1 gcc 1.3c ok (gcc-2.7.2.1) i*86-*-bsdi4.0 gcc 1.2f ok i*86-*-bsdi3.1 gcc 1.2e NS i*86-*-bsdi3.0 gcc 1.2e NS i*86-*-bsdi2.1 gcc 1.2e NS i*86-pc-cygwin gcc 1.3b NS (egcs-1.1 stock b20.1 compiler) i*86-*-dguxR4.20MU01 gcc 1.2 ok i*86-*-freebsd4.3 gcc 1.3e ok (1.912) i*86-*-freebsdelf4.0 gcc 1.3c ok (egcs-1.1.2) i*86-*-freebsdelf3.2 gcc 1.3c ok (gcc-2.7.2.1) i*86-*-freebsdelf3.1 gcc 1.3c ok (gcc-2.7.2.1) i*86-*-freebsdelf3.0 gcc 1.3c ok i*86-*-freebsd3.0 gcc 1.2e ok i*86-*-freebsd2.2.8 gcc 1.3c ok (gcc-2.7.2.1) i*86-*-freebsd2.2.6 gcc 1.3b ok (egcs-1.1 & gcc-2.7.2.1, native ld) i*86-*-freebsd2.1.5 gcc 0.5 ok i*86-*-netbsd1.5 gcc 1.3e ok (1.901) (egcs-1.1.2) i*86-*-netbsd1.4 gcc 1.3c ok (egcs-1.1.1) i*86-*-netbsd1.4.3A gcc 1.3e ok (1.901) i*86-*-netbsd1.3.3 gcc 1.3c ok (gcc-2.7.2.2+myc2) i*86-*-netbsd1.3.2 gcc 1.2e ok i*86-*-netbsd1.3I gcc 1.2e ok (egcs 1.1?) i*86-*-netbsd1.2 gcc 0.9g ok i*86-*-linux-gnu gcc 1.3e ok (1.901) (Red Hat 7.0, gcc "2.96") i*86-*-linux-gnu gcc 1.3e ok (1.911) (SuSE 7.0, gcc 2.95.2) i*86-*-linux-gnulibc1 gcc 1.2f ok i*86-*-openbsd2.5 gcc 1.3c ok (gcc-2.8.1) i*86-*-openbsd2.4 gcc 1.3c ok (gcc-2.8.1) i*86-*-solaris2.7 gcc 1.3b ok (egcs-1.1.2, native ld) i*86-*-solaris2.6 gcc 1.2f ok i*86-*-solaris2.5.1 gcc 1.2f ok i*86-ncr-sysv4.3.03 gcc 1.2f ok i*86-ncr-sysv4.3.03 cc 1.2e ok (cc -Hnocopyr) i*86-pc-sco3.2v5.0.5 cc 1.3c ok i*86-pc-sco3.2v5.0.5 gcc 1.3c ok (gcc 95q4c) i*86-pc-sco3.2v5.0.5 gcc 1.3c ok (egcs-1.1.2) i*86-sco-sysv5uw7.1.1 gcc 1.3e ok (1.901) (gcc-2.95.2, SCO linker) i*86-UnixWare7.1.0-sysv5 cc 1.3c ok i*86-UnixWare7.1.0-sysv5 gcc 1.3c ok (egcs-1.1.1) m68k-next-nextstep3 gcc 1.2f NS m68k-sun-sunos4.1.1 gcc 1.2f NS (gcc-2.5.7) m88k-dg-dguxR4.12TMU01 gcc 1.2 ok m88k-motorola-sysv4 gcc 1.3 ok (egcs-1.1.2) mips-sgi-irix6.5 gcc 1.2f ok (gcc-2.8.1) mips-sgi-irix6.4 gcc 1.2f ok mips-sgi-irix6.3 gcc 1.3b ok (egcs-1.1.2, native ld) mips-sgi-irix6.3 cc 1.3b ok (cc 7.0) mips-sgi-irix6.2 gcc 1.2f ok mips-sgi-irix6.2 cc 0.9 ok mips-sgi-irix5.3 gcc 1.2f ok (egcs-1.1.1) mips-sgi-irix5.3 gcc 1.2f NS (gcc-2.6.3) mips-sgi-irix5.3 cc 0.8 ok mips-sgi-irix5.2 gcc 1.3b ok (egcs-1.1.2, native ld) mips-sgi-irix5.2 cc 1.3b ok (cc 3.18) mips-sni-sysv4 cc 1.3.5 ok (Siemens C-compiler) mips-sni-sysv4 gcc 1.3.5 ok (gcc-2.7.2.3, GNU assembler 2.8.1, native ld) mipsel-unknown-openbsd2.1 gcc 1.0 ok powerpc-apple-darwin6.4 gcc 1.5 ok (apple dev tools released 12/2002) powerpc-ibm-aix4.3.1.0 gcc 1.2f ok (egcs-1.1.1) powerpc-ibm-aix4.2.1.0 gcc 1.2f ok (egcs-1.1.1) powerpc-ibm-aix4.1.5.0 gcc 1.2f ok (egcs-1.1.1) powerpc-ibm-aix4.1.5.0 gcc 1.2f NS (gcc-2.8.1) powerpc-ibm-aix4.1.4.0 gcc 1.0 ok powerpc-ibm-aix4.1.4.0 xlc 1.0i ok rs6000-ibm-aix4.1.5.0 gcc 1.2f ok (gcc-2.7.2) rs6000-ibm-aix4.1.4.0 gcc 1.2f ok (gcc-2.7.2) rs6000-ibm-aix3.2.5 gcc 1.0i ok rs6000-ibm-aix3.2.5 xlc 1.0i ok sparc-sun-solaris2.8 gcc 1.3e ok (1.913) (gcc-2.95.3 & native ld) sparc-sun-solaris2.7 gcc 1.3e ok (1.913) (gcc-2.95.3 & native ld) sparc-sun-solaris2.6 gcc 1.3e ok (1.913) (gcc-2.95.3 & native ld) sparc-sun-solaris2.5.1 gcc 1.3e ok (1.911) sparc-sun-solaris2.5 gcc 1.3b ok (egcs-1.1.2, GNU ld 2.9.1 & native ld) sparc-sun-solaris2.5 cc 1.3b ok (SC 3.0.1) sparc-sun-solaris2.4 gcc 1.0a ok sparc-sun-solaris2.4 cc 1.0a ok sparc-sun-solaris2.3 gcc 1.2f ok sparc-sun-sunos4.1.4 gcc 1.2f ok sparc-sun-sunos4.1.4 cc 1.0f ok sparc-sun-sunos4.1.3_U1 gcc 1.2f ok sparc-sun-sunos4.1.3C gcc 1.2f ok sparc-sun-sunos4.1.3 gcc 1.3b ok (egcs-1.1.2, GNU ld 2.9.1 & native ld) sparc-sun-sunos4.1.3 cc 1.3b ok sparc-unknown-bsdi4.0 gcc 1.2c ok sparc-unknown-linux-gnulibc1 gcc 1.2f ok sparc-unknown-linux-gnu gcc 1.3b ok (egcs-1.1.2, GNU ld 2.9.1.0.23) sparc64-unknown-linux-gnu gcc 1.2f ok Notes: - "ok" means "all tests passed". - "NS" means "Not Shared", but OK for static libraries Note: The vendor-distributed HP-UX `sed'(1) programs are horribly broken, and cannot handle libtool's requirements, so users may report unusual problems. There is no workaround except to install a working `sed' (such as GNU `sed') on these systems. Note: The vendor-distributed NCR MP-RAS `cc' programs emits copyright on standard error that confuse tests on size of `conftest.err'. The workaround is to specify `CC' when run `configure' with `CC='cc -Hnocopyr''.  File: libtool.info, Node: Platform quirks, Next: libtool script contents, Prev: Tested platforms, Up: Maintaining Platform quirks =============== This section is dedicated to the sanity of the libtool maintainers. It describes the programs that libtool uses, how they vary from system to system, and how to test for them. Because libtool is a shell script, it can be difficult to understand just by reading it from top to bottom. This section helps show why libtool does things a certain way. Combined with the scripts themselves, you should have a better sense of how to improve libtool, or write your own. * Menu: * References:: Finding more information. * Compilers:: Creating object files from source files. * Reloadable objects:: Binding object files together. * Multiple dependencies:: Removing duplicate dependent libraries. * Archivers:: Programs that create static archives.  File: libtool.info, Node: References, Next: Compilers, Up: Platform quirks References ---------- The following is a list of valuable documentation references: * SGI's IRIX Manual Pages, which can be found at . * Sun's free service area () and documentation server (). * Compaq's Tru64 UNIX online documentation is at () with C++ documentation at (). * Hewlett-Packard has online documentation at (). * IBM has online documentation at ().  File: libtool.info, Node: Compilers, Next: Reloadable objects, Prev: References, Up: Platform quirks Compilers --------- The only compiler characteristics that affect libtool are the flags needed (if any) to generate PIC objects. In general, if a C compiler supports certain PIC flags, then any derivative compilers support the same flags. Until there are some noteworthy exceptions to this rule, this section will document only C compilers. The following C compilers have standard command line options, regardless of the platform: `gcc' This is the GNU C compiler, which is also the system compiler for many free operating systems (FreeBSD, GNU/Hurd, GNU/Linux, Lites, NetBSD, and OpenBSD, to name a few). The `-fpic' or `-fPIC' flags can be used to generate position-independent code. `-fPIC' is guaranteed to generate working code, but the code is slower on m68k, m88k, and Sparc chips. However, using `-fpic' on those chips imposes arbitrary size limits on the shared libraries. The rest of this subsection lists compilers by the operating system that they are bundled with: `aix3*' `aix4*' Most AIX compilers have no PIC flags, since AIX (with the exception of AIX for IA-64) runs on PowerPC and RS/6000 chips. (1) `hpux10*' Use `+Z' to generate PIC. `osf3*' Digital/UNIX 3.x does not have PIC flags, at least not on the PowerPC platform. `solaris2*' Use `-KPIC' to generate PIC. `sunos4*' Use `-PIC' to generate PIC. ---------- Footnotes ---------- (1) All code compiled for the PowerPC and RS/6000 chips (`powerpc-*-*', `powerpcle-*-*', and `rs6000-*-*') is position-independent, regardless of the operating system or compiler suite. So, "regular objects" can be used to build shared libraries on these systems and no special PIC compiler flags are required.  File: libtool.info, Node: Reloadable objects, Next: Multiple dependencies, Prev: Compilers, Up: Platform quirks Reloadable objects ------------------ On all known systems, a reloadable object can be created by running `ld -r -o OUTPUT.o INPUT1.o INPUT2.o'. This reloadable object may be treated as exactly equivalent to other objects.  File: libtool.info, Node: Multiple dependencies, Next: Archivers, Prev: Reloadable objects, Up: Platform quirks Multiple dependencies --------------------- On most modern platforms the order that dependent libraries are listed has no effect on object generation. In theory, there are platforms which require libraries which provide missing symbols to other libraries to listed after those libraries whose symbols they provide. Particularly, if a pair of static archives each resolve some of the other's symbols, it might be necessary to list one of those archives both before and after the other one. Libtool does not currently cope with this situation well, since dupicate libraries are removed from the link line by default. Libtool provides the command line option `--preserve-dup-deps' to preserve all duplicate dependencies in cases where it is necessary.  File: libtool.info, Node: Archivers, Prev: Multiple dependencies, Up: Platform quirks Archivers --------- On all known systems, building a static library can be accomplished by running `ar cru libNAME.a OBJ1.o OBJ2.o ...', where the `.a' file is the output library, and each `.o' file is an object file. On all known systems, if there is a program named `ranlib', then it must be used to "bless" the created library before linking against it, with the `ranlib libNAME.a' command. Some systems, like Irix, use the `ar ts' command, instead.  File: libtool.info, Node: libtool script contents, Next: Cheap tricks, Prev: Platform quirks, Up: Maintaining `libtool' script contents ========================= Since version 1.4, the `libtool' script is generated by `configure' (*note Configuring::). In earlier versions, `configure' achieved this by calling a helper script called `ltconfig'. From libtool version 0.7 to 1.0, this script simply set shell variables, then sourced the libtool backend, `ltmain.sh'. `ltconfig' from libtool version 1.1 through 1.3 inlined the contents of `ltmain.sh' into the generated `libtool', which improved performance on many systems. The tests that `ltconfig' used to perform are now kept in `libtool.m4' where thay can be written using Autoconf. This has the runtime performance benefits of inlined `ltmain.sh', _and_ improves the build time a little while considerably easing the amount of raw shell code that used to need maintaining. The convention used for naming variables which hold shell commands for delayed evaluation, is to use the suffix `_cmd' where a single line of valid shell script is needed, and the suffix `_cmds' where multiple lines of shell script *may* be delayed for later evaluation. By convention, `_cmds' variables delimit the evaluation units with the `~' character where necessary. Here is a listing of each of the configuration variables, and how they are used within `ltmain.sh' (*note Configuring::): - Variable: AR The name of the system library archiver. - Variable: CC The name of the C compiler used to configure libtool. - Variable: LD The name of the linker that libtool should use internally for reloadable linking and possibly shared libraries. - Variable: NM The name of a BSD-compatible `nm' program, which produces listings of global symbols in one the following formats: ADDRESS C GLOBAL-VARIABLE-NAME ADDRESS D GLOBAL-VARIABLE-NAME ADDRESS T GLOBAL-FUNCTION-NAME - Variable: RANLIB Set to the name of the ranlib program, if any. - Variable: allow_undefined_flag The flag that is used by `archive_cmds' in order to declare that there will be unresolved symbols in the resulting shared library. Empty, if no such flag is required. Set to `unsupported' if there is no way to generate a shared library with references to symbols that aren't defined in that library. - Variable: always_export_symbols Whether libtool should automatically generate a list of exported symbols using EXPORT_SYMBOLS_CMDS before linking an archive. Set to `yes' or `no'. Default is `no'. - Variable: archive_cmds - Variable: archive_expsym_cmds - Variable: old_archive_cmds Commands used to create shared libraries, shared libraries with `-export-symbols' and static libraries, respectively. - Variable: old_archive_from_new_cmds If the shared library depends on a static library, `old_archive_from_new_cmds' contains the commands used to create that static library. If this variable is not empty, `old_archive_cmds' is not used. - Variable: old_archive_from_expsyms_cmds If a static library must be created from the export symbol list in order to correctly link with a shared library, `old_archive_from_expsyms_cmds' contains the commands needed to create that static library. When these commands are executed, the variable SONAME contains the name of the shared library in question, and the $OBJDIR/$NEWLIB contains the path of the static library these commands should build. After executing these commands, libtool will proceed to link against $OBJDIR/$NEWLIB instead of SONAME. - Variable: build_libtool_libs Whether libtool should build shared libraries on this system. Set to `yes' or `no'. - Variable: build_old_libs Whether libtool should build static libraries on this system. Set to `yes' or `no'. - Variable: compiler_c_o Whether the compiler supports the `-c' and `-o' options simultaneously. Set to `yes' or `no'. - Variable: compiler_o_lo Whether the compiler supports compiling directly to a ".lo" file, i.e whether object files do not have to have the suffix ".o". Set to `yes' or `no'. - Variable: dlopen_support Whether `dlopen' is supported on the platform. Set to `yes' or `no'. - Variable: dlopen_self Whether it is possible to `dlopen' the executable itself. Set to `yes' or `no'. - Variable: dlopen_self_static Whether it is possible to `dlopen' the executable itself, when it is linked statically (`-all-static'). Set to `yes' or `no'. - Variable: echo An `echo' program which does not interpret backslashes as an escape character. - Variable: exclude_expsyms List of symbols that should not be listed in the preloaded symbols. - Variable: export_dynamic_flag_spec Compiler link flag that allows a dlopened shared library to reference symbols that are defined in the program. - Variable: export_symbols_cmds Commands to extract exported symbols from LIBOBJS to the file EXPORT_SYMBOLS. - Variable: extract_expsyms_cmds Commands to extract the exported symbols list from a shared library. These commands are executed if there is no file $OBJDIR/$SONAME-DEF, and should write the names of the exported symbols to that file, for the use of `old_archive_from_expsyms_cmds'. - Variable: fast_install Determines whether libtool will privilege the installer or the developer. The assumption is that installers will seldom run programs in the build tree, and the developer will seldom install. This is only meaningful on platforms in which SHLIBPATH_OVERRIDES_RUNPATH is not `yes', so FAST_INSTALL will be set to `needless' in this case. If FAST_INSTALL set to `yes', libtool will create programs that search for installed libraries, and, if a program is run in the build tree, a new copy will be linked on-demand to use the yet-to-be-installed libraries. If set to `no', libtool will create programs that use the yet-to-be-installed libraries, and will link a new copy of the program at install time. The default value is `yes' or `needless', depending on platform and configuration flags, and it can be turned from `yes' to `no' with the configure flag `--disable-fast-install'. - Variable: finish_cmds Commands to tell the dynamic linker how to find shared libraries in a specific directory. - Variable: finish_eval Same as FINISH_CMDS, except the commands are not displayed. - Variable: fix_srcfile_path Expression to fix the shell variable $srcfile for the compiler. - Variable: global_symbol_pipe A pipeline that takes the output of NM, and produces a listing of raw symbols followed by their C names. For example: $ eval "$NM progname | $global_symbol_pipe" D SYMBOL1 C-SYMBOL1 T SYMBOL2 C-SYMBOL2 C SYMBOL3 C-SYMBOL3 ... $ The first column contains the symbol type (used to tell data from code on some platforms), but its meaning is system dependent. - Variable: global_symbol_to_cdecl A pipeline that translates the output of GLOBAL_SYMBOL_PIPE into proper C declarations. On platforms whose linkers differentiate code from data, such as HP/UX, data symbols will be declared as such, and code symbols will be declared as functions. On platforms that don't care, everything is assumed to be data. - Variable: hardcode_action Either `immediate' or `relink', depending on whether shared library paths can be hardcoded into executables before they are installed, or if they need to be relinked. - Variable: hardcode_direct Set to `yes' or `no', depending on whether the linker hardcodes directories if a library is directly specified on the command line (such as `DIR/libNAME.a') when HARDCODE_LIBDIR_FLAG_SPEC is specified. - Variable: hardcode_into_libs Whether the platform supports hardcoding of run-paths into libraries. If enabled, linking of programs will be much simpler but libraries will need to be relinked during installation. Set to `yes' or `no'. - Variable: hardcode_libdir_flag_spec Flag to hardcode a LIBDIR variable into a binary, so that the dynamic linker searches LIBDIR for shared libraries at runtime. If it is empty, libtool will try to use some other hardcoding mechanism. - Variable: hardcode_libdir_separator If the compiler only accepts a single HARDCODE_LIBDIR_FLAG, then this variable contains the string that should separate multiple arguments to that flag. - Variable: hardcode_minus_L Set to `yes' or `no', depending on whether the linker hardcodes directories specified by `-L' flags into the resulting executable when HARDCODE_LIBDIR_FLAG_SPEC is specified. - Variable: hardcode_shlibpath_var Set to `yes' or `no', depending on whether the linker hardcodes directories by writing the contents of `$shlibpath_var' into the resulting executable when HARDCODE_LIBDIR_FLAG_SPEC is specified. Set to `unsupported' if directories specified by `$shlibpath_var' are searched at run time, but not at link time. - Variable: host - Variable: host_alias For information purposes, set to the specified and canonical names of the system that libtool was configured for. - Variable: include_expsyms List of symbols that must always be exported when using EXPORT_SYMBOLS. - Variable: libext The standard old archive suffix (normally "a"). - Variable: libname_spec The format of a library name prefix. On all Unix systems, static libraries are called `libNAME.a', but on some systems (such as OS/2 or MS-DOS), the library is just called `NAME.a'. - Variable: library_names_spec A list of shared library names. The first is the name of the file, the rest are symbolic links to the file. The name in the list is the file name that the linker finds when given `-lNAME'. - Variable: link_all_deplibs Whether libtool must link a program against all its dependency libraries. Set to `yes' or `no'. Default is `unknown', which is a synonym for `yes'. - Variable: link_static_flag Linker flag (passed through the C compiler) used to prevent dynamic linking. - Variable: need_lib_prefix Whether libtool should automatically prefix module names with 'lib'. Set to `yes' or `no'. By default, it is `unknown', which means the same as `yes', but documents that we are not really sure about it. `yes' means that it is possible both to `dlopen' and to link against a library without 'lib' prefix, i.e. it requires HARDCODE_DIRECT to be `yes'. - Variable: need_version Whether versioning is required for libraries, i.e. whether the dynamic linker requires a version suffix for all libraries. Set to `yes' or `no'. By default, it is `unknown', which means the same as `yes', but documents that we are not really sure about it. - Variable: need_locks Whether files must be locked to prevent conflicts when compiling simultaneously. Set to `yes' or `no'. - Variable: no_builtin_flag Compiler flag to disable builtin functions that conflict with declaring external global symbols as `char'. - Variable: no_undefined_flag The flag that is used by `archive_cmds' in order to declare that there will be no unresolved symbols in the resulting shared library. Empty, if no such flag is required. - Variable: objdir The name of the directory that contains temporary libtool files. - Variable: objext The standard object file suffix (normally "o"). - Variable: pic_flag Any additional compiler flags for building library object files. - Variable: postinstall_cmds - Variable: old_postinstall_cmds Commands run after installing a shared or static library, respectively. - Variable: postuninstall_cmds - Variable: old_postuninstall_cmds Commands run after uninstalling a shared or static library, respectively. - Variable: reload_cmds - Variable: reload_flag Commands to create a reloadable object. - Variable: runpath_var The environment variable that tells the linker which directories to hardcode in the resulting executable. - Variable: shlibpath_overrides_runpath Indicates whether it is possible to override the hard-coded library search path of a program with an environment variable. If this is set to no, libtool may have to create two copies of a program in the build tree, one to be installed and one to be run in the build tree only. When each of these copies is created depends on the value of `fast_install'. The default value is `unknown', which is equivalent to `no'. - Variable: shlibpath_var The environment variable that tells the dynamic linker where to find shared libraries. - Variable: soname_spec The name coded into shared libraries, if different from the real name of the file. - Variable: striplib - Variable: old_striplib Command to strip a shared (`striplib') or static (`old_striplib') library, respectively. If these variables are empty, the strip flag in the install mode will be ignored for libraries (*note Install mode::). - Variable: sys_lib_dlsearch_path_spec Expression to get the run-time system library search path. Directories that appear in this list are never hard-coded into executables. - Variable: sys_lib_search_path_spec Expression to get the compile-time system library search path. This variable is used by libtool when it has to test whether a certain library is shared or static. The directories listed in SHLIBPATH_VAR are automatically appended to this list, every time libtool runs (i.e., not at configuration time), because some linkers use this variable to extend the library search path. Linker switches such as `-L' also augment the search path. - Variable: thread_safe_flag_spec Linker flag (passed through the C compiler) used to generate thread-safe libraries. - Variable: version_type The library version numbering type. One of `libtool', `freebsd-aout', `freebsd-elf', `irix', `linux', `osf', `sunos', `windows', or `none'. - Variable: whole_archive_flag_spec Compiler flag to generate shared objects from convenience archives. - Variable: wl The C compiler flag that allows libtool to pass a flag directly to the linker. Used as: `${wl}SOME-FLAG'. Variables ending in `_cmds' or `_eval' contain a `~'-separated list of commands that are `eval'ed one after another. If any of the commands return a nonzero exit status, libtool generally exits with an error message. Variables ending in `_spec' are `eval'ed before being used by libtool.  File: libtool.info, Node: Cheap tricks, Prev: libtool script contents, Up: Maintaining Cheap tricks ============ Here are a few tricks that you can use in order to make maintainership easier: * When people report bugs, ask them to use the `--config', `--debug', or `--features' flags, if you think they will help you. These flags are there to help you get information directly, rather than having to trust second-hand observation. * Rather than reconfiguring libtool every time I make a change to `ltmain.in', I keep a permanent `libtool' script in my PATH, which sources `ltmain.in' directly. The following steps describe how to create such a script, where `/home/src/libtool' is the directory containing the libtool source tree, `/home/src/libtool/libtool' is a libtool script that has been configured for your platform, and `~/bin' is a directory in your PATH: trick$ cd ~/bin trick$ sed '/^# ltmain\.sh/q' /home/src/libtool/libtool > libtool trick$ echo '. /home/src/libtool/ltmain.in' >> libtool trick$ chmod +x libtool trick$ libtool --version ltmain.sh (GNU @PACKAGE@) @VERSION@@TIMESTAMP@ trick$ The output of the final `libtool --version' command shows that the `ltmain.in' script is being used directly. Now, modify `~/bin/libtool' or `/home/src/libtool/ltmain.in' directly in order to test new changes without having to rerun `configure'. 0707010000966d000081a40000006400000064000000013f1439360000a090000000200000003800000000000000000000001aff27088areloc/info/libtool.info-5This is libtool.info, produced by makeinfo version 4.5 from libtool.texi. INFO-DIR-SECTION GNU programming tools START-INFO-DIR-ENTRY * Libtool: (libtool). Generic shared library support script. END-INFO-DIR-ENTRY INFO-DIR-SECTION Individual utilities START-INFO-DIR-ENTRY * libtoolize: (libtool)Invoking libtoolize. Adding libtool support. END-INFO-DIR-ENTRY This file documents GNU Libtool 1.5 Copyright (C) 1996-2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".  File: libtool.info, Node: GNU Free Documentation License, Next: Index, Prev: Maintaining, Up: Top GNU Free Documentation License ****************************** Version 1.1, March 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. APPLICABILITY AND DEFINITIONS ============================= This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. VERBATIM COPYING ================ You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. COPYING IN QUANTITY =================== If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. MODIFICATIONS ============= You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties-for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. COMBINING DOCUMENTS =================== You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." COLLECTIONS OF DOCUMENTS ======================== You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. AGGREGATION WITH INDEPENDENT WORKS ================================== A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. TRANSLATION =========== Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. TERMINATION =========== You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. FUTURE REVISIONS OF THIS LICENSE ================================ The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: libtool.info, Node: Index, Prev: GNU Free Documentation License, Up: Top Index ***** * Menu: * .la files: Linking libraries. * .libs subdirectory: Linking libraries. * .lo files: Creating object files. * AC_CONFIG_AUX_DIR: Invoking libtoolize. * AC_DISABLE_FAST_INSTALL: AC_PROG_LIBTOOL. * AC_DISABLE_SHARED: AC_PROG_LIBTOOL. * AC_DISABLE_STATIC: AC_PROG_LIBTOOL. * AC_FUNC_ALLOCA: Autoconf .o macros. * AC_LIBTOOL_DLOPEN: AC_PROG_LIBTOOL. * AC_LIBTOOL_WIN32_DLL: AC_PROG_LIBTOOL. * AC_PROG_LIBTOOL: AC_PROG_LIBTOOL. * AC_REPLACE_FUNCS: Autoconf .o macros. * aclocal: AC_PROG_LIBTOOL. * allow_undefined_flag: libtool script contents. * always_export_symbols: libtool script contents. * AM_DISABLE_SHARED: AC_PROG_LIBTOOL. * AM_DISABLE_STATIC: AC_PROG_LIBTOOL. * AM_PROG_LIBTOOL: AC_PROG_LIBTOOL. * application-level dynamic linking <1>: Using libltdl. * application-level dynamic linking: Dlopened modules. * AR: libtool script contents. * ar: Linking libraries. * archive_cmds: libtool script contents. * archive_expsym_cmds: libtool script contents. * AS: AC_PROG_LIBTOOL. * assign.test: Test descriptions. * avoiding shared libraries: Static-only libraries. * bug reports: Reporting bugs. * buggy system linkers: Linking executables. * bugs, subtle ones caused by buggy linkers: Linking executables. * build-relink.test: Test descriptions. * build_libtool_libs: libtool script contents. * build_old_libs: libtool script contents. * C header files, portable: C header files. * C++, pitfalls: C++ libraries. * C++, using: Other languages. * C, not using: Other languages. * CC <1>: libtool script contents. * CC: AC_PROG_LIBTOOL. * cdemo-conf.test: Test descriptions. * cdemo-exec.test: Test descriptions. * cdemo-make.test: Test descriptions. * cdemo-shared.test: Test descriptions. * cdemo-static.test: Test descriptions. * CFLAGS: AC_PROG_LIBTOOL. * clean mode: Clean mode. * command options, libtool: Invoking libtool. * command options, libtoolize: Invoking libtoolize. * compile mode: Compile mode. * compiler_c_o: libtool script contents. * compiler_o_lo: libtool script contents. * compiling object files: Creating object files. * complexity of library systems: Postmortem. * config.guess: Distributing. * config.sub: Distributing. * configuring libtool: Configuring. * convenience libraries: Static libraries. * CPPFLAGS: AC_PROG_LIBTOOL. * debugging libraries: Static-only libraries. * definition of libraries: Libtool paradigm. * demo-conf.test: Test descriptions. * demo-exec.test: Test descriptions. * demo-inst.test: Test descriptions. * demo-make.test: Test descriptions. * demo-nofast.test: Test descriptions. * demo-nopic.test: Test descriptions. * demo-pic.test: Test descriptions. * demo-shared.test: Test descriptions. * demo-static.test: Test descriptions. * demo-unst.test: Test descriptions. * depdemo-conf.test: Test descriptions. * depdemo-exec.test: Test descriptions. * depdemo-inst.test: Test descriptions. * depdemo-make.test: Test descriptions. * depdemo-nofast.test: Test descriptions. * depdemo-shared.test: Test descriptions. * depdemo-static.test: Test descriptions. * depdemo-unst.test: Test descriptions. * dependencies between libraries: Inter-library dependencies. * dependency versioning: Versioning. * deplibs.test: Test descriptions. * deplibs_check_method: Porting inter-library dependencies. * design issues: Issues. * design of library interfaces: Library tips. * design philosophy: Motivation. * developing libraries: Static-only libraries. * dlclose <1>: Using libltdl. * dlclose: Dlopened modules. * dlerror: Using libltdl. * DLLTOOL: AC_PROG_LIBTOOL. * dlopen <1>: Using libltdl. * dlopen: Dlopened modules. * dlopen_self: libtool script contents. * dlopen_self_static: libtool script contents. * dlopen_support: libtool script contents. * dlopening modules <1>: Using libltdl. * dlopening modules: Dlopened modules. * dlopening, pitfalls: Dlopen issues. * dlsym <1>: Using libltdl. * dlsym: Dlopened modules. * double-compilation, avoiding: Static-only libraries. * dryrun.test: Test descriptions. * dynamic dependencies: Versioning. * dynamic linking, applications <1>: Using libltdl. * dynamic linking, applications: Dlopened modules. * dynamic modules, names: Finding the dlname. * echo: libtool script contents. * eliding shared libraries: Static-only libraries. * examples of using libtool: Using libtool. * exclude_expsyms: libtool script contents. * execute mode: Execute mode. * export_dynamic_flag_spec: libtool script contents. * export_symbols_cmds: libtool script contents. * extract_expsyms_cmds: libtool script contents. * failed tests: When tests fail. * fast_install: libtool script contents. * file_magic: Porting inter-library dependencies. * file_magic_cmd: Porting inter-library dependencies. * file_magic_test_file: Porting inter-library dependencies. * finish mode: Finish mode. * finish_cmds: libtool script contents. * finish_eval: libtool script contents. * fix_srcfile_path: libtool script contents. * formal versioning: Libtool versioning. * global functions: Library tips. * global_symbol_pipe: libtool script contents. * global_symbol_to_cdecl: libtool script contents. * hardcode.test: Test descriptions. * hardcode_action: libtool script contents. * hardcode_direct: libtool script contents. * hardcode_into_libs: libtool script contents. * hardcode_libdir_flag_spec: libtool script contents. * hardcode_libdir_separator: libtool script contents. * hardcode_minus_L: libtool script contents. * hardcode_shlibpath_var: libtool script contents. * header files: Library tips. * host: libtool script contents. * host_alias: libtool script contents. * implementation of libtool: libtool script contents. * include files, portable: C header files. * include_expsyms: libtool script contents. * install: Installing libraries. * install mode: Install mode. * installation, finishing: Installing libraries. * inter-library dependencies: Inter-library dependencies. * inter-library dependency: Porting inter-library dependencies. * languages, non-C: Other languages. * LD <1>: libtool script contents. * LD: AC_PROG_LIBTOOL. * LDFLAGS: AC_PROG_LIBTOOL. * libext: libtool script contents. * libltdl: Using libltdl. * libname_spec: libtool script contents. * libraries, definition of: Libtool paradigm. * libraries, finishing installation: Installing libraries. * libraries, stripping: Installing libraries. * library interfaces: Interfaces. * library interfaces, design: Library tips. * library object file: Creating object files. * library_names_spec: libtool script contents. * LIBS: AC_PROG_LIBTOOL. * libtool: Invoking libtool. * libtool command options: Invoking libtool. * libtool examples: Using libtool. * libtool implementation: libtool script contents. * libtool libraries: Linking libraries. * libtool library versions: Libtool versioning. * libtool specifications: Motivation. * libtoolize: Invoking libtoolize. * libtoolize command options: Invoking libtoolize. * link mode: Link mode. * link-2.test: Test descriptions. * link.test: Test descriptions. * link_all_deplibs: libtool script contents. * link_static_flag: libtool script contents. * linking against installed libraries: Linking executables. * linking against uninstalled libraries: Linking executables. * linking with installed libtool libraries: Linking executables. * linking, partial: Link mode. * LN_S: AC_PROG_LIBTOOL. * lt_dladderror: Module loaders for libltdl. * lt_dladdsearchdir: Libltdl interface. * lt_dlcaller_get_data: User defined module data. * lt_dlcaller_id: User defined module data. * lt_dlcaller_register: User defined module data. * lt_dlcaller_set_data: User defined module data. * lt_dlclose: Libltdl interface. * lt_dlerror: Libltdl interface. * lt_dlexit: Libltdl interface. * lt_dlforeach: User defined module data. * lt_dlforeachfile: Libltdl interface. * lt_dlfree: Libltdl interface. * lt_dlgetinfo: User defined module data. * lt_dlgetsearchpath: Libltdl interface. * lt_dlhandle: Libltdl interface. * lt_dlhandle_next: User defined module data. * lt_dlinfo: User defined module data. * lt_dlinit: Libltdl interface. * lt_dlinsertsearchdir: Libltdl interface. * lt_dlisresident: Libltdl interface. * lt_dlloader: Module loaders for libltdl. * lt_dlloader_add: Module loaders for libltdl. * lt_dlloader_data: Module loaders for libltdl. * lt_dlloader_exit: Module loaders for libltdl. * lt_dlloader_find: Module loaders for libltdl. * lt_dlloader_name: Module loaders for libltdl. * lt_dlloader_next: Module loaders for libltdl. * lt_dlloader_remove: Module loaders for libltdl. * lt_dlmakeresident: Libltdl interface. * lt_dlmalloc: Libltdl interface. * lt_dlmutex_geterror: Thread Saftey in libltdl. * lt_dlmutex_lock: Thread Saftey in libltdl. * lt_dlmutex_register: Thread Saftey in libltdl. * lt_dlmutex_seterror: Thread Saftey in libltdl. * lt_dlmutex_unlock: Thread Saftey in libltdl. * lt_dlopen: Libltdl interface. * lt_dlopenext: Libltdl interface. * lt_dlpreload: Libltdl interface. * lt_dlpreload_default: Libltdl interface. * lt_dlseterror: Module loaders for libltdl. * lt_dlsetsearchpath: Libltdl interface. * lt_dlsym: Libltdl interface. * lt_dlsymlist <1>: Libltdl interface. * lt_dlsymlist: Dlpreopening. * lt_find_sym: Module loaders for libltdl. * lt_module: Module loaders for libltdl. * lt_module_close: Module loaders for libltdl. * lt_module_open: Module loaders for libltdl. * lt_preloaded_symbols: Dlpreopening. * lt_ptr: Libltdl interface. * lt_user_data: Module loaders for libltdl. * lt_user_dlloader: Module loaders for libltdl. * LTALLOCA: Autoconf .o macros. * LTDL_SET_PRELOADED_SYMBOLS: Libltdl interface. * LTLIBOBJS: Autoconf .o macros. * LTLIBRARIES: Using Automake. * ltmain.sh: Distributing. * Makefile: Makefile rules. * Makefile.am: Makefile rules. * Makefile.in: Makefile rules. * mdemo-conf.test: Test descriptions. * mdemo-exec.test: Test descriptions. * mdemo-inst.test: Test descriptions. * mdemo-make.test: Test descriptions. * mdemo-shared.test: Test descriptions. * mdemo-static.test: Test descriptions. * mdemo-unst.test: Test descriptions. * mode, clean: Clean mode. * mode, compile: Compile mode. * mode, execute: Execute mode. * mode, finish: Finish mode. * mode, install: Install mode. * mode, link: Link mode. * mode, uninstall: Uninstall mode. * modules, dynamic <1>: Using libltdl. * modules, dynamic: Dlopened modules. * motivation for writing libtool: Motivation. * names of dynamic modules: Finding the dlname. * need_lib_prefix: libtool script contents. * need_locks: libtool script contents. * need_version: libtool script contents. * NM <1>: libtool script contents. * NM: AC_PROG_LIBTOOL. * no_builtin_flag: libtool script contents. * no_undefined_flag: libtool script contents. * noinst-link.test: Test descriptions. * nomode.test: Test descriptions. * none: Porting inter-library dependencies. * objdir: libtool script contents. * OBJDUMP: AC_PROG_LIBTOOL. * object files, compiling: Creating object files. * object files, library: Creating object files. * objext: libtool script contents. * old_archive_cmds: libtool script contents. * old_archive_from_expsyms_cmds: libtool script contents. * old_archive_from_new_cmds: libtool script contents. * old_postinstall_cmds: libtool script contents. * old_postuninstall_cmds: libtool script contents. * old_striplib: libtool script contents. * opaque data types: Library tips. * options, libtool command: Invoking libtool. * options, libtoolize command: Invoking libtoolize. * other implementations, flaws in: Postmortem. * partial linking: Link mode. * pass_all: Porting inter-library dependencies. * PIC (position-independent code): Creating object files. * pic_flag: libtool script contents. * pitfalls using C++: C++ libraries. * pitfalls with dlopen: Dlopen issues. * portable C headers: C header files. * position-independent code: Creating object files. * postinstall_cmds: libtool script contents. * postinstallation: Installing libraries. * postuninstall_cmds: libtool script contents. * problem reports: Reporting bugs. * problems, blaming somebody else for: Troubleshooting. * problems, solving: Troubleshooting. * program wrapper scripts: Linking executables. * quote.test: Test descriptions. * RANLIB <1>: libtool script contents. * RANLIB: AC_PROG_LIBTOOL. * ranlib: Linking libraries. * reload_cmds: libtool script contents. * reload_flag: libtool script contents. * renaming interface functions: Library tips. * reporting bugs: Reporting bugs. * reusability of library systems: Postmortem. * runpath_var: libtool script contents. * saving time: Static-only libraries. * security problems with buggy linkers: Linking executables. * sh.test: Test descriptions. * shared libraries, not using: Static-only libraries. * shared library versions: Versioning. * shl_load <1>: Using libltdl. * shl_load: Dlopened modules. * shlibpath_overrides_runpath: libtool script contents. * shlibpath_var: libtool script contents. * solving problems: Troubleshooting. * soname_spec: libtool script contents. * specifications for libtool: Motivation. * standalone binaries: Static libraries. * static linking: Static libraries. * strip: Installing libraries. * striplib: libtool script contents. * stripping libraries: Installing libraries. * su: Installing libraries. * suffix.test: Test descriptions. * sys_lib_dlsearch_path_spec: libtool script contents. * sys_lib_search_path_spec: libtool script contents. * test suite: Libtool test suite. * test_compile: Porting inter-library dependencies. * tests, failed: When tests fail. * thread_safe_flag_spec: libtool script contents. * time, saving: Static-only libraries. * tricky design issues: Issues. * trouble with C++: C++ libraries. * trouble with dlopen: Dlopen issues. * troubleshooting: Troubleshooting. * undefined symbols, allowing: Link mode. * uninstall mode: Uninstall mode. * unknown: Porting inter-library dependencies. * unresolved symbols, allowing: Link mode. * using shared libraries, not: Static-only libraries. * version_type: libtool script contents. * versioning, formal: Libtool versioning. * whole_archive_flag_spec: libtool script contents. * wl: libtool script contents. * wrapper scripts for programs: Linking executables. 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!