diff options
author | jbj <devnull@localhost> | 2001-06-08 20:45:59 +0000 |
---|---|---|
committer | jbj <devnull@localhost> | 2001-06-08 20:45:59 +0000 |
commit | 03f527390168680d98f13ada0dbf6be4cd17dc9c (patch) | |
tree | 775e83d8fc7532376766381fb94496b3dec6f31d | |
parent | 7bf9296288c38f3bf82ec38481738101bf063981 (diff) | |
download | rpm-03f527390168680d98f13ada0dbf6be4cd17dc9c.tar.gz rpm-03f527390168680d98f13ada0dbf6be4cd17dc9c.tar.bz2 rpm-03f527390168680d98f13ada0dbf6be4cd17dc9c.zip |
- fix: QUERY_FOR_LIST file count clobbered.
- create top level rpmcli API, factor top level modes into popt tables.
- popt: add POPT_BIT_SET/POPT_BIT_CLR to API.
- autogen.sh checks for latest libtool-1.4 and automake-1.4-p2.
- rpm --verify reports failure(s) if corresponding tag is not in header.
- rpm --verify honors %config(missingok), add -v for legacy behavior.
CVS patchset: 4852
CVS date: 2001/06/08 20:45:59
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | Doxyfile.in | 4 | ||||
-rw-r--r-- | aclocal.m4 | 3122 | ||||
-rwxr-xr-x | autogen.sh | 9 | ||||
-rw-r--r-- | build.c | 1 | ||||
-rw-r--r-- | lib/Makefile.am | 9 | ||||
-rw-r--r-- | lib/poptBT.c | 1 | ||||
-rw-r--r-- | lib/poptI.c | 197 | ||||
-rw-r--r-- | lib/poptK.c | 71 | ||||
-rw-r--r-- | lib/poptQV.c | 36 | ||||
-rw-r--r-- | lib/query.c | 25 | ||||
-rw-r--r-- | lib/rpmchecksig.c | 2 | ||||
-rw-r--r-- | lib/rpmcli.h | 200 | ||||
-rw-r--r-- | lib/rpminstall.c | 2 | ||||
-rw-r--r-- | lib/rpmlib.h | 135 | ||||
-rw-r--r-- | lib/verify.c | 60 | ||||
-rw-r--r-- | perl/Makefile.in | 6 | ||||
-rw-r--r-- | po/POTFILES.in | 3 | ||||
-rw-r--r-- | python/Makefile.in | 15 | ||||
-rwxr-xr-x | rpm.c | 23 | ||||
-rw-r--r-- | rpm.spec.in | 107 | ||||
-rw-r--r-- | rpmdb/Makefile.am | 3 | ||||
-rw-r--r-- | rpmdb/db3.c | 8 | ||||
-rw-r--r-- | rpmdb/dbconfig.c | 87 | ||||
-rw-r--r-- | rpmdb/poptDB.c | 36 | ||||
-rw-r--r-- | rpmdb/rpmdb.h | 5 | ||||
-rw-r--r-- | rpmio/tdigest.c | 8 | ||||
-rwxr-xr-x | rpmqv.c | 330 |
28 files changed, 3988 insertions, 523 deletions
@@ -81,6 +81,12 @@ - permit duplicates for btree indices. - document build modes in rpmbuild.8, rpmbuild is born. - default to dbenv with mpool, --rebuilddb with nofsync is much faster. + - fix: QUERY_FOR_LIST file count clobbered. + - create top level rpmcli API, factor top level modes into popt tables. + - popt: add POPT_BIT_SET/POPT_BIT_CLR to API. + - autogen.sh checks for latest libtool-1.4 and automake-1.4-p2. + - rpm --verify reports failure(s) if corresponding tag is not in header. + - rpm --verify honors %config(missingok), add -v for legacy behavior. 4.0 -> 4.0.[12] - add doxygen and lclint annotations most everywhere. diff --git a/Doxyfile.in b/Doxyfile.in index 5b11ab055..bfa2d1369 100644 --- a/Doxyfile.in +++ b/Doxyfile.in @@ -370,12 +370,15 @@ INPUT = \ ./lib/misc.h \ ./lib/package.c \ ./lib/poptBT.c \ + ./lib/poptI.c \ + ./lib/poptK.c \ ./lib/poptQV.c \ ./lib/problems.c \ ./lib/psm.c \ ./lib/psm.h \ ./lib/query.c \ ./lib/rpmchecksig.c \ + ./lib/rpmcli.h \ ./lib/rpminstall.c \ ./lib/rpmlead.c \ ./lib/rpmlead.h \ @@ -397,6 +400,7 @@ INPUT = \ ./rpmdb/falloc.h \ ./rpmdb/fprint.c \ ./rpmdb/fprint.h \ + ./rpmdb/poptDB.c \ ./rpmdb/rpmhash.c \ ./rpmdb/rpmhash.h \ ./rpmdb/rpmdb.c \ diff --git a/aclocal.m4 b/aclocal.m4 index 8b8b25ad9..d14efc07a 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,4 +1,4 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4 +dnl aclocal.m4 generated automatically by aclocal 1.4-p2 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation @@ -235,86 +235,69 @@ case "x$am_cv_prog_cc_stdc" in esac ]) +# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- -# serial 40 AC_PROG_LIBTOOL -AC_DEFUN(AC_PROG_LIBTOOL, +# serial 46 AC_PROG_LIBTOOL +AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl -# Save cache, so that ltconfig can load it -AC_CACHE_SAVE - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ -LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ -DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ -|| AC_MSG_ERROR([libtool configure failed]) - -# Reload cache, that may have been modified by ltconfig -AC_CACHE_LOAD - # This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl -# Redirect the config.log output again, so that the ltconfig log is not -# clobbered by the next message. -exec 5>>./config.log +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) ]) -AC_DEFUN(AC_LIBTOOL_SETUP, +AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.13)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl dnl -case "$target" in -NONE) lt_target="$host" ;; -*) lt_target="$target" ;; +_LT_AC_PROG_ECHO_BACKSLASH +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; esac -# Check for any special flags to pass to ltconfig. -# -# the following will cause an existing older ltconfig to fail, so -# we ignore this at the expense of the cache file... Checking this -# will just take longer ... bummer! -#libtool_flags="--cache-file=$cache_file" -# -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" -ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], -[libtool_flags="$libtool_flags --enable-dlopen"]) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[libtool_flags="$libtool_flags --enable-win32-dll"]) +enable_win32_dll=yes, enable_win32_dll=no) + AC_ARG_ENABLE(libtool-lock, [ --disable-libtool-lock avoid locking (might break parallel builds)]) -test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" -test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. -case "$lt_target" in +case $host in *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case "`/usr/bin/file conftest.o`" in + case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -334,7 +317,10 @@ case "$lt_target" in SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])]) + [AC_LANG_SAVE + AC_LANG_C + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_RESTORE]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" @@ -342,33 +328,2674 @@ case "$lt_target" in ;; ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw*) +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) + + # recent cygwin and mingw systems supply a stub DllMain which the user + # can override, but on older systems we have to supply one + AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain, + [AC_TRY_LINK([], + [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*); + DllMain (0, 0, 0);], + [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])]) + + case $host/$CC in + *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*) + # old mingw systems require "-dll" to link a DLL, while more recent ones + # require "-mdll" + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -mdll" + AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch, + [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])]) + CFLAGS="$SAVE_CFLAGS" ;; + *-*-cygwin* | *-*-pw32*) + # cygwin systems need to pass --dll to the linker, and not link + # crt.o which will require a WinMain@16 definition. + lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;; + esac + ;; + ]) +esac + +_LT_AC_LTCONFIG_HACK + +]) + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN(_LT_AC_CHECK_DLFCN, +[AC_CHECK_HEADERS(dlfcn.h) +])# _LT_AC_CHECK_DLFCN + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +[symcode='[BCDEGRST]'] + +# Regexp to match symbols that can be accessed directly from C. +[sympat='\([_A-Za-z][_A-Za-z0-9]*\)'] + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Define system-specific variables. +case $host_os in +aix*) + [symcode='[BCDT]'] + ;; +cygwin* | mingw* | pw32*) + [symcode='[ABCDGISTW]'] + ;; +hpux*) # Its linker distinguishes data from code symbols + lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + ;; +irix*) + [symcode='[BCDEGRST]'] + ;; +solaris* | sysv5*) + [symcode='[BDT]'] ;; +sysv4) + [symcode='[DFNSTU]'] + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $host_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + [symcode='[ABCDGISTW]'] +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. +[lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"] + + # Check to see that the pipe works correctly. + pipe_works=no + rm -f conftest* + cat > conftest.$ac_ext <<EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat <<EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' + + cat <<EOF >> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +[lt_preloaded_symbols[] =] +{ +EOF + sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if AC_TRY_EVAL(ac_link) && test -s conftest; then + pipe_works=yes + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AC_FD_CC + fi + else + echo "cannot find nm_test_var in $nlist" >&AC_FD_CC + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC + fi + else + echo "$progname: failed program was:" >&AC_FD_CC + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done ]) +global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" +if test -z "$lt_cv_sys_global_symbol_pipe"; then + global_symbol_to_cdecl= +else + global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" +fi +if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR +# --------------------------------- +AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR], +[# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != Xset; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) lt_cv_sys_path_separator=';' ;; + *) lt_cv_sys_path_separator=':' ;; + esac +fi +])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn;t interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-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. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<EOF +$* +EOF + exit 0 +fi + +# 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 + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string="`eval $cmd`") 2>/dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH /usr/ucb; do + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +AC_DIVERT_POP +])# _LT_AC_PROG_ECHO_BACKSLASH + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN(_LT_AC_TRY_DLOPEN_SELF, +[if test "$cross_compiling" = yes; then : + [$4] +else + AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN(AC_LIBTOOL_DLOPEN_SELF, +[if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + cygwin* | mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + *) + AC_CHECK_LIB(dl, dlopen, [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_FUNC(dlopen, lt_cv_dlopen="dlopen", + [AC_CHECK_FUNC(shl_load, lt_cv_dlopen="shl_load", + [AC_CHECK_LIB(svld, dlopen, + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB(dld, shl_load, + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + +AC_DEFUN([_LT_AC_LTCONFIG_HACK], +[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" +need_locks="$enable_libtool_lock" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +if test x"$host" != x"$build"; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case $host_os in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="[$]2" + +AC_MSG_CHECKING([for objdir]) +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +AC_MSG_RESULT($objdir) + + +AC_ARG_WITH(pic, +[ --with-pic try to use only PIC/non-PIC objects [default=use both]], +pic_mode="$withval", pic_mode=default) +test -z "$pic_mode" && pic_mode=default + +# We assume here that the value for lt_cv_prog_cc_pic will not be cached +# in isolation, and that seeing it set (from the cache) indicates that +# the associated values are set (in the cache) correctly too. +AC_MSG_CHECKING([for $compiler option to produce PIC]) +AC_CACHE_VAL(lt_cv_prog_cc_pic, +[ lt_cv_prog_cc_pic= + lt_cv_prog_cc_shlib= + lt_cv_prog_cc_wl= + lt_cv_prog_cc_static= + lt_cv_prog_cc_no_builtin= + lt_cv_prog_cc_can_build_shared=$can_build_shared + + if test "$GCC" = yes; then + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-static' + + case $host_os in + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # we not sure about C++ programs. + lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | irix5* | irix6* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_cv_prog_cc_pic='-fno-common' + ;; + cygwin* | mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_cv_prog_cc_pic=-Kconform_pic + fi + ;; + *) + lt_cv_prog_cc_pic='-fPIC' + ;; + esac + else + # PORTME Check for PIC flags for the system compiler. + case $host_os in + aix3* | aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Wl,' + else + lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better lt_cv_prog_cc_static that works with the bundled CC? + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" + lt_cv_prog_cc_pic='+Z' + ;; + + irix5* | irix6*) + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + + newsos6) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + ;; + + osf3* | osf4* | osf5*) + # All OSF/1 code is PIC. + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + ;; + + sco3.2v5*) + lt_cv_prog_cc_pic='-Kpic' + lt_cv_prog_cc_static='-dn' + lt_cv_prog_cc_shlib='-belf' + ;; + + solaris*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Wl,' + ;; + + sunos4*) + lt_cv_prog_cc_pic='-PIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Qoption ld ' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + if test "x$host_vendor" = xsni; then + lt_cv_prog_cc_wl='-LD' + else + lt_cv_prog_cc_wl='-Wl,' + fi + ;; + + uts4*) + lt_cv_prog_cc_pic='-pic' + lt_cv_prog_cc_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_cv_prog_cc_pic='-Kconform_pic' + lt_cv_prog_cc_static='-Bstatic' + fi + ;; + + *) + lt_cv_prog_cc_can_build_shared=no + ;; + esac + fi +]) +if test -z "$lt_cv_prog_cc_pic"; then + AC_MSG_RESULT([none]) +else + AC_MSG_RESULT([$lt_cv_prog_cc_pic]) + + # Check to make sure the pic_flag actually works. + AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works]) + AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" + AC_TRY_COMPILE([], [], [dnl + case $host_os in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then + # they create non-PIC objects. So, if there were any warnings, we + # assume that PIC is not supported. + if test -s conftest.err; then + lt_cv_prog_cc_pic_works=no + else + lt_cv_prog_cc_pic_works=yes + fi + ;; + *) + lt_cv_prog_cc_pic_works=yes + ;; + esac + ], [dnl + lt_cv_prog_cc_pic_works=no + ]) + CFLAGS="$save_CFLAGS" + ]) + + if test "X$lt_cv_prog_cc_pic_works" = Xno; then + lt_cv_prog_cc_pic= + lt_cv_prog_cc_can_build_shared=no + else + lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" + fi + + AC_MSG_RESULT([$lt_cv_prog_cc_pic_works]) +fi + +# Check for any special shared library compilation flags. +if test -n "$lt_cv_prog_cc_shlib"; then + AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | [egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]"] >/dev/null; then : + else + AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure]) + lt_cv_prog_cc_can_build_shared=no + fi +fi + +AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works]) +AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl + lt_cv_prog_cc_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" + AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes]) + LDFLAGS="$save_LDFLAGS" ]) +# Belt *and* braces to stop my trousers falling down: +test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= +AC_MSG_RESULT([$lt_cv_prog_cc_static_works]) + +pic_flag="$lt_cv_prog_cc_pic" +special_shlib_compile_flags="$lt_cv_prog_cc_shlib" +wl="$lt_cv_prog_cc_wl" +link_static_flag="$lt_cv_prog_cc_static" +no_builtin_flag="$lt_cv_prog_cc_no_builtin" +can_build_shared="$lt_cv_prog_cc_can_build_shared" + + +# Check to see if options -o and -c are simultaneously supported by compiler +AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext]) +AC_CACHE_VAL([lt_cv_compiler_c_o], [ +$rm -r conftest 2>/dev/null +mkdir conftest +cd conftest +echo "int some_variable = 0;" > conftest.$ac_ext +mkdir out +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers +# that will create temporary files in the current directory regardless of +# the output directory. Thus, making CWD read-only will cause this test +# to fail, enabling locking or at least warning the user not to do parallel +# builds. +chmod -w . +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" +compiler_c_o=no +if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s out/conftest.err; then + lt_cv_compiler_c_o=no + else + lt_cv_compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat out/conftest.err 1>&AC_FD_CC + lt_cv_compiler_c_o=no +fi +CFLAGS="$save_CFLAGS" +chmod u+w . +$rm conftest* out/* +rmdir out +cd .. +rmdir conftest +$rm -r conftest 2>/dev/null +]) +compiler_c_o=$lt_cv_compiler_c_o +AC_MSG_RESULT([$compiler_c_o]) + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + AC_MSG_CHECKING([if $compiler supports -c -o file.lo]) + AC_CACHE_VAL([lt_cv_compiler_o_lo], [ + lt_cv_compiler_o_lo=no + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + AC_TRY_COMPILE([], [int some_variable = 0;], [dnl + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + lt_cv_compiler_o_lo=no + else + lt_cv_compiler_o_lo=yes + fi + ]) + CFLAGS="$save_CFLAGS" + ]) + compiler_o_lo=$lt_cv_compiler_o_lo + AC_MSG_RESULT([$compiler_c_lo]) +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi + +if test "$GCC" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions]) + echo "int some_variable = 0;" > conftest.$ac_ext + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" + compiler_rtti_exceptions=no + AC_TRY_COMPILE([], [int some_variable = 0;], [dnl + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + compiler_rtti_exceptions=no + else + compiler_rtti_exceptions=yes + fi + ]) + CFLAGS="$save_CFLAGS" + AC_MSG_RESULT([$compiler_rtti_exceptions]) + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi +fi + +# See if the linker supports building shared libraries. +AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries]) + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +archive_cmds= +archive_expsym_cmds= +old_archive_from_new_cmds= +old_archive_from_expsyms_cmds= +export_dynamic_flag_spec= +whole_archive_flag_spec= +thread_safe_flag_spec= +hardcode_into_libs=no +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +link_all_deplibs=unknown +always_export_symbols=no +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' +# include_expsyms should be a list of space-separated symbols to be *always* +# included in the symbol list +include_expsyms= +# exclude_expsyms can be an egrep regular expression of symbols to exclude +# it will be wrapped by ` (' and `)$', so one must not match beginning or +# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', +# as well as any symbol that contains `d'. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out +# platforms (ab)use it in PIC code, but their linkers get confused if +# the symbol is explicitly referenced. Since portable code cannot +# rely on this symbol name, it's probably fine to never include it in +# preloaded symbol tables. +extract_expsyms_cmds= + +case $host_os in +cygwin* | mingw* | pw32* ) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX, the GNU linker is very broken + # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. + ld_shlibs=no + cat <<EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=yes + + extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ + sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ + test -f $output_objdir/impgen.exe || (cd $output_objdir && \ + if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ + else $CC -o impgen impgen.c ; fi)~ + $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' + + old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' + + # cygwin and mingw dlls have different entry points and sets of symbols + # to exclude. + # FIXME: what about values for MSVC? + dll_entry=__cygwin_dll_entry@12 + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ + case $host_os in + mingw*) + # mingw values + dll_entry=_DllMainCRTStartup@12 + dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ + ;; + esac + + # mingw and cygwin differ, and it's simplest to just exclude the union + # of the two symbol sets. + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 + + # recent cygwin and mingw systems supply a stub DllMain which the user + # can override, but on older systems we have to supply one (in ltdll.c) + if test "x$lt_cv_need_dllmain" = "xyes"; then + ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " + ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < [$]0 > $output_objdir/$soname-ltdll.c~ + test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' + else + ltdll_obj= + ltdll_cmds= + fi + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + # Be careful not to strip the DATA tag left be newer dlltools. + export_symbols_cmds="$ltdll_cmds"' + $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ + [sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//"] < $output_objdir/$soname-def > $export_symbols' + + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! + archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; + _lt_hint=1; + cat $export_symbols | while read symbol; do + set dummy \$symbol; + case \[$]# in + 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; + *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;; + esac; + _lt_hint=`expr 1 + \$_lt_hint`; + done; + fi~ + '"$ltdll_cmds"' + $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ + $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ + $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + case $host_os in + cygwin* | mingw* | pw32*) + # dlltool doesn't understand --whole-archive et. al. + whole_archive_flag_spec= + ;; + *) + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + ;; + esac + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + shared_flag='-shared' + else + if test "$host_cpu" = ia64; then + shared_flag='-G' + else + shared_flag='${wl}-bM:SRE' + fi + hardcode_direct=yes + fi + + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # Test if we are trying to use run time linking, or normal AIX style linking. + # If -brtl is somewhere in LDFLAGS, we need to do run time linking. + aix_use_runtimelinking=no + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl" ); then + aix_use_runtimelinking=yes + break + fi + done + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + # It seems that -bexpall can do strange things, so it is better to + # generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' + allow_undefined_flag=' -Wl,-G' + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-znodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' + # Warning - without using the other run time loading flags, -berok will + # link without error, but may produce a broken library. + allow_undefined_flag='${wl}-berok" + # This is a bit strange, but is similar to how AIX traditionally builds + # it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + ;; + + darwin* | rhapsody*) + allow_undefined_flag='-undefined suppress' + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + archive_cmds='$CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linkopts -install_name $rpath/$soname $(test -n "$verstring" -a x$verstring != x0.0 && echo $verstring)' + # We need to add '_' to the symbols in $export_symbols first + #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' + hardcode_direct=yes + hardcode_shlibpath_var=no + whole_archive_flag_spec='-all_load $convenience' + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9* | hpux10* | hpux11*) + case $host_os in + hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; + *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; + esac + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + #Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z defs' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + 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' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + [solaris2.[0-5] | solaris2.[0-5].*]) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + if test "x$host_vendor" = xsno; then + archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes # is this really true??? + else + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + 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' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5uw7* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac +fi +AC_MSG_RESULT([$ld_shlibs]) +test "$ld_shlibs" = no && can_build_shared=no + +# Check hardcoding attributes. +AC_MSG_CHECKING([how to hardcode library paths into programs]) +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$hardcode_shlibpath_var" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +AC_MSG_RESULT([$hardcode_action]) + +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + +reload_cmds='$LD$reload_flag -o $output$reload_objs' +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +# PORTME Fill in your ld.so characteristics +AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; + +aix4* | aix5*) + version_type=linux + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + [ aix4 | aix4.[01] | aix4.[01].*)] + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib<name>.so instead of + # lib<name>.a to let people know that these are not typical AIX shared libraries. + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}.so$major' + fi + shlibpath_var=LIBPATH + deplibs_check_method=pass_all + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | [$Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\'']`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + export_dynamic_flag_spec=-rdynamic + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + need_version=no + need_lib_prefix=no + case $GCC,$host_os in + yes,cygwin*) + library_names_spec='$libname.dll.a' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll' + postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog .libs/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + ;; + yes,mingw*) + library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` + ;; + yes,pw32*) + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' + ;; + *) + library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' + soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + *) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6*) + version_type=irix + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' + case $host_os in + irix5*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + need_version=no + fi + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_version=no + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +AC_LIBTOOL_DLOPEN_SELF + +if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + AC_CACHE_VAL([lt_cv_archive_cmds_need_lc], + [$rm conftest* + echo 'static int dummy;' > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile); then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_cv_prog_cc_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi]) + AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc]) + ;; + esac +fi +need_lc=${lt_cv_archive_cmds_need_lc-yes} + +# The second clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + : +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + test -f Makefile && make "$ltmain" +fi + +if test -f "$ltmain"; then + trap "$rm \"${ofile}T\"; exit 1" 1 2 15 + $rm -f "${ofile}T" + + echo creating $ofile + + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS \ + AR AR_FLAGS CC LD LN_S NM SHELL \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ + postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ + old_striplib striplib file_magic_cmd export_symbols_cmds \ + deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case $var in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + cat <<__EOF__ > "${ofile}T" +#! $SHELL + +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996-2000 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. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="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 + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$need_lc + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# The default C compiler. +CC=$lt_CC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# 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=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_pic_flag +pic_mode=$pic_mode + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$lt_compiler_o_lo + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_global_symbol_to_cdecl + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + case $host_os in + aix3*) + cat <<\EOF >> "${ofile}T" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + case $host_os in + cygwin* | mingw* | pw32* | os2*) + cat <<'EOF' >> "${ofile}T" + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include <windows.h> +# #undef WIN32_LEAN_AND_MEAN +# #include <stdio.h> +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include <cygwin/cygwin_dll.h> +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999-2000 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# 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. +# */ +# +# #include <stdio.h> /* for printf() */ +# #include <unistd.h> /* for open(), lseek(), read() */ +# #include <fcntl.h> /* for O_RDONLY, O_BINARY */ +# #include <string.h> /* for strdup() */ +# +# /* O_BINARY isn't required (or even defined sometimes) under Unix */ +# #ifndef O_BINARY +# #define O_BINARY 0 +# #endif +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (dll < 1) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i<nexp; i++) +# { +# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4); +# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i); +# } +# +# return 0; +# } +# /* impgen.c ends here */ + +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1) + + mv -f "${ofile}T" "$ofile" || \ + (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") + chmod +x "$ofile" +fi + +])# _LT_AC_LTCONFIG_HACK + # AC_LIBTOOL_DLOPEN - enable checks for dlopen support -AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) +AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's -AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) # AC_ENABLE_SHARED - implement the --enable-shared flag # Usage: AC_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. -AC_DEFUN(AC_ENABLE_SHARED, [dnl -define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(shared, changequote(<<, >>)dnl << --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} -case "$enableval" in +case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) @@ -387,21 +3014,22 @@ enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl ]) # AC_DISABLE_SHARED - set the default shared flag to --disable-shared -AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no)]) # AC_ENABLE_STATIC - implement the --enable-static flag # Usage: AC_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. -AC_DEFUN(AC_ENABLE_STATIC, [dnl -define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(static, changequote(<<, >>)dnl << --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} -case "$enableval" in +case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) @@ -420,7 +3048,8 @@ enable_static=AC_ENABLE_STATIC_DEFAULT)dnl ]) # AC_DISABLE_STATIC - set the default static flag to --disable-static -AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no)]) @@ -428,14 +3057,14 @@ AC_ENABLE_STATIC(no)]) # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. -AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl -define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(fast-install, changequote(<<, >>)dnl << --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} -case "$enableval" in +case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) @@ -453,12 +3082,98 @@ esac], enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl ]) -# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install -AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no)]) +# AC_LIBTOOL_PICMODE - implement the --with-pic flag +# Usage: AC_LIBTOOL_PICMODE[(MODE)] +# Where MODE is either `yes' or `no'. If omitted, it defaults to +# `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default)]) + + +# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in + /*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; + ?:/*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <<EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$ac_save_ifs" + MAGIC_CMD="$ac_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +]) + + +# AC_PATH_MAGIC - find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl +AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH) + else + MAGIC_CMD=: + fi +fi +]) + + # AC_PROG_LD - find the path to the GNU or non-GNU linker -AC_DEFUN(AC_PROG_LD, +AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) @@ -466,16 +3181,20 @@ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then +if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in # Accept absolute paths. -changequote(,)dnl - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' -changequote([,])dnl + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do @@ -497,17 +3216,17 @@ elif test "$with_gnu_ld" = yes; then else AC_MSG_CHECKING([for non-GNU ld]) fi -AC_CACHE_VAL(ac_cv_path_LD, +AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - ac_cv_path_LD="$ac_dir/$ac_prog" + lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break @@ -516,9 +3235,9 @@ AC_CACHE_VAL(ac_cv_path_LD, done IFS="$ac_save_ifs" else - ac_cv_path_LD="$LD" # Let the user override the test with a path. + lt_cv_path_LD="$LD" # Let the user override the test with a path. fi]) -LD="$ac_cv_path_LD" +LD="$lt_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else @@ -528,56 +3247,241 @@ test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_PROG_LD_GNU ]) -AC_DEFUN(AC_PROG_LD_GNU, -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, +# AC_PROG_LD_GNU - +AC_DEFUN([AC_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then - ac_cv_prog_gnu_ld=yes + lt_cv_prog_gnu_ld=yes else - ac_cv_prog_gnu_ld=no + lt_cv_prog_gnu_ld=no fi]) +with_gnu_ld=$lt_cv_prog_gnu_ld +]) + +# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker +# -- PORTME Some linkers may need a different reload flag. +AC_DEFUN([AC_PROG_LD_RELOAD_FLAG], +[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, +[lt_cv_ld_reload_flag='-r']) +reload_flag=$lt_cv_ld_reload_flag +test -n "$reload_flag" && reload_flag=" $reload_flag" ]) +# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +AC_DEFUN([AC_DEPLIBS_CHECK_METHOD], +[AC_CACHE_CHECK([how to recognise dependant libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# ['file_magic [regex]'] -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given egrep regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'] + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin* | mingw* | pw32*) + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[012]) + lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' + ;; + esac + ;; + +freebsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + [lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'] + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20*|hpux11*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'] + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + +irix5* | irix6*) + case $host_os in + irix5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + [lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"] + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux-gnu*) + case $host_cpu in + alpha* | i*86 | powerpc* | sparc* | ia64* ) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;] + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'] + else + [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'] + fi + ;; + +newos6*) + [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'] + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + +[sysv5uw[78]* | sysv4*uw2*)] + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'] + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'] + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + [lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"] + lt_cv_file_magic_test_file=/lib/libc.so + ;; + esac + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +]) + + # AC_PROG_NM - find the path to a BSD-compatible name lister -AC_DEFUN(AC_PROG_NM, +AC_DEFUN([AC_PROG_NM], [AC_MSG_CHECKING([for BSD-compatible nm]) -AC_CACHE_VAL(ac_cv_path_NM, +AC_CACHE_VAL(lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. - ac_cv_path_NM="$NM" + lt_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + tmp_nm=$ac_dir/${ac_tool_prefix}nm + if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" + # Tru64's nm complains that /dev/null is an invalid object file + if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then + lt_cv_path_NM="$tmp_nm -B" break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" + elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + lt_cv_path_NM="$tmp_nm -p" break else - ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags fi fi done IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) -NM="$ac_cv_path_NM" +NM="$lt_cv_path_NM" AC_MSG_RESULT([$NM]) ]) # AC_CHECK_LIBM - check for math library -AC_DEFUN(AC_CHECK_LIBM, +AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= -case "$lt_target" in -*-*-beos* | *-*-cygwin*) +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32*) # These system don't have libm ;; *-ncr-sysv4.3*) @@ -600,8 +3504,9 @@ esac # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. -AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case "$enable_ltdl_convenience" in +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; @@ -621,7 +3526,8 @@ AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl # not flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, main, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then @@ -641,17 +3547,17 @@ AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl fi ]) -dnl old names -AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl -AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl -AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl -AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl -AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl -AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl -AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl - -dnl This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL])dnl +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) dnl From Jim Meyering. Use this if you use the GNU error.[ch]. dnl FIXME: Migrate into libit diff --git a/autogen.sh b/autogen.sh index 853cc9619..35ca92474 100755 --- a/autogen.sh +++ b/autogen.sh @@ -3,14 +3,15 @@ export CFLAGS export LDFLAGS -LTV="libtoolize (GNU libtool) 1.3.5" +LTV="libtoolize (GNU libtool) 1.4" ACV="Autoconf version 2.13" -AMV="automake (GNU automake) 1.4" +AMV="automake (GNU automake) 1.4-p2" USAGE=" You need to install: - libtool-1.3.5 + libtool-1.4 autoconf-2.13 - automake-1.4 + automake-1.4-p2 +Or edit this script to change the libtool/autoconf/automake versions checked ... " [ "`libtoolize --version`" != "$LTV" ] && echo "$USAGE" && exit 1 @@ -4,6 +4,7 @@ #include "system.h" +#include <rpmcli.h> #include <rpmbuild.h> #include <rpmurl.h> diff --git a/lib/Makefile.am b/lib/Makefile.am index a597fa82a..f442f9879 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -14,7 +14,7 @@ EXTRA_DIST = getdate.y pkgincdir = $(pkgincludedir) pkginc_HEADERS = \ - header.h misc.h rpmlib.h stringbuf.h + header.h misc.h rpmcli.h rpmlib.h stringbuf.h noinst_HEADERS = \ cpio.h depends.h fsm.h \ manifest.h md5.h psm.h \ @@ -33,9 +33,10 @@ lib_LTLIBRARIES = librpm.la librpm_la_SOURCES = \ cpio.c depends.c formats.c fs.c fsm.c getdate.c \ header.c manifest.c md5.c md5sum.c misc.c package.c \ - problems.c poptBT.c poptQV.c psm.c query.c rpmchecksig.c \ - rpminstall.c rpmlead.c rpmlibprov.c rpmrc.c signature.c \ - stringbuf.c tagName.c tagtable.c transaction.c verify.c + problems.c poptBT.c poptI.c poptK.c poptQV.c psm.c query.c \ + rpmchecksig.c rpminstall.c rpmlead.c rpmlibprov.c rpmrc.c \ + signature.c stringbuf.c tagName.c tagtable.c transaction.c \ + verify.c # XXX Add internal libtool dependence install-data-local: diff --git a/lib/poptBT.c b/lib/poptBT.c index 9666a946a..2a41dfa51 100644 --- a/lib/poptBT.c +++ b/lib/poptBT.c @@ -5,6 +5,7 @@ #include "system.h" +#include <rpmcli.h> #include <rpmbuild.h> #include <rpmurl.h> diff --git a/lib/poptI.c b/lib/poptI.c new file mode 100644 index 000000000..05f9799ee --- /dev/null +++ b/lib/poptI.c @@ -0,0 +1,197 @@ +/** \ingroup rpmcli + * \file lib/poptI.c + * Popt tables for install modes. + */ + +#include "system.h" + +#include <rpmcli.h> +#include <rpmurl.h> + +#include "debug.h" + +struct rpmInstallArguments_s rpmIArgs; + +#define POPT_RELOCATE 1016 +#define POPT_EXCLUDEPATH 1019 + +/*@exits@*/ static void argerror(const char * desc) + /*@modifies fileSystem @*/ +{ + fprintf(stderr, _("%s: %s\n"), __progname, desc); + exit(EXIT_FAILURE); + +} +/** + */ +static void installArgCallback( /*@unused@*/ poptContext con, + /*@unused@*/ enum poptCallbackReason reason, + const struct poptOption * opt, const char * arg, + /*@unused@*/ const void * data) + /*@modifies rpmIArgs */ +{ + struct rpmInstallArguments_s * ia = &rpmIArgs; + + switch (opt->val) { + case POPT_EXCLUDEPATH: + if (arg == NULL || *arg != '/') + argerror(_("exclude paths must begin with a /")); + ia->relocations = xrealloc(ia->relocations, + sizeof(*ia->relocations) * (ia->numRelocations + 1)); + /*@-temptrans@*/ + ia->relocations[ia->numRelocations].oldPath = arg; + /*@=temptrans@*/ + ia->relocations[ia->numRelocations].newPath = NULL; + ia->numRelocations++; + break; + case POPT_RELOCATE: + { char * newPath = NULL; + if (arg == NULL || *arg != '/') + argerror(_("relocations must begin with a /")); + if (!(newPath = strchr(arg, '='))) + argerror(_("relocations must contain a =")); + *newPath++ = '\0'; + if (*newPath != '/') + argerror(_("relocations must have a / following the =")); + ia->relocations = xrealloc(ia->relocations, + sizeof(*ia->relocations) * (ia->numRelocations + 1)); + /*@-temptrans@*/ + ia->relocations[ia->numRelocations].oldPath = arg; + /*@=temptrans@*/ + /*@-kepttrans@*/ + ia->relocations[ia->numRelocations].newPath = newPath; + /*@=kepttrans@*/ + ia->numRelocations++; + } break; + } +} + +/** + */ +struct poptOption rpmInstallPoptTable[] = { + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, + installArgCallback, 0, NULL, NULL }, + + { "allfiles", '\0', POPT_BIT_SET, + &rpmIArgs.transFlags, RPMTRANS_FLAG_ALLFILES, + N_("install all files, even configurations which might otherwise be skipped"), + NULL}, + { "allmatches", '\0', POPT_BIT_SET, + &rpmIArgs.eraseInterfaceFlags, UNINSTALL_ALLMATCHES, + N_("remove all packages which match <package> (normally an error is generated if <package> specified multiple packages)"), + NULL}, + + { "apply", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + (_noTransScripts|_noTransTriggers| + RPMTRANS_FLAG_APPLYONLY|RPMTRANS_FLAG_PKGCOMMIT), + N_("do not execute package scriptlet(s)"), NULL }, + + { "badreloc", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_FORCERELOCATE, + N_("relocate files in non-relocateable package"), NULL}, + { "dirstash", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_DIRSTASH, + N_("save erased package files by renaming into sub-directory"), NULL}, + { "erase", 'e', 0, 0, 'e', + N_("erase (uninstall) package"), N_("<package>+") }, + { "excludedocs", '\0', POPT_BIT_SET, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NODOCS, + N_("do not install documentation"), NULL}, + { "excludepath", '\0', POPT_ARG_STRING, 0, POPT_EXCLUDEPATH, + N_("skip files with leading component <path> "), + N_("<path>") }, + { "force", '\0', POPT_BIT_SET, &rpmIArgs.probFilter, + (RPMPROB_FILTER_REPLACEPKG | RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES | RPMPROB_FILTER_OLDPACKAGE), + N_("short hand for --replacepkgs --replacefiles"), NULL}, + { "freshen", 'F', POPT_BIT_SET, &rpmIArgs.installInterfaceFlags, + (INSTALL_UPGRADE|INSTALL_FRESHEN|INSTALL_NOERASE), + N_("upgrade package(s) if already installed"), + N_("<packagefile>+") }, + { "hash", 'h', POPT_BIT_SET, &rpmIArgs.installInterfaceFlags, INSTALL_HASH, + N_("print hash marks as package installs (good with -v)"), NULL}, + { "ignorearch", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_IGNOREARCH, + N_("don't verify package architecture"), NULL}, + { "ignoreos", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_IGNOREOS, + N_("don't verify package operating system"), NULL}, + { "ignoresize", '\0', POPT_BIT_SET, &rpmIArgs.probFilter, + (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES), + N_("don't check disk space before installing"), NULL}, + { "includedocs", '\0', 0, &rpmIArgs.incldocs, 0, + N_("install documentation"), NULL}, + { "install", '\0', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, INSTALL_NOERASE, + N_("install package"), N_("<packagefile>+") }, + { "justdb", '\0', POPT_BIT_SET, &rpmIArgs.transFlags, RPMTRANS_FLAG_JUSTDB, + N_("update the database, but do not modify the filesystem"), NULL}, + { "nodeps", '\0', 0, &rpmIArgs.noDeps, 0, + N_("do not verify package dependencies"), NULL }, + { "noorder", '\0', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, INSTALL_NOORDER, + N_("do not reorder package installation to satisfy dependencies"), + NULL}, + + { "noscripts", '\0', POPT_BIT_SET, &rpmIArgs.transFlags, + (_noTransScripts|_noTransTriggers), + N_("do not execute package scriptlet(s)"), NULL }, + { "nopre", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + RPMTRANS_FLAG_NOPRE, + N_("do not execute %%pre scriptlet (if any)"), NULL }, + { "nopost", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + RPMTRANS_FLAG_NOPOST, + N_("do not execute %%post scriptlet (if any)"), NULL }, + { "nopreun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + RPMTRANS_FLAG_NOPREUN, + N_("do not execute %%preun scriptlet (if any)"), NULL }, + { "nopostun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + RPMTRANS_FLAG_NOPOSTUN, + N_("do not execute %%postun scriptlet (if any)"), NULL }, + + { "notriggers", '\0', POPT_BIT_SET, &rpmIArgs.transFlags, + _noTransTriggers, + N_("do not execute any scriptlet(s) triggered by this package"), NULL}, + { "notriggerprein", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERPREIN, + N_("do not execute any %%triggerprein scriptlet(s)"), NULL}, + { "notriggerin", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERIN, + N_("do not execute any %%triggerin scriptlet(s)"), NULL}, + { "notriggerun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERUN, + N_("do not execute any %%triggerun scriptlet(s)"), NULL}, + { "notriggerpostun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERPOSTUN, + N_("do not execute any %%triggerpostun scriptlet(s)"), NULL}, + + { "oldpackage", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_OLDPACKAGE, + N_("upgrade to an old version of the package (--force on upgrades does this automatically)"), + NULL}, + { "percent", '\0', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, INSTALL_PERCENT, + N_("print percentages as package installs"), NULL}, + { "prefix", '\0', POPT_ARG_STRING, &rpmIArgs.prefix, 0, + N_("relocate the package to <dir>, if relocatable"), + N_("<dir>") }, + { "relocate", '\0', POPT_ARG_STRING, 0, POPT_RELOCATE, + N_("relocate files from path <old> to <new>"), + N_("<old>=<new>") }, + { "repackage", '\0', POPT_BIT_SET, + &rpmIArgs.transFlags, RPMTRANS_FLAG_REPACKAGE, + N_("save erased package files by repackaging"), NULL}, + { "replacefiles", '\0', POPT_BIT_SET, &rpmIArgs.probFilter, + (RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES), + N_("install even if the package replaces installed files"), NULL}, + { "replacepkgs", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_REPLACEPKG, + N_("reinstall if the package is already present"), NULL}, + { "test", '\0', POPT_BIT_SET, &rpmIArgs.transFlags, RPMTRANS_FLAG_TEST, + N_("don't install, but tell if it would work or not"), NULL}, + { "upgrade", 'U', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, (INSTALL_UPGRADE|INSTALL_NOERASE), + N_("upgrade package(s)"), + N_("<packagefile>+") }, + + POPT_TABLEEND +}; diff --git a/lib/poptK.c b/lib/poptK.c new file mode 100644 index 000000000..938d308f2 --- /dev/null +++ b/lib/poptK.c @@ -0,0 +1,71 @@ +/** \ingroup rpmcli + * \file lib/poptK.c + * Popt tables for signature modes. + */ + +#include "system.h" + +#include <rpmcli.h> +#include <rpmurl.h> + +#include "debug.h" + +struct rpmSignArguments_s rpmKArgs = + { RESIGN_CHK_SIGNATURE, CHECKSIG_ALL, 0, NULL }; + +#define POPT_ADDSIGN 1005 +#define POPT_RESIGN 1006 + +/** + */ +static void signArgCallback( /*@unused@*/ poptContext con, + /*@unused@*/ enum poptCallbackReason reason, + const struct poptOption * opt, /*@unused@*/ const char * arg, + /*@unused@*/ const void * data) + /*@modifies rpmKArgs @*/ +{ + struct rpmSignArguments_s * rka = &rpmKArgs; + + switch (opt->val) { + case 'K': + rka->addSign = RESIGN_CHK_SIGNATURE; + rka->sign = 0; + break; + + case POPT_RESIGN: + rka->addSign = RESIGN_NEW_SIGNATURE; + rka->sign = 1; + break; + + case POPT_ADDSIGN: + rka->addSign = RESIGN_ADD_SIGNATURE; + rka->sign = 1; + break; + } +} + +/** + */ +struct poptOption rpmSignPoptTable[] = { + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, + signArgCallback, 0, NULL, NULL }, + { "addsign", '\0', 0, 0, POPT_ADDSIGN, + N_("add a signature to a package"), NULL }, + { "resign", '\0', 0, 0, POPT_RESIGN, + N_("sign a package (discard current signature)"), NULL }, + { "sign", '\0', 0, &rpmKArgs.sign, 0, + N_("generate GPG/PGP signature"), NULL }, + { "checksig", 'K', 0, 0, 'K', + N_("verify package signature"), NULL }, + { "nogpg", '\0', POPT_BIT_CLR, + &rpmKArgs.checksigFlags, CHECKSIG_GPG, + N_("skip any GPG signatures"), NULL }, + { "nopgp", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN, + &rpmKArgs.checksigFlags, CHECKSIG_PGP, + N_("skip any PGP signatures"), NULL }, + { "nomd5", '\0', POPT_BIT_CLR, + &rpmKArgs.checksigFlags, CHECKSIG_MD5, + N_("do not verify file md5 checksums"), NULL }, + + POPT_TABLEEND +}; diff --git a/lib/poptQV.c b/lib/poptQV.c index 1920cfa8e..76f60e41d 100644 --- a/lib/poptQV.c +++ b/lib/poptQV.c @@ -5,7 +5,8 @@ #include "system.h" -#include "rpmbuild.h" +#include <rpmcli.h> +#include <rpmbuild.h> #include <rpmurl.h> #include "debug.h" @@ -95,9 +96,11 @@ struct poptOption rpmQVSourcePoptTable[] = { /* ========== Query specific popt args */ -static void queryArgCallback(/*@unused@*/poptContext con, /*@unused@*/enum poptCallbackReason reason, - const struct poptOption * opt, const char * arg, - /*@unused@*/ const void * data) +static void queryArgCallback(/*@unused@*/poptContext con, + /*@unused@*/enum poptCallbackReason reason, + const struct poptOption * opt, const char * arg, + /*@unused@*/ const void * data) + /*@modifies rpmQVArgs @*/ { QVA_t qva = &rpmQVArgs; @@ -107,21 +110,24 @@ static void queryArgCallback(/*@unused@*/poptContext con, /*@unused@*/enum poptC case 'l': qva->qva_flags |= QUERY_FOR_LIST; break; case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST; break; - case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST; break; + case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST; + break; case 'v': rpmIncreaseVerbosity(); break; case POPT_QUERYFORMAT: - { char *qf = (char *)qva->qva_queryFormat; - if (qf) { - int len = strlen(qf) + strlen(arg) + 1; - qf = xrealloc(qf, len); - strcat(qf, arg); - } else { - qf = xmalloc(strlen(arg) + 1); - strcpy(qf, arg); + if (arg) { + char * qf = (char *)qva->qva_queryFormat; + if (qf) { + int len = strlen(qf) + strlen(arg) + 1; + qf = xrealloc(qf, len); + strcat(qf, arg); + } else { + qf = xmalloc(strlen(arg) + 1); + strcpy(qf, arg); + } + qva->qva_queryFormat = qf; } - qva->qva_queryFormat = qf; - } break; + break; } } diff --git a/lib/query.c b/lib/query.c index 34e676da3..783f237b7 100644 --- a/lib/query.c +++ b/lib/query.c @@ -9,6 +9,7 @@ # define PATH_MAX 255 #endif +#include <rpmcli.h> #include <rpmbuild.h> #include <rpmurl.h> #include "manifest.h" @@ -142,8 +143,8 @@ int showQueryPackage(QVA_t qva, /*@unused@*/rpmdb rpmdb, Header h) HFD_t hfd = headerFreeData; char * t, * te; - int queryFlags = qva->qva_flags; - const char *queryFormat = qva->qva_queryFormat; + rpmQueryFlags queryFlags = qva->qva_flags; + const char * queryFormat = qva->qva_queryFormat; int_32 count, type; char * prefix = NULL; @@ -170,7 +171,7 @@ int showQueryPackage(QVA_t qva, /*@unused@*/rpmdb rpmdb, Header h) te = t = xmalloc(BUFSIZ); *te = '\0'; - if (!queryFormat && !queryFlags) { + if (queryFormat == NULL && queryFlags == QUERY_FOR_DEFAULT) { const char * name, * version, * release; (void) headerNVR(h, &name, &version, &release); te = stpcpy(te, name); @@ -204,31 +205,31 @@ int showQueryPackage(QVA_t qva, /*@unused@*/rpmdb rpmdb, Header h) te = stpcpy(te, _("(contains no files)")); goto exit; } - if (!hge(h, RPMTAG_FILESTATES, &type, (void **) &fileStatesList, &count)) + if (!hge(h, RPMTAG_FILESTATES, &type, (void **) &fileStatesList, NULL)) fileStatesList = NULL; if (!hge(h, RPMTAG_DIRNAMES, &dnt, (void **) &dirNames, NULL)) dirNames = NULL; if (!hge(h, RPMTAG_DIRINDEXES, NULL, (void **) &dirIndexes, NULL)) dirIndexes = NULL; - if (!hge(h, RPMTAG_FILEFLAGS, &type, (void **) &fileFlagsList, &count)) + if (!hge(h, RPMTAG_FILEFLAGS, &type, (void **) &fileFlagsList, NULL)) fileFlagsList = NULL; - if (!hge(h, RPMTAG_FILESIZES, &type, (void **) &fileSizeList, &count)) + if (!hge(h, RPMTAG_FILESIZES, &type, (void **) &fileSizeList, NULL)) fileSizeList = NULL; - if (!hge(h, RPMTAG_FILEMODES, &type, (void **) &fileModeList, &count)) + if (!hge(h, RPMTAG_FILEMODES, &type, (void **) &fileModeList, NULL)) fileModeList = NULL; - if (!hge(h, RPMTAG_FILEMTIMES, &type, (void **) &fileMTimeList, &count)) + if (!hge(h, RPMTAG_FILEMTIMES, &type, (void **) &fileMTimeList, NULL)) fileMTimeList = NULL; - if (!hge(h, RPMTAG_FILERDEVS, &type, (void **) &fileRdevList, &count)) + if (!hge(h, RPMTAG_FILERDEVS, &type, (void **) &fileRdevList, NULL)) fileRdevList = NULL; - if (!hge(h, RPMTAG_FILEINODES, &type, (void **) &fileInodeList, &count)) + if (!hge(h, RPMTAG_FILEINODES, &type, (void **) &fileInodeList, NULL)) fileInodeList = NULL; if (!hge(h, RPMTAG_FILELINKTOS, <t, (void **) &fileLinktoList, NULL)) fileLinktoList = NULL; if (!hge(h, RPMTAG_FILEMD5S, &m5t, (void **) &fileMD5List, NULL)) fileMD5List = NULL; - if (!hge(h, RPMTAG_FILEUIDS, &type, (void **) &fileUIDList, &count)) + if (!hge(h, RPMTAG_FILEUIDS, &type, (void **) &fileUIDList, NULL)) fileUIDList = NULL; - if (!hge(h, RPMTAG_FILEGIDS, &type, (void **) &fileGIDList, &count)) + if (!hge(h, RPMTAG_FILEGIDS, &type, (void **) &fileGIDList, NULL)) fileGIDList = NULL; if (!hge(h, RPMTAG_FILEUSERNAME, &fot, (void **) &fileOwnerList, NULL)) fileOwnerList = NULL; diff --git a/lib/rpmchecksig.c b/lib/rpmchecksig.c index 164c71d82..76426d5ba 100644 --- a/lib/rpmchecksig.c +++ b/lib/rpmchecksig.c @@ -5,7 +5,7 @@ #include "system.h" -#include <rpmlib.h> +#include <rpmcli.h> #include "rpmlead.h" #include "signature.h" diff --git a/lib/rpmcli.h b/lib/rpmcli.h new file mode 100644 index 000000000..9a00a06b4 --- /dev/null +++ b/lib/rpmcli.h @@ -0,0 +1,200 @@ +#ifndef H_RPMCLI +#define H_RPMCLI + +/** \ingroup rpmcli rpmbuild + * \file lib/rpmcli.h + */ + +#include <rpmlib.h> + +/** \ingroup rpmcli + * Should version 3 packages be produced? + */ +extern int _noDirTokens; + +#ifdef __cplusplus +extern "C" { +#endif + +/* ==================================================================== */ +/** \name RPMBT */ +/*@{*/ + +/** \ingroup rpmcli + * Describe build command line request. + */ +struct rpmBuildArguments_s { + int buildAmount; /*!< Bit(s) to control operation. */ +/*@null@*/ const char * buildRootOverride; /*!< from --buildroot */ +/*@null@*/ char * targets; /*!< Target platform(s), comma separated. */ + int force; /*!< from --force */ + int noBuild; /*!< from --nobuild */ + int noDeps; /*!< from --nodeps */ + int noLang; /*!< from --nolang */ + int shortCircuit; /*!< from --short-circuit */ + int sign; /*!< from --sign */ + int useCatalog; /*!< from --usecatalog */ + char buildMode; /*!< Build mode (one of "btBC") */ + char buildChar; /*!< Build stage (one of "abcilps ") */ +/*@observer@*/ /*@null@*/ const char * rootdir; +}; + +/** \ingroup rpmcli + */ +typedef struct rpmBuildArguments_s * BTA_t; + +/** \ingroup rpmcli + */ +extern struct rpmBuildArguments_s rpmBTArgs; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmBuildPoptTable[]; + +/*@}*/ +/* ==================================================================== */ +/** \name RPMQV */ +/*@{*/ + +/** \ingroup rpmcli + * Bit(s) to control rpmQuery() operation, stored in qva_flags. + */ +/*@-typeuse@*/ +typedef enum rpmQueryFlags_e { + QUERY_FOR_LIST = (1 << 1), /*!< from --list */ + QUERY_FOR_STATE = (1 << 2), /*!< from --state */ + QUERY_FOR_DOCS = (1 << 3), /*!< from --docfiles */ + QUERY_FOR_CONFIG = (1 << 4), /*!< from --configfiles */ + QUERY_FOR_DUMPFILES = (1 << 8) /*!< from --dump */ +} rpmQueryFlags; +/*@=typeuse@*/ + +/** \ingroup rpmcli + * Bit(s) to control rpmVerify() operation, stored in qva_flags. + */ +/*@-typeuse@*/ +typedef enum rpmVerifyFlags_e { + VERIFY_FILES = (1 << 9), /*!< from --nofiles */ + VERIFY_DEPS = (1 << 10), /*!< from --nodeps */ + VERIFY_SCRIPT = (1 << 11), /*!< from --noscripts */ + VERIFY_MD5 = (1 << 12) /*!< from --nomd5 */ +} rpmVerifyFlags; +/*@=typeuse@*/ + +/** \ingroup rpmcli + * Describe query/verify command line request. + */ +struct rpmQVArguments_s { + rpmQVSources qva_source; /*!< Identify CLI arg type. */ + int qva_sourceCount;/*!< Exclusive check (>1 is error). */ + int qva_flags; /*!< Bit(s) to control operation. */ +/*@unused@*/ int qva_verbose; /*!< (unused) */ +/*@only@*/ /*@null@*/ const char * qva_queryFormat; /*!< Format for headerSprintf(). */ +/*@observer@*/ /*@null@*/ const char * qva_prefix; /*!< Path to top of install tree. */ + char qva_mode; /*!< 'q' is query, 'v' is verify mode. */ + char qva_char; /*!< (unused) always ' ' */ +}; + +/** \ingroup rpmcli + */ +extern struct rpmQVArguments_s rpmQVArgs; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmQVSourcePoptTable[]; + +/** \ingroup rpmcli + */ +extern int specedit; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmQueryPoptTable[]; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmVerifyPoptTable[]; + +/*@}*/ +/* ==================================================================== */ +/** \name RPMEIU */ +/*@{*/ +/* --- install/upgrade/erase modes */ + +/** \ingroup rpmcli + * Describe database command line requests. + */ +struct rpmInstallArguments_s { + rpmtransFlags transFlags; + rpmprobFilterFlags probFilter; + rpmInstallInterfaceFlags installInterfaceFlags; + rpmEraseInterfaceFlags eraseInterfaceFlags; +/*@only@*/ rpmRelocation * relocations; + int numRelocations; + int noDeps; + int force; + int incldocs; + const char * prefix; +}; + +/** \ingroup rpmcli + */ +extern struct rpmInstallArguments_s rpmIArgs; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmInstallPoptTable[]; + +/*@}*/ +/* ==================================================================== */ +/** \name RPMDB */ +/*@{*/ +/* --- database modes */ + +/** \ingroup rpmcli + * Describe database command line requests. + */ +struct rpmDatabaseArguments_s { + int init; /*!< from --initdb */ + int rebuild; /*!< from --rebuilddb */ + int verify; /*!< from --verifydb */ +}; + +/** \ingroup rpmcli + */ +extern struct rpmDatabaseArguments_s rpmDBArgs; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmDatabasePoptTable[]; + +/*@}*/ +/* ==================================================================== */ +/** \name RPMK */ +/*@{*/ + +/** \ingroup rpmcli + * Describe signature command line request. + */ +struct rpmSignArguments_s { + rpmResignFlags addSign; /*!< from --checksig/--resign/--addsign */ + rpmCheckSigFlags checksigFlags; /*!< bits to control --checksig */ + int sign; /*!< Is a passphrase needed? */ +/*@unused@*/ char * passPhrase; +}; + +/** \ingroup rpmcli + */ +extern struct rpmSignArguments_s rpmKArgs; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmSignPoptTable[]; + +/*@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMCLI */ diff --git a/lib/rpminstall.c b/lib/rpminstall.c index ddee82c4e..be5fe6f47 100644 --- a/lib/rpminstall.c +++ b/lib/rpminstall.c @@ -4,7 +4,7 @@ #include "system.h" -#include <rpmlib.h> +#include <rpmcli.h> #include <rpmmacro.h> #include <rpmurl.h> diff --git a/lib/rpmlib.h b/lib/rpmlib.h index 627038a51..8ebccffce 100644 --- a/lib/rpmlib.h +++ b/lib/rpmlib.h @@ -610,6 +610,7 @@ void rpmFreeRpmrc(void) /* ==================================================================== */ /** \name RPMDB */ /*@{*/ + /** \ingroup rpmdb */ typedef /*@abstract@*/ struct rpmdb_s * rpmdb; @@ -1412,43 +1413,28 @@ int rpmGetFilesystemUsage(const char ** fileList, int_32 * fssizes, /*@modifies *usagesPtr @*/; /* ==================================================================== */ -/** \name RPMBT */ +/** \name RPMQV */ /*@{*/ /** \ingroup rpmcli - * Describe build command line request. - */ -struct rpmBuildArguments_s { - int buildAmount; /*!< Bit(s) to control operation. */ -/*@null@*/ const char * buildRootOverride; /*!< from --buildroot */ -/*@null@*/ char * targets; /*!< Target platform(s), comma separated. */ - int force; /*!< from --force */ - int noBuild; /*!< from --nobuild */ - int noDeps; /*!< from --nodeps */ - int noLang; /*!< from --nolang */ - int shortCircuit; /*!< from --short-circuit */ - int sign; /*!< from --sign */ - int useCatalog; /*!< from --usecatalog */ - char buildMode; /*!< Build mode (one of "btBC") */ - char buildChar; /*!< Build stage (one of "abcilps ") */ -/*@observer@*/ /*@null@*/ const char * rootdir; -}; -/** \ingroup rpmcli */ -typedef struct rpmBuildArguments_s * BTA_t; - -/** \ingroup rpmcli - */ -extern struct rpmBuildArguments_s rpmBTArgs; +typedef struct rpmQVArguments_s * QVA_t; /** \ingroup rpmcli + * The command line argument will be used to retrieve header(s) ... */ -extern struct poptOption rpmBuildPoptTable[]; - -/*@}*/ -/* ==================================================================== */ -/** \name RPMQV */ -/*@{*/ +typedef enum rpmQVSources_e { + RPMQV_PACKAGE = 0, /*!< ... from package name db search. */ + RPMQV_PATH, /*!< ... from file path db search. */ + RPMQV_ALL, /*!< ... from each installed package. */ + RPMQV_RPM, /*!< ... from reading binary rpm package. */ + RPMQV_GROUP, /*!< ... from group db search. */ + RPMQV_WHATPROVIDES, /*!< ... from provides db search. */ + RPMQV_WHATREQUIRES, /*!< ... from requires db search. */ + RPMQV_TRIGGEREDBY, /*!< ... from trigger db search. */ + RPMQV_DBOFFSET, /*!< ... from database header instance. */ + RPMQV_SPECFILE /*!< ... from spec file parse (query only). */ +} rpmQVSources; /** \ingroup rpmcli * Bit(s) for rpmVerifyFile() attributes and result. @@ -1494,69 +1480,6 @@ int rpmVerifyFile(const char * root, Header h, int filenum, int rpmVerifyScript(const char * rootDir, Header h, /*@null@*/ FD_t scriptFd); /** \ingroup rpmcli - * The command line argument will be used to retrieve header(s) ... - */ -typedef enum rpmQVSources_e { - RPMQV_PACKAGE = 0, /*!< ... from package name db search. */ - RPMQV_PATH, /*!< ... from file path db search. */ - RPMQV_ALL, /*!< ... from each installed package. */ - RPMQV_RPM, /*!< ... from reading binary rpm package. */ - RPMQV_GROUP, /*!< ... from group db search. */ - RPMQV_WHATPROVIDES, /*!< ... from provides db search. */ - RPMQV_WHATREQUIRES, /*!< ... from requires db search. */ - RPMQV_TRIGGEREDBY, /*!< ... from trigger db search. */ - RPMQV_DBOFFSET, /*!< ... from database header instance. */ - RPMQV_SPECFILE /*!< ... from spec file parse (query only). */ -} rpmQVSources; - -/** \ingroup rpmcli - * Bit(s) to control rpmQuery() operation, stored in qva_flags. - */ -/*@-typeuse@*/ -typedef enum rpmQueryFlags_e { - QUERY_FOR_LIST = (1 << 1), /*!< from --list */ - QUERY_FOR_STATE = (1 << 2), /*!< from --state */ - QUERY_FOR_DOCS = (1 << 3), /*!< from --docfiles */ - QUERY_FOR_CONFIG = (1 << 4), /*!< from --configfiles */ - QUERY_FOR_DUMPFILES = (1 << 8) /*!< from --dump */ -} rpmQueryFlags; -/*@=typeuse@*/ - -/** \ingroup rpmcli - * Bit(s) to control rpmVerify() operation, stored in qva_flags. - */ -/*@-typeuse@*/ -typedef enum rpmVerifyFlags_e { - VERIFY_FILES = (1 << 9), /*!< from --nofiles */ - VERIFY_DEPS = (1 << 10), /*!< from --nodeps */ - VERIFY_SCRIPT = (1 << 11), /*!< from --noscripts */ - VERIFY_MD5 = (1 << 12) /*!< from --nomd5 */ -} rpmVerifyFlags; -/*@=typeuse@*/ - -/** \ingroup rpmcli - * Describe query/verify command line request. - */ -typedef struct rpmQVArguments_s { - rpmQVSources qva_source; /*!< Identify CLI arg type. */ - int qva_sourceCount;/*!< Exclusive check (>1 is error). */ - int qva_flags; /*!< Bit(s) to control operation. */ -/*@unused@*/ int qva_verbose; /*!< (unused) */ -/*@only@*/ /*@null@*/ const char * qva_queryFormat; /*!< Format for headerSprintf(). */ -/*@observer@*/ /*@null@*/ const char * qva_prefix; /*!< Path to top of install tree. */ - char qva_mode; /*!< 'q' is query, 'v' is verify mode. */ - char qva_char; /*!< (unused) always ' ' */ -} * QVA_t; - -/** \ingroup rpmcli - */ -extern struct rpmQVArguments_s rpmQVArgs; - -/** \ingroup rpmcli - */ -extern struct poptOption rpmQVSourcePoptTable[]; - -/** \ingroup rpmcli * @param qva parsed query/verify options * @param db rpm database * @param h header to use for query/verify @@ -1576,14 +1499,6 @@ int showMatches(QVA_t qva, /*@only@*/ /*@null@*/ rpmdbMatchIterator mi, /*@modifies mi @*/; /** \ingroup rpmcli - */ -extern int specedit; - -/** \ingroup rpmcli - */ -extern struct poptOption rpmQueryPoptTable[]; - -/** \ingroup rpmcli * Display list of tags that can be used in --queryformat. * @param fp file handle to use for display */ @@ -1625,10 +1540,6 @@ int rpmQuery(QVA_t qva, rpmQVSources source, const char * arg) /*@modifies fileSystem @*/; /** \ingroup rpmcli - */ -extern struct poptOption rpmVerifyPoptTable[]; - -/** \ingroup rpmcli * Display results of package verify. * @param qva parsed query/verify options * @param db rpm database @@ -1665,7 +1576,11 @@ typedef enum rpmInstallInterfaceFlags_e { INSTALL_NOORDER = (1 << 3), /*!< from --noorder */ INSTALL_LABEL = (1 << 4), /*!< from --verbose (notify) */ INSTALL_UPGRADE = (1 << 5), /*!< from --upgrade */ - INSTALL_FRESHEN = (1 << 6) /*!< from --freshen */ + INSTALL_FRESHEN = (1 << 6), /*!< from --freshen */ + INSTALL_NOERASE = (1 << 7), /*!< from --install */ +/*@-enummemuse@*/ + INSTALL_ERASE = (1 << 8) /*!< from --erase */ +/*@=enummemuse@*/ } rpmInstallInterfaceFlags; /** \ingroup rpmcli @@ -1801,11 +1716,14 @@ rpmVerifySignatureReturn rpmVerifySignature(const char *file, * Bit(s) to control rpmCheckSig() operation. */ typedef enum rpmCheckSigFlags_e { - CHECKSIG_NONE = 0, /*!< Don't check any signatures. */ +/*@-enummemuse@*/ + CHECKSIG_NONE = 0, /*!< Don't check any signatures. */ +/*@=enummemuse@*/ CHECKSIG_PGP = (1 << 0), /*!< if not --nopgp */ CHECKSIG_MD5 = (1 << 1), /*!< if not --nomd5 */ CHECKSIG_GPG = (1 << 2) /*!< if not --nogpg */ } rpmCheckSigFlags; +#define CHECKSIG_ALL (CHECKSIG_PGP|CHECKSIG_MD5|CHECKSIG_GPG) /** \ingroup rpmcli * Check elements in signature header. @@ -1820,7 +1738,8 @@ int rpmCheckSig(rpmCheckSigFlags flags, /*@null@*/ const char ** argv) * Bit(s) to control rpmReSign() operation. */ typedef enum rpmResignFlags_e { - RESIGN_NEW_SIGNATURE = 0, /*!< from --resign */ + RESIGN_CHK_SIGNATURE = 0, /*!< from --checksig */ + RESIGN_NEW_SIGNATURE, /*!< from --resign */ RESIGN_ADD_SIGNATURE /*!< from --addsign */ } rpmResignFlags; diff --git a/lib/verify.c b/lib/verify.c index b6622fc33..fb35919fe 100644 --- a/lib/verify.c +++ b/lib/verify.c @@ -5,7 +5,7 @@ #include "system.h" -#include <rpmlib.h> +#include <rpmcli.h> #include <rpmurl.h> #include "psm.h" @@ -182,29 +182,30 @@ int rpmVerifyFile(const char * root, Header h, int filenum, const char ** md5List; int mdt; - (void) hge(h, RPMTAG_FILEMD5S, &mdt, (void **) &md5List, NULL); - if (useBrokenMd5) { - rc = mdfileBroken(filespec, md5sum); - } else { - rc = mdfile(filespec, md5sum); - } - - if (rc) - *result |= (RPMVERIFY_READFAIL|RPMVERIFY_MD5); - else if (strcmp(md5sum, md5List[filenum])) + if (!hge(h, RPMTAG_FILEMD5S, &mdt, (void **) &md5List, NULL)) *result |= RPMVERIFY_MD5; + else { + if (useBrokenMd5) + rc = mdfileBroken(filespec, md5sum); + else + rc = mdfile(filespec, md5sum); + + if (rc) + *result |= (RPMVERIFY_READFAIL|RPMVERIFY_MD5); + else if (strcmp(md5sum, md5List[filenum])) + *result |= RPMVERIFY_MD5; + } md5List = hfd(md5List, mdt); } if (flags & RPMVERIFY_LINKTO) { char linkto[1024]; - int size; + int size = 0; const char ** linktoList; int ltt; - (void) hge(h, RPMTAG_FILELINKTOS, <t, (void **) &linktoList, NULL); - size = readlink(filespec, linkto, sizeof(linkto)-1); - if (size == -1) + if (!hge(h, RPMTAG_FILELINKTOS, <t, (void **) &linktoList, NULL) + || (size = readlink(filespec, linkto, sizeof(linkto)-1) == -1)) *result |= (RPMVERIFY_READLINKFAIL|RPMVERIFY_LINKTO); else { linkto[size] = '\0'; @@ -217,8 +218,8 @@ int rpmVerifyFile(const char * root, Header h, int filenum, if (flags & RPMVERIFY_FILESIZE) { int_32 * sizeList; - (void) hge(h, RPMTAG_FILESIZES, NULL, (void **) &sizeList, NULL); - if (sizeList[filenum] != sb.st_size) + if (!hge(h, RPMTAG_FILESIZES, NULL, (void **) &sizeList, NULL) + || sizeList[filenum] != sb.st_size) *result |= RPMVERIFY_FILESIZE; } @@ -233,12 +234,13 @@ int rpmVerifyFile(const char * root, Header h, int filenum, if (flags & RPMVERIFY_RDEV) { if (S_ISCHR(modeList[filenum]) != S_ISCHR(sb.st_mode) || - S_ISBLK(modeList[filenum]) != S_ISBLK(sb.st_mode)) { + S_ISBLK(modeList[filenum]) != S_ISBLK(sb.st_mode)) + { *result |= RPMVERIFY_RDEV; } else if (S_ISDEV(modeList[filenum]) && S_ISDEV(sb.st_mode)) { unsigned short * rdevList; - (void) hge(h, RPMTAG_FILERDEVS, NULL, (void **) &rdevList, NULL); - if (rdevList[filenum] != sb.st_rdev) + if (!hge(h, RPMTAG_FILERDEVS, NULL, (void **) &rdevList, NULL) + || rdevList[filenum] != sb.st_rdev) *result |= RPMVERIFY_RDEV; } } @@ -246,8 +248,8 @@ int rpmVerifyFile(const char * root, Header h, int filenum, if (flags & RPMVERIFY_MTIME) { int_32 * mtimeList; - (void) hge(h, RPMTAG_FILEMTIMES, NULL, (void **) &mtimeList, NULL); - if (mtimeList[filenum] != sb.st_mtime) + if (!hge(h, RPMTAG_FILEMTIMES, NULL, (void **) &mtimeList, NULL) + || mtimeList[filenum] != sb.st_mtime) *result |= RPMVERIFY_MTIME; } @@ -344,7 +346,7 @@ static int verifyHeader(QVA_t qva, Header h) const char * prefix = (qva->qva_prefix ? qva->qva_prefix : ""); const char ** fileNames = NULL; int count; - int_32 * fileFlagsList = NULL; + int_32 * fileFlags = NULL; rpmVerifyAttrs verifyResult = 0; rpmVerifyAttrs omitMask = !(qva->qva_flags & VERIFY_MD5) ? RPMVERIFY_MD5 : RPMVERIFY_NONE; @@ -354,7 +356,7 @@ static int verifyHeader(QVA_t qva, Header h) te = t = buf; *te = '\0'; - if (!hge(h, RPMTAG_FILEFLAGS, NULL, (void **) &fileFlagsList, NULL)) + if (!hge(h, RPMTAG_FILEFLAGS, NULL, (void **) &fileFlags, NULL)) goto exit; if (!headerIsEntry(h, RPMTAG_BASENAMES)) @@ -367,9 +369,11 @@ static int verifyHeader(QVA_t qva, Header h) rc = rpmVerifyFile(prefix, h, i, &verifyResult, omitMask); if (rc) { - sprintf(te, _("missing %s"), fileNames[i]); - te += strlen(te); - ec = rc; + if (!(fileFlags[i] & RPMFILE_MISSINGOK) || rpmIsVerbose()) { + sprintf(te, _("missing %s"), fileNames[i]); + te += strlen(te); + ec = rc; + } } else if (verifyResult) { const char * size, * md5, * link, * mtime, * mode; const char * group, * user, * rdev; @@ -402,7 +406,7 @@ static int verifyHeader(QVA_t qva, Header h) sprintf(te, "%s%s%s%s%s%s%s%s %c %s", size, mode, md5, rdev, link, user, group, mtime, - fileFlagsList[i] & RPMFILE_CONFIG ? 'c' : ' ', + fileFlags[i] & RPMFILE_CONFIG ? 'c' : ' ', fileNames[i]); te += strlen(te); } diff --git a/perl/Makefile.in b/perl/Makefile.in index 96b65be32..919a24b8a 100644 --- a/perl/Makefile.in +++ b/perl/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated automatically by automake 1.4-p2 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation @@ -80,6 +80,8 @@ DATADIRNAME = @DATADIRNAME@ DBLIBOBJS = @DBLIBOBJS@ DBLIBSRCS = @DBLIBSRCS@ DLLTOOL = @DLLTOOL@ +ECHO = @ECHO@ +EXEEXT = @EXEEXT@ FINDPROVIDES = @FINDPROVIDES@ FINDREQUIRES = @FINDREQUIRES@ FIXPERMS = @FIXPERMS@ @@ -112,6 +114,7 @@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PGPBIN = @PGPBIN@ POFILES = @POFILES@ @@ -127,6 +130,7 @@ RPMGID = @RPMGID@ RPMGROUP = @RPMGROUP@ RPMUID = @RPMUID@ RPMUSER = @RPMUSER@ +STRIP = @STRIP@ SYSCONFIGDIR = @SYSCONFIGDIR@ U = @U@ UNZIPBIN = @UNZIPBIN@ diff --git a/po/POTFILES.in b/po/POTFILES.in index 826e08a10..5dc648f01 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -36,6 +36,8 @@ lib/md5sum.c lib/misc.c lib/package.c lib/poptBT.c +lib/poptI.c +lib/poptK.c lib/poptQV.c lib/problems.c lib/psm.c @@ -53,6 +55,7 @@ rpmdb/db3.c rpmdb/dbconfig.c rpmdb/falloc.c rpmdb/fprint.c +rpmdb/poptDB.c rpmdb/rpmhash.c rpmdb/rpmdb.c rpmio/base64.c diff --git a/python/Makefile.in b/python/Makefile.in index 185b33b4e..a810588c1 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am +# Makefile.in generated automatically by automake 1.4-p2 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation @@ -80,6 +80,8 @@ DATADIRNAME = @DATADIRNAME@ DBLIBOBJS = @DBLIBOBJS@ DBLIBSRCS = @DBLIBSRCS@ DLLTOOL = @DLLTOOL@ +ECHO = @ECHO@ +EXEEXT = @EXEEXT@ FINDPROVIDES = @FINDPROVIDES@ FINDREQUIRES = @FINDREQUIRES@ FIXPERMS = @FIXPERMS@ @@ -112,6 +114,7 @@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PGPBIN = @PGPBIN@ POFILES = @POFILES@ @@ -127,6 +130,7 @@ RPMGID = @RPMGID@ RPMGROUP = @RPMGROUP@ RPMUID = @RPMUID@ RPMUSER = @RPMUSER@ +STRIP = @STRIP@ SYSCONFIGDIR = @SYSCONFIGDIR@ U = @U@ UNZIPBIN = @UNZIPBIN@ @@ -206,6 +210,7 @@ LDFLAGS = @LDFLAGS@ librpmmodule_la_LDFLAGS = librpmmodule_la_LIBADD = librpmmodule_la_OBJECTS = rpmmodule.lo hash.lo upgrade.lo +python_PROGRAMS = rpmmodule.so PROGRAMS = $(python_PROGRAMS) rpmmodule_so_OBJECTS = @@ -229,7 +234,7 @@ OBJECTS = $(librpmmodule_la_OBJECTS) $(rpmmodule_so_OBJECTS) all: all-redirect .SUFFIXES: -.SUFFIXES: .S .c .lo .o .s +.SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --foreign python/Makefile @@ -247,6 +252,11 @@ distclean-noinstLTLIBRARIES: maintainer-clean-noinstLTLIBRARIES: +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + .s.o: $(COMPILE) -c $< @@ -255,6 +265,7 @@ maintainer-clean-noinstLTLIBRARIES: mostlyclean-compile: -rm -f *.o core *.core + -rm -f *.$(OBJEXT) clean-compile: @@ -1,5 +1,6 @@ #include "system.h" +#include <rpmcli.h> #include <rpmbuild.h> #include <rpmurl.h> @@ -24,7 +25,7 @@ enum modes { MODE_UNKNOWN = 0, MODE_QUERY = (1 << 0), MODE_INSTALL = (1 << 1), - MODE_UNINSTALL = (1 << 2), + MODE_ERASE = (1 << 2), MODE_VERIFY = (1 << 3), MODE_BUILD = (1 << 4), MODE_REBUILD = (1 << 5), @@ -40,7 +41,7 @@ enum modes { #define MODES_QV (MODE_QUERY | MODE_VERIFY) #define MODES_BT (MODE_BUILD | MODE_TARBUILD | MODE_REBUILD | MODE_RECOMPILE) -#define MODES_IE (MODE_INSTALL | MODE_UNINSTALL) +#define MODES_IE (MODE_INSTALL | MODE_ERASE) #define MODES_DB (MODE_INITDB | MODE_REBUILDDB | MODE_VERIFYDB) #define MODES_K (MODE_CHECKSIG | MODES_RESIGN) @@ -730,18 +731,18 @@ int main(int argc, const char ** argv) break; case 'u': - if (bigMode != MODE_UNKNOWN && bigMode != MODE_UNINSTALL) + if (bigMode != MODE_UNKNOWN && bigMode != MODE_ERASE) argerror(_("only one major mode may be specified")); - bigMode = MODE_UNINSTALL; + bigMode = MODE_ERASE; rpmMessage(RPMMESS_ERROR, _("-u and --uninstall are deprecated and no" " longer work.\n")); rpmMessage(RPMMESS_ERROR, _("Use -e or --erase instead.\n")); exit(EXIT_FAILURE); case 'e': - if (bigMode != MODE_UNKNOWN && bigMode != MODE_UNINSTALL) + if (bigMode != MODE_UNKNOWN && bigMode != MODE_ERASE) argerror(_("only one major mode may be specified")); - bigMode = MODE_UNINSTALL; + bigMode = MODE_ERASE; break; case 'v': @@ -959,7 +960,7 @@ int main(int argc, const char ** argv) argerror(_("--ignoresize may only be specified during package " "installation")); - if (allMatches && bigMode != MODE_UNINSTALL) + if (allMatches && bigMode != MODE_ERASE) argerror(_("--allmatches may only be specified during package " "erasure")); @@ -967,11 +968,11 @@ int main(int argc, const char ** argv) argerror(_("--allfiles may only be specified during package " "installation")); - if (justdb && bigMode != MODE_INSTALL && bigMode != MODE_UNINSTALL) + if (justdb && bigMode != MODE_INSTALL && bigMode != MODE_ERASE) argerror(_("--justdb may only be specified during package " "installation and erasure")); - if (bigMode != MODE_INSTALL && bigMode != MODE_UNINSTALL && + if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE && bigMode != MODE_VERIFY && (noScripts | noPre | noPost | noPreun | noPostun | noTriggers | noTPrein | noTIn | noTUn | noTPostun)) @@ -982,7 +983,7 @@ int main(int argc, const char ** argv) argerror(_("--apply may only be specified during package " "installation")); - if (bigMode != MODE_INSTALL && bigMode != MODE_UNINSTALL && + if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE && (noTriggers | noTPrein | noTIn | noTUn | noTPostun)) argerror(_("trigger disabling options may only be specified during package " "installation and erasure")); @@ -1149,7 +1150,7 @@ int main(int argc, const char ** argv) case MODE_TARBUILD: break; - case MODE_UNINSTALL: + case MODE_ERASE: if (!poptPeekArg(optCon)) argerror(_("no packages given for uninstall")); diff --git a/rpm.spec.in b/rpm.spec.in index 3490baa64..44f88f948 100644 --- a/rpm.spec.in +++ b/rpm.spec.in @@ -221,6 +221,9 @@ fi %postun python -p /sbin/ldconfig %endif +%define rpmattr %attr(0755, @RPMUSER@, @RPMGROUP@) +%define rpmdbattr %rpmattr %verify(not md5 size mtime) %ghost + %files %defattr(-,root,root) %doc RPM-PGP-KEY RPM-GPG-KEY CHANGES GROUPS doc/manual/[a-z]* @@ -232,42 +235,42 @@ fi %dir /etc/rpm %config(noreplace,missingok) /etc/rpm/macros.db1 %attr(0755, @RPMUSER@, @RPMGROUP@) %dir /var/lib/rpm -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Basenames -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Conflictname -#%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/__db.001 -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Dirnames -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Group -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Installtid -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Name -#%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Packages -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Providename -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Provideversion -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Removetid -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Requirename -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Requireversion -%attr(0755, @RPMUSER@, @RPMGROUP@) %ghost /var/lib/rpm/Triggername +%rpmdbattr /var/lib/rpm/Basenames +%rpmdbattr /var/lib/rpm/Conflictname +#%rpmdbattr /var/lib/rpm/__db.001 +%rpmdbattr /var/lib/rpm/Dirnames +%rpmdbattr /var/lib/rpm/Group +%rpmdbattr /var/lib/rpm/Installtid +%rpmdbattr /var/lib/rpm/Name +#%rpmdbattr /var/lib/rpm/Packages +%rpmdbattr /var/lib/rpm/Providename +%rpmdbattr /var/lib/rpm/Provideversion +%rpmdbattr /var/lib/rpm/Removetid +%rpmdbattr /var/lib/rpm/Requirename +%rpmdbattr /var/lib/rpm/Requireversion +%rpmdbattr /var/lib/rpm/Triggername %endif -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpm2cpio -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/gendiff -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpmdb -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpm[eiukqv] -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpmsign -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpmquery -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpmverify +%rpmattr %{__prefix}/bin/rpm2cpio +%rpmattr %{__prefix}/bin/gendiff +%rpmattr %{__prefix}/bin/rpmdb +%rpmattr %{__prefix}/bin/rpm[eiukqv] +%rpmattr %{__prefix}/bin/rpmsign +%rpmattr %{__prefix}/bin/rpmquery +%rpmattr %{__prefix}/bin/rpmverify %{__prefix}/lib/librpm.so.* %{__prefix}/lib/librpmdb.so.* %{__prefix}/lib/librpmio.so.* %{__prefix}/lib/librpmbuild.so.* -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/config.guess -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/config.sub -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/convertrpmrc.sh +%rpmattr %{__prefix}/lib/rpm/config.guess +%rpmattr %{__prefix}/lib/rpm/config.sub +%rpmattr %{__prefix}/lib/rpm/convertrpmrc.sh %attr(0644, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/macros -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/mkinstalldirs -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpm.* -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpm[deiukqv] +%rpmattr %{__prefix}/lib/rpm/mkinstalldirs +%rpmattr %{__prefix}/lib/rpm/rpm.* +%rpmattr %{__prefix}/lib/rpm/rpm[deiukqv] %attr(0644, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpmpopt* %attr(0644, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpmrc @@ -328,31 +331,31 @@ fi %dir %{__prefix}/src/redhat/SRPMS %dir %{__prefix}/src/redhat/RPMS %{__prefix}/src/redhat/RPMS/* -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpmbuild -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/brp-* -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/check-prereqs -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/cpanflute -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/find-lang.sh -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/find-prov.pl -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/find-provides -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/find-provides.perl -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/find-req.pl -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/find-requires -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/find-requires.perl -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/get_magic.pl -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/getpo.sh -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/http.req -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/javadeps -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/magic.prov -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/magic.req -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/perl.prov -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/perl.req -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpm[bt] -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpmdiff -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpmdiff.cgi -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/u_pkg.sh -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/vpkg-provides.sh -%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/vpkg-provides2.sh +%rpmattr %{__prefix}/bin/rpmbuild +%rpmattr %{__prefix}/lib/rpm/brp-* +%rpmattr %{__prefix}/lib/rpm/check-prereqs +%rpmattr %{__prefix}/lib/rpm/cpanflute +%rpmattr %{__prefix}/lib/rpm/find-lang.sh +%rpmattr %{__prefix}/lib/rpm/find-prov.pl +%rpmattr %{__prefix}/lib/rpm/find-provides +%rpmattr %{__prefix}/lib/rpm/find-provides.perl +%rpmattr %{__prefix}/lib/rpm/find-req.pl +%rpmattr %{__prefix}/lib/rpm/find-requires +%rpmattr %{__prefix}/lib/rpm/find-requires.perl +%rpmattr %{__prefix}/lib/rpm/get_magic.pl +%rpmattr %{__prefix}/lib/rpm/getpo.sh +%rpmattr %{__prefix}/lib/rpm/http.req +%rpmattr %{__prefix}/lib/rpm/javadeps +%rpmattr %{__prefix}/lib/rpm/magic.prov +%rpmattr %{__prefix}/lib/rpm/magic.req +%rpmattr %{__prefix}/lib/rpm/perl.prov +%rpmattr %{__prefix}/lib/rpm/perl.req +%rpmattr %{__prefix}/lib/rpm/rpm[bt] +%rpmattr %{__prefix}/lib/rpm/rpmdiff +%rpmattr %{__prefix}/lib/rpm/rpmdiff.cgi +%rpmattr %{__prefix}/lib/rpm/u_pkg.sh +%rpmattr %{__prefix}/lib/rpm/vpkg-provides.sh +%rpmattr %{__prefix}/lib/rpm/vpkg-provides2.sh %{__prefix}%{__share}/man/man8/rpmbuild.8* diff --git a/rpmdb/Makefile.am b/rpmdb/Makefile.am index 288cc6de5..33d904278 100644 --- a/rpmdb/Makefile.am +++ b/rpmdb/Makefile.am @@ -27,7 +27,8 @@ LIBS = DB3LOBJS = $(shell cat $(top_builddir)/$(WITH_DB_SUBDIR)/db3lobjs) lib_LTLIBRARIES = librpmdb.la -librpmdb_la_SOURCES = $(DBLIBSRCS) dbconfig.c fprint.c rpmhash.c rpmdb.c +librpmdb_la_SOURCES = $(DBLIBSRCS) \ + dbconfig.c fprint.c poptDB.c rpmhash.c rpmdb.c librpmdb_la_LDFLAGS = @libdb3@ librpmdb_la_LIBADD = $(DBLIBOBJS) $(DB3LOBJS) librpmdb_la_DEPENDENCIES = $(DBLIBOBJS) .created diff --git a/rpmdb/db3.c b/rpmdb/db3.c index 051d4dee1..0090a17e2 100644 --- a/rpmdb/db3.c +++ b/rpmdb/db3.c @@ -163,7 +163,7 @@ static int db_init(dbiIndex dbi, const char * dbhome, if (eflags & DB_JOINENV) eflags &= DB_JOINENV; if (dbfile) - rpmMessage(RPMMESS_DEBUG, _("opening db environment %s/%s %s\n"), + rpmMessage(RPMMESS_DEBUG, _("opening db environment %s/%s %s\n"), dbhome, dbfile, prDbiOpenFlags(eflags, 1)); /* XXX Can't do RPC w/o host. */ @@ -834,6 +834,12 @@ static int db3open(/*@keep@*/ rpmdb rpmdb, int rpmtag, dbiIndex * dbip) dbf = _free(dbf); } + /* + * Turn off verify-on-close if opening read-only. + */ + if (oflags & DB_RDONLY) + dbi->dbi_verify_on_close = 0; + dbi->dbi_dbinfo = NULL; if (dbi->dbi_use_dbenv) diff --git a/rpmdb/dbconfig.c b/rpmdb/dbconfig.c index 49b24d7f7..cd1cdadda 100644 --- a/rpmdb/dbconfig.c +++ b/rpmdb/dbconfig.c @@ -36,70 +36,67 @@ struct dbOption { /*@observer@*/ /*@null@*/ const char * argDescrip; /*!< argument description for autohelp */ }; -#define _POPT_SET_BIT (POPT_ARG_VAL|POPT_ARGFLAG_OR) -#define _POPT_UNSET_BIT (POPT_ARG_VAL|POPT_ARGFLAG_NAND) - /*@-immediatetrans -exportlocal -exportheadervar@*/ /** \ingroup db3 */ struct dbOption rdbOptions[] = { /* XXX DB_CXX_NO_EXCEPTIONS */ - { "client", 0,_POPT_SET_BIT, &db3dbi.dbi_ecflags, DB_CLIENT, + { "client", 0,POPT_BIT_SET, &db3dbi.dbi_ecflags, DB_CLIENT, NULL, NULL }, - { "xa_create", 0,_POPT_SET_BIT, &db3dbi.dbi_cflags, DB_XA_CREATE, + { "xa_create", 0,POPT_BIT_SET, &db3dbi.dbi_cflags, DB_XA_CREATE, NULL, NULL }, - { "create", 0,_POPT_SET_BIT, &db3dbi.dbi_oeflags, DB_CREATE, + { "create", 0,POPT_BIT_SET, &db3dbi.dbi_oeflags, DB_CREATE, NULL, NULL }, - { "thread", 0,_POPT_SET_BIT, &db3dbi.dbi_oeflags, DB_THREAD, + { "thread", 0,POPT_BIT_SET, &db3dbi.dbi_oeflags, DB_THREAD, NULL, NULL }, - { "force", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_FORCE, + { "force", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_FORCE, NULL, NULL }, - { "cdb", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_INIT_CDB, + { "cdb", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_INIT_CDB, NULL, NULL }, - { "lock", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_INIT_LOCK, + { "lock", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_INIT_LOCK, NULL, NULL }, - { "log", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_INIT_LOG, + { "log", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_INIT_LOG, NULL, NULL }, - { "mpool", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_INIT_MPOOL, + { "mpool", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_INIT_MPOOL, NULL, NULL }, - { "txn", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_INIT_TXN, + { "txn", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_INIT_TXN, NULL, NULL }, - { "joinenv", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_JOINENV, + { "joinenv", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_JOINENV, NULL, NULL }, - { "recover", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_RECOVER, + { "recover", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_RECOVER, NULL, NULL }, - { "recover_fatal", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_RECOVER_FATAL, + { "recover_fatal", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_RECOVER_FATAL, NULL, NULL }, - { "shared", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_SYSTEM_MEM, + { "shared", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_SYSTEM_MEM, NULL, NULL }, - { "txn_nosync", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_TXN_NOSYNC, + { "txn_nosync", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_TXN_NOSYNC, NULL, NULL }, - { "use_environ_root", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_USE_ENVIRON_ROOT, + { "use_environ_root", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_USE_ENVIRON_ROOT, NULL, NULL }, - { "use_environ", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_USE_ENVIRON, + { "use_environ", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_USE_ENVIRON, NULL, NULL }, - { "lockdown", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_LOCKDOWN, + { "lockdown", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_LOCKDOWN, NULL, NULL }, - { "private", 0,_POPT_SET_BIT, &db3dbi.dbi_eflags, DB_PRIVATE, + { "private", 0,POPT_BIT_SET, &db3dbi.dbi_eflags, DB_PRIVATE, NULL, NULL }, - { "txn_sync", 0,_POPT_SET_BIT, &db3dbi.dbi_tflags, DB_TXN_SYNC, + { "txn_sync", 0,POPT_BIT_SET, &db3dbi.dbi_tflags, DB_TXN_SYNC, NULL, NULL }, - { "txn_nowait",0,_POPT_SET_BIT, &db3dbi.dbi_tflags, DB_TXN_NOWAIT, + { "txn_nowait",0,POPT_BIT_SET, &db3dbi.dbi_tflags, DB_TXN_NOWAIT, NULL, NULL }, - { "excl", 0,_POPT_SET_BIT, &db3dbi.dbi_oflags, DB_EXCL, + { "excl", 0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_EXCL, NULL, NULL }, - { "nommap", 0,_POPT_SET_BIT, &db3dbi.dbi_oflags, DB_NOMMAP, + { "nommap", 0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_NOMMAP, NULL, NULL }, - { "rdonly", 0,_POPT_SET_BIT, &db3dbi.dbi_oflags, DB_RDONLY, + { "rdonly", 0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_RDONLY, NULL, NULL }, - { "truncate", 0,_POPT_SET_BIT, &db3dbi.dbi_oflags, DB_TRUNCATE, + { "truncate", 0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_TRUNCATE, NULL, NULL }, - { "fcntl_locking",0,_POPT_SET_BIT, &db3dbi.dbi_oflags, DB_FCNTL_LOCKING, + { "fcntl_locking",0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_FCNTL_LOCKING, NULL, NULL }, { "btree", 0,POPT_ARG_VAL, &db3dbi.dbi_type, DB_BTREE, @@ -167,13 +164,13 @@ struct dbOption rdbOptions[] = { { "tas_spins", 0,POPT_ARG_INT, &db3dbi.dbi_tas_spins, 0, NULL, NULL }, - { "chkpoint", 0,_POPT_SET_BIT, &db3dbi.dbi_verbose, DB_VERB_CHKPOINT, + { "chkpoint", 0,POPT_BIT_SET, &db3dbi.dbi_verbose, DB_VERB_CHKPOINT, NULL, NULL }, - { "deadlock", 0,_POPT_SET_BIT, &db3dbi.dbi_verbose, DB_VERB_DEADLOCK, + { "deadlock", 0,POPT_BIT_SET, &db3dbi.dbi_verbose, DB_VERB_DEADLOCK, NULL, NULL }, - { "recovery", 0,_POPT_SET_BIT, &db3dbi.dbi_verbose, DB_VERB_RECOVERY, + { "recovery", 0,POPT_BIT_SET, &db3dbi.dbi_verbose, DB_VERB_RECOVERY, NULL, NULL }, - { "waitsfor", 0,_POPT_SET_BIT, &db3dbi.dbi_verbose, DB_VERB_WAITSFOR, + { "waitsfor", 0,POPT_BIT_SET, &db3dbi.dbi_verbose, DB_VERB_WAITSFOR, NULL, NULL }, { "verbose", 0,POPT_ARG_VAL, &db3dbi.dbi_verbose, -1, NULL, NULL }, @@ -211,27 +208,27 @@ struct dbOption rdbOptions[] = { /* XXX bt_compare */ /* XXX bt_dup_compare */ /* XXX bt_prefix */ - { "bt_dup", 0,_POPT_SET_BIT, &db3dbi.dbi_bt_flags, DB_DUP, + { "bt_dup", 0,POPT_BIT_SET, &db3dbi.dbi_bt_flags, DB_DUP, NULL, NULL }, - { "bt_dupsort",0,_POPT_SET_BIT, &db3dbi.dbi_bt_flags, DB_DUPSORT, + { "bt_dupsort",0,POPT_BIT_SET, &db3dbi.dbi_bt_flags, DB_DUPSORT, NULL, NULL }, - { "bt_recnum", 0,_POPT_SET_BIT, &db3dbi.dbi_bt_flags, DB_RECNUM, + { "bt_recnum", 0,POPT_BIT_SET, &db3dbi.dbi_bt_flags, DB_RECNUM, NULL, NULL }, - { "bt_revsplitoff", 0,_POPT_SET_BIT, &db3dbi.dbi_bt_flags, DB_REVSPLITOFF, + { "bt_revsplitoff", 0,POPT_BIT_SET, &db3dbi.dbi_bt_flags, DB_REVSPLITOFF, NULL, NULL }, - { "h_dup", 0,_POPT_SET_BIT, &db3dbi.dbi_h_flags, DB_DUP, + { "h_dup", 0,POPT_BIT_SET, &db3dbi.dbi_h_flags, DB_DUP, NULL, NULL }, - { "h_dupsort", 0,_POPT_SET_BIT, &db3dbi.dbi_h_flags, DB_DUPSORT, + { "h_dupsort", 0,POPT_BIT_SET, &db3dbi.dbi_h_flags, DB_DUPSORT, NULL, NULL }, { "h_ffactor", 0,POPT_ARG_INT, &db3dbi.dbi_h_ffactor, 0, NULL, NULL }, { "h_nelem", 0,POPT_ARG_INT, &db3dbi.dbi_h_nelem, 0, NULL, NULL }, - { "re_renumber", 0,_POPT_SET_BIT, &db3dbi.dbi_re_flags, DB_RENUMBER, + { "re_renumber", 0,POPT_BIT_SET, &db3dbi.dbi_re_flags, DB_RENUMBER, NULL, NULL }, - { "re_snapshot",0,_POPT_SET_BIT, &db3dbi.dbi_re_flags, DB_SNAPSHOT, + { "re_snapshot",0,POPT_BIT_SET, &db3dbi.dbi_re_flags, DB_SNAPSHOT, NULL, NULL }, { "re_delim", 0,POPT_ARG_INT, &db3dbi.dbi_re_delim, 0, NULL, NULL }, @@ -395,8 +392,8 @@ dbiIndex db3New(rpmdb rpmdb, int rpmtag) /* Toggle the flags for negated tokens, if necessary. */ argInfo = opt->argInfo; - if (argInfo == _POPT_SET_BIT && *o == '!' && ((tok - o) % 2)) - argInfo = _POPT_UNSET_BIT; + if (argInfo == POPT_BIT_SET && *o == '!' && ((tok - o) % 2)) + argInfo = POPT_BIT_CLR; /* Save value in template as appropriate. */ switch (argInfo & POPT_ARG_MASK) { @@ -495,10 +492,8 @@ dbiIndex db3New(rpmdb rpmdb, int rpmtag) dbi->dbi_tear_down = 1; } -#ifdef NOTYET if ((dbi->dbi_bt_flags | dbi->dbi_h_flags) & DB_DUP) dbi->dbi_permit_dups = 1; -#endif return dbi; } @@ -512,7 +507,7 @@ const char *const prDbiOpenFlags(int dbflags, int print_dbenv_flags) oe = buf; *oe = '\0'; for (opt = rdbOptions; opt->longName != NULL; opt++) { - if (opt->argInfo != _POPT_SET_BIT) + if (opt->argInfo != POPT_BIT_SET) continue; if (print_dbenv_flags) { if (!(opt->arg == &db3dbi.dbi_oeflags || diff --git a/rpmdb/poptDB.c b/rpmdb/poptDB.c new file mode 100644 index 000000000..0d9ee1fe9 --- /dev/null +++ b/rpmdb/poptDB.c @@ -0,0 +1,36 @@ +/** \ingroup rpmcli + * \file rpmdb/poptDB.c + * Popt tables for database modes. + */ + +#include "system.h" + +#include <rpmcli.h> +#include <rpmurl.h> + +#include "debug.h" + +struct rpmDatabaseArguments_s rpmDBArgs; + +/*@-redecl@*/ +extern int _noDirTokens; +/*@=redecl@*/ + +/** + */ +struct poptOption rpmDatabasePoptTable[] = { + { "initdb", '\0', POPT_ARG_VAL, &rpmDBArgs.init, 1, + N_("initialize database"), NULL}, + { "rebuilddb", '\0', POPT_ARG_VAL, &rpmDBArgs.rebuild, 1, + N_("rebuild database inverted lists from installed package headers"), + NULL}, + { "verifydb", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmDBArgs.verify, 1, + N_("verify database files"), NULL}, + { "nodirtokens", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_noDirTokens, 1, + N_("generate headers compatible with (legacy) rpm[23] packaging"), + NULL}, + { "dirtokens", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_noDirTokens, 0, + N_("generate headers compatible with rpm4 packaging"), NULL}, + + POPT_TABLEEND +}; diff --git a/rpmdb/rpmdb.h b/rpmdb/rpmdb.h index 998b24baf..c5d2728ed 100644 --- a/rpmdb/rpmdb.h +++ b/rpmdb/rpmdb.h @@ -10,7 +10,12 @@ #include "fprint.h" +/** + */ typedef /*@abstract@*/ struct _dbiIndexItem * dbiIndexItem; + +/** + */ typedef /*@abstract@*/ struct _dbiIndex * dbiIndex; /* this will break if sizeof(int) != 4 */ diff --git a/rpmio/tdigest.c b/rpmio/tdigest.c index 8460c4242..d18d9db66 100644 --- a/rpmio/tdigest.c +++ b/rpmio/tdigest.c @@ -6,12 +6,10 @@ static rpmDigestFlags flags = RPMDIGEST_MD5; extern int _rpmio_debug; -#define _POPT_SET_BIT (POPT_ARG_VAL|POPT_ARGFLAG_OR) - static struct poptOption optionsTable[] = { - { "md5", '\0', _POPT_SET_BIT, &flags, RPMDIGEST_MD5, NULL, NULL }, - { "sha1",'\0', _POPT_SET_BIT, &flags, RPMDIGEST_SHA1, NULL, NULL }, - { "native",'\0', _POPT_SET_BIT, &flags, RPMDIGEST_NATIVE, NULL, NULL }, + { "md5", '\0', POPT_BIT_SET, &flags, RPMDIGEST_MD5, NULL, NULL }, + { "sha1",'\0', POPT_BIT_SET, &flags, RPMDIGEST_SHA1, NULL, NULL }, + { "native",'\0', POPT_BIT_SET, &flags, RPMDIGEST_NATIVE, NULL, NULL }, { "debug",'d', POPT_ARG_VAL, &_rpmio_debug, -1, NULL, NULL }, { NULL, '\0', 0, NULL, 0, NULL, NULL } }; @@ -10,6 +10,7 @@ #define IAM_RPMK #endif +#include <rpmcli.h> #include <rpmbuild.h> #include <rpmurl.h> @@ -19,12 +20,15 @@ #define GETOPT_RECOMPILE 1004 #endif +#ifdef DYING #ifdef IAM_RPMDB #define GETOPT_REBUILDDB 1013 #define GETOPT_VERIFYDB 1023 static int initdb = 0; #endif +#endif +#ifdef DYING #ifdef IAM_RPMEIU #define GETOPT_INSTALL 1014 #define GETOPT_RELOCATE 1016 @@ -32,13 +36,16 @@ static int initdb = 0; static int incldocs = 0; /*@null@*/ static const char * prefix = NULL; #endif /* IAM_RPMEIU */ +#endif +#ifdef DYING #ifdef IAM_RPMK #define GETOPT_ADDSIGN 1005 #define GETOPT_RESIGN 1006 static int noGpg = 0; static int noPgp = 0; #endif /* IAM_RPMK */ +#endif #if defined(IAM_RPMBT) || defined(IAM_RPMK) #include "signature.h" @@ -62,8 +69,8 @@ enum modes { #define MODES_QV (MODE_QUERY | MODE_VERIFY) MODE_INSTALL = (1 << 1), - MODE_UNINSTALL = (1 << 2), -#define MODES_IE (MODE_INSTALL | MODE_UNINSTALL) + MODE_ERASE = (1 << 2), +#define MODES_IE (MODE_INSTALL | MODE_ERASE) MODE_BUILD = (1 << 4), MODE_REBUILD = (1 << 5), @@ -93,7 +100,9 @@ extern int _ftp_debug; extern int noLibio; extern int _rpmio_debug; extern int _url_debug; +#ifdef DYING extern int _noDirTokens; +#endif /*@-varuse@*/ /*@observer@*/ extern const char * rpmNAME; @@ -117,21 +126,18 @@ static int quiet = 0; static int showrc = 0; static int showVersion = 0; -#if defined(IAM_RPMBT) || defined(IAM_RPMK) -static int signIt = 0; -#endif /* IAM_RPMBT || IAM_RPMK */ - +#ifdef DYING #if defined(IAM_RPMQV) || defined(IAM_RPMK) static int noMd5 = 0; #endif - -#if defined(IAM_RPMEIU) -static int noDeps = 0; #endif +#ifdef DYING #if defined(IAM_RPMEIU) +static int noDeps = 0; static int force = 0; #endif +#endif static struct poptOption rpmAllPoptTable[] = { { "version", '\0', 0, &showVersion, 0, @@ -183,6 +189,7 @@ static struct poptOption rpmAllPoptTable[] = { POPT_TABLEEND }; +#ifdef DYING #ifdef IAM_RPMDB static struct poptOption rpmDatabasePoptTable[] = { { "initdb", '\0', 0, &initdb, 0, @@ -190,10 +197,10 @@ static struct poptOption rpmDatabasePoptTable[] = { { "rebuilddb", '\0', 0, 0, GETOPT_REBUILDDB, N_("rebuild database inverted lists from installed package headers"), NULL}, - { "verifydb", '\0', 0, 0, GETOPT_VERIFYDB, + { "verifydb", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, GETOPT_VERIFYDB, N_("verify database files"), NULL}, - { "nodirtokens", '\0', POPT_ARG_VAL, &_noDirTokens, 1, + { "nodirtokens", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_noDirTokens, 1, N_("generate headers compatible with (legacy) rpm[23] packaging"), NULL}, { "dirtokens", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_noDirTokens, 0, @@ -202,7 +209,9 @@ static struct poptOption rpmDatabasePoptTable[] = { POPT_TABLEEND }; #endif /* IAM_RPMDB */ +#endif +#ifdef DYING #ifdef IAM_RPMK static struct poptOption rpmSignPoptTable[] = { { "addsign", '\0', 0, 0, GETOPT_ADDSIGN, @@ -210,7 +219,7 @@ static struct poptOption rpmSignPoptTable[] = { { "resign", '\0', 0, 0, GETOPT_RESIGN, N_("sign a package (discard current signature)"), NULL }, { "sign", '\0', 0, &signIt, 0, - N_("generate PGP/GPG signature"), NULL }, + N_("generate GPG/PGP signature"), NULL }, { "checksig", 'K', 0, 0, 'K', N_("verify package signature"), NULL }, { "nogpg", '\0', 0, &noGpg, 0, @@ -223,103 +232,103 @@ static struct poptOption rpmSignPoptTable[] = { POPT_TABLEEND }; #endif /* IAM_RPMK */ +#endif +#ifdef DYING #ifdef IAM_RPMEIU static rpmtransFlags transFlags = RPMTRANS_FLAG_NONE; static rpmprobFilterFlags probFilter = RPMPROB_FILTER_NONE; static rpmInstallInterfaceFlags installInterfaceFlags = INSTALL_NONE; static rpmEraseInterfaceFlags eraseInterfaceFlags = UNINSTALL_NONE; -#define _POPT_SET_BIT (POPT_ARG_VAL|POPT_ARGFLAG_OR) - static struct poptOption rpmInstallPoptTable[] = { - { "allfiles", '\0', _POPT_SET_BIT, &transFlags, RPMTRANS_FLAG_ALLFILES, + { "allfiles", '\0', POPT_BIT_SET, &transFlags, RPMTRANS_FLAG_ALLFILES, N_("install all files, even configurations which might otherwise be skipped"), NULL}, - { "allmatches", '\0', _POPT_SET_BIT, &eraseInterfaceFlags, UNINSTALL_ALLMATCHES, + { "allmatches", '\0', POPT_BIT_SET, &eraseInterfaceFlags, UNINSTALL_ALLMATCHES, N_("remove all packages which match <package> (normally an error is generated if <package> specified multiple packages)"), NULL}, - { "apply", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "apply", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, (_noTransScripts|_noTransTriggers| RPMTRANS_FLAG_APPLYONLY|RPMTRANS_FLAG_PKGCOMMIT), N_("do not execute package scriptlet(s)"), NULL }, - { "badreloc", '\0', _POPT_SET_BIT, &probFilter, RPMPROB_FILTER_FORCERELOCATE, + { "badreloc", '\0', POPT_BIT_SET, &probFilter, RPMPROB_FILTER_FORCERELOCATE, N_("relocate files in non-relocateable package"), NULL}, - { "dirstash", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "dirstash", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_DIRSTASH, N_("save erased package files by renaming into sub-directory"), NULL}, { "erase", 'e', 0, 0, 'e', N_("erase (uninstall) package"), N_("<package>+") }, - { "excludedocs", '\0', _POPT_SET_BIT, &transFlags, RPMTRANS_FLAG_NODOCS, + { "excludedocs", '\0', POPT_BIT_SET, &transFlags, RPMTRANS_FLAG_NODOCS, N_("do not install documentation"), NULL}, { "excludepath", '\0', POPT_ARG_STRING, 0, GETOPT_EXCLUDEPATH, N_("skip files with leading component <path> "), N_("<path>") }, { "force", '\0', 0, &force, 0, N_("short hand for --replacepkgs --replacefiles"), NULL}, - { "freshen", 'F', _POPT_SET_BIT, &installInterfaceFlags, + { "freshen", 'F', POPT_BIT_SET, &installInterfaceFlags, (INSTALL_UPGRADE|INSTALL_FRESHEN), N_("upgrade package(s) if already installed"), N_("<packagefile>+") }, - { "hash", 'h', _POPT_SET_BIT, &installInterfaceFlags, INSTALL_HASH, + { "hash", 'h', POPT_BIT_SET, &installInterfaceFlags, INSTALL_HASH, N_("print hash marks as package installs (good with -v)"), NULL}, - { "ignorearch", '\0', _POPT_SET_BIT, &probFilter, RPMPROB_FILTER_IGNOREARCH, + { "ignorearch", '\0', POPT_BIT_SET, &probFilter, RPMPROB_FILTER_IGNOREARCH, N_("don't verify package architecture"), NULL}, - { "ignoreos", '\0', _POPT_SET_BIT, &probFilter, RPMPROB_FILTER_IGNOREOS, + { "ignoreos", '\0', POPT_BIT_SET, &probFilter, RPMPROB_FILTER_IGNOREOS, N_("don't verify package operating system"), NULL}, - { "ignoresize", '\0', _POPT_SET_BIT, &probFilter, + { "ignoresize", '\0', POPT_BIT_SET, &probFilter, (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES), N_("don't check disk space before installing"), NULL}, { "includedocs", '\0', 0, &incldocs, 0, N_("install documentation"), NULL}, { "install", '\0', 0, 0, GETOPT_INSTALL, N_("install package"), N_("<packagefile>+") }, - { "justdb", '\0', _POPT_SET_BIT, &transFlags, RPMTRANS_FLAG_JUSTDB, + { "justdb", '\0', POPT_BIT_SET, &transFlags, RPMTRANS_FLAG_JUSTDB, N_("update the database, but do not modify the filesystem"), NULL}, { "nodeps", '\0', 0, &noDeps, 0, N_("do not verify package dependencies"), NULL }, - { "noorder", '\0', _POPT_SET_BIT, &installInterfaceFlags, INSTALL_NOORDER, + { "noorder", '\0', POPT_BIT_SET, &installInterfaceFlags, INSTALL_NOORDER, N_("do not reorder package installation to satisfy dependencies"), NULL}, - { "noscripts", '\0', _POPT_SET_BIT, &transFlags, + { "noscripts", '\0', POPT_BIT_SET, &transFlags, (_noTransScripts|_noTransTriggers), N_("do not execute package scriptlet(s)"), NULL }, - { "nopre", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "nopre", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_NOPRE, N_("do not execute %%pre scriptlet (if any)"), NULL }, - { "nopost", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "nopost", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_NOPOST, N_("do not execute %%post scriptlet (if any)"), NULL }, - { "nopreun", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "nopreun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_NOPREUN, N_("do not execute %%preun scriptlet (if any)"), NULL }, - { "nopostun", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "nopostun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_NOPOSTUN, N_("do not execute %%postun scriptlet (if any)"), NULL }, - { "notriggers", '\0', _POPT_SET_BIT, &transFlags, + { "notriggers", '\0', POPT_BIT_SET, &transFlags, _noTransTriggers, N_("do not execute any scriptlet(s) triggered by this package"), NULL}, - { "notriggerprein", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "notriggerprein", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_NOTRIGGERPREIN, N_("do not execute any %%triggerprein scriptlet(s)"), NULL}, - { "notriggerin", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "notriggerin", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_NOTRIGGERIN, N_("do not execute any %%triggerin scriptlet(s)"), NULL}, - { "notriggerun", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "notriggerun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_NOTRIGGERUN, N_("do not execute any %%triggerun scriptlet(s)"), NULL}, - { "notriggerpostun", '\0', _POPT_SET_BIT|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, + { "notriggerpostun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &transFlags, RPMTRANS_FLAG_NOTRIGGERPOSTUN, N_("do not execute any %%triggerpostun scriptlet(s)"), NULL}, - { "oldpackage", '\0', _POPT_SET_BIT, &probFilter, RPMPROB_FILTER_OLDPACKAGE, + { "oldpackage", '\0', POPT_BIT_SET, &probFilter, RPMPROB_FILTER_OLDPACKAGE, N_("upgrade to an old version of the package (--force on upgrades does this automatically)"), NULL}, - { "percent", '\0', _POPT_SET_BIT, &installInterfaceFlags, INSTALL_PERCENT, + { "percent", '\0', POPT_BIT_SET, &installInterfaceFlags, INSTALL_PERCENT, N_("print percentages as package installs"), NULL}, { "prefix", '\0', POPT_ARG_STRING, &prefix, 0, N_("relocate the package to <dir>, if relocatable"), @@ -327,22 +336,23 @@ static struct poptOption rpmInstallPoptTable[] = { { "relocate", '\0', POPT_ARG_STRING, 0, GETOPT_RELOCATE, N_("relocate files from path <old> to <new>"), N_("<old>=<new>") }, - { "repackage", '\0', _POPT_SET_BIT, &transFlags, RPMTRANS_FLAG_REPACKAGE, + { "repackage", '\0', POPT_BIT_SET, &transFlags, RPMTRANS_FLAG_REPACKAGE, N_("save erased package files by repackaging"), NULL}, - { "replacefiles", '\0', _POPT_SET_BIT, &probFilter, + { "replacefiles", '\0', POPT_BIT_SET, &probFilter, (RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES), N_("install even if the package replaces installed files"), NULL}, - { "replacepkgs", '\0', _POPT_SET_BIT, &probFilter, RPMPROB_FILTER_REPLACEPKG, + { "replacepkgs", '\0', POPT_BIT_SET, &probFilter, RPMPROB_FILTER_REPLACEPKG, N_("reinstall if the package is already present"), NULL}, - { "test", '\0', _POPT_SET_BIT, &transFlags, RPMTRANS_FLAG_TEST, + { "test", '\0', POPT_BIT_SET, &transFlags, RPMTRANS_FLAG_TEST, N_("don't install, but tell if it would work or not"), NULL}, - { "upgrade", 'U', _POPT_SET_BIT, &installInterfaceFlags, INSTALL_UPGRADE, + { "upgrade", 'U', POPT_BIT_SET, &installInterfaceFlags, INSTALL_UPGRADE, N_("upgrade package(s)"), N_("<packagefile>+") }, POPT_TABLEEND }; #endif /* IAM_RPMEIU */ +#endif /* DYING */ /* the structure describing the options we take and the defaults */ static struct poptOption optionsTable[] = { @@ -404,7 +414,7 @@ long _stksize = 64 * 1024L; /*@exits@*/ static void argerror(const char * desc) /*@modifies fileSystem @*/ { - fprintf(stderr, _("rpm: %s\n"), desc); + fprintf(stderr, _("%s: %s\n"), __progname, desc); exit(EXIT_FAILURE); } @@ -721,13 +731,25 @@ int main(int argc, const char ** argv) #endif #ifdef IAM_RPMEIU +#ifdef DYING /*@only@*/ rpmRelocation * relocations = NULL; int numRelocations = 0; +#else + struct rpmInstallArguments_s * ia = &rpmIArgs; +#endif +#endif + +#if defined(IAM_RPMDB) + struct rpmDatabaseArguments_s * da = &rpmDBArgs; #endif #if defined(IAM_RPMK) +#ifdef DYING rpmResignFlags addSign = RESIGN_NEW_SIGNATURE; rpmCheckSigFlags checksigFlags = CHECKSIG_NONE; +#else + struct rpmSignArguments_s * ka = &rpmKArgs; +#endif #endif #if defined(IAM_RPMBT) || defined(IAM_RPMK) @@ -769,7 +791,7 @@ int main(int argc, const char ** argv) if (!strcmp(__progname, "rpmverify")) bigMode = MODE_VERIFY; #endif #ifdef RPMEIU - if (!strcmp(__progname, "rpme")) bigMode = MODE_UNINSTALL; + if (!strcmp(__progname, "rpme")) bigMode = MODE_ERASE; if (!strcmp(__progname, "rpmi")) bigMode = MODE_INSTALL; if (!strcmp(__progname, "rpmu")) bigMode = MODE_INSTALL; #endif @@ -837,7 +859,7 @@ int main(int argc, const char ** argv) poptResetContext(optCon); #ifdef IAM_RPMQV - if (qva->qva_queryFormat) free((void *)qva->qva_queryFormat); + qva->qva_queryFormat = _free(qva->qva_queryFormat); memset(qva, 0, sizeof(*qva)); qva->qva_source = RPMQV_PACKAGE; qva->qva_mode = ' '; @@ -845,18 +867,37 @@ int main(int argc, const char ** argv) #endif #ifdef IAM_RPMBT - if (ba->buildRootOverride) free((void *)ba->buildRootOverride); - if (ba->targets) free(ba->targets); + ba->buildRootOverride = _free(ba->buildRootOverride); + ba->targets = _free(ba->targets); memset(ba, 0, sizeof(*ba)); ba->buildMode = ' '; ba->buildChar = ' '; #endif +#ifdef IAM_RPMDB + memset(da, 0, sizeof(*da)); +#endif + +#ifdef IAM_RPMK + memset(ka, 0, sizeof(*ka)); + ka->addSign = RESIGN_CHK_SIGNATURE; + ka->checksigFlags = CHECKSIG_ALL; +#endif + #ifdef IAM_RPMEIU +#ifdef DYING transFlags = RPMTRANS_FLAG_NONE; probFilter = RPMPROB_FILTER_NONE; installInterfaceFlags = INSTALL_NONE; eraseInterfaceFlags = UNINSTALL_NONE; +#else + ia->relocations = _free(ia->relocations); + memset(ia, 0, sizeof(*ia)); + ia->transFlags = RPMTRANS_FLAG_NONE; + ia->probFilter = RPMPROB_FILTER_NONE; + ia->installInterfaceFlags = INSTALL_NONE; + ia->eraseInterfaceFlags = UNINSTALL_NONE; +#endif #endif while ((arg = poptGetNextOpt(optCon)) > 0) { @@ -891,12 +932,13 @@ int main(int argc, const char ** argv) break; #endif /* IAM_RPMQV || IAM_RPMEIU || IAM_RPMBT */ +#ifdef DYING #ifdef IAM_RPMEIU case 'e': - if (bigMode != MODE_UNKNOWN && bigMode != MODE_UNINSTALL) + if (bigMode != MODE_UNKNOWN && bigMode != MODE_ERASE) argerror(_("only one major mode may be specified")); - bigMode = MODE_UNINSTALL; + bigMode = MODE_ERASE; break; case GETOPT_INSTALL: @@ -923,11 +965,11 @@ int main(int argc, const char ** argv) if (optArg == NULL || *optArg != '/') argerror(_("exclude paths must begin with a /")); - relocations = xrealloc(relocations, - sizeof(*relocations) * (numRelocations + 1)); + ia->relocations = xrealloc(ia->relocations, + sizeof(*ia->relocations) * (ia->numRelocations + 1)); /*@-observertrans -dependenttrans@*/ /* FIX: W2DO? */ - relocations[numRelocations].oldPath = optArg; - relocations[numRelocations++].newPath = NULL; + ia->relocations[ia->numRelocations].oldPath = optArg; + ia->relocations[ia->numRelocations++].newPath = NULL; /*@=observertrans =dependenttrans@*/ break; @@ -940,15 +982,17 @@ int main(int argc, const char ** argv) *newPath++ = '\0'; if (*newPath != '/') argerror(_("relocations must have a / following the =")); - relocations = xrealloc(relocations, - sizeof(*relocations) * (numRelocations + 1)); + ia->relocations = xrealloc(ia->relocations, + sizeof(*ia->relocations) * (ia->numRelocations + 1)); /*@-observertrans -kepttrans@*/ /* FIX: W2DO? */ - relocations[numRelocations].oldPath = optArg; - relocations[numRelocations++].newPath = newPath; + ia->relocations[ia->numRelocations].oldPath = optArg; + ia->relocations[ia->numRelocations++].newPath = newPath; /*@=observertrans =kepttrans@*/ } break; #endif /* IAM_RPMEIU */ +#endif /* DYING */ +#ifdef DYING #ifdef IAM_RPMDB case GETOPT_REBUILDDB: if (bigMode != MODE_UNKNOWN && bigMode != MODE_REBUILDDB) @@ -960,8 +1004,10 @@ int main(int argc, const char ** argv) argerror(_("only one major mode may be specified")); bigMode = MODE_VERIFYDB; break; -#endif +#endif /* IAM_RPMDB */ +#endif /* DYING */ +#ifdef DYING #ifdef IAM_RPMK case 'K': if (bigMode != MODE_UNKNOWN && bigMode != MODE_CHECKSIG) @@ -985,6 +1031,7 @@ int main(int argc, const char ** argv) signIt = 1; break; #endif /* IAM_RPMK */ +#endif /* DYING */ case GETOPT_DEFINEMACRO: if (optArg) { @@ -1050,11 +1097,23 @@ int main(int argc, const char ** argv) #endif /* IAM_RPMBT */ #ifdef IAM_RPMDB - if (initdb) { + if (da->init) { if (bigMode != MODE_UNKNOWN) argerror(_("only one major mode may be specified")); else bigMode = MODE_INITDB; + } else + if (da->rebuild) { + if (bigMode != MODE_UNKNOWN) + argerror(_("only one major mode may be specified")); + else + bigMode = MODE_REBUILDDB; + } else + if (da->verify) { + if (bigMode != MODE_UNKNOWN) + argerror(_("only one major mode may be specified")); + else + bigMode = MODE_VERIFYDB; } #endif /* IAM_RPMDB */ @@ -1078,107 +1137,116 @@ int main(int argc, const char ** argv) if (qva->qva_source != RPMQV_PACKAGE && (bigMode & ~MODES_QV)) argerror(_("unexpected query source")); -#endif +#endif /* IAM_RPMQV */ + +#ifdef IAM_RPMEIU + { int iflags = (ia->installInterfaceFlags & + (INSTALL_UPGRADE|INSTALL_FRESHEN|INSTALL_NOERASE)); + int eflags = (ia->installInterfaceFlags & INSTALL_UPGRADE); + + if (iflags & eflags) + argerror(_("only one major mode may be specified")); + else if (iflags) + bigMode = MODE_INSTALL; + else if (eflags) + bigMode = MODE_ERASE; + } +#endif /* IAM_RPMQV */ if (gotDbpath && (bigMode & ~MODES_FOR_DBPATH)) argerror(_("--dbpath given for operation that does not use a " "database")); #if defined(IAM_RPMEIU) - - if (!( bigMode == MODE_INSTALL ) && force) + if (!( bigMode == MODE_INSTALL ) && +(ia->probFilter & (RPMPROB_FILTER_REPLACEPKG | RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES | RPMPROB_FILTER_OLDPACKAGE))) argerror(_("only installation, upgrading, rmsource and rmspec may be forced")); -#endif /* IAM_RPMEIU */ - -#ifdef IAM_RPMEIU - if (bigMode != MODE_INSTALL && (probFilter & RPMPROB_FILTER_FORCERELOCATE)) + if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_FORCERELOCATE)) argerror(_("files may only be relocated during package installation")); - if (relocations && prefix) + if (ia->relocations && ia->prefix) argerror(_("only one of --prefix or --relocate may be used")); - if (bigMode != MODE_INSTALL && relocations) + if (bigMode != MODE_INSTALL && ia->relocations) argerror(_("--relocate and --excludepath may only be used when installing new packages")); - if (bigMode != MODE_INSTALL && prefix) + if (bigMode != MODE_INSTALL && ia->prefix) argerror(_("--prefix may only be used when installing new packages")); - if (prefix && prefix[0] != '/') + if (ia->prefix && ia->prefix[0] != '/') argerror(_("arguments to --prefix must begin with a /")); - if (bigMode != MODE_INSTALL && (installInterfaceFlags & INSTALL_HASH)) + if (bigMode != MODE_INSTALL && (ia->installInterfaceFlags & INSTALL_HASH)) argerror(_("--hash (-h) may only be specified during package " "installation")); - if (bigMode != MODE_INSTALL && (installInterfaceFlags & INSTALL_PERCENT)) + if (bigMode != MODE_INSTALL && (ia->installInterfaceFlags & INSTALL_PERCENT)) argerror(_("--percent may only be specified during package " "installation")); if (bigMode != MODE_INSTALL && - (probFilter & (RPMPROB_FILTER_REPLACEOLDFILES|RPMPROB_FILTER_REPLACENEWFILES))) + (ia->probFilter & (RPMPROB_FILTER_REPLACEOLDFILES|RPMPROB_FILTER_REPLACENEWFILES))) argerror(_("--replacefiles may only be specified during package " "installation")); - if (bigMode != MODE_INSTALL && (probFilter & RPMPROB_FILTER_REPLACEPKG)) + if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_REPLACEPKG)) argerror(_("--replacepkgs may only be specified during package " "installation")); - if (bigMode != MODE_INSTALL && (transFlags & RPMTRANS_FLAG_NODOCS)) + if (bigMode != MODE_INSTALL && (ia->transFlags & RPMTRANS_FLAG_NODOCS)) argerror(_("--excludedocs may only be specified during package " "installation")); - if (bigMode != MODE_INSTALL && incldocs) + if (bigMode != MODE_INSTALL && ia->incldocs) argerror(_("--includedocs may only be specified during package " "installation")); - if (incldocs && (transFlags & RPMTRANS_FLAG_NODOCS)) + if (ia->incldocs && (ia->transFlags & RPMTRANS_FLAG_NODOCS)) argerror(_("only one of --excludedocs and --includedocs may be " "specified")); - if (bigMode != MODE_INSTALL && (probFilter & RPMPROB_FILTER_IGNOREARCH)) + if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_IGNOREARCH)) argerror(_("--ignorearch may only be specified during package " "installation")); - if (bigMode != MODE_INSTALL && (probFilter & RPMPROB_FILTER_IGNOREOS)) + if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_IGNOREOS)) argerror(_("--ignoreos may only be specified during package " "installation")); if (bigMode != MODE_INSTALL && - (probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES))) + (ia->probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES))) argerror(_("--ignoresize may only be specified during package " "installation")); - if ((eraseInterfaceFlags & UNINSTALL_ALLMATCHES) && bigMode != MODE_UNINSTALL) + if ((ia->eraseInterfaceFlags & UNINSTALL_ALLMATCHES) && bigMode != MODE_ERASE) argerror(_("--allmatches may only be specified during package " "erasure")); - if ((transFlags & RPMTRANS_FLAG_ALLFILES) && bigMode != MODE_INSTALL) + if ((ia->transFlags & RPMTRANS_FLAG_ALLFILES) && bigMode != MODE_INSTALL) argerror(_("--allfiles may only be specified during package " "installation")); - if ((transFlags & RPMTRANS_FLAG_JUSTDB) && - bigMode != MODE_INSTALL && bigMode != MODE_UNINSTALL) + if ((ia->transFlags & RPMTRANS_FLAG_JUSTDB) && + bigMode != MODE_INSTALL && bigMode != MODE_ERASE) argerror(_("--justdb may only be specified during package " "installation and erasure")); -#endif /* IAM_RPMEIU */ -#if defined(IAM_RPMEIU) - if (bigMode != MODE_INSTALL && bigMode != MODE_UNINSTALL && - (transFlags & (RPMTRANS_FLAG_NOSCRIPTS | _noTransScripts | _noTransTriggers))) + if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE && + (ia->transFlags & (RPMTRANS_FLAG_NOSCRIPTS | _noTransScripts | _noTransTriggers))) argerror(_("script disabling options may only be specified during " "package installation and erasure")); - if (bigMode != MODE_INSTALL && bigMode != MODE_UNINSTALL && - (transFlags & (RPMTRANS_FLAG_NOTRIGGERS | _noTransTriggers))) + if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE && + (ia->transFlags & (RPMTRANS_FLAG_NOTRIGGERS | _noTransTriggers))) argerror(_("trigger disabling options may only be specified during " "package installation and erasure")); - if (noDeps & (bigMode & ~MODES_FOR_NODEPS)) + if (ia->noDeps & (bigMode & ~MODES_FOR_NODEPS)) argerror(_("--nodeps may only be specified during package " "building, rebuilding, recompilation, installation," "erasure, and verification")); - if ((transFlags & RPMTRANS_FLAG_TEST) && (bigMode & ~MODES_FOR_TEST)) + if ((ia->transFlags & RPMTRANS_FLAG_TEST) && (bigMode & ~MODES_FOR_TEST)) argerror(_("--test may only be specified during package installation, " "erasure, and building")); #endif /* IAM_RPMEIU */ @@ -1201,25 +1269,31 @@ int main(int argc, const char ** argv) } } +#ifdef DYING #ifdef IAM_RPMK - if (noPgp && bigMode != MODE_CHECKSIG) + if (!(ka->checksigFlags & CHECKSIG_PGP) && bigMode != MODE_CHECKSIG) argerror(_("--nopgp may only be used during signature checking")); - if (noGpg && bigMode != MODE_CHECKSIG) + if (!(ka->checksigFlags & CHECKSIG_GPG) && bigMode != MODE_CHECKSIG) argerror(_("--nogpg may only be used during signature checking")); #endif #if defined(IAM_RPMK) || defined(IAM_RPMQV) - if (noMd5 && bigMode != MODE_CHECKSIG && bigMode != MODE_VERIFY) + if ((!(ka->checksigFlags & CHECKSIG_MD5) || noMd5) && bigMode != MODE_CHECKSIG && bigMode != MODE_VERIFY) argerror(_("--nomd5 may only be used during signature checking and " "package verification")); #endif +#endif /* DYING */ #if defined(IAM_RPMBT) || defined(IAM_RPMK) + if (0 #if defined(IAM_RPMBT) - signIt = ba->sign; + || ba->sign +#endif +#if defined(IAM_RPMK) + || ka->sign #endif - if (signIt) { + ) { if (bigMode == MODE_REBUILD || bigMode == MODE_BUILD || bigMode == MODE_RESIGN || bigMode == MODE_TARBUILD) { const char ** av; @@ -1406,55 +1480,57 @@ int main(int argc, const char ** argv) #endif /* IAM_RPMBT */ #ifdef IAM_RPMEIU - case MODE_UNINSTALL: + case MODE_ERASE: if (!poptPeekArg(optCon)) argerror(_("no packages given for uninstall")); - if (noDeps) eraseInterfaceFlags |= UNINSTALL_NODEPS; + if (ia->noDeps) ia->eraseInterfaceFlags |= UNINSTALL_NODEPS; ec = rpmErase(rootdir, (const char **)poptGetArgs(optCon), - transFlags, eraseInterfaceFlags); + ia->transFlags, ia->eraseInterfaceFlags); break; case MODE_INSTALL: +#ifdef DYING if (force) { - probFilter |= RPMPROB_FILTER_REPLACEPKG | + ia->probFilter |= RPMPROB_FILTER_REPLACEPKG | RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES | RPMPROB_FILTER_OLDPACKAGE; } +#endif /* RPMTRANS_FLAG_BUILD_PROBS */ /* RPMTRANS_FLAG_KEEPOBSOLETE */ - if (!incldocs) { - if (transFlags & RPMTRANS_FLAG_NODOCS) + if (!ia->incldocs) { + if (ia->transFlags & RPMTRANS_FLAG_NODOCS) ; else if (rpmExpandNumeric("%{_excludedocs}")) - transFlags |= RPMTRANS_FLAG_NODOCS; + ia->transFlags |= RPMTRANS_FLAG_NODOCS; } - if (noDeps) installInterfaceFlags |= INSTALL_NODEPS; + if (ia->noDeps) ia->installInterfaceFlags |= INSTALL_NODEPS; if (!poptPeekArg(optCon)) argerror(_("no packages given for install")); - /* we've already ensured !(!prefix && !relocations) */ - if (prefix) { - relocations = alloca(2 * sizeof(*relocations)); - relocations[0].oldPath = NULL; /* special case magic */ - relocations[0].newPath = prefix; - relocations[1].oldPath = relocations[1].newPath = NULL; - } else if (relocations) { - relocations = xrealloc(relocations, - sizeof(*relocations) * (numRelocations + 1)); - relocations[numRelocations].oldPath = NULL; - relocations[numRelocations].newPath = NULL; + /* we've already ensured !(!ia->prefix && !ia->relocations) */ + if (ia->prefix) { + ia->relocations = xmalloc(2 * sizeof(*ia->relocations)); + ia->relocations[0].oldPath = NULL; /* special case magic */ + ia->relocations[0].newPath = ia->prefix; + ia->relocations[1].oldPath = ia->relocations[1].newPath = NULL; + } else if (ia->relocations) { + ia->relocations = xrealloc(ia->relocations, + sizeof(*ia->relocations) * (ia->numRelocations + 1)); + ia->relocations[ia->numRelocations].oldPath = NULL; + ia->relocations[ia->numRelocations].newPath = NULL; } ec += rpmInstall(rootdir, (const char **)poptGetArgs(optCon), - transFlags, installInterfaceFlags, probFilter, - relocations); + ia->transFlags, ia->installInterfaceFlags, ia->probFilter, + ia->relocations); break; #endif /* IAM_RPMEIU */ @@ -1509,10 +1585,13 @@ int main(int argc, const char ** argv) case MODE_CHECKSIG: if (!poptPeekArg(optCon)) argerror(_("no packages given for signature check")); +#ifdef DYING if (!noPgp) checksigFlags |= CHECKSIG_PGP; if (!noGpg) checksigFlags |= CHECKSIG_GPG; if (!noMd5) checksigFlags |= CHECKSIG_MD5; - ec = rpmCheckSig(checksigFlags, (const char **)poptGetArgs(optCon)); +#endif + ec = rpmCheckSig(ka->checksigFlags, + (const char **)poptGetArgs(optCon)); /* XXX don't overflow single byte exit status */ if (ec > 255) ec = 255; break; @@ -1520,7 +1599,8 @@ int main(int argc, const char ** argv) case MODE_RESIGN: if (!poptPeekArg(optCon)) argerror(_("no packages given for signing")); - ec = rpmReSign(addSign, passPhrase, (const char **)poptGetArgs(optCon)); + ec = rpmReSign(ka->addSign, passPhrase, + (const char **)poptGetArgs(optCon)); /* XXX don't overflow single byte exit status */ if (ec > 255) ec = 255; break; @@ -1548,7 +1628,7 @@ int main(int argc, const char ** argv) #endif #if !defined(IAM_RPMEIU) case MODE_INSTALL: - case MODE_UNINSTALL: + case MODE_ERASE: #endif case MODE_UNKNOWN: if (!showVersion && !help && !noUsageMsg) printUsage(); @@ -1582,6 +1662,10 @@ exit: ba->targets = _free(ba->targets); #endif +#ifdef IAM_RPMEIU + ia->relocations = _free(ia->relocations); +#endif + #if HAVE_MCHECK_H && HAVE_MTRACE muntrace(); /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */ #endif |