diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2002-07-31 03:52:44 +0000 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2002-07-31 03:52:44 +0000 |
commit | 27f8a96d6d3819f32c26c9f05e08cdbb55339e4a (patch) | |
tree | 5a40a20db9add6ff292c58d45a7dad7a36f1a20f | |
parent | b4f7a594a0eca0365137780d5f61b0597a073297 (diff) | |
download | gmime-GMIME_PGP_MIME.tar.gz |
Check to make sure that the header was valid (ie, `colon' == ':'). If not,GMIME_PGP_MIME
2002-07-30 Jeffrey Stedfast <fejj@ximian.com>
* gmime-parser.c (header_parse): Check to make sure that the
header was valid (ie, `colon' == ':'). If not, then set
header->value to "".
(parser_step_headers): When refilling, make sure that the refilled
buffer is larger than the buffer was before refilling, otherwise
break out of the loop and parse whatever is left. Fixes bug #89260
on bugzilla.gnome.org
* gmime-filter-crlf.c (filter_filter): Fix to not add an extra \r
for pre-canonicalised streams.
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | aclocal.m4 | 496 | ||||
-rw-r--r-- | gmime-filter-crlf.c | 50 | ||||
-rw-r--r-- | gmime-parser.c | 19 | ||||
-rw-r--r-- | gmime/gmime-filter-crlf.c | 50 | ||||
-rw-r--r-- | gmime/gmime-parser.c | 19 |
6 files changed, 434 insertions, 215 deletions
@@ -1,6 +1,19 @@ +2002-07-30 Jeffrey Stedfast <fejj@ximian.com> + + * gmime-parser.c (header_parse): Check to make sure that the + header was valid (ie, `colon' == ':'). If not, then set + header->value to "". + (parser_step_headers): When refilling, make sure that the refilled + buffer is larger than the buffer was before refilling, otherwise + break out of the loop and parse whatever is left. Fixes bug #89260 + on bugzilla.gnome.org + + * gmime-filter-crlf.c (filter_filter): Fix to not add an extra \r + for pre-canonicalised streams. + 2002-07-19 Jeffrey Stedfast <fejj@ximian.com> - * configure.in: Bumped version to 1.0.3 + * configure.in: Bumped version to 1.0.4 * README: Updated. @@ -234,6 +234,7 @@ esac # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- # serial 46 AC_PROG_LIBTOOL + AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl @@ -359,9 +360,30 @@ _LT_AC_LTCONFIG_HACK ]) +# AC_LIBTOOL_HEADER_ASSERT +# ------------------------ +AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT], +[AC_CACHE_CHECK([whether $CC supports assert without backlinking], + [lt_cv_func_assert_works], + [case $host in + *-*-solaris*) + if test "$GCC" = yes && test "$with_gnu_ld" != yes; then + case `$CC --version 2>/dev/null` in + [[12]].*) lt_cv_func_assert_works=no ;; + *) lt_cv_func_assert_works=yes ;; + esac + fi + ;; + esac]) + +if test "x$lt_cv_func_assert_works" = xyes; then + AC_CHECK_HEADERS(assert.h) +fi +])# AC_LIBTOOL_HEADER_ASSERT + # _LT_AC_CHECK_DLFCN # -------------------- -AC_DEFUN(_LT_AC_CHECK_DLFCN, +AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h) ])# _LT_AC_CHECK_DLFCN @@ -379,10 +401,10 @@ AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. -[symcode='[BCDEGRST]'] +symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. -[sympat='\([_A-Za-z][_A-Za-z0-9]*\)'] +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' @@ -390,25 +412,29 @@ 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'" +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + # Define system-specific variables. case $host_os in aix*) - [symcode='[BCDT]'] + symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32*) - [symcode='[ABCDGISTW]'] + 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'" + lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix*) - [symcode='[BCDEGRST]'] + symcode='[[BCDEGRST]]' ;; solaris* | sysv5*) - [symcode='[BDT]'] + symcode='[[BDT]]' ;; sysv4) - [symcode='[DFNSTU]'] + symcode='[[DFNSTU]]' ;; esac @@ -422,14 +448,14 @@ 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]'] + 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'"] +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 @@ -471,23 +497,23 @@ EOF cat <<EOF >> conftest.$ac_ext #if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * +# define lt_ptr void * #else -# define lt_ptr_t char * +# define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; - lt_ptr_t address; + lt_ptr address; } -[lt_preloaded_symbols[] =] +lt_preloaded_symbols[[]] = { EOF - sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" >> conftest.$ac_ext + sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} + {0, (lt_ptr) 0} }; #ifdef __cplusplus @@ -531,10 +557,13 @@ done global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" if test -z "$lt_cv_sys_global_symbol_pipe"; then global_symbol_to_cdecl= + global_symbol_to_c_name_address= else global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" + global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" fi -if test -z "$global_symbol_pipe$global_symbol_to_cdecl"; then +if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; +then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) @@ -552,16 +581,17 @@ if test "X${PATH_SEPARATOR+set}" != Xset; then *-DOS) lt_cv_sys_path_separator=';' ;; *) lt_cv_sys_path_separator=':' ;; esac + PATH_SEPARATOR=$lt_cv_sys_path_separator 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. +# 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)]) + [AC_DIVERT_PUSH(NOTICE)]) _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR # Check that we are running under the correct shell. @@ -627,7 +657,7 @@ else # # So, first we look for a working echo in the user's PATH. - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + IFS="${IFS= }"; save_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' && @@ -716,7 +746,7 @@ AC_DIVERT_POP # _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, +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [if test "$cross_compiling" = yes; then : [$4] else @@ -803,7 +833,7 @@ rm -fr conftest* # AC_LIBTOOL_DLOPEN_SELF # ------------------- -AC_DEFUN(AC_LIBTOOL_DLOPEN_SELF, +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown @@ -825,16 +855,22 @@ else ;; *) - 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"]) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) ]) - ]) - ]) + ]) + ]) ]) ;; esac @@ -897,10 +933,10 @@ AC_DEFUN([_LT_AC_LTCONFIG_HACK], # 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'] +sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g' # Same as above, but do not quote variable references. -[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] +double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. @@ -969,8 +1005,15 @@ old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac 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. @@ -990,7 +1033,7 @@ rmdir .libs 2>/dev/null AC_MSG_RESULT($objdir) -AC_ARG_WITH(pic, +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 @@ -1018,7 +1061,7 @@ AC_CACHE_VAL(lt_cv_prog_cc_pic, # 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. + # not sure about C++ programs. lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" ;; amigaos*) @@ -1053,13 +1096,13 @@ AC_CACHE_VAL(lt_cv_prog_cc_pic, # PORTME Check for PIC flags for the system compiler. case $host_os in aix3* | aix4* | aix5*) + lt_cv_prog_cc_wl='-Wl,' # 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,' + # AIX 5 now supports IA64 processor + lt_cv_prog_cc_static='-Bstatic' else - lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' + lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' fi ;; @@ -1115,9 +1158,9 @@ AC_CACHE_VAL(lt_cv_prog_cc_pic, 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' + lt_cv_prog_cc_wl='-LD' else - lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_wl='-Wl,' fi ;; @@ -1184,7 +1227,7 @@ 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 : + 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 @@ -1260,6 +1303,8 @@ if test x"$compiler_c_o" = x"yes"; then lt_cv_compiler_o_lo=no save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -c -o conftest.lo" + save_objext="$ac_objext" + ac_objext=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 @@ -1269,10 +1314,11 @@ if test x"$compiler_c_o" = x"yes"; then lt_cv_compiler_o_lo=yes fi ]) + ac_objext="$save_objext" CFLAGS="$save_CFLAGS" ]) compiler_o_lo=$lt_cv_compiler_o_lo - AC_MSG_RESULT([$compiler_c_lo]) + AC_MSG_RESULT([$compiler_o_lo]) else compiler_o_lo=no fi @@ -1365,7 +1411,7 @@ exclude_expsyms="_GLOBAL_OFFSET_TABLE_" extract_expsyms_cmds= case $host_os in -cygwin* | mingw* | pw32* ) +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++. @@ -1373,7 +1419,9 @@ cygwin* | mingw* | pw32* ) with_gnu_ld=no fi ;; - +openbsd*) + with_gnu_ld=no + ;; esac ld_shlibs=yes @@ -1460,7 +1508,7 @@ EOF # 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~ + 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= @@ -1473,24 +1521,24 @@ EOF # 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' + 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; + 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; + 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~ @@ -1585,80 +1633,96 @@ else ;; aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + hardcode_direct=yes 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 + case $host_os in aix4.[[012]]|aix4.[[012]].*) + 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 + esac + shared_flag='-shared' else + # not using gcc if test "$host_cpu" = ia64; then - shared_flag='-G' + shared_flag='${wl}-G' else - shared_flag='${wl}-bM:SRE' + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi 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 + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' 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" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-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" + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${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' + 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 ;; @@ -1690,11 +1754,18 @@ else ;; darwin* | rhapsody*) - allow_undefined_flag='-undefined suppress' + case "$host_os" in + rhapsody* | darwin1.[[012]]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + esac # 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)' + archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring' # We need to add '_' to the symbols in $export_symbols first #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' hardcode_direct=yes @@ -1769,7 +1840,7 @@ else ;; newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: @@ -1777,10 +1848,24 @@ else ;; openbsd*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case "$host_os" in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi ;; os2*) @@ -1825,10 +1910,39 @@ else hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes + export_dynamic_flag_spec='${wl}-Bexport' ;; solaris*) + # gcc --version < 3.0 without binutils cannot create self contained + # shared libraries reliably, requiring libgcc.a to resolve some of + # the object symbols generated in some cases. Libraries that use + # assert need libgcc.a to resolve __eprintf, for example. Linking + # a copy of libgcc.a into every shared library to guarantee resolving + # such symbols causes other problems: According to Tim Van Holder + # <tim.van.holder@pandora.be>, C++ libraries end up with a separate + # (to the application) exception stack for one thing. no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + case `$CC --version 2>/dev/null` in + [[12]].*) + cat <<EOF 1>&2 + +*** Warning: Releases of GCC earlier than version 3.0 cannot reliably +*** create self contained shared libraries on Solaris systems, without +*** introducing a dependency on libgcc.a. Therefore, libtool is disabling +*** -no-undefined support, which will at least allow you to build shared +*** libraries. However, you may find that when you link such libraries +*** into an application without using GCC, you have to manually add +*** \`gcc --print-libgcc-file-name\` to the link command. We urge you to +*** upgrade to a newer version of GCC. Another option is to rebuild your +*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer. + +EOF + no_undefined_flag= + ;; + esac + fi # $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' @@ -1837,7 +1951,7 @@ else hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in - [solaris2.[0-5] | solaris2.[0-5].*]) ;; + 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 @@ -1860,7 +1974,7 @@ else sysv4) if test "x$host_vendor" = xsno; then - archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linkopts' + archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? else archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' @@ -2017,22 +2131,24 @@ aix4* | aix5*) # 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 - ;; + 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. + # 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. + # 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 @@ -2041,14 +2157,13 @@ aix4* | aix5*) 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' + 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*) @@ -2079,7 +2194,7 @@ cygwin* | mingw* | pw32*) 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' + 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~ @@ -2089,14 +2204,14 @@ cygwin* | mingw* | pw32*) $rm \$dlpath' ;; yes,mingw*) - library_names_spec='${libname}`echo ${release} | [sed -e 's/[.]/-/g']`${versuffix}.dll' + 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' + library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' @@ -2254,9 +2369,19 @@ newsos6) openbsd*) version_type=sunos - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - need_version=no + need_lib_prefix=no + need_version=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case "$host_os" in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes fi library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' @@ -2367,6 +2492,33 @@ test "$dynamic_linker" = no && can_build_shared=no AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no @@ -2460,6 +2612,7 @@ if test -f "$ltmain"; then 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 \ + global_symbol_to_c_name_address \ 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 @@ -2526,12 +2679,12 @@ 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 add -lc for building shared libraries. +build_libtool_need_lc=$need_lc + # Whether or not to optimize for fast installation. fast_install=$enable_fast_install @@ -2697,6 +2850,9 @@ 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 +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address + # This is the shared library runtime path variable. runpath_var=$runpath_var @@ -2819,9 +2975,9 @@ EOF # 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 + # 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. # @@ -3176,6 +3332,7 @@ test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. @@ -3189,8 +3346,8 @@ if test "$GCC" = yes; then esac case $ac_prog in # Accept absolute paths. - [[\\/]* | [A-Za-z]:[\\/]*)] - [re_direlt='/[^/][^/]*/\.\./'] + [[\\/]]* | [[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 @@ -3214,7 +3371,7 @@ else fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + IFS="${IFS= }"; ac_save_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 @@ -3278,7 +3435,7 @@ lt_cv_deplibs_check_method='unknown' # `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 +# '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. @@ -3293,7 +3450,7 @@ beos*) ;; bsdi4*) - [lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'] + 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 ;; @@ -3307,7 +3464,7 @@ 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]) + rhapsody* | darwin1.[[012]]) lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` ;; *) # Darwin 1.3 on @@ -3322,7 +3479,7 @@ freebsd*) 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_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.*` ;; @@ -3337,7 +3494,7 @@ gnu*) ;; 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_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 ;; @@ -3356,7 +3513,7 @@ irix5* | irix6*) *) 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"] + 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*` @@ -3366,29 +3523,39 @@ irix5* | irix6*) # This must be Linux ELF. linux-gnu*) case $host_cpu in - alpha* | i*86 | powerpc* | sparc* | ia64* ) + alpha* | hppa* | 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 )' ;;] + 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]+$'] + lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$' else - [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'] + 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_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 ;; +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + 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' @@ -3405,14 +3572,14 @@ solaris*) lt_cv_file_magic_test_file=/lib/libc.so ;; -[sysv5uw[78]* | sysv4*uw2*)] +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_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) @@ -3420,11 +3587,11 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; 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 )'] + 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_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 @@ -3438,13 +3605,14 @@ 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_MSG_CHECKING([for BSD-compatible nm]) +[AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl +AC_MSG_CHECKING([for BSD-compatible nm]) AC_CACHE_VAL(lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/${ac_tool_prefix}nm diff --git a/gmime-filter-crlf.c b/gmime-filter-crlf.c index 9fdd7534..3205be67 100644 --- a/gmime-filter-crlf.c +++ b/gmime-filter-crlf.c @@ -95,57 +95,65 @@ filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace) { GMimeFilterCRLF *crlf = (GMimeFilterCRLF *) filter; + register const char *inptr; + const char *inend; gboolean do_dots; - char *p, *q; + char *outptr; do_dots = crlf->mode == GMIME_FILTER_CRLF_MODE_CRLF_DOTS; + inptr = in; + inend = in + len; + if (crlf->direction == GMIME_FILTER_CRLF_ENCODE) { g_mime_filter_set_size (filter, 3 * len, FALSE); - p = in; - q = filter->outbuf; - while (p < in + len) { - if (*p == '\n') { + outptr = filter->outbuf; + while (inptr < inend) { + if (*inptr == '\r') { + crlf->saw_cr = TRUE; + } else if (*inptr == '\n') { crlf->saw_lf = TRUE; - *q++ = '\r'; + if (!crlf->saw_cr) + *outptr++ = '\r'; + crlf->saw_cr = FALSE; } else { - if (do_dots && *p == '.' && crlf->saw_lf) - *q++ = '.'; + if (do_dots && *inptr == '.' && crlf->saw_lf) + *outptr++ = '.'; + crlf->saw_cr = FALSE; crlf->saw_lf = FALSE; } - *q++ = *p++; + *outptr++ = *inptr++; } } else { g_mime_filter_set_size (filter, len, FALSE); - p = in; - q = filter->outbuf; - while (p < in + len) { - if (*p == '\r') { + outptr = filter->outbuf; + while (inptr < inend) { + if (*inptr == '\r') { crlf->saw_cr = TRUE; } else { if (crlf->saw_cr) { crlf->saw_cr = FALSE; - if (*p == '\n') { + if (*inptr == '\n') { crlf->saw_lf = TRUE; - *q++ = *p++; + *outptr++ = *inptr++; continue; } else - *q++ = '\r'; + *outptr++ = '\r'; } - *q++ = *p; + *outptr++ = *inptr; } - if (do_dots && *p == '.') { + if (do_dots && *inptr == '.') { if (crlf->saw_lf) { crlf->saw_dot = TRUE; crlf->saw_lf = FALSE; - p++; + inptr++; } else if (crlf->saw_dot) { crlf->saw_dot = FALSE; } @@ -153,12 +161,12 @@ filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace, crlf->saw_lf = FALSE; - p++; + inptr++; } } *out = filter->outbuf; - *outlen = q - filter->outbuf; + *outlen = outptr - filter->outbuf; *outprespace = filter->outpre; } diff --git a/gmime-parser.c b/gmime-parser.c index 84c0f7b6..72fe0fb3 100644 --- a/gmime-parser.c +++ b/gmime-parser.c @@ -341,8 +341,16 @@ parser_offset (GMimeParser *parser, unsigned char *cur) \ hlen = colon - parser->headerbuf; \ \ - header->name = g_strstrip (g_strndup (parser->headerbuf, hlen)); \ - header->value = g_strstrip (g_strdup (colon + 1)); \ + header->name = g_strndup (parser->headerbuf, hlen); \ + g_strstrip (header->name); \ + if (*colon != ':') { \ + g_warning ("Invalid header: %s", header->name); \ + header->value = header->name; \ + header->name = g_strdup ("X-Invalid-Header"); \ + } else { \ + header->value = g_strdup (colon + 1); \ + g_strstrip (header->value); \ + } \ header->offset = parser->header_start; \ \ hend->next = header; \ @@ -358,7 +366,7 @@ parser_step_headers (GMimeParser *parser) register unsigned char *inptr; unsigned char *start, *inend; struct _header_raw *hend; - size_t len; + size_t len = 0; parser->midline = FALSE; hend = (struct _header_raw *) &parser->headers; @@ -366,10 +374,11 @@ parser_step_headers (GMimeParser *parser) parser->header_start = parser_offset (parser, NULL); inptr = parser->inptr; + inend = parser->inend; do { refill: - if (parser_fill (parser) <= 0) + if (parser_fill (parser) <= len) break; inptr = parser->inptr; @@ -389,6 +398,7 @@ parser_step_headers (GMimeParser *parser) /* we don't have enough data to tell if we got all of the header or not... */ parser->inptr = start; + len = inend - start; goto refill; } @@ -415,6 +425,7 @@ parser_step_headers (GMimeParser *parser) } parser->inptr = inptr; + len = inend - inptr; } while (1); inptr = parser->inptr; diff --git a/gmime/gmime-filter-crlf.c b/gmime/gmime-filter-crlf.c index 9fdd7534..3205be67 100644 --- a/gmime/gmime-filter-crlf.c +++ b/gmime/gmime-filter-crlf.c @@ -95,57 +95,65 @@ filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace) { GMimeFilterCRLF *crlf = (GMimeFilterCRLF *) filter; + register const char *inptr; + const char *inend; gboolean do_dots; - char *p, *q; + char *outptr; do_dots = crlf->mode == GMIME_FILTER_CRLF_MODE_CRLF_DOTS; + inptr = in; + inend = in + len; + if (crlf->direction == GMIME_FILTER_CRLF_ENCODE) { g_mime_filter_set_size (filter, 3 * len, FALSE); - p = in; - q = filter->outbuf; - while (p < in + len) { - if (*p == '\n') { + outptr = filter->outbuf; + while (inptr < inend) { + if (*inptr == '\r') { + crlf->saw_cr = TRUE; + } else if (*inptr == '\n') { crlf->saw_lf = TRUE; - *q++ = '\r'; + if (!crlf->saw_cr) + *outptr++ = '\r'; + crlf->saw_cr = FALSE; } else { - if (do_dots && *p == '.' && crlf->saw_lf) - *q++ = '.'; + if (do_dots && *inptr == '.' && crlf->saw_lf) + *outptr++ = '.'; + crlf->saw_cr = FALSE; crlf->saw_lf = FALSE; } - *q++ = *p++; + *outptr++ = *inptr++; } } else { g_mime_filter_set_size (filter, len, FALSE); - p = in; - q = filter->outbuf; - while (p < in + len) { - if (*p == '\r') { + outptr = filter->outbuf; + while (inptr < inend) { + if (*inptr == '\r') { crlf->saw_cr = TRUE; } else { if (crlf->saw_cr) { crlf->saw_cr = FALSE; - if (*p == '\n') { + if (*inptr == '\n') { crlf->saw_lf = TRUE; - *q++ = *p++; + *outptr++ = *inptr++; continue; } else - *q++ = '\r'; + *outptr++ = '\r'; } - *q++ = *p; + *outptr++ = *inptr; } - if (do_dots && *p == '.') { + if (do_dots && *inptr == '.') { if (crlf->saw_lf) { crlf->saw_dot = TRUE; crlf->saw_lf = FALSE; - p++; + inptr++; } else if (crlf->saw_dot) { crlf->saw_dot = FALSE; } @@ -153,12 +161,12 @@ filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace, crlf->saw_lf = FALSE; - p++; + inptr++; } } *out = filter->outbuf; - *outlen = q - filter->outbuf; + *outlen = outptr - filter->outbuf; *outprespace = filter->outpre; } diff --git a/gmime/gmime-parser.c b/gmime/gmime-parser.c index 84c0f7b6..72fe0fb3 100644 --- a/gmime/gmime-parser.c +++ b/gmime/gmime-parser.c @@ -341,8 +341,16 @@ parser_offset (GMimeParser *parser, unsigned char *cur) \ hlen = colon - parser->headerbuf; \ \ - header->name = g_strstrip (g_strndup (parser->headerbuf, hlen)); \ - header->value = g_strstrip (g_strdup (colon + 1)); \ + header->name = g_strndup (parser->headerbuf, hlen); \ + g_strstrip (header->name); \ + if (*colon != ':') { \ + g_warning ("Invalid header: %s", header->name); \ + header->value = header->name; \ + header->name = g_strdup ("X-Invalid-Header"); \ + } else { \ + header->value = g_strdup (colon + 1); \ + g_strstrip (header->value); \ + } \ header->offset = parser->header_start; \ \ hend->next = header; \ @@ -358,7 +366,7 @@ parser_step_headers (GMimeParser *parser) register unsigned char *inptr; unsigned char *start, *inend; struct _header_raw *hend; - size_t len; + size_t len = 0; parser->midline = FALSE; hend = (struct _header_raw *) &parser->headers; @@ -366,10 +374,11 @@ parser_step_headers (GMimeParser *parser) parser->header_start = parser_offset (parser, NULL); inptr = parser->inptr; + inend = parser->inend; do { refill: - if (parser_fill (parser) <= 0) + if (parser_fill (parser) <= len) break; inptr = parser->inptr; @@ -389,6 +398,7 @@ parser_step_headers (GMimeParser *parser) /* we don't have enough data to tell if we got all of the header or not... */ parser->inptr = start; + len = inend - start; goto refill; } @@ -415,6 +425,7 @@ parser_step_headers (GMimeParser *parser) } parser->inptr = inptr; + len = inend - inptr; } while (1); inptr = parser->inptr; |