From: Eric Estievenart Date: Wed, 4 Nov 1998 04:13:03 +0000 (+0000) Subject: * doc/libtool.texi (Compile mode): Document that -o is fully X-Git-Tag: start~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8747a04ff9d9ff419e548ed0fb8183a44dc32188;p=thirdparty%2Flibtool.git * doc/libtool.texi (Compile mode): Document that -o is fully supported. * libtool.m4 (libtool-lock): new ARG_ENABLE; sets (need_locks) * ltconfig.in (disable-lock): control need_locks (hard_links): check whether hard-links can be used for locking * ltmain.in (need_locks): use $output_obj.lock for locking --- diff --git a/ChangeLog b/ChangeLog index 17d504d1f..e2932c349 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +1998-11-04 Eric Estievenart + + * doc/libtool.texi (Compile mode): Document that -o is fully + supported. + + * libtool.m4 (libtool-lock): new ARG_ENABLE; sets (need_locks) + * ltconfig.in (disable-lock): control need_locks + (hard_links): check whether hard-links can be used for locking + * ltmain.in (need_locks): use $output_obj.lock for locking + 1998-11-03 Alexandre Oliva * ltmain.in: correctly create libraries and programs with diff --git a/doc/libtool.texi b/doc/libtool.texi index 826c8c0d9..888b18cf5 100644 --- a/doc/libtool.texi +++ b/doc/libtool.texi @@ -1066,10 +1066,14 @@ are substituted into the compilation command. If the @samp{-static} option is given, then a @samp{.o} file is built, even if libtool was configured with @samp{--disable-static}. -Note that the @samp{-o} option is not supported for compile mode, -because it cannot be implemented properly for all platforms. It is far -easier just to change your Makefiles to create all the output files in -the current working directory. +Note that the @samp{-o} option is now fully supported. It is emulated +for the platforms that don't support it (by locking and moving the +objects), so it is really easy to use libtool, just with minor +modifications to your Makefiles. Typing for example +@example +libtool gcc -c foo/x.c -o foo/x.lo +@end example +will do what you expect. @node Link mode @section Link mode diff --git a/libtool.m4 b/libtool.m4 index 159a20765..76fd71cf5 100644 --- a/libtool.m4 +++ b/libtool.m4 @@ -21,7 +21,7 @@ ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. -# serial 26 AM_PROG_LIBTOOL +# serial 27 AM_PROG_LIBTOOL AC_DEFUN(AM_PROG_LIBTOOL, [AC_REQUIRE([AM_ENABLE_SHARED])dnl AC_REQUIRE([AM_ENABLE_STATIC])dnl @@ -79,6 +79,18 @@ case "$host" in ;; esac +# enable the --disable-libtool-lock switch + +AC_ARG_ENABLE(libtool-lock, +[ --disable-libtool-lock force libtool not to do file locking], +need_locks=$enableval, +need_locks=yes) + +if test x"$need_locks" = xno; then + libtool_flags="$libtool_flags --disable-lock" +fi + + # Actually configure libtool. ac_aux_dir is where install-sh is found. CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ diff --git a/ltconfig.in b/ltconfig.in index 027a56bed..affa79124 100755 --- a/ltconfig.in +++ b/ltconfig.in @@ -117,6 +117,7 @@ ofile="$default_ofile" verify_host=yes with_gcc=no with_gnu_ld=no +need_locks=yes old_AR="$AR" old_CC="$CC" @@ -162,6 +163,7 @@ Generate a system-specific libtool script. --version output version information and exit --with-gcc assume that the GNU C compiler will be used --with-gnu-ld assume that the C compiler uses the GNU linker + --disable-lock disable file locking LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program that provides basic libtool functionality. @@ -195,6 +197,8 @@ EOM --with-gcc) with_gcc=yes ;; --with-gnu-ld) with_gnu_ld=yes ;; + --disable-lock) need_locks=no ;; + -*) echo "$progname: unrecognized option \`$option'" 1>&2 echo "$help" 1>&2 @@ -638,6 +642,36 @@ fi CFLAGS="$save_CFLAGS" $rm conftest* +# 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 + echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6 + 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 + echo "$ac_t$hard_links" 1>&6 + $rm conftest* +else + need_locks=no +fi + +# Abort if we need locks and they don't work and the user didn't disable them + +if test "$hard_links" = no; then + echo "*** Warning, your platform support neither -c and -o with your compiler" + echo "*** and doesn't provide working hard links to do file locking." + echo "*** You can use ltconfig --disable-lock or configure --disable-libtool-lock" + echo "*** but you should never try to do parallel compilation (make -j n)" + echo "*** unless the package maintainer told you that you could." + echo "*** You should report this bug to " + exit 1 +fi + + # Check for any special shared library compilation flags. if test -n "$special_shlib_compile_flags"; then echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 @@ -1362,7 +1396,7 @@ case "$ltmain" in old_postuninstall_cmds archive_cmds postinstall_cmds postuninstall_cmds \ allow_undefined_flag no_undefined_flag \ finish_cmds finish_eval global_symbol_pipe \ - hardcode_libdir_flag_spec hardcode_libdir_separator compiler_c_o; do + hardcode_libdir_flag_spec hardcode_libdir_separator compiler_c_o need_locks; do case "$var" in reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ @@ -1380,13 +1414,6 @@ case "$ltmain" in trap "$rm \"$ofile\"; exit 1" 1 2 15 echo "creating $ofile" $rm "$ofile" - if test "$compiler_c_o" = no; then - $echo "**** Warning ! Your compiler doesn't support -c and -o options" - $echo "**** If you use a single makefile, with relative directories and" - $echo "**** use the -o option of libtool gcc, we strongly discourage" - $echo "**** to make parallel builds (make -j n) if there are source" - $echo "**** files with the same name in different subdirectories" - fi cat < "$ofile" #! $SHELL @@ -1507,6 +1534,9 @@ pic_flag=$pic_flag # Does compiler simultaneously support -c and -o options compiler_c_o=$compiler_c_o +# Must we lock files when doing compilation ? +need_locks=$need_locks + # Compiler flag to prevent dynamic linking. link_static_flag=$link_static_flag diff --git a/ltmain.in b/ltmain.in index 48f138ef7..730481217 100644 --- a/ltmain.in +++ b/ltmain.in @@ -375,6 +375,16 @@ if test -z "$show_help"; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.o fi + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until ln "$0" "$output_obj.lock" 2>/dev/null; do + $show "Waiting for lock on $output_obj to be removed" + sleep 2 + done + trap "rm $output_obj.lock; exit 1" 1 2 15 + fi + # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. @@ -435,6 +445,11 @@ if test -z "$show_help"; then fi fi + # Unlock the critical section if it was locked + if test "$need_locks" = yes; then + rm "$output_obj.lock" + fi + # Create an invalid libtool object if no PIC, so that we do not # accidentally link it into a program. if test "$build_libtool_libs" != yes; then