📄 ltmain.sh
字号:
# 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, 2004# Free Software Foundation, Inc.# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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.basename="s,^.*/,,g"# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh# is ksh but when the shell is invoked as "sh" and the current value of# the _XPG environment variable is not equal to 1 (one), the special# positional parameter $0, within a function call, is the name of the# function.progpath="$0"# The name of this program:progname=`echo "$progpath" | $SED "$basename"`modename="$progname"# Global variables:EXIT_SUCCESS=0EXIT_FAILURE=1EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.PROGRAM=ltmain.shPACKAGE=libtoolVERSION=1.5aTIMESTAMP=" 1.1467 2004/04/01 04:43:56"# Check that we have a working $echo.if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shiftelif 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 "$progpath" --no-reexec ${1+"$@"}fiif test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<EOF$*EOF exit $EXIT_SUCCESSfidefault_mode=help="Try \`$progname --help' for more information."magic="%%%MAGIC variable%%%"mkdir="mkdir"mv="mv -f"rm="rm -f"# Ensure that we are using m4 macros, and libtool script from the same# release of libtool.package_revision=`( set $TIMESTAMP; echo $1; )`if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF$progname: Version mismatch error. This is $PACKAGE $VERSION, but the$progname: definition of this AC_PROG_LIBTOOL comes from an older release.$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION$progname: and run autoconf again._LT_EOF else cat >&2 <<_LT_EOF$progname: Version mismatch error. This is $PACKAGE $VERSION, but the$progname: definition of this AC_PROG_LIBTOOL comes from $PACKAGE $macro_version.$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION$progname: and run autoconf again._LT_EOF fi else cat >&2 <<_LT_EOF$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,$progname: but the definition used by this AC_PROG_LIBTOOL comes from revision$progname: $macro_revision.$progname: You should recreate aclocal.m4 with macros from revision $package_revision$progname: of $PACKAGE $VERSION and run autoconf again._LT_EOF fi exit $EXIT_MISMATCHfi# Sed substitution that helps us do robust quoting. It backslashifies# metacharacters that are still active within double-quoted strings.Xsed="${SED}"' -e 1s/^X//'sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'# test EBCDIC or ASCIIcase `echo A|tr A '\301'` in A) # EBCDIC based system SP2NL="tr '\100' '\n'" NL2SP="tr '\r\n' '\100\100'" ;; *) # Assume ASCII based system SP2NL="tr '\040' '\012'" NL2SP="tr '\015\012' '\040\040'" ;;esac# NLS nuisances.# Only set LANG and LC_ALL to C if already set.# These must not be set unconditionally because not all systems understand# e.g. LANG=C (notably SCO).# We save the old values to restore during execute mode.if test "${LC_ALL+set}" = set; then save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALLfiif test "${LANG+set}" = set; then save_LANG="$LANG"; LANG=C; export LANGfi# Make sure IFS has a sensible default: ${IFS=" "}if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then $echo "$modename: not configured to build any kind of library" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILUREfi# Global variables.mode=$default_modenonopt=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# func_win32_libid arg# return the library type of file 'arg'## Need a lot of goo to handle *both* DLLs and import libs# Has to be a shell function in order to 'eat' the argument# that is supplied when $file_magic_command is called.func_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 | $EGREP '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}# func_infer_tag arg# Infer tagged configuration to use if any are available and# if one wasn't chosen via the "--tag" command line option.# Only attempt this if the compiler in the base compile# command doesn't match the default compiler.# arg is usually of the form 'gcc ...'func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $EXIT_FAILURE# else# $echo "$modename: using $tagname tagged configuration" fi ;; esac fi}# End of Shell function definitions###################################### Shorthand for --mode=foocase $1 inclean|clea|cle|cl) shift; set -- --mode=clean ${1+"$@"} ;;compile|compil|compi|comp|com|co|c) shift; set -- --mode=compile ${1+"$@"} ;;execute|execut|execu|exec|exe|ex|e) shift; set -- --mode=execute ${1+"$@"} ;;finish|finis|fini|fin|fi|f) shift; set -- --mode=finish ${1+"$@"} ;;install|instal|insta|inst|ins|in|i) shift; set -- --mode=install ${1+"$@"} ;;link|lin|li|l) shift; set -- --mode=link ${1+"$@"} ;;uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set -- --mode=uninstall ${1+"$@"} ;;esac# Darwin suckseval std_shrext=\"$shrext_cmds\"# Parse our command line options once, thoroughly.while test "$#" -gt 0do 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" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; 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$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" 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$TIMESTAMP) $VERSION" $echo $echo "Copyright (C) 2004 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 $EXIT_SUCCESS ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # 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" < "$progpath" done exit $EXIT_SUCCESS ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --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 $EXIT_SUCCESS ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esacdoneif test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILUREfi# 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 if test -z "$mode"; then $echo "$modename: error: you must specify a MODE." 1>&2 exit $EXIT_FAILURE 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 $EXIT_FAILURE 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_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case "$arg_mode" in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -