# ltmain.sh - Provide generalized library-building support services. # @configure_input@ # Copyright (C) 1996, 1997 Free Software Foundation, Inc. # 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=ltmain.sh PACKAGE=@PACKAGE@ VERSION=@VERSION@ default_mode= help="Try \`$progname --help' for more information." magic="%%%MAGIC variable%%%" mkdir="mkdir" mv="mv -f" objdir=.libs rm="rm -f" if test "$LTCONFIG_VERSION" != "$VERSION"; then echo "$progname: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi # if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then echo "$progname: not configured to build any kind of library" 1>&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= # Parse our command line options once, thoroughly. while test $# -gt 0 do arg="$1" shift case "$arg" in -*=*) optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then eval "$prev=\$arg" 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" exit 0 ;; --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" ;; -*) echo "$progname: unrecognized option \`$arg'" 1>&2 echo "$help" 1>&2 exit 1 ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then echo "$progname: option \`$prevopt' requires an argument" 1>&2 echo "$help" 1>&2 exit 1 fi if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then case "$nonopt" in *cc) mode=link for arg do case "$arg" in -c) mode=compile break ;; esac done ;; *install*|cp) mode=install ;; *rm) mode=uninstall ;; *.la) mode=dlname ;; *) # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then echo "$progname: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else echo "$progname: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --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) progname="$progname: compile" # Get the compilation command and the source file. base_compile="$nonopt" lastarg= srcfile= for arg do # Quote any args containing shell metacharacters. case "$arg" in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*|*\"*) quote_arg="'$arg'" ;; *) quote_arg="$arg" ;; esac base_compile="$base_compile$lastarg" srcfile="$quote_arg" lastarg=" $srcfile" done # Get the name of the library object. libobj=`echo "$srcfile" | sed -e 's%^.*/%%'` # Recognize several different file suffixes. xform='[cCFSf]' case "$libobj" in *.c++) xform='c++' ;; *.cc) xform=cc ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform='for' ;; esac libobj=`echo "$libobj" | sed -e "s/\.$xform$/.lo/"` case "$libobj" in *.lo) obj=`echo "$libobj" | sed -e 's/\.lo$/.o/'` ;; *) echo "$progname: cannot determine name of library object from \`$srcfile'" 1>&2 exit 1 ;; esac if test -z "$base_compile"; then echo "$progname: 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 $run $rm $obj $libobj trap "$run $rm $obj $libobj; exit 1" 1 2 15 else $run $rm $libobj trap "$run $rm $libobj; exit 1" 1 2 15 fi # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # All platforms use -DPIC, to notify preprocessed assembler code. $show "$base_compile$pic_flag -DPIC $srcfile" if $run eval "$base_compile$pic_flag -DPIC $srcfile"; then : else test -n "$obj" && $run $rm $obj exit 1 fi # If we have no pic_flag, then copy the object into place and finish. if test -z "$pic_flag"; then $show "$LN_S $obj $libobj" $run $LN_S $obj $libobj exit $? fi # Just move the object, then go on to compile the next one $show "$mv $obj $libobj" $run $mv $obj $libobj || exit 1 fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then $show "$base_compile $srcfile" if $run eval "$base_compile $srcfile"; then : else $run $rm $obj $libobj exit 1 fi fi # Create an invalid libtool object if no PIC, so that we don't accidentally # link it into a program. if test "$build_libtool_libs" != yes; then $show "echo timestamp > $libobj" $run eval "echo timestamp > $libobj" || exit $? fi exit 0 ;; # libtool link mode link) progname="$progname: link" # Go through the arguments, transforming them on the way. cc="$nonopt" args="$cc" allow_undefined=no compile_command="$cc" finalize_command="$cc" compile_shlibpath= finalize_shlibpath= deplibs= export_dynamic=no hardcode_libdirs= install_libdir= libobjs= link_against_libtool_libs= link_static= ltlibs= objs= prev= prevarg= perm_rpath= temp_rpath= vinfo= # We need to know -static, to get the right output filenames. for arg do case "$arg" in -static) build_libtool_libs=no build_old_libs=yes break ;; esac done for arg do # 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@" args="$args $arg" ;; esac eval "$prev=\$arg" prev= continue fi args="$args $arg" prevarg="$arg" case "$arg" in -allow-undefined) allow_undefined=yes ;; -export-dynamic) export_dynamic=yes compile_command="$compile_command $export_dynamic_flag" finalize_command="$finalize_command $export_dynamic_flag" continue ;; -L*) dir=`echo "$arg" | sed 's%^-L\(.*\)$%\1%'` case "$dir" in /*) ;; *) echo "$progname: \`-L$dir' cannot specify a relative directory" 1>&2 exit 1 ;; esac deplibs="$deplibs $arg" ;; -l*) deplibs="$deplibs $arg" ;; -o) prev=output ;; -rpath) prev=install_libdir continue ;; -static) link_static="`eval echo \"$link_static_flag\"`" compile_command="$compile_command $link_static" continue ;; -version-file) echo "$progname: \`-version-file' has been replaced by \`-version-info'" 1>&2 echo "$help" 1>&2 exit 1 ;; -version-info) prev=vinfo continue ;; -*) cc="$cc $arg" ;; # Some other compiler flag. *.o) # A standard object. objs="$objs $arg" ;; *.a) # Find the relevant object directory and library name. file=`echo "$arg" | sed 's%^.*/%%'` dir=`echo "$arg" | sed 's%/[^/]*$%/%'` test "$dir" = "$arg" && dir= # Standard archive. objs="$objs $arg" ;; *.lo) # A library object. libobjs="$libobjs $arg" ;; *.la) # A libtool-controlled library. libdir= library_names= old_library= # Check to see that this really is a libtool archive. if egrep "^# Generated by $PROGRAM" $arg >/dev/null 2>&1; then : else echo "$progname: \`$arg' is not a valid libtool archive" 1>&2 exit 1 fi # If there is no directory component, then add one. case "$arg" in */*) . $arg ;; *) . ./$arg ;; esac if test -z "$libdir"; then echo "$progname: \`$arg' contains no -rpath information" 1>&2 exit 1 fi # 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 "$progname: cannot find name of link library for \`$arg'" 1>&2 exit 1 fi # Find the relevant object directory and library name. name=`echo "$arg" | sed 's%^.*/%%; s/\.la$//; s/^lib//'` dir=`echo "$arg" | sed 's%/[^/]*$%%'` if test "$dir" = "$arg"; then dir="$objdir" else dir="$dir/$objdir" fi if test "$build_libtool_libs" = yes && test -n "$library_names"; then link_against_libtool_libs="$link_against_libtool_libs $arg" if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in "* $dir *") ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then # Put the magic libdir with the hardcode flag. hardcode_libdirs="$libdir" libdir="@HARDCODE_LIBDIRS@" else # Just accumulate the libdirs. hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" libdir= fi fi if test -n "$libdir"; then hardcode_libdir_flag=`eval echo \"$hardcode_libdir_flag_spec\"` compile_command="$compile_command $hardcode_libdir_flag" finalize_command="$finalize_command $hardcode_libdir_flag" fi elif test "$hardcode_runpath_var" = yes; then # Do the same for the permanent run path. case "$perm_rpath " in "* $libdir *") ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case "$hardcode_action" in immediate) if test "$hardcode_direct" = no; then compile_command="$compile_command $dir/$linklib" elif test "$hardcode_minus_L" = no; then compile_command="$compile_command -L$dir -l$name" elif test "$hardcode_shlibpath_var" = no; then compile_shlibpath="$compile_shlibpath$dir:" compile_command="$compile_command -l$name" fi ;; relink) # We need an absolute path. case "$dir" in /*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then echo "$progname: cannot determine absolute directory name of \`$dir'" 1>&2 exit 1 fi dir="$absdir" ;; esac if test "$hardcode_direct" = yes; then compile_command="$compile_command $dir/$linklib" elif test "$hardcode_minus_L" = yes; then compile_command="$compile_command -L$dir -l$name" elif test "$hardcode_shlibpath_var" = yes; then compile_shlibpath="$compile_shlibpath$dir:" compile_command="$compile_command -l$name" fi ;; *) echo "$progname: \`$hardcode_action' is an unknown hardcode action" 1>&2 exit 1 ;; esac # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then finalize_command="$finalize_command $libdir/$linklib" elif test "$hardcode_minus_L" = yes; then finalize_command="$finalize_command -L$libdir -l$name" elif test "$hardcode_shlibpath_var" = yes; then finalize_shlibpath="$finalize_shlibpath$libdir:" finalize_command="$finalize_command -l$name" else # We can't seem to hardcode it, guess we'll fake it. finalize_command="$finalize_command -L$libdir -l$name" fi else # Transform directly to old archives if we don't build new libraries. if test -n "$pic_flag" && test -z "$old_library"; then echo "$progname: cannot find static library for \`$arg'" 1>&2 exit 1 fi test -n "$old_library" && linklib="$old_library" compile_command="$compile_command $dir/$linklib" finalize_command="$finalize_command $dir/$linklib" fi continue ;; *) echo "$progname: unknown file suffix for \`$arg'" 1>&2 echo "$help" 1>&2 exit 1 ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" done if test -n "$prev"; then echo "$progname: the \`$prevarg' option requires an argument" 1>&2 echo "$help" 1>&2 exit 1 fi # Substitute the hardcoded libdirs into the compile commands. if test "$hardcode_libdir_colon_separated" = yes; then compile_command=`echo "$compile_command" | sed "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` finalize_command=`echo "$finalize_command" | sed "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` fi oldlib= oldobjs= case "$output" in "") echo "$progname: you must specify an output file" 1>&2 echo "$help" 1>&2 exit 1 ;; */*) echo "$progname: output file \`$output' must have no directory components" 1>&2 exit 1 ;; *.la) libname=`echo "$output" | sed 's/\.la$//'` # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= current=0 revision=0 age=0 if test -n "$objs"; then echo "$progname: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 exit 1 fi # How the heck are we supposed to write a wrapper for a shared library? if test -n "$link_against_libtool_libs"; then echo "$progname: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2 exit 1 fi if test -z "$install_libdir"; then echo "$progname: you must specify an installation directory with \`-rpath'" 1>&2 exit 1 fi # Parse the version information argument. IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' set dummy $vinfo IFS="$save_ifs" if test -n "$5"; then echo "$progname: too many parameters to \`-version-info'" 1>&2 echo "$help" 1>&2 exit 1 fi test -n "$2" && current="$2" test -n "$3" && revision="$3" test -n "$4" && age="$4" # Check that each of the things are valid numbers. case "$current" in 0 | [1-9] | [1-9][0-9]*) ;; *) echo "$progname: CURRENT \`$current' is not a nonnegative integer" 1>&2 echo "$progname: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case "$revision" in 0 | [1-9] | [1-9][0-9]*) ;; *) echo "$progname: REVISION \`$revision' is not a nonnegative integer" 1>&2 echo "$progname: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case "$age" in 0 | [1-9] | [1-9][0-9]*) ;; *) echo "$progname: AGE \`$age' is not a nonnegative integer" 1>&2 echo "$progname: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac if test $age -gt $current; then echo "$progname: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 echo "$progname: \`$vinfo' is not valid version information" 1>&2 exit 1 fi # Calculate the version variables. version_vars="version_type current age revision" case "$version_type" in none) ;; linux) version_vars="$version_vars major versuffix" major=`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) version_vars="$version_vars versuffix verstring" major=`expr $current - $age` versuffix="$current.$age.$revision" verstring="$versuffix" # Add in all the interfaces that we are compatible with. loop=$age while test $loop != 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) version_vars="$version_vars major versuffix" major="$current" versuffix="$current.$revision" ;; *) echo "$progname: unknown library version type \`$version_type'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 ;; esac # Create the output directory, or remove our outputs if we need to. if test -d $objdir; then $show "$rm $objdir/$libname.*" $run $rm $objdir/$libname.* else $show "$mkdir $objdir" $run $mkdir $objdir || exit $? 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 "$progname: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no fi else # Clear the flag. allow_undefined_flag= fi if test "$build_libtool_libs" = yes; then # Get the real and link names of the library. library_names=`eval echo \"$library_names_spec\"` set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then soname=`eval echo \"$soname_spec\"` else soname="$realname" fi lib="$objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are PIC. test -z "$pic_flag" && libobjs=`echo "$libobjs " | sed 's/\.lo /.o /g; s/ $//g'` # Do each of the archive commands. cmds=`eval echo \"$archive_cmds\"` IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Create links to the real library. for link in $linknames; do $show "(cd $objdir && $LN_S $realname $link)" $run eval "(cd $objdir && $LN_S $realname $link)" || exit $? done # If -export-dynamic was specified, set the dlname. if test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; *.lo | *.o) if test -n "$link_against_libtool_libs"; then echo "$progname: error: cannot link libtool libraries into reloadable objects" 1>&2 exit 1 fi if test -n "$deplibs"; then echo "$progname: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2 fi if test -n "$install_libdir"; then echo "$progname: warning: \`-rpath' is ignored while creating objects" 1>&2 fi if test -n "$vinfo"; then echo "$progname: warning: \`-version-info' is ignored while creating objects" 1>&2 fi case "$output" in *.lo) if test -n "$objs"; then echo "$progname: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi libobj="$output" obj=`echo "$output" | sed 's/\.lo$/.o/'` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Create the old-style object. reload_objs="$objs"`echo "$libobjs " | sed 's/[^ ]*\.a //g; s/\.lo /.o /g; s/ $//g'` output="$obj" cmds=`eval echo \"$reload_cmds\"` IFS="${IFS= }"; 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. test -z "$libobj" && exit 0 if test "$build_libtool_libs" != yes; then # 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"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs" output="$libobj" cmds=`eval echo \"$reload_cmds\"` IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" else # Just create a symlink. $show "$LN_S $obj $libobj" $run $LN_S $obj $libobj || exit 1 fi exit 0 ;; *) if test -n "$install_libdir"; then echo "$progname: warning: \`-rpath' is ignored while linking programs" 1>&2 fi if test -n "$vinfo"; then echo "$progname: warning: \`-version-info' is ignored while linking programs" 1>&2 fi if test -n "$libobjs"; then # Transform all the library objects into standard objects. compile_command=`echo "$compile_command " | sed 's/\.lo /.o /g; s/ $//'` finalize_command=`echo "$finalize_command " | sed 's/\.lo /.o /g; s/ $//'` fi if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$output"'%g'` finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$output"'%g'` # We have no uninstalled library dependencies, so finalize right now. $show "$compile_command" $run $compile_command status=$? # If we failed to link statically, then try again. if test $status -ne 0 && test -n "$link_static"; then echo "$progname: cannot link \`$output' statically; retrying semi-dynamically" 1>&2 compile_command=`echo "$compile_command " | sed "s% $link_static % %;s/ $//"` $show "$finalize_command" $run $finalize_command status=$? fi exit $status fi # Replace the output file specification. compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$objdir/$output"'%g'` finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$objdir/$output"'T%g'` # Create the binary in the object directory, then wrap it. if test -d $objdir; then : else $show "$mkdir $objdir" $run $mkdir $objdir || exit $? fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case "$dir" in /*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi # Delete the old output file. $run $rm $output if test -n "$compile_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command" finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command" fi case "$hardcode_action" in relink) # AGH! Flame the AIX and HP-UX people for me, will ya? echo "$progname: warning: using a buggy system linker" 1>&2 echo "$progname: relinking will be required before \`$output' can be installed" 1>&2 ;; esac $show "$compile_command" $run eval "$compile_command" || exit $? # Now create the wrapper script. echo "creating $output" # Only actually do things if our run command is non-null. if test -z "$run"; then $rm $output trap "$rm $output; exit 1" 1 2 15 cat > $output <> $output <> $output <&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 EOF chmod +x $output fi exit 0 ;; esac # See if we need to build an old-fashioned archive. if test "$build_old_libs" = "yes"; then # Now set the variables for building old libraries. oldlib="$objdir/$libname.a" # Transform .lo files to .o files. oldobjs="$objs"`echo "$libobjs " | sed 's/[^ ]*\.a //g; s/\.lo /.o /g; s/ $//g'` if test -d "$objdir"; then $show "$rm $oldlib" $run $rm $oldlib else $show "$mkdir $objdir" $run $mkdir $objdir fi # Do each command in the archive commands. cmds=`eval echo \"$old_archive_cmds\"` IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Now create the libtool archive. case "$output" in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.a" echo "creating $output" # Only create the output if not a dry run. if test -z "$run"; then cat > $output <&2 echo "$help" 1>&2 exit 1 fi if test -n "$prev"; then echo "$progname: 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 "$progname: no file or destination specified" 1>&2 else echo "$progname: you must specify a destination" 1>&2 fi echo "$help" 1>&2 exit 1 fi # Strip any trailing slash from the destination. dest=`echo "$dest" | sed 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test -n "$isdir"; then destdir="$dest" destname= else destdir=`echo "$dest" | sed 's%/[^/]*$%%'` test "$destdir" = "$dest" && destdir=. destname=`echo "$dest" | sed 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test $# -gt 2; then echo "$progname: \`$dest' is not a directory" 1>&2 echo "$help" 1>&2 exit 1 fi fi case "$destdir" in /*) ;; *) for file in $files; do case "$file" in *.lo) ;; *) echo "$progname: \`$destdir' must be an absolute directory name" 1>&2 echo "$help" 1>&2 exit 1 ;; esac done ;; esac staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case "$file" in *.a) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then : else echo "$progname: \`$file' is not a valid libtool archive" 1>&2 echo "$help" 1>&2 exit 1 fi library_names= old_library= # 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 "$destdir" = "$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 "$file" | sed 's%/[^/]*$%%'`/" test "$dir" = "$file/" && dir= dir="$dir$objdir" # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift # Install the shared library and build the symlinks. $show "$install_prog $dir/$realname $destdir/$realname" $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? test "X$dlname" = "X$realname" && dlname= # Support stripping libraries. if test -n "$stripme"; then if test -n "$striplib"; then $show "$striplib $destdir/$realname" $run $striplib $destdir/$realname || exit $? else echo "$progname: warning: no library stripping program" 1>&2 fi fi if test $# -gt 0; then # Delete the old symlinks. rmcmd="$rm" for linkname do rmcmd="$rmcmd $destdir/$linkname" done $show "$rmcmd" $run $rmcmd # ... and create new ones. for linkname do test "X$dlname" = "X$linkname" && dlname= $show "(cd $destdir && $LN_S $realname $linkname)" $run eval "(cd $destdir && $LN_S $realname $linkname)" done fi if test -n "$dlname"; then # Install the dynamically-loadable library. $show "$install_prog $dir/$dlname $destdir/$dlname" $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=`eval echo \"$postinstall_cmds\"` IFS="${IFS= }"; 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 "$file" | sed 's%^.*/%%'` $show "$install_prog $file $destdir/$name" $run $install_prog $file $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 "$file" | sed 's%^.*/%%;'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case "$destfile" in *.lo) staticdest=`echo "$destfile" | sed 's/\.lo$/\.o/;'` ;; *.o) staticdest="$destfile" destfile= ;; *) echo "$progname: 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 $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 "$file" | sed 's/\.lo$/\.o/;'` $show "$install_prog $staticobj $staticdest" $run $install_prog $staticobj $staticdest || exit $? fi exit 0 ;; *) # Do a test to see if this is really a libtool program. if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" link_against_libtool_libs= finalize_command= # If there is no directory component, then add one. case "$file" in */*) . $file ;; *) . ./$file ;; esac # Check the variables that should have been set. if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then echo "$progname: invalid libtool wrapper script \`$file'" 1>&2 exit 1 fi finalize=yes for lib in $link_against_libtool_libs; 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 "$lib" | sed 's%^.*/%%g'`" if test -z "$libdir"; then echo "$progname: warning: \`$lib' contains no -rpath information" 1>&2 elif test -f "$libfile"; then : else echo "$progname: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done if test "$hardcode_action" = relink; then if test "$finalize" = yes; then echo "$progname: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 $show "$finalize_command" if $run $finalize_command; then : else echo "$progname: error: relink \`$file' with the above command before installing it" 1>&2 continue fi file="$objdir/$file"T else echo "$progname: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 fi else # Install the binary that we compiled earlier. dir=`echo "$file" | sed 's%/[^/]*$%%'` if test "$file" = "$dir"; then file="$objdir/$file" else file="$dir/$objdir/`echo "$file" | sed 's%^.*/%%'`" fi fi fi $show "$install_prog$stripme $file $dest" $run $install_prog$stripme $file $dest || exit $? ;; esac done for file in $staticlibs; do name=`echo "$file" | sed 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run $install_prog $file $oldlib || exit $? # Support stripping libraries. if test -n "$stripme"; then if test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run $old_striplib $oldlib || exit $? else echo "$progname: warning: no static library stripping program" 1>&2 fi fi # Do each command in the postinstall commands. cmds=`eval echo \"$old_postinstall_cmds\"` IFS="${IFS= }"; 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 "$progname: 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 $0 --finish$current_libdirs exit 1 fi exit 0 ;; # libtool dlname mode dlname) progname="$progname: dlname" ltlibs="$nonopt" for lib do ltlibs="$ltlibs $lib" done if test -z "$ltlibs"; then echo "$progname: you must specify at least one LTLIBRARY" 1>&2 echo "$help" 1>&2 exit 1 fi # Now check to make sure each one is a valid libtool library. status=0 for lib in $ltlibs; do dlname= libdir= library_names= # Check to see that this really is a libtool archive. if egrep "^# Generated by $PROGRAM" $arg >/dev/null 2>&1; then : else echo "$progname: \`$arg' is not a valid libtool archive" 1>&2 status=1 continue fi # If there is no directory component, then add one. case "$arg" in */*) . $arg ;; *) . ./$arg ;; esac if test -z "$libdir"; then echo "$progname: \`$arg' contains no -rpath information" 1>&2 status=1 elif test -n "$dlname"; then echo "$libdir/$dlname" elif test -z "$library_names"; then echo "$progname: \`$arg' is not a shared library" 1>&2 status=1 else echo "$progname: \`$arg' was not linked with \`-export-dynamic'" 1>&2 status=1 fi done exit $status ;; # libtool finish mode finish) progname="$progname: finish" libdirs="$nonopt" if test -n "$finish_cmds" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do # Do each command in the postinstall commands. cmds=`eval echo \"$finish_cmds\"` IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" done IFS="$save_ifs" done fi echo "To link against installed libraries in LIBDIR, users may have to:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to their \`$shlibpath_var' environment variable" fi echo " - use the \`-LLIBDIR' linker flag" exit 0 ;; # libtool uninstall mode uninstall) progname="$progname: uninstall" rm="$nonopt" files= for arg do case "$arg" in -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then echo "$progname: you must specify an RM program" 1>&2 echo "$help" 1>&2 exit 1 fi for file in $files; do dir=`echo "$file" | sed -e 's%/[^/]*$%%'` test "$dir" = "$file" && dir=. name=`echo "$file" | sed -e 's%^.*/%%'` rmfiles="$file" case "$name" in *.la) # Possibly a libtool archive, so verify it. if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $dir/$n" test "X$n" = "X$dlname" && dlname= done test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" # FIXME: should reinstall the best remaining shared library. fi ;; *.lo) if test "$build_old_libs" = yes; then oldobj=`echo "$name" | sed 's/\.lo$/\.o/'` rmfiles="$rmfiles $dir/$oldobj" fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles done exit 0 ;; NONE) echo "$progname: you must specify a MODE" 1>&2 echo "$generic_help" 1>&2 exit 1 ;; esac echo "$progname: invalid operation mode \`$mode'" 1>&2 echo "$generic_help" 1>&2 exit 1 fi # test -z "$show_help" # We need to display help for each of the modes. case "$mode" in NONE) cat <&2 echo "$help" 1>&2 exit 1 ;; esac case "$mode" in archive|compile) echo echo "Try \`$progname --help' for more information about other modes." ;; esac exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: