]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
* ltmain.in (libobj): default value must not contain directory
authorAlexandre Oliva <oliva@dcc.unicamp.br>
Mon, 2 Nov 1998 17:21:52 +0000 (17:21 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Mon, 2 Nov 1998 17:21:52 +0000 (17:21 +0000)
  components

* ltconfig.in (compiler): detect if the compiler supports
-c and -o flags, create a variable compiler_c_o. Also issue
a big warning if it is not supported

* ltmain.in (compile): enable the -o option as input for libtool.
The objects are not moved if the compiler supports -o with -c.
Sources and objects can contain relative directories.
(link): enable the linking of executables into relative directories

ChangeLog
ltconfig.in
ltmain.in

index 3232ca621a3912c5e88f8d32c084cea3fe52081a..ed5ff579bcac98c3098d23eba07eb0585aac4133 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+1998-11-02  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+       * ltmain.in (libobj): default value must not contain directory
+       components
+
+1998-11-02  Eric Estievenart <eric@via.ecp.fr>
+
+       * ltconfig.in (compiler): detect if the compiler supports
+       -c and -o flags, create a variable compiler_c_o. Also issue
+       a big warning if it is not supported
+
+       * ltmain.in (compile): enable the -o option as input for libtool.
+       The objects are not moved if the compiler supports -o with -c.
+       Sources and objects can contain relative directories.
+       (link): enable the linking of executables into relative directories
+
 1998-11-02  Alexandre Oliva  <oliva@dcc.unicamp.br>
 
        * AUTHORS: added myself as a co-maintainer
index 3eb1c8179bd7813d199a7a97f9218ad33c501f6f..53df332a783db4033711e94f920df85bf4e8e51b 100755 (executable)
@@ -611,6 +611,33 @@ else
   echo "$ac_t"none 1>&6
 fi
 
+# Check to see if options -o and -c are simultaneously supported by compiler
+echo $ac_n "checking if $compiler supports -c and -o options... $ac_c" 1>&6
+$rm conftest*
+echo "int some_variable = 0;" > conftest.c
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -c -o conftest.o"
+echo "$progname:@LINENO@: checking if $compiler supports -c and -o options" >&5
+if { (eval echo $progname:@LINENO@: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
+
+  # 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
+      echo "$ac_t"no 1>&6
+      compiler_c_o=no
+    else
+      echo "$ac_t"yes 1>&6
+      compiler_c_o=yes
+    fi
+else
+  # Append any errors to the config.log.
+  cat conftest.err 1>&5
+  compiler_c_o=no
+  echo "$ac_t"no 1>&6
+fi
+CFLAGS="$save_CFLAGS"
+$rm conftest*
+
 # 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
@@ -1335,7 +1362,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; do
+    hardcode_libdir_flag_spec hardcode_libdir_separator compiler_c_o; do
 
     case "$var" in
     reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
@@ -1353,6 +1380,13 @@ 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 <<EOF > "$ofile"
 #! $SHELL
 
@@ -1470,6 +1504,9 @@ wl=$wl
 # Additional compiler flags for building library objects.
 pic_flag=$pic_flag
 
+# Does compiler simultaneously support -c and -o options
+compiler_c_o=$compiler_c_o
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$link_static_flag
 
index d32a059967cca4738662e2b1c36e3df729e67bc4..fd149e03818eef88c0789760dc586941a0f393c5 100644 (file)
--- a/ltmain.in
+++ b/ltmain.in
@@ -254,14 +254,17 @@ if test -z "$show_help"; then
     srcfile="$nonopt"
     suppress_output=
 
+    user_target=no
     for arg
     do
       # Accept any command-line options.
       case "$arg" in
       -o)
-       $echo "$modename: you cannot specify the output filename with \`-o'" 1>&2
-       $echo "$help" 1>&2
-       exit 1
+        if test "$user_target" != "no"; then
+          $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+         exit 1
+        fi
+        user_target=next
        ;;
 
       -static)
@@ -270,6 +273,20 @@ if test -z "$show_help"; then
        ;;
       esac
 
+      case "$user_target" in
+      next)
+        # The next one is the -o target name
+        user_target=yes
+        continue
+        ;;
+      yes)
+        # We got the output file
+        user_target=set
+        libobj="$arg"
+        continue
+        ;;
+      esac
+
       # Accept the current argument as the source file.
       lastarg="$srcfile"
       srcfile="$arg"
@@ -286,23 +303,34 @@ if test -z "$show_help"; then
       # sets, so we specify it separately.
       case "$lastarg" in
       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*)
-       lastarg="\"$lastarg\""
-       ;;
+        lastarg="\"$lastarg\""
+        ;;
       esac
 
       # Add the previous argument to base_compile.
       if test -z "$base_compile"; then
-       base_compile="$lastarg"
+        base_compile="$lastarg"
       else
-       base_compile="$base_compile $lastarg"
+        base_compile="$base_compile $lastarg"
       fi
     done
 
-    # Get the name of the library object.
-    libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+    case "$user_target" in
+    set)
+      ;;
+    no)
+      # Get the name of the library object.
+      libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+      ;;
+    *)
+      $echo "$modename: you must specify a target with \`-o'" 1>&2
+      exit 1
+      ;;
+    esac
 
     # Recognize several different file suffixes.
-    xform='[cCFSfms]'
+    # If the user specifies -o file.o, it is replaced with file.lo
+    xform='[cCFSfmso]'
     case "$libobj" in
     *.ada) xform=ada ;;
     *.adb) xform=adb ;;
@@ -321,7 +349,7 @@ if test -z "$show_help"; then
     case "$libobj" in
     *.lo) obj=`$echo "X$libobj" | $Xsed -e 's/\.lo$/.o/'` ;;
     *)
-      $echo "$modename: cannot determine name of library object from \`$srcfile'" 1>&2
+      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
       exit 1
       ;;
     esac
@@ -341,43 +369,70 @@ if test -z "$show_help"; then
       trap "$run $rm $libobj; exit 1" 1 2 15
     fi
 
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$echo "$Xsrcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.o
+    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.
       fbsd_hideous_sh_bug=$base_compile
 
       # All platforms use -DPIC, to notify preprocessed assembler code.
-      $show "$base_compile$pic_flag -DPIC $srcfile"
-      if $run eval "$base_compile\$pic_flag -DPIC \$srcfile"; then :
+      command="$base_compile$pic_flag -DPIC $srcfile"
+      if test "$compiler_c_o" = yes; then
+        command="$command -o $libobj"
+        output_obj="$libobj"
+      fi
+
+      $show "$command"
+      if $run eval "$command"; then :
       else
-        test -n "$obj" && $run $rm $obj
+        test -n "$output_obj" && $run $rm $output_obj
         exit 1
       fi
 
+      # Just move the object if needed, then go on to compile the next one
+      if test "$compiler_c_o" = no; then 
+        $show "$mv $output_obj $libobj"
+        $run $mv $output_obj $libobj || exit $?
+      fi
+
       # If we have no pic_flag, then copy the object into place and finish.
       if test -z "$pic_flag"; then
-        $show "$LN_S $obj $libobj"
-        $run $LN_S $obj $libobj
+        $show "$LN_S $libobj $obj"
+        $run $LN_S $libobj $obj
         exit $?
       fi
 
-      # Just move the object, then go on to compile the next one
-      $show "$mv $obj $libobj"
-      $run $mv $obj $libobj || exit $?
-
       # Allow error messages only from the first compilation.
       suppress_output=' >/dev/null 2>&1'
     fi
 
     # Only build a position-dependent object if we build old libraries.
     if test "$build_old_libs" = yes; then
+      command="$base_compile $srcfile"
+      if test "$compiler_c_o" = yes; then
+        command="$command -o $obj"
+        output_obj="$obj"
+      fi
+
       # Suppress compiler output if we already did a PIC compilation.
-      $show "$base_compile $srcfile$suppress_output"
-      if $run eval "$base_compile \$srcfile$suppress_output"; then :
+      command="$command$suppress_output"
+      $show "$command"
+      if $run eval "$command"; then :
       else
-        $run $rm $obj $libobj
+        $run $rm $output_obj $libobj
         exit 1
       fi
+
+      # Just move the object if needed
+      if test "$compiler_c_o" = no; then 
+        $show "$mv $output_obj $obj"
+        $run $mv $output_obj $obj || exit $?
+      fi
     fi
 
     # Create an invalid libtool object if no PIC, so that we do not
@@ -847,6 +902,9 @@ if test -z "$show_help"; then
     fi
 
     oldlibs=
+    # calculate the name of the file, without its directory
+    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+
     case "$output" in
     "")
       $echo "$modename: you must specify an output file" 1>&2
@@ -854,12 +912,6 @@ if test -z "$show_help"; then
       exit 1
       ;;
 
-    */* | *\\*)
-      $echo "$modename: output file \`$output' must have no directory components" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-      ;;
-
     *.a)
       if test -n "$link_against_libtool_libs"; then
         $echo "$modename: error: cannot link libtool libraries into archives" 1>&2
@@ -1062,8 +1114,8 @@ if test -z "$show_help"; then
 
       # Create the output directory, or remove our outputs if we need to.
       if test -d $objdir; then
-        $show "${rm}r $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.*"
-       $run ${rm}r $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.*
+        $show "${rm}r $objdir/$outputname $objdir/$libname.* $objdir/${libname}${release}.*"
+       $run ${rm}r $objdir/$outputname $objdir/$libname.* $objdir/${libname}${release}.*
       else
         $show "$mkdir $objdir"
         $run $mkdir $objdir
@@ -1449,8 +1501,8 @@ dld_preloaded_symbols[] =
       fi
 
       # Replace the output file specification.
-      compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'%g'`
-      finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'T%g'`
+      compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$outputname"'%g'`
+      finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$outputname"'T%g'`
 
       # Create the binary in the object directory, then wrap it.
       if test ! -d $objdir; then
@@ -1526,7 +1578,7 @@ dld_preloaded_symbols[] =
         $echo > $output "\
 #! $SHELL
 
-# $output - temporary wrapper script for $objdir/$output
+# $output - temporary wrapper script for $objdir/$outputname
 # Generated by $PROGRAM - GNU $PACKAGE $VERSION
 #
 # The $output program cannot be directly executed until all the libtool
@@ -1595,7 +1647,7 @@ else
   test -n \"\$absdir\" && thisdir=\"\$absdir\"
 
   progdir=\"\$thisdir/$objdir\"
-  program='$output'
+  program='$outputname'
 
   if test -f \"\$progdir/\$program\"; then"