public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* PATCH: Fix shared library build for libiberty
@ 2004-12-16 23:01 H. J. Lu
  2004-12-17  2:01 ` DJ Delorie
  2004-12-24 14:10 ` Andreas Jaeger
  0 siblings, 2 replies; 19+ messages in thread
From: H. J. Lu @ 2004-12-16 23:01 UTC (permalink / raw)
  To: binutils; +Cc: gcc-patches

This patch fixes

http://sources.redhat.com/ml/binutils/2004-12/msg00117.html


H.J.
----
2004-12-16  H.J. Lu  <hongjiu.lu@intel.com>

	* Makefile.tpl: Add @host_pic_frag@.
	* Makefile.in: Regenerated.

	* configure.in: Set host_pic_frag if needed and substitute
	host_pic_frag.
	* configure: Regenerated.

--- binutils/Makefile.tpl.pic	2004-12-10 14:19:01.000000000 -0800
+++ binutils/Makefile.tpl	2004-12-16 14:44:05.358692208 -0800
@@ -499,6 +499,7 @@ PICFLAG_FOR_TARGET = 
 @alphaieee_frag@
 @ospace_frag@
 @host_makefile_frag@
+@host_pic_frag@
 ###
 
 # Flags to pass down to all sub-makes.
--- binutils/configure.in.pic	2004-12-03 08:36:57.000000000 -0800
+++ binutils/configure.in	2004-12-16 14:55:00.520599754 -0800
@@ -1649,9 +1649,11 @@ case $enable_shared in
   else 
     set_lib_path=no
   fi
+  need_host_pic_frag=no
   ;;
 *)
   set_lib_path=$enable_shared
+  need_host_pic_frag=$enable_shared
   ;;
 esac
 
@@ -1667,6 +1669,24 @@ case "${host}" in
   *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
 esac
 
+# We need to pass the right PICFLAG down.
+host_pic_frag=/dev/null
+if test "${need_host_pic_frag}" = "yes"; then
+  case "${host}" in
+    *-*-cygwin*)	;;
+    alpha*-*-linux*)	host_pic_frag=config/mh-elfalphapic ;;
+    arm*-*-*)		host_pic_frag=config/mh-armpic ;;
+    hppa*-*-*)		host_pic_frag=config/mh-papic ;;
+    i[[34567]]86-*-* | x86_64-*-*)
+			host_pic_frag=config/mh-x86pic ;;
+    powerpc*-*-aix*)	;;
+    powerpc*-*-*)	host_pic_frag=config/mh-ppcpic ;;
+    sparc*-*-*)		host_pic_frag=config/mh-sparcpic ;;
+    s390*-*-*)		host_pic_frag=config/mh-s390pic ;;
+    *)			host_pic_frag=config/mh-${host_cpu}pic ;;
+  esac
+fi
+
 # Record target_configdirs and the configure arguments for target and
 # build configuration in Makefile.
 target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
@@ -2120,7 +2140,8 @@ CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(ST
 RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE="\$(STAGE_CC_WRAPPER) ${qqRAW_CXX_FOR_TARGET}"
 
 # Makefile fragments.
-for frag in host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag;
+for frag in host_makefile_frag target_makefile_frag alphaieee_frag \
+	    ospace_frag host_pic_frag
 do
   eval fragval=\$$frag
   if test $fragval != /dev/null; then
@@ -2131,6 +2152,7 @@ AC_SUBST_FILE(host_makefile_frag)
 AC_SUBST_FILE(target_makefile_frag)
 AC_SUBST_FILE(alphaieee_frag)
 AC_SUBST_FILE(ospace_frag)
+AC_SUBST_FILE(host_pic_frag)
 
 # Miscellanea: directories, flags, etc.
 AC_SUBST(SET_LIB_PATH)

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-16 23:01 PATCH: Fix shared library build for libiberty H. J. Lu
@ 2004-12-17  2:01 ` DJ Delorie
  2004-12-17  2:08   ` H. J. Lu
  2004-12-24 14:10 ` Andreas Jaeger
  1 sibling, 1 reply; 19+ messages in thread
From: DJ Delorie @ 2004-12-17  2:01 UTC (permalink / raw)
  To: hjl; +Cc: binutils, gcc-patches


Why is this libiberty specific?  What do the other libraries do?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17  2:01 ` DJ Delorie
@ 2004-12-17  2:08   ` H. J. Lu
  2004-12-17  2:10     ` DJ Delorie
  0 siblings, 1 reply; 19+ messages in thread
From: H. J. Lu @ 2004-12-17  2:08 UTC (permalink / raw)
  To: DJ Delorie; +Cc: binutils, gcc-patches

On Thu, Dec 16, 2004 at 09:00:41PM -0500, DJ Delorie wrote:
> 
> Why is this libiberty specific?  What do the other libraries do?

I believe libiberty is the only library which uses config/mh-CPUpic
for building shared library. Other libraries use libtool for that,
which doesn't use config/mh-CPUpic.


H.J.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17  2:08   ` H. J. Lu
@ 2004-12-17  2:10     ` DJ Delorie
  2004-12-17  2:56       ` Zack Weinberg
  2004-12-17  5:21       ` H. J. Lu
  0 siblings, 2 replies; 19+ messages in thread
From: DJ Delorie @ 2004-12-17  2:10 UTC (permalink / raw)
  To: hjl; +Cc: binutils, gcc-patches


> I believe libiberty is the only library which uses config/mh-CPUpic
> for building shared library. Other libraries use libtool for that,
> which doesn't use config/mh-CPUpic.

I'd rather libiberty use libtool, then.  Any reason not to?  Would you
like to try changing it?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17  2:10     ` DJ Delorie
@ 2004-12-17  2:56       ` Zack Weinberg
  2004-12-17  4:16         ` Gabriel Dos Reis
  2004-12-17  5:21       ` H. J. Lu
  1 sibling, 1 reply; 19+ messages in thread
From: Zack Weinberg @ 2004-12-17  2:56 UTC (permalink / raw)
  To: DJ Delorie; +Cc: hjl, binutils, gcc-patches

DJ Delorie <dj@redhat.com> writes:

>> I believe libiberty is the only library which uses config/mh-CPUpic
>> for building shared library. Other libraries use libtool for that,
>> which doesn't use config/mh-CPUpic.
>
> I'd rather libiberty use libtool, then.  Any reason not to?  Would you
> like to try changing it?

libtool is evil and must be destroyed, and I'm not clear on why anyone
is building a shared libiberty in the first place, but other than that
it sounds like a good idea to me.

zw

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17  2:56       ` Zack Weinberg
@ 2004-12-17  4:16         ` Gabriel Dos Reis
  2004-12-17  6:03           ` Zack Weinberg
  0 siblings, 1 reply; 19+ messages in thread
From: Gabriel Dos Reis @ 2004-12-17  4:16 UTC (permalink / raw)
  To: Zack Weinberg; +Cc: DJ Delorie, hjl, binutils, gcc-patches

Zack Weinberg <zack@codesourcery.com> writes:

| DJ Delorie <dj@redhat.com> writes:
| 
| >> I believe libiberty is the only library which uses config/mh-CPUpic
| >> for building shared library. Other libraries use libtool for that,
| >> which doesn't use config/mh-CPUpic.
| >
| > I'd rather libiberty use libtool, then.  Any reason not to?  Would you
| > like to try changing it?
| 
| libtool is evil and must be destroyed, 

Maybe we should avoid describing software (mis)features in the same
terms that God Almighty uses to express His opinion of sacrificing
infants to Moloch.  Whether or not we are making emotional judgements.

semi :-/

-- Gaby

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17  2:10     ` DJ Delorie
  2004-12-17  2:56       ` Zack Weinberg
@ 2004-12-17  5:21       ` H. J. Lu
  2004-12-17 15:41         ` H. J. Lu
  1 sibling, 1 reply; 19+ messages in thread
From: H. J. Lu @ 2004-12-17  5:21 UTC (permalink / raw)
  To: DJ Delorie; +Cc: binutils, gcc-patches

On Thu, Dec 16, 2004 at 09:10:41PM -0500, DJ Delorie wrote:
> 
> > I believe libiberty is the only library which uses config/mh-CPUpic
> > for building shared library. Other libraries use libtool for that,
> > which doesn't use config/mh-CPUpic.
> 
> I'd rather libiberty use libtool, then.  Any reason not to?  Would you
> like to try changing it?

I can give it a try. 


H.J.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17  4:16         ` Gabriel Dos Reis
@ 2004-12-17  6:03           ` Zack Weinberg
  0 siblings, 0 replies; 19+ messages in thread
From: Zack Weinberg @ 2004-12-17  6:03 UTC (permalink / raw)
  To: Gabriel Dos Reis; +Cc: DJ Delorie, hjl, binutils, gcc-patches

Gabriel Dos Reis <gdr@integrable-solutions.net> writes:

D> Zack Weinberg <zack@codesourcery.com> writes:
>
> | DJ Delorie <dj@redhat.com> writes:
> | 
> | >> I believe libiberty is the only library which uses config/mh-CPUpic
> | >> for building shared library. Other libraries use libtool for that,
> | >> which doesn't use config/mh-CPUpic.
> | >
> | > I'd rather libiberty use libtool, then.  Any reason not to?  Would you
> | > like to try changing it?
> | 
> | libtool is evil and must be destroyed, 
>
> Maybe we should avoid describing software (mis)features in [...]

I was being tongue-in-cheek, as the rest of the sentence should have
made clear.

zw

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17  5:21       ` H. J. Lu
@ 2004-12-17 15:41         ` H. J. Lu
  2004-12-17 17:48           ` DJ Delorie
  0 siblings, 1 reply; 19+ messages in thread
From: H. J. Lu @ 2004-12-17 15:41 UTC (permalink / raw)
  To: DJ Delorie; +Cc: binutils, gcc-patches

On Thu, Dec 16, 2004 at 09:20:58PM -0800, H. J. Lu wrote:
> On Thu, Dec 16, 2004 at 09:10:41PM -0500, DJ Delorie wrote:
> > 
> > > I believe libiberty is the only library which uses config/mh-CPUpic
> > > for building shared library. Other libraries use libtool for that,
> > > which doesn't use config/mh-CPUpic.
> > 
> > I'd rather libiberty use libtool, then.  Any reason not to?  Would you
> > like to try changing it?
> 
> I can give it a try. 

Just to make sure that everyone understands that we don't build
libiberty.so for libiberty. But we do build an archive compiled with
-fPIC which can be used by other libraries. Are we going to build
libiberty.so or keep the same? If we build libiberty.so, we have to
be very careful about the ABI. We have to treat it like libstdc++ when
we change/add/remove things to libiberty. If we don't build
libiberty.so, I don't see there is a need for libtool. My top level
patch is better.


H.J.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17 15:41         ` H. J. Lu
@ 2004-12-17 17:48           ` DJ Delorie
  2004-12-17 19:01             ` H. J. Lu
  2004-12-18  0:22             ` H. J. Lu
  0 siblings, 2 replies; 19+ messages in thread
From: DJ Delorie @ 2004-12-17 17:48 UTC (permalink / raw)
  To: hjl; +Cc: binutils, gcc-patches


> Just to make sure that everyone understands that we don't build
> libiberty.so for libiberty.

Right, but some distros do.  We don't support them, but they do.

> If we build libiberty.so, we have to be very careful about the ABI.

In general, we are, but not enough for .so's.

> If we don't build libiberty.so, I don't see there is a need for
> libtool. My top level patch is better.

I'd rather use something compatible with all the other libraries, so
that things are more likely to "just work".  Having extra files in
toplevel just for libiberty, when everyeone else is doing something
different, is bad.

Plus, if someone *does* want to make a libiberty.so for themselves,
this would make it a bit easier for them.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17 17:48           ` DJ Delorie
@ 2004-12-17 19:01             ` H. J. Lu
  2004-12-17 19:11               ` DJ Delorie
  2004-12-18  0:22             ` H. J. Lu
  1 sibling, 1 reply; 19+ messages in thread
From: H. J. Lu @ 2004-12-17 19:01 UTC (permalink / raw)
  To: DJ Delorie; +Cc: binutils, gcc-patches

On Fri, Dec 17, 2004 at 12:47:51PM -0500, DJ Delorie wrote:
> 
> > Just to make sure that everyone understands that we don't build
> > libiberty.so for libiberty.
> 
> Right, but some distros do.  We don't support them, but they do.
> 
> > If we build libiberty.so, we have to be very careful about the ABI.
> 
> In general, we are, but not enough for .so's.
> 
> > If we don't build libiberty.so, I don't see there is a need for
> > libtool. My top level patch is better.
> 
> I'd rather use something compatible with all the other libraries, so
> that things are more likely to "just work".  Having extra files in
> toplevel just for libiberty, when everyeone else is doing something
> different, is bad.
> 
> Plus, if someone *does* want to make a libiberty.so for themselves,
> this would make it a bit easier for them.

Do we want to use automake on libiberty? Every other library uses it.


H.J.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17 19:01             ` H. J. Lu
@ 2004-12-17 19:11               ` DJ Delorie
  0 siblings, 0 replies; 19+ messages in thread
From: DJ Delorie @ 2004-12-17 19:11 UTC (permalink / raw)
  To: hjl; +Cc: binutils, gcc-patches


> Do we want to use automake on libiberty? Every other library uses it.

Remember that libiberty does dependencies differently so that when
building in $srcdir it doesn't have to copy everything.  If automake
means a reliance on VPATH, we can't use it.  That's partly why
libiberty has its own "make maint-deps" - so that it can set up
explicit dependencies on the right files.

We also build two libraries - the regular one, and one that includes
the otherwise omitted functions (for testing).

Otherwise, I have no objection to automake, as long as it functions
the same afterwards.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-17 17:48           ` DJ Delorie
  2004-12-17 19:01             ` H. J. Lu
@ 2004-12-18  0:22             ` H. J. Lu
  2004-12-18  0:49               ` DJ Delorie
  1 sibling, 1 reply; 19+ messages in thread
From: H. J. Lu @ 2004-12-18  0:22 UTC (permalink / raw)
  To: DJ Delorie; +Cc: binutils, gcc-patches

On Fri, Dec 17, 2004 at 12:47:51PM -0500, DJ Delorie wrote:
> 
> > Just to make sure that everyone understands that we don't build
> > libiberty.so for libiberty.
> 
> Right, but some distros do.  We don't support them, but they do.
> 
> > If we build libiberty.so, we have to be very careful about the ABI.
> 
> In general, we are, but not enough for .so's.
> 
> > If we don't build libiberty.so, I don't see there is a need for
> > libtool. My top level patch is better.
> 
> I'd rather use something compatible with all the other libraries, so
> that things are more likely to "just work".  Having extra files in
> toplevel just for libiberty, when everyeone else is doing something
> different, is bad.
> 
> Plus, if someone *does* want to make a libiberty.so for themselves,
> this would make it a bit easier for them.

This patch seems to work for me in binutils.


H.J.
----
bfd/

2004-12-17  H.J. Lu  <hongjiu.lu@intel.com>

	* configure.in (WIN32LIBADD): Use -L../libiberty/.libs instead
	of -L../libiberty/pic.
	* configure: Regenerated.

libiberty/

2004-12-17  H.J. Lu  <hongjiu.lu@intel.com>

	* Makefile.in (top_builddir): Set to `.'.
	(OUTPUT_OPTION): Removed.
	(LIBTOOL): New.
	(LTLIBOBJS): New.
	(EXTRA_LTOFILES): New.
	(FLAGS_TO_PASS): Add EXTRA_LTOFILES.
	(all): Remove stamp-picdir.
	(LTCOMPILE): New.
	(.c.lo): New rule.
	(REQUIRED_LTOFILES): New.
	(CONFIGURED_LTOFILES): New.
	($(TARGETLIB)): Check .libs for PIC object files. Depend on
	$(REQUIRED_LTOFILES) $(EXTRA_LTOFILES) $(LTLIBOBJS).
	(stamp-picdir): Completely removed.
	(maint-missing): Pass $(REQUIRED_LTOFILES)
	$(CONFIGURED_LTOFILES) instead of (REQUIRED_OFILES)
	$(CONFIGURED_OFILES)
	(maint-buildall): Depend on $(REQUIRED_LTOFILES)
	$(CONFIGURED_LTOFILES).
	(mostlyclean): Remove *.lo .libs instead of pic.
	Run "make maint-deps".

	* config.table: Don't check --enable-shared.

	* configure.ac (AC_PROG_LIBTOOL): Add.
	(AC_PROG_CC_C_O): Removed.
	(OUTPUT_OPTION): Removed.
	(NO_MINUS_C_MINUS_O): Removed.
	(ltpexecute): New substitute.
	(LIBOBJS): Cleanup.
	* configure: Regenerated.

	* maint-tool: Updated for .lo/libtool.

--- binutils/bfd/configure.in.libtool	2004-12-17 14:41:08.664938575 -0800
+++ binutils/bfd/configure.in	2004-12-17 15:58:28.769327242 -0800
@@ -456,7 +456,7 @@ changequote(,)dnl
     x=`sed -n -e 's/^[ 	]*PICFLAG[ 	]*=[ 	]*//p' < ../libiberty/Makefile | sed -n '$p'`
 changequote([,])dnl
     if test -n "$x"; then
-      WIN32LIBADD="-L../libiberty/pic -liberty"
+      WIN32LIBADD="-L../libiberty/.libs -liberty"
     fi
   ;;
   esac
--- binutils/libiberty/Makefile.in.libtool	2004-11-15 09:10:32.000000000 -0800
+++ binutils/libiberty/Makefile.in	2004-12-17 16:06:51.183935711 -0800
@@ -29,6 +29,8 @@
 libiberty_topdir = @libiberty_topdir@
 srcdir = @srcdir@
 
+top_builddir = .
+
 prefix = @prefix@
 
 exec_prefix = @exec_prefix@
@@ -52,9 +54,6 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 mkinstalldirs = $(SHELL) $(libiberty_topdir)/mkinstalldirs
 
-# Some compilers can't handle cc -c blah.c -o foo/blah.o.
-OUTPUT_OPTION = @OUTPUT_OPTION@
-
 AR = @AR@
 AR_FLAGS = rc
 
@@ -65,6 +64,7 @@ LOADLIBES = @LIBS@
 RANLIB = @RANLIB@
 MAKEINFO = @MAKEINFO@
 PERL = @PERL@
+LIBTOOL = @LIBTOOL@
 
 PICFLAG =
 
@@ -74,10 +74,12 @@ TARGETLIB = ./libiberty.a
 TESTLIB = ./testlib.a
 
 LIBOBJS = @LIBOBJS@
+LTLIBOBJS = @LTLIBOBJS@
 
 # A configuration can specify extra .o files that should be included,
 # even if they are in libc. (Perhaps the libc version is buggy.)
 EXTRA_OFILES = 
+EXTRA_LTOFILES = 
 
 # Flags to pass to a recursive make.
 FLAGS_TO_PASS = \
@@ -88,6 +90,7 @@ FLAGS_TO_PASS = \
 	"DESTDIR=$(DESTDIR)" \
 	"LIBCFLAGS=$(LIBCFLAGS)" \
 	"EXTRA_OFILES=$(EXTRA_OFILES)" \
+	"EXTRA_LTOFILES=$(EXTRA_LTOFILES)" \
 	"HDEFINES=$(HDEFINES)" \
 	"INSTALL=$(INSTALL)" \
 	"INSTALL_DATA=$(INSTALL_DATA)" \
@@ -106,7 +109,7 @@ FLAGS_TO_PASS = \
 SUBDIRS = testsuite
 
 # FIXME: add @BUILD_INFO@ once we're sure it works for everyone.
-all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir
+all: $(TARGETLIB) needed-list required-list all-subdir
 	@: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
 
 .PHONY: check installcheck
@@ -118,15 +121,19 @@ installcheck: installcheck-subdir
 INCDIR=$(srcdir)/$(MULTISRCTOP)../include
 
 COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
+LTCOMPILE = $(LIBTOOL) --mode=compile $(COMPILE.c)
+
+.c.lo:
+	$(LTCOMPILE) -c -o $@ $<
 
 # Just to make sure we don't use a built-in rule with VPATH
 .c.o:
 	false
 
 # NOTE: If you add new files to the library, add them to this list
-# (alphabetical), and add them to REQUIRED_OFILES, or
-# CONFIGURED_OFILES and funcs in configure.ac.  Also run "make maint-deps"
-# to build the new rules.
+# (alphabetical), and add them to REQUIRED_OFILES/REQUIRED_LTOFILES, or
+# CONFIGURED_OFILES/CONFIGURED_LTOFILES and funcs in configure.ac.
+# Also run "make maint-deps" to build the new rules.
 CFILES = alloca.c argv.c asprintf.c atexit.c				\
 	basename.c bcmp.c bcopy.c bsearch.c bzero.c			\
 	calloc.c choose-temp.c clock.c concat.c cp-demangle.c		\
@@ -174,6 +181,22 @@ REQUIRED_OFILES = ./regex.o ./cplus-dem.
 	./ternary.o							\
 	./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o	\
 	 ./xstrerror.o
+REQUIRED_LTOFILES = ./regex.lo ./cplus-dem.lo ./cp-demangle.lo ./md5.lo	\
+	./alloca.lo ./argv.lo						\
+	./choose-temp.lo ./concat.lo ./cp-demint.lo			\
+	./dyn-string.lo							\
+	./fdmatch.lo ./fibheap.lo ./floatformat.lo ./fnmatch.lo		\
+	./getopt.lo ./getopt1.lo ./getpwd.lo ./getruntime.lo		\
+	./hashtab.lo ./hex.lo						\
+	./lbasename.lo ./lrealpath.lo					\
+	./make-relative-prefix.lo ./make-temp-file.lo			\
+	./objalloc.lo ./obstack.lo					\
+	./partition.lo ./physmem.lo @ltpexecute@				\
+	./safe-ctype.lo ./sort.lo ./spaces.lo ./splay-tree.lo ./strerror.lo	\
+	 ./strsignal.lo							\
+	./ternary.lo							\
+	./xatexit.lo ./xexit.lo ./xmalloc.lo ./xmemdup.lo ./xstrdup.lo	\
+	 ./xstrerror.lo
 
 # These are all the objects that configure may add to the library via
 # $funcs or EXTRA_OFILES.  This list exists here only for "make
@@ -199,6 +222,27 @@ CONFIGURED_OFILES = ./asprintf.o ./atexi
 	./vasprintf.o ./vfork.o ./vfprintf.o ./vprintf.o ./vsnprintf.o	\
 	 ./vsprintf.o							\
 	./waitpid.o
+CONFIGURED_LTOFILES = ./asprintf.lo ./atexit.lo				\
+	./basename.lo ./bcmp.lo ./bcopy.lo ./bsearch.lo ./bzero.lo		\
+	./calloc.lo ./clock.lo ./copysign.lo				\
+	./_doprnt.lo							\
+	./ffs.lo								\
+	./getcwd.lo ./getpagesize.lo					\
+	./index.lo ./insque.lo						\
+	./memchr.lo ./memcmp.lo ./memcpy.lo ./memmove.lo ./mempcpy.lo	\
+	 ./memset.lo ./mkstemps.lo					\
+	./pex-djgpp.lo ./pex-mpw.lo ./pex-msdos.lo ./pex-os2.lo		\
+	 ./pex-unix.lo ./pex-win32.lo					\
+	 ./putenv.lo							\
+	./random.lo ./rename.lo ./rindex.lo				\
+	./setenv.lo ./sigsetmask.lo ./snprintf.lo ./stpcpy.lo ./stpncpy.lo	\
+	 ./strcasecmp.lo ./strchr.lo ./strdup.lo ./strncasecmp.lo		\
+	 ./strncmp.lo ./strrchr.lo ./strstr.lo				\
+	 ./strtod.lo ./strtol.lo ./strtoul.lo				\
+	./tmpnam.lo							\
+	./vasprintf.lo ./vfork.lo ./vfprintf.lo ./vprintf.lo ./vsnprintf.lo	\
+	 ./vsprintf.lo							\
+	./waitpid.lo
 
 # These files are installed if the library has been configured to do so.
 INSTALLED_HEADERS =                                                     \
@@ -216,20 +260,20 @@ INSTALLED_HEADERS =                     
 	$(INCDIR)/splay-tree.h                                          \
 	$(INCDIR)/ternary.h
 
-$(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
-	-rm -f $(TARGETLIB) pic/$(TARGETLIB)
+$(TARGETLIB): $(REQUIRED_LTOFILES) $(EXTRA_LTOFILES) $(LTLIBOBJS)
+	-rm -f $(TARGETLIB) .libs/$(TARGETLIB)
 	$(AR) $(AR_FLAGS) $(TARGETLIB) \
 	  $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
 	$(RANLIB) $(TARGETLIB)
-	if [ x"$(PICFLAG)" != x ]; then \
-	  cd pic; \
+	if [ -d .libs ]; then \
+	  cd .libs; \
 	  $(AR) $(AR_FLAGS) $(TARGETLIB) \
 	    $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
 	  $(RANLIB) $(TARGETLIB); \
 	  cd ..; \
 	else true; fi
 
-$(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+$(TESTLIB): $(REQUIRED_LTOFILES) $(CONFIGURED_LTOFILES)
 	-rm -f $(TESTLIB)
 	$(AR) $(AR_FLAGS) $(TESTLIB) \
 	  $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
@@ -321,12 +365,6 @@ needed-list: Makefile
 required-list: Makefile
 	echo $(REQUIRED_OFILES) > required-list
 
-stamp-picdir:
-	if [ x"$(PICFLAG)" != x ] && [ ! -d pic ]; then \
-	  mkdir pic; \
-	else true; fi
-	touch stamp-picdir
-
 .PHONY: all etags tags ls clean stage1 stage2
 
 etags tags: TAGS etags-subdir
@@ -346,9 +384,9 @@ ls:
 # Various targets for maintainers.
 
 maint-missing :
-	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_LTOFILES) $(CONFIGURED_LTOFILES)
 
-maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+maint-buildall : $(REQUIRED_LTOFILES) $(CONFIGURED_LTOFILES)
 	@true
 
 maint-undoc : $(srcdir)/functions.texi
@@ -362,9 +400,9 @@ maint-deps :
 # Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS
 # multiple times, hence our explicit recursion with an empty SUBDIRS.
 mostlyclean: mostlyclean-subdir
-	-rm -rf *.o pic core errs \#* *.E a.out
+	-rm -rf *.o *.lo .libs core errs \#* *.E a.out
 	-rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-*
-	-rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir
+	-rm -f $(CONFIG_H) $(NEEDED_LIST)
 	-rm -f libiberty.aux libiberty.cp libiberty.cps libiberty.fn libiberty.ky
 	-rm -f libiberty.log libiberty.tmp libiberty.tps libiberty.pg
 	-rm -f libiberty.pgs libiberty.toc libiberty.tp libiberty.tpl libiberty.vr
@@ -411,653 +449,353 @@ maintainer-clean-subdir: config.h
 	  cd $$dir && $(MAKE) $(FLAGS_TO_PASS) $$target; \
 	done
 
-$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir
-$(CONFIGURED_OFILES): stamp-picdir
-
+# Don't export variables to the environment, in order to not confuse
+# configure.
+.NOEXPORT:
 # The dependencies in the remainder of this file are automatically
 # generated by "make maint-deps".  Manual edits will be lost.
 
-./_doprnt.o: $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \
+./_doprnt.lo: $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/_doprnt.c
 
-./alloca.o: $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \
+./alloca.lo: $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/alloca.c
 
-./argv.o: $(srcdir)/argv.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION)
+./argv.lo: $(srcdir)/argv.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/argv.c
 
-./asprintf.o: $(srcdir)/asprintf.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION)
+./asprintf.lo: $(srcdir)/asprintf.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/asprintf.c
 
-./atexit.o: $(srcdir)/atexit.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION)
+./atexit.lo: $(srcdir)/atexit.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/atexit.c
 
-./basename.o: $(srcdir)/basename.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+./basename.lo: $(srcdir)/basename.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/basename.c
 
-./bcmp.o: $(srcdir)/bcmp.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION)
+./bcmp.lo: $(srcdir)/bcmp.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/bcmp.c
 
-./bcopy.o: $(srcdir)/bcopy.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION)
+./bcopy.lo: $(srcdir)/bcopy.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/bcopy.c
 
-./bsearch.o: $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION)
+./bsearch.lo: $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/bsearch.c
 
-./bzero.o: $(srcdir)/bzero.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION)
+./bzero.lo: $(srcdir)/bzero.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/bzero.c
 
-./calloc.o: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION)
+./calloc.lo: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/calloc.c
 
-./choose-temp.o: $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \
+./choose-temp.lo: $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/choose-temp.c
 
-./clock.o: $(srcdir)/clock.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION)
+./clock.lo: $(srcdir)/clock.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/clock.c
 
-./concat.o: $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \
+./concat.lo: $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/concat.c
 
-./copysign.o: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION)
+./copysign.lo: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/copysign.c
 
-./cp-demangle.o: $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \
+./cp-demangle.lo: $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \
 	$(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
 	$(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/cp-demangle.c
 
-./cp-demint.o: $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \
+./cp-demint.lo: $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \
 	$(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/cp-demint.c
 
-./cplus-dem.o: $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \
+./cplus-dem.lo: $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/cplus-dem.c
 
-./dyn-string.o: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
+./dyn-string.lo: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/dyn-string.c
 
-./fdmatch.o: $(srcdir)/fdmatch.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION)
+./fdmatch.lo: $(srcdir)/fdmatch.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/fdmatch.c
 
-./ffs.o: $(srcdir)/ffs.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION)
+./ffs.lo: $(srcdir)/ffs.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/ffs.c
 
-./fibheap.o: $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \
+./fibheap.lo: $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/fibheap.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/fibheap.c
 
-./floatformat.o: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
+./floatformat.lo: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/floatformat.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/floatformat.c
 
-./fnmatch.o: $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \
+./fnmatch.lo: $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/fnmatch.c
 
-./getcwd.o: $(srcdir)/getcwd.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION)
+./getcwd.lo: $(srcdir)/getcwd.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getcwd.c
 
-./getopt.o: $(srcdir)/getopt.c config.h $(INCDIR)/getopt.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION)
+./getopt.lo: $(srcdir)/getopt.c config.h $(INCDIR)/getopt.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getopt.c
 
-./getopt1.o: $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION)
+./getopt1.lo: $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getopt1.c
 
-./getpagesize.o: $(srcdir)/getpagesize.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION)
+./getpagesize.lo: $(srcdir)/getpagesize.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getpagesize.c
 
-./getpwd.o: $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \
+./getpwd.lo: $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getpwd.c
 
-./getruntime.o: $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \
+./getruntime.lo: $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getruntime.c
 
-./hashtab.o: $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \
+./hashtab.lo: $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/hashtab.c
 
-./hex.o: $(srcdir)/hex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+./hex.lo: $(srcdir)/hex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/hex.c
 
-./index.o: $(srcdir)/index.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION)
+./index.lo: $(srcdir)/index.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/index.c
 
-./insque.o: $(srcdir)/insque.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION)
+./insque.lo: $(srcdir)/insque.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/insque.c
 
-./lbasename.o: $(srcdir)/lbasename.c $(INCDIR)/ansidecl.h $(INCDIR)/filenames.h \
+./lbasename.lo: $(srcdir)/lbasename.c $(INCDIR)/ansidecl.h $(INCDIR)/filenames.h \
 	$(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/lbasename.c
 
-./lrealpath.o: $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \
+./lrealpath.lo: $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/lrealpath.c
 
-./make-relative-prefix.o: $(srcdir)/make-relative-prefix.c config.h \
+./make-relative-prefix.lo: $(srcdir)/make-relative-prefix.c config.h \
 	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/make-relative-prefix.c
 
-./make-temp-file.o: $(srcdir)/make-temp-file.c config.h $(INCDIR)/ansidecl.h \
+./make-temp-file.lo: $(srcdir)/make-temp-file.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/make-temp-file.c
 
-./md5.o: $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION)
+./md5.lo: $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/md5.c
 
-./memchr.o: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION)
+./memchr.lo: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memchr.c
 
-./memcmp.o: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION)
+./memcmp.lo: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memcmp.c
 
-./memcpy.o: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION)
+./memcpy.lo: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memcpy.c
 
-./memmove.o: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION)
+./memmove.lo: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memmove.c
 
-./mempcpy.o: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION)
+./mempcpy.lo: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/mempcpy.c
 
-./memset.o: $(srcdir)/memset.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION)
+./memset.lo: $(srcdir)/memset.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memset.c
 
-./mkstemps.o: $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION)
+./mkstemps.lo: $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/mkstemps.c
 
-./mpw.o: $(srcdir)/mpw.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/mpw.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/mpw.c $(OUTPUT_OPTION)
+./mpw.lo: $(srcdir)/mpw.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/mpw.c
 
-./msdos.o: $(srcdir)/msdos.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION)
+./msdos.lo: $(srcdir)/msdos.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/msdos.c
 
-./objalloc.o: $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \
+./objalloc.lo: $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/objalloc.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/objalloc.c
 
-./obstack.o: $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION)
+./obstack.lo: $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/obstack.c
 
-./partition.o: $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \
+./partition.lo: $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(INCDIR)/partition.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/partition.c
 
-./pex-djgpp.o: $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \
+./pex-djgpp.lo: $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-djgpp.c
 
-./pex-mpw.o: $(srcdir)/pex-mpw.c config.h $(INCDIR)/ansidecl.h \
+./pex-mpw.lo: $(srcdir)/pex-mpw.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-mpw.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-mpw.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-mpw.c
 
-./pex-msdos.o: $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \
+./pex-msdos.lo: $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-msdos.c
 
-./pex-os2.o: $(srcdir)/pex-os2.c config.h $(INCDIR)/ansidecl.h \
+./pex-os2.lo: $(srcdir)/pex-os2.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-os2.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-os2.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-os2.c
 
-./pex-unix.o: $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \
+./pex-unix.lo: $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-unix.c
 
-./pex-win32.o: $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \
+./pex-win32.lo: $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-win32.c
 
-./physmem.o: $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \
+./physmem.lo: $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/physmem.c
 
-./putenv.o: $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION)
+./putenv.lo: $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/putenv.c
 
-./random.o: $(srcdir)/random.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION)
+./random.lo: $(srcdir)/random.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/random.c
 
-./regex.o: $(srcdir)/regex.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \
+./regex.lo: $(srcdir)/regex.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \
 	$(INCDIR)/xregex2.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/regex.c
 
-./rename.o: $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION)
+./rename.lo: $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/rename.c
 
-./rindex.o: $(srcdir)/rindex.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION)
+./rindex.lo: $(srcdir)/rindex.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/rindex.c
 
-./safe-ctype.o: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \
+./safe-ctype.lo: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/safe-ctype.c
 
-./setenv.o: $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION)
+./setenv.lo: $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/setenv.c
 
-./sigsetmask.o: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION)
+./sigsetmask.lo: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/sigsetmask.c
 
-./snprintf.o: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION)
+./snprintf.lo: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/snprintf.c
 
-./sort.o: $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+./sort.lo: $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
 	$(INCDIR)/sort.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/sort.c
 
-./spaces.o: $(srcdir)/spaces.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION)
+./spaces.lo: $(srcdir)/spaces.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/spaces.c
 
-./splay-tree.o: $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \
+./splay-tree.lo: $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/splay-tree.c
 
-./stpcpy.o: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION)
+./stpcpy.lo: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/stpcpy.c
 
-./stpncpy.o: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION)
+./stpncpy.lo: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/stpncpy.c
 
-./strcasecmp.o: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION)
+./strcasecmp.lo: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strcasecmp.c
 
-./strchr.o: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION)
+./strchr.lo: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strchr.c
 
-./strdup.o: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION)
+./strdup.lo: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strdup.c
 
-./strerror.o: $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \
+./strerror.lo: $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strerror.c
 
-./strncasecmp.o: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION)
+./strncasecmp.lo: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strncasecmp.c
 
-./strncmp.o: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION)
+./strncmp.lo: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strncmp.c
 
-./strrchr.o: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION)
+./strrchr.lo: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strrchr.c
 
-./strsignal.o: $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \
+./strsignal.lo: $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strsignal.c
 
-./strstr.o: $(srcdir)/strstr.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION)
+./strstr.lo: $(srcdir)/strstr.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strstr.c
 
-./strtod.o: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION)
+./strtod.lo: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strtod.c
 
-./strtol.o: $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION)
+./strtol.lo: $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strtol.c
 
-./strtoul.o: $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \
+./strtoul.lo: $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strtoul.c
 
-./ternary.o: $(srcdir)/ternary.c config.h $(INCDIR)/ansidecl.h \
+./ternary.lo: $(srcdir)/ternary.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(INCDIR)/ternary.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/ternary.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/ternary.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/ternary.c
 
-./tmpnam.o: $(srcdir)/tmpnam.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION)
+./tmpnam.lo: $(srcdir)/tmpnam.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/tmpnam.c
 
-./vasprintf.o: $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \
+./vasprintf.lo: $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vasprintf.c
 
-./vfork.o: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION)
+./vfork.lo: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vfork.c
 
-./vfprintf.o: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION)
+./vfprintf.lo: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vfprintf.c
 
-./vprintf.o: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION)
+./vprintf.lo: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vprintf.c
 
-./vsnprintf.o: $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \
+./vsnprintf.lo: $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vsnprintf.c
 
-./vsprintf.o: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION)
+./vsprintf.lo: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vsprintf.c
 
-./waitpid.o: $(srcdir)/waitpid.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION)
+./waitpid.lo: $(srcdir)/waitpid.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/waitpid.c
 
-./xatexit.o: $(srcdir)/xatexit.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION)
+./xatexit.lo: $(srcdir)/xatexit.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xatexit.c
 
-./xexit.o: $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION)
+./xexit.lo: $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xexit.c
 
-./xmalloc.o: $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \
+./xmalloc.lo: $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xmalloc.c
 
-./xmemdup.o: $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \
+./xmemdup.lo: $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xmemdup.c
 
-./xstrdup.o: $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \
+./xstrdup.lo: $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xstrdup.c
 
-./xstrerror.o: $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \
+./xstrerror.lo: $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xstrerror.c
 
-# Don't export variables to the environment, in order to not confuse
-# configure.
-.NOEXPORT:
--- binutils/libiberty/aclocal.m4.libtool	2003-09-03 11:05:45.000000000 -0700
+++ binutils/libiberty/aclocal.m4	2004-12-17 14:44:04.240470348 -0800
@@ -2,6 +2,7 @@ sinclude(aclibdl.m4)
 sinclude(../config/accross.m4)
 sinclude(../config/acx.m4)
 sinclude(../config/no-executables.m4)
+sinclude(../libtool.m4)
 
 dnl See whether strncmp reads past the end of its string parameters.
 dnl On some versions of SunOS4 at least, strncmp reads a word at a time
--- binutils/libiberty/config.table.libtool	2003-05-20 08:37:53.000000000 -0700
+++ binutils/libiberty/config.table	2004-12-17 15:56:14.701509927 -0800
@@ -20,33 +20,6 @@ else
   frags=
 fi
 
-# If they didn't specify --enable-shared, don't generate shared libs.
-case "${enable_shared}" in
-  yes) shared=yes ;;
-  no) shared=no ;;
-  "") shared=no ;;
-  *) shared=yes ;;
-esac
-if [ "${shared}" = "yes" ]; then
-  frag=
-  case "${host}" in
-    *-*-cygwin*)	;;
-    alpha*-*-linux*)	frag=mh-elfalphapic ;;
-    arm*-*-*)		frag=mh-armpic ;;
-    hppa*-*-*)		frag=mh-papic ;;
-    i[34567]86-*-* | x86_64-*-*)
-			frag=mh-x86pic ;;
-    powerpc*-*-aix*)	;;
-    powerpc*-*-*)	frag=mh-ppcpic ;;
-    sparc*-*-*)		frag=mh-sparcpic ;;
-    s390*-*-*)		frag=mh-s390pic ;;
-    *)			frag=mh-${host_cpu}pic ;;
-  esac
-  if [ -n "${frag}" ]; then
-    frags="${frags} ${libiberty_topdir}/config/${frag}"
-  fi
-fi
-
 echo "# Warning: this fragment is automatically generated" > temp-frag
 
 for frag in ${frags}; do
--- binutils/libiberty/configure.ac.libtool	2004-12-13 09:31:22.000000000 -0800
+++ binutils/libiberty/configure.ac	2004-12-17 15:55:27.265589510 -0800
@@ -113,21 +113,13 @@ GCC_NO_EXECUTABLES
 AC_PROG_CC
 AC_PROG_CPP_WERROR
 
+AC_PROG_LIBTOOL
+
 if test x$GCC = xyes; then
   ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic'
 fi
 AC_SUBST(ac_libiberty_warn_cflags)
 
-AC_PROG_CC_C_O
-# autoconf is lame and doesn't give us any substitution variable for this.
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
-  NO_MINUS_C_MINUS_O=yes
-else
-  OUTPUT_OPTION='-o $@'
-fi
-AC_SUBST(NO_MINUS_C_MINUS_O)
-AC_SUBST(OUTPUT_OPTION)
-
 AC_C_CONST
 AC_C_INLINE
 AC_C_BIGENDIAN_CROSS
@@ -526,13 +518,16 @@ fi
 
 # Figure out which version of pexecute to use.
 case "${host}" in
-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
-     *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
-     *-*-msdos*)		pexecute=./pex-msdos.o  ;;
-     *-*-os2-emx*)		pexecute=./pex-os2.o    ;;
-     *)				pexecute=./pex-unix.o   ;;
+     *-*-mingw* | *-*-winnt*)	pex=./pex-win32  ;;
+     *-*-msdosdjgpp*)		pex=./pex-djgpp  ;;
+     *-*-msdos*)		pex=./pex-msdos  ;;
+     *-*-os2-emx*)		pex=./pex-os2    ;;
+     *)				pex=./pex-unix   ;;
 esac
+pexecute=${pex}.o
+ltpexecute=${pex}.lo
 AC_SUBST(pexecute)
+AC_SUBST(ltpexecute)
 
 libiberty_AC_FUNC_STRNCMP
 
@@ -545,16 +540,6 @@ else
 fi
 AC_SUBST(INSTALL_DEST)
 
-m4_pattern_allow(LIBOBJS)
-L=""
-for l in x $LIBOBJS; do
-  case $l in
-    x) ;;
-    *) L="$L ./$l" ;;
-  esac
-done
-LIBOBJS="$L"
-
 # We need multilib support, but only if configuring for the target.
 AC_CONFIG_FILES([Makefile testsuite/Makefile])
 AC_CONFIG_COMMANDS([default],
--- binutils/libiberty/maint-tool.libtool	2004-01-28 14:46:41.000000000 -0800
+++ binutils/libiberty/maint-tool	2004-12-17 15:16:16.961814146 -0800
@@ -76,7 +76,7 @@ sub missing {
     for $f (sort keys %listed) {
 	if ($f =~ /(.*)\.c$/) {
 	    $base = $1;
-	    if (! $listed{"$base.o"}) {
+	    if (! $listed{"$base.lo"}) {
 		print "O $f\n";
 	    }
 	}
@@ -213,10 +213,7 @@ sub locals_first {
 
 sub deps {
 
-    $crule  = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n";
-    $crule .= "\t  \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n";
-    $crule .= "\telse true; fi\n";
-    $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n";
+    $crule .= "\t\$(LTCOMPILE) -c -o \$@ \$<\n";
     $crule .= "\n";
 
     $incdir = shift @ARGV;
@@ -265,7 +262,7 @@ sub deps {
 	    }
 	    @deps = sort { &locals_first($a,$b) } keys %scanned;
 	    $obj = $f;
-	    $obj =~ s/\.c$/.o/;
+	    $obj =~ s/\.c$/.lo/;
 	    $obj = "./$obj:";
 	    if ($#deps >= 0) {
 		print OUT "$obj \$(srcdir)/$f";

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-18  0:22             ` H. J. Lu
@ 2004-12-18  0:49               ` DJ Delorie
  2004-12-18  1:44                 ` H. J. Lu
  0 siblings, 1 reply; 19+ messages in thread
From: DJ Delorie @ 2004-12-18  0:49 UTC (permalink / raw)
  To: hjl; +Cc: binutils, gcc-patches


> 	* configure.in (WIN32LIBADD): Use -L../libiberty/.libs instead
> 	of -L../libiberty/pic.

Oh crap, this is bad.  Can we arrange for both the old way and the new
way to work?  I don't want to become incompatible with other modules
if I don't have to, as libiberty is used all over the place and
coordinating the needed changes would be a mess.

> 	(AC_PROG_CC_C_O): Removed.
> 	(OUTPUT_OPTION): Removed.
> 	(NO_MINUS_C_MINUS_O): Removed.

Could you explain why?

>  COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
> +LTCOMPILE = $(LIBTOOL) --mode=compile $(COMPILE.c)
> +
> +.c.lo:
> +	$(LTCOMPILE) -c -o $@ $<
>  
>  # Just to make sure we don't use a built-in rule with VPATH
>  .c.o:
>  	false

If you read the .c.o comment, you'll see that the .c.lo rule must also
be "false".  This is the vpath problem I was talking about - the .c.lo
rule causes in-srcdir builds to link the wrong objects if the other
rules don't happen to match.

> +# (alphabetical), and add them to REQUIRED_OFILES/REQUIRED_LTOFILES, or
> +# CONFIGURED_OFILES/CONFIGURED_LTOFILES and funcs in configure.ac.

Sigh, too bad we can't automate this, but we can't use gnumake yet.

Hmmm... I wonder if maint-tool can be tweaked to use one of the lists
to update the others?  At least it will occasionally fix any
inconsistencies.  (Don't do this yet!  One thing at a time.)

> +# Also run "make maint-deps" to build the new rules.

Good idea to add this comment.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-18  0:49               ` DJ Delorie
@ 2004-12-18  1:44                 ` H. J. Lu
  2004-12-18  1:51                   ` DJ Delorie
  2004-12-18 21:38                   ` Andrew Pinski
  0 siblings, 2 replies; 19+ messages in thread
From: H. J. Lu @ 2004-12-18  1:44 UTC (permalink / raw)
  To: DJ Delorie; +Cc: binutils, gcc-patches

On Fri, Dec 17, 2004 at 07:49:25PM -0500, DJ Delorie wrote:
> 
> > 	* configure.in (WIN32LIBADD): Use -L../libiberty/.libs instead
> > 	of -L../libiberty/pic.
> 
> Oh crap, this is bad.  Can we arrange for both the old way and the new
> way to work?  I don't want to become incompatible with other modules
> if I don't have to, as libiberty is used all over the place and
> coordinating the needed changes would be a mess.

I made a copy at the old location. I updated the patch withot the bfd
change and it worked OK.

> 
> > 	(AC_PROG_CC_C_O): Removed.
> > 	(OUTPUT_OPTION): Removed.
> > 	(NO_MINUS_C_MINUS_O): Removed.
> 
> Could you explain why?

libtool knows how to handle it. They are unused.

> 
> >  COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
> > +LTCOMPILE = $(LIBTOOL) --mode=compile $(COMPILE.c)
> > +
> > +.c.lo:
> > +	$(LTCOMPILE) -c -o $@ $<
> >  
> >  # Just to make sure we don't use a built-in rule with VPATH
> >  .c.o:
> >  	false
> 
> If you read the .c.o comment, you'll see that the .c.lo rule must also
> be "false".  This is the vpath problem I was talking about - the .c.lo
> rule causes in-srcdir builds to link the wrong objects if the other
> rules don't happen to match.

Done.

> 
> > +# (alphabetical), and add them to REQUIRED_OFILES/REQUIRED_LTOFILES, or
> > +# CONFIGURED_OFILES/CONFIGURED_LTOFILES and funcs in configure.ac.
> 
> Sigh, too bad we can't automate this, but we can't use gnumake yet.
> 
> Hmmm... I wonder if maint-tool can be tweaked to use one of the lists
> to update the others?  At least it will occasionally fix any
> inconsistencies.  (Don't do this yet!  One thing at a time.)
> 
> > +# Also run "make maint-deps" to build the new rules.
> 
> Good idea to add this comment.

Here is the updated patch.


H.J.
----
2004-12-17  H.J. Lu  <hongjiu.lu@intel.com>

	* Makefile.in (top_builddir): Set to `.'.
	(OUTPUT_OPTION): Removed.
	(LIBTOOL): New.
	(LTLIBOBJS): New.
	(EXTRA_LTOFILES): New.
	(FLAGS_TO_PASS): Add EXTRA_LTOFILES.
	(all): Remove stamp-picdir.
	(LTCOMPILE): New.
	(.c.lo): New rule.
	(REQUIRED_LTOFILES): New.
	(CONFIGURED_LTOFILES): New.
	($(TARGETLIB)): Check .libs for PIC object files. Depend on
	$(REQUIRED_LTOFILES) $(EXTRA_LTOFILES) $(LTLIBOBJS).
	(stamp-picdir): Completely removed.
	(maint-missing): Pass $(REQUIRED_LTOFILES)
	$(CONFIGURED_LTOFILES) instead of (REQUIRED_OFILES)
	$(CONFIGURED_OFILES)
	(maint-buildall): Depend on $(REQUIRED_LTOFILES)
	$(CONFIGURED_LTOFILES).
	(mostlyclean): Also remove *.lo .libs.
	Run "make maint-deps".

	* aclocal.m4: Include ../libtool.m4.

	* config.table: Don't check --enable-shared.

	* configure.ac (AC_PROG_LIBTOOL): Add.
	(AC_PROG_CC_C_O): Removed.
	(OUTPUT_OPTION): Removed.
	(NO_MINUS_C_MINUS_O): Removed.
	(ltpexecute): New substitute.
	(LIBOBJS): Cleanup.
	* configure: Regenerated.

	* maint-tool: Updated for .lo/libtool.

--- binutils/libiberty/Makefile.in.libtool	2004-11-15 09:10:32.000000000 -0800
+++ binutils/libiberty/Makefile.in	2004-12-17 17:30:33.253175499 -0800
@@ -29,6 +29,8 @@
 libiberty_topdir = @libiberty_topdir@
 srcdir = @srcdir@
 
+top_builddir = .
+
 prefix = @prefix@
 
 exec_prefix = @exec_prefix@
@@ -52,9 +54,6 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 mkinstalldirs = $(SHELL) $(libiberty_topdir)/mkinstalldirs
 
-# Some compilers can't handle cc -c blah.c -o foo/blah.o.
-OUTPUT_OPTION = @OUTPUT_OPTION@
-
 AR = @AR@
 AR_FLAGS = rc
 
@@ -65,6 +64,7 @@ LOADLIBES = @LIBS@
 RANLIB = @RANLIB@
 MAKEINFO = @MAKEINFO@
 PERL = @PERL@
+LIBTOOL = @LIBTOOL@
 
 PICFLAG =
 
@@ -74,10 +74,12 @@ TARGETLIB = ./libiberty.a
 TESTLIB = ./testlib.a
 
 LIBOBJS = @LIBOBJS@
+LTLIBOBJS = @LTLIBOBJS@
 
 # A configuration can specify extra .o files that should be included,
 # even if they are in libc. (Perhaps the libc version is buggy.)
 EXTRA_OFILES = 
+EXTRA_LTOFILES = 
 
 # Flags to pass to a recursive make.
 FLAGS_TO_PASS = \
@@ -88,6 +90,7 @@ FLAGS_TO_PASS = \
 	"DESTDIR=$(DESTDIR)" \
 	"LIBCFLAGS=$(LIBCFLAGS)" \
 	"EXTRA_OFILES=$(EXTRA_OFILES)" \
+	"EXTRA_LTOFILES=$(EXTRA_LTOFILES)" \
 	"HDEFINES=$(HDEFINES)" \
 	"INSTALL=$(INSTALL)" \
 	"INSTALL_DATA=$(INSTALL_DATA)" \
@@ -106,7 +109,7 @@ FLAGS_TO_PASS = \
 SUBDIRS = testsuite
 
 # FIXME: add @BUILD_INFO@ once we're sure it works for everyone.
-all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir
+all: $(TARGETLIB) needed-list required-list all-subdir
 	@: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
 
 .PHONY: check installcheck
@@ -118,15 +121,19 @@ installcheck: installcheck-subdir
 INCDIR=$(srcdir)/$(MULTISRCTOP)../include
 
 COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
+LTCOMPILE = $(LIBTOOL) --mode=compile $(COMPILE.c)
 
 # Just to make sure we don't use a built-in rule with VPATH
 .c.o:
 	false
 
+.c.lo:
+	false
+
 # NOTE: If you add new files to the library, add them to this list
-# (alphabetical), and add them to REQUIRED_OFILES, or
-# CONFIGURED_OFILES and funcs in configure.ac.  Also run "make maint-deps"
-# to build the new rules.
+# (alphabetical), and add them to REQUIRED_OFILES/REQUIRED_LTOFILES, or
+# CONFIGURED_OFILES/CONFIGURED_LTOFILES and funcs in configure.ac.
+# Also run "make maint-deps" to build the new rules.
 CFILES = alloca.c argv.c asprintf.c atexit.c				\
 	basename.c bcmp.c bcopy.c bsearch.c bzero.c			\
 	calloc.c choose-temp.c clock.c concat.c cp-demangle.c		\
@@ -174,6 +181,22 @@ REQUIRED_OFILES = ./regex.o ./cplus-dem.
 	./ternary.o							\
 	./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o	\
 	 ./xstrerror.o
+REQUIRED_LTOFILES = ./regex.lo ./cplus-dem.lo ./cp-demangle.lo ./md5.lo	\
+	./alloca.lo ./argv.lo						\
+	./choose-temp.lo ./concat.lo ./cp-demint.lo			\
+	./dyn-string.lo							\
+	./fdmatch.lo ./fibheap.lo ./floatformat.lo ./fnmatch.lo		\
+	./getopt.lo ./getopt1.lo ./getpwd.lo ./getruntime.lo		\
+	./hashtab.lo ./hex.lo						\
+	./lbasename.lo ./lrealpath.lo					\
+	./make-relative-prefix.lo ./make-temp-file.lo			\
+	./objalloc.lo ./obstack.lo					\
+	./partition.lo ./physmem.lo @ltpexecute@				\
+	./safe-ctype.lo ./sort.lo ./spaces.lo ./splay-tree.lo ./strerror.lo	\
+	 ./strsignal.lo							\
+	./ternary.lo							\
+	./xatexit.lo ./xexit.lo ./xmalloc.lo ./xmemdup.lo ./xstrdup.lo	\
+	 ./xstrerror.lo
 
 # These are all the objects that configure may add to the library via
 # $funcs or EXTRA_OFILES.  This list exists here only for "make
@@ -199,6 +222,27 @@ CONFIGURED_OFILES = ./asprintf.o ./atexi
 	./vasprintf.o ./vfork.o ./vfprintf.o ./vprintf.o ./vsnprintf.o	\
 	 ./vsprintf.o							\
 	./waitpid.o
+CONFIGURED_LTOFILES = ./asprintf.lo ./atexit.lo				\
+	./basename.lo ./bcmp.lo ./bcopy.lo ./bsearch.lo ./bzero.lo		\
+	./calloc.lo ./clock.lo ./copysign.lo				\
+	./_doprnt.lo							\
+	./ffs.lo								\
+	./getcwd.lo ./getpagesize.lo					\
+	./index.lo ./insque.lo						\
+	./memchr.lo ./memcmp.lo ./memcpy.lo ./memmove.lo ./mempcpy.lo	\
+	 ./memset.lo ./mkstemps.lo					\
+	./pex-djgpp.lo ./pex-mpw.lo ./pex-msdos.lo ./pex-os2.lo		\
+	 ./pex-unix.lo ./pex-win32.lo					\
+	 ./putenv.lo							\
+	./random.lo ./rename.lo ./rindex.lo				\
+	./setenv.lo ./sigsetmask.lo ./snprintf.lo ./stpcpy.lo ./stpncpy.lo	\
+	 ./strcasecmp.lo ./strchr.lo ./strdup.lo ./strncasecmp.lo		\
+	 ./strncmp.lo ./strrchr.lo ./strstr.lo				\
+	 ./strtod.lo ./strtol.lo ./strtoul.lo				\
+	./tmpnam.lo							\
+	./vasprintf.lo ./vfork.lo ./vfprintf.lo ./vprintf.lo ./vsnprintf.lo	\
+	 ./vsprintf.lo							\
+	./waitpid.lo
 
 # These files are installed if the library has been configured to do so.
 INSTALLED_HEADERS =                                                     \
@@ -216,20 +260,23 @@ INSTALLED_HEADERS =                     
 	$(INCDIR)/splay-tree.h                                          \
 	$(INCDIR)/ternary.h
 
-$(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
-	-rm -f $(TARGETLIB) pic/$(TARGETLIB)
+$(TARGETLIB): $(REQUIRED_LTOFILES) $(EXTRA_LTOFILES) $(LTLIBOBJS)
+	-rm -f $(TARGETLIB) .libs/$(TARGETLIB)
 	$(AR) $(AR_FLAGS) $(TARGETLIB) \
 	  $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
 	$(RANLIB) $(TARGETLIB)
-	if [ x"$(PICFLAG)" != x ]; then \
-	  cd pic; \
+	if [ -d .libs ]; then \
+	  cd .libs; \
 	  $(AR) $(AR_FLAGS) $(TARGETLIB) \
 	    $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
 	  $(RANLIB) $(TARGETLIB); \
+	  mkdir -p ../pic; \
+	  rm -f ../pic/$(TARGETLIB); \
+	  cp $(TARGETLIB) ../pic/$(TARGETLIB); \
 	  cd ..; \
 	else true; fi
 
-$(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+$(TESTLIB): $(REQUIRED_LTOFILES) $(CONFIGURED_LTOFILES)
 	-rm -f $(TESTLIB)
 	$(AR) $(AR_FLAGS) $(TESTLIB) \
 	  $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
@@ -321,12 +368,6 @@ needed-list: Makefile
 required-list: Makefile
 	echo $(REQUIRED_OFILES) > required-list
 
-stamp-picdir:
-	if [ x"$(PICFLAG)" != x ] && [ ! -d pic ]; then \
-	  mkdir pic; \
-	else true; fi
-	touch stamp-picdir
-
 .PHONY: all etags tags ls clean stage1 stage2
 
 etags tags: TAGS etags-subdir
@@ -346,9 +387,9 @@ ls:
 # Various targets for maintainers.
 
 maint-missing :
-	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_LTOFILES) $(CONFIGURED_LTOFILES)
 
-maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+maint-buildall : $(REQUIRED_LTOFILES) $(CONFIGURED_LTOFILES)
 	@true
 
 maint-undoc : $(srcdir)/functions.texi
@@ -362,9 +403,9 @@ maint-deps :
 # Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS
 # multiple times, hence our explicit recursion with an empty SUBDIRS.
 mostlyclean: mostlyclean-subdir
-	-rm -rf *.o pic core errs \#* *.E a.out
+	-rm -rf *.o *.lo pic .libs core errs \#* *.E a.out
 	-rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-*
-	-rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir
+	-rm -f $(CONFIG_H) $(NEEDED_LIST)
 	-rm -f libiberty.aux libiberty.cp libiberty.cps libiberty.fn libiberty.ky
 	-rm -f libiberty.log libiberty.tmp libiberty.tps libiberty.pg
 	-rm -f libiberty.pgs libiberty.toc libiberty.tp libiberty.tpl libiberty.vr
@@ -411,653 +452,353 @@ maintainer-clean-subdir: config.h
 	  cd $$dir && $(MAKE) $(FLAGS_TO_PASS) $$target; \
 	done
 
-$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir
-$(CONFIGURED_OFILES): stamp-picdir
-
+# Don't export variables to the environment, in order to not confuse
+# configure.
+.NOEXPORT:
 # The dependencies in the remainder of this file are automatically
 # generated by "make maint-deps".  Manual edits will be lost.
 
-./_doprnt.o: $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \
+./_doprnt.lo: $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/_doprnt.c
 
-./alloca.o: $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \
+./alloca.lo: $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/alloca.c
 
-./argv.o: $(srcdir)/argv.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION)
+./argv.lo: $(srcdir)/argv.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/argv.c
 
-./asprintf.o: $(srcdir)/asprintf.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION)
+./asprintf.lo: $(srcdir)/asprintf.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/asprintf.c
 
-./atexit.o: $(srcdir)/atexit.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION)
+./atexit.lo: $(srcdir)/atexit.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/atexit.c
 
-./basename.o: $(srcdir)/basename.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+./basename.lo: $(srcdir)/basename.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/basename.c
 
-./bcmp.o: $(srcdir)/bcmp.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION)
+./bcmp.lo: $(srcdir)/bcmp.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/bcmp.c
 
-./bcopy.o: $(srcdir)/bcopy.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION)
+./bcopy.lo: $(srcdir)/bcopy.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/bcopy.c
 
-./bsearch.o: $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION)
+./bsearch.lo: $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/bsearch.c
 
-./bzero.o: $(srcdir)/bzero.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION)
+./bzero.lo: $(srcdir)/bzero.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/bzero.c
 
-./calloc.o: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION)
+./calloc.lo: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/calloc.c
 
-./choose-temp.o: $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \
+./choose-temp.lo: $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/choose-temp.c
 
-./clock.o: $(srcdir)/clock.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION)
+./clock.lo: $(srcdir)/clock.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/clock.c
 
-./concat.o: $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \
+./concat.lo: $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/concat.c
 
-./copysign.o: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION)
+./copysign.lo: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/copysign.c
 
-./cp-demangle.o: $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \
+./cp-demangle.lo: $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \
 	$(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
 	$(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/cp-demangle.c
 
-./cp-demint.o: $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \
+./cp-demint.lo: $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \
 	$(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/cp-demint.c
 
-./cplus-dem.o: $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \
+./cplus-dem.lo: $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/cplus-dem.c
 
-./dyn-string.o: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
+./dyn-string.lo: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/dyn-string.c
 
-./fdmatch.o: $(srcdir)/fdmatch.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION)
+./fdmatch.lo: $(srcdir)/fdmatch.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/fdmatch.c
 
-./ffs.o: $(srcdir)/ffs.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION)
+./ffs.lo: $(srcdir)/ffs.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/ffs.c
 
-./fibheap.o: $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \
+./fibheap.lo: $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/fibheap.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/fibheap.c
 
-./floatformat.o: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
+./floatformat.lo: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/floatformat.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/floatformat.c
 
-./fnmatch.o: $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \
+./fnmatch.lo: $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/fnmatch.c
 
-./getcwd.o: $(srcdir)/getcwd.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION)
+./getcwd.lo: $(srcdir)/getcwd.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getcwd.c
 
-./getopt.o: $(srcdir)/getopt.c config.h $(INCDIR)/getopt.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION)
+./getopt.lo: $(srcdir)/getopt.c config.h $(INCDIR)/getopt.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getopt.c
 
-./getopt1.o: $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION)
+./getopt1.lo: $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getopt1.c
 
-./getpagesize.o: $(srcdir)/getpagesize.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION)
+./getpagesize.lo: $(srcdir)/getpagesize.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getpagesize.c
 
-./getpwd.o: $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \
+./getpwd.lo: $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getpwd.c
 
-./getruntime.o: $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \
+./getruntime.lo: $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/getruntime.c
 
-./hashtab.o: $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \
+./hashtab.lo: $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/hashtab.c
 
-./hex.o: $(srcdir)/hex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+./hex.lo: $(srcdir)/hex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/hex.c
 
-./index.o: $(srcdir)/index.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION)
+./index.lo: $(srcdir)/index.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/index.c
 
-./insque.o: $(srcdir)/insque.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION)
+./insque.lo: $(srcdir)/insque.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/insque.c
 
-./lbasename.o: $(srcdir)/lbasename.c $(INCDIR)/ansidecl.h $(INCDIR)/filenames.h \
+./lbasename.lo: $(srcdir)/lbasename.c $(INCDIR)/ansidecl.h $(INCDIR)/filenames.h \
 	$(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/lbasename.c
 
-./lrealpath.o: $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \
+./lrealpath.lo: $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/lrealpath.c
 
-./make-relative-prefix.o: $(srcdir)/make-relative-prefix.c config.h \
+./make-relative-prefix.lo: $(srcdir)/make-relative-prefix.c config.h \
 	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/make-relative-prefix.c
 
-./make-temp-file.o: $(srcdir)/make-temp-file.c config.h $(INCDIR)/ansidecl.h \
+./make-temp-file.lo: $(srcdir)/make-temp-file.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/make-temp-file.c
 
-./md5.o: $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION)
+./md5.lo: $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/md5.c
 
-./memchr.o: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION)
+./memchr.lo: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memchr.c
 
-./memcmp.o: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION)
+./memcmp.lo: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memcmp.c
 
-./memcpy.o: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION)
+./memcpy.lo: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memcpy.c
 
-./memmove.o: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION)
+./memmove.lo: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memmove.c
 
-./mempcpy.o: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION)
+./mempcpy.lo: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/mempcpy.c
 
-./memset.o: $(srcdir)/memset.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION)
+./memset.lo: $(srcdir)/memset.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/memset.c
 
-./mkstemps.o: $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION)
+./mkstemps.lo: $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/mkstemps.c
 
-./mpw.o: $(srcdir)/mpw.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/mpw.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/mpw.c $(OUTPUT_OPTION)
+./mpw.lo: $(srcdir)/mpw.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/mpw.c
 
-./msdos.o: $(srcdir)/msdos.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION)
+./msdos.lo: $(srcdir)/msdos.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/msdos.c
 
-./objalloc.o: $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \
+./objalloc.lo: $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/objalloc.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/objalloc.c
 
-./obstack.o: $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION)
+./obstack.lo: $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/obstack.c
 
-./partition.o: $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \
+./partition.lo: $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(INCDIR)/partition.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/partition.c
 
-./pex-djgpp.o: $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \
+./pex-djgpp.lo: $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-djgpp.c
 
-./pex-mpw.o: $(srcdir)/pex-mpw.c config.h $(INCDIR)/ansidecl.h \
+./pex-mpw.lo: $(srcdir)/pex-mpw.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-mpw.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-mpw.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-mpw.c
 
-./pex-msdos.o: $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \
+./pex-msdos.lo: $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-msdos.c
 
-./pex-os2.o: $(srcdir)/pex-os2.c config.h $(INCDIR)/ansidecl.h \
+./pex-os2.lo: $(srcdir)/pex-os2.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-os2.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-os2.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-os2.c
 
-./pex-unix.o: $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \
+./pex-unix.lo: $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-unix.c
 
-./pex-win32.o: $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \
+./pex-win32.lo: $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/pex-win32.c
 
-./physmem.o: $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \
+./physmem.lo: $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/physmem.c
 
-./putenv.o: $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION)
+./putenv.lo: $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/putenv.c
 
-./random.o: $(srcdir)/random.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION)
+./random.lo: $(srcdir)/random.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/random.c
 
-./regex.o: $(srcdir)/regex.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \
+./regex.lo: $(srcdir)/regex.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \
 	$(INCDIR)/xregex2.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/regex.c
 
-./rename.o: $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION)
+./rename.lo: $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/rename.c
 
-./rindex.o: $(srcdir)/rindex.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION)
+./rindex.lo: $(srcdir)/rindex.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/rindex.c
 
-./safe-ctype.o: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \
+./safe-ctype.lo: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/safe-ctype.c
 
-./setenv.o: $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION)
+./setenv.lo: $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/setenv.c
 
-./sigsetmask.o: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION)
+./sigsetmask.lo: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/sigsetmask.c
 
-./snprintf.o: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION)
+./snprintf.lo: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/snprintf.c
 
-./sort.o: $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+./sort.lo: $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
 	$(INCDIR)/sort.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/sort.c
 
-./spaces.o: $(srcdir)/spaces.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION)
+./spaces.lo: $(srcdir)/spaces.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/spaces.c
 
-./splay-tree.o: $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \
+./splay-tree.lo: $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/splay-tree.c
 
-./stpcpy.o: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION)
+./stpcpy.lo: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/stpcpy.c
 
-./stpncpy.o: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION)
+./stpncpy.lo: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/stpncpy.c
 
-./strcasecmp.o: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION)
+./strcasecmp.lo: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strcasecmp.c
 
-./strchr.o: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION)
+./strchr.lo: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strchr.c
 
-./strdup.o: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION)
+./strdup.lo: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strdup.c
 
-./strerror.o: $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \
+./strerror.lo: $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strerror.c
 
-./strncasecmp.o: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION)
+./strncasecmp.lo: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strncasecmp.c
 
-./strncmp.o: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION)
+./strncmp.lo: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strncmp.c
 
-./strrchr.o: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION)
+./strrchr.lo: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strrchr.c
 
-./strsignal.o: $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \
+./strsignal.lo: $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strsignal.c
 
-./strstr.o: $(srcdir)/strstr.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION)
+./strstr.lo: $(srcdir)/strstr.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strstr.c
 
-./strtod.o: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION)
+./strtod.lo: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strtod.c
 
-./strtol.o: $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION)
+./strtol.lo: $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strtol.c
 
-./strtoul.o: $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \
+./strtoul.lo: $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/strtoul.c
 
-./ternary.o: $(srcdir)/ternary.c config.h $(INCDIR)/ansidecl.h \
+./ternary.lo: $(srcdir)/ternary.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h $(INCDIR)/ternary.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/ternary.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/ternary.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/ternary.c
 
-./tmpnam.o: $(srcdir)/tmpnam.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION)
+./tmpnam.lo: $(srcdir)/tmpnam.c
+	$(LTCOMPILE) -c -o $@ $(srcdir)/tmpnam.c
 
-./vasprintf.o: $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \
+./vasprintf.lo: $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vasprintf.c
 
-./vfork.o: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION)
+./vfork.lo: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vfork.c
 
-./vfprintf.o: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION)
+./vfprintf.lo: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vfprintf.c
 
-./vprintf.o: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION)
+./vprintf.lo: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vprintf.c
 
-./vsnprintf.o: $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \
+./vsnprintf.lo: $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vsnprintf.c
 
-./vsprintf.o: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION)
+./vsprintf.lo: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/vsprintf.c
 
-./waitpid.o: $(srcdir)/waitpid.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION)
+./waitpid.lo: $(srcdir)/waitpid.c config.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/waitpid.c
 
-./xatexit.o: $(srcdir)/xatexit.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION)
+./xatexit.lo: $(srcdir)/xatexit.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xatexit.c
 
-./xexit.o: $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION)
+./xexit.lo: $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xexit.c
 
-./xmalloc.o: $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \
+./xmalloc.lo: $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xmalloc.c
 
-./xmemdup.o: $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \
+./xmemdup.lo: $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xmemdup.c
 
-./xstrdup.o: $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \
+./xstrdup.lo: $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xstrdup.c
 
-./xstrerror.o: $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \
+./xstrerror.lo: $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION)
+	$(LTCOMPILE) -c -o $@ $(srcdir)/xstrerror.c
 
-# Don't export variables to the environment, in order to not confuse
-# configure.
-.NOEXPORT:
--- binutils/libiberty/aclocal.m4.libtool	2003-09-03 11:05:45.000000000 -0700
+++ binutils/libiberty/aclocal.m4	2004-12-17 14:44:04.240470348 -0800
@@ -2,6 +2,7 @@ sinclude(aclibdl.m4)
 sinclude(../config/accross.m4)
 sinclude(../config/acx.m4)
 sinclude(../config/no-executables.m4)
+sinclude(../libtool.m4)
 
 dnl See whether strncmp reads past the end of its string parameters.
 dnl On some versions of SunOS4 at least, strncmp reads a word at a time
--- binutils/libiberty/config.table.libtool	2003-05-20 08:37:53.000000000 -0700
+++ binutils/libiberty/config.table	2004-12-17 15:56:14.701509927 -0800
@@ -20,33 +20,6 @@ else
   frags=
 fi
 
-# If they didn't specify --enable-shared, don't generate shared libs.
-case "${enable_shared}" in
-  yes) shared=yes ;;
-  no) shared=no ;;
-  "") shared=no ;;
-  *) shared=yes ;;
-esac
-if [ "${shared}" = "yes" ]; then
-  frag=
-  case "${host}" in
-    *-*-cygwin*)	;;
-    alpha*-*-linux*)	frag=mh-elfalphapic ;;
-    arm*-*-*)		frag=mh-armpic ;;
-    hppa*-*-*)		frag=mh-papic ;;
-    i[34567]86-*-* | x86_64-*-*)
-			frag=mh-x86pic ;;
-    powerpc*-*-aix*)	;;
-    powerpc*-*-*)	frag=mh-ppcpic ;;
-    sparc*-*-*)		frag=mh-sparcpic ;;
-    s390*-*-*)		frag=mh-s390pic ;;
-    *)			frag=mh-${host_cpu}pic ;;
-  esac
-  if [ -n "${frag}" ]; then
-    frags="${frags} ${libiberty_topdir}/config/${frag}"
-  fi
-fi
-
 echo "# Warning: this fragment is automatically generated" > temp-frag
 
 for frag in ${frags}; do
--- binutils/libiberty/configure.ac.libtool	2004-12-13 09:31:22.000000000 -0800
+++ binutils/libiberty/configure.ac	2004-12-17 15:55:27.265589510 -0800
@@ -113,21 +113,13 @@ GCC_NO_EXECUTABLES
 AC_PROG_CC
 AC_PROG_CPP_WERROR
 
+AC_PROG_LIBTOOL
+
 if test x$GCC = xyes; then
   ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic'
 fi
 AC_SUBST(ac_libiberty_warn_cflags)
 
-AC_PROG_CC_C_O
-# autoconf is lame and doesn't give us any substitution variable for this.
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
-  NO_MINUS_C_MINUS_O=yes
-else
-  OUTPUT_OPTION='-o $@'
-fi
-AC_SUBST(NO_MINUS_C_MINUS_O)
-AC_SUBST(OUTPUT_OPTION)
-
 AC_C_CONST
 AC_C_INLINE
 AC_C_BIGENDIAN_CROSS
@@ -526,13 +518,16 @@ fi
 
 # Figure out which version of pexecute to use.
 case "${host}" in
-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
-     *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
-     *-*-msdos*)		pexecute=./pex-msdos.o  ;;
-     *-*-os2-emx*)		pexecute=./pex-os2.o    ;;
-     *)				pexecute=./pex-unix.o   ;;
+     *-*-mingw* | *-*-winnt*)	pex=./pex-win32  ;;
+     *-*-msdosdjgpp*)		pex=./pex-djgpp  ;;
+     *-*-msdos*)		pex=./pex-msdos  ;;
+     *-*-os2-emx*)		pex=./pex-os2    ;;
+     *)				pex=./pex-unix   ;;
 esac
+pexecute=${pex}.o
+ltpexecute=${pex}.lo
 AC_SUBST(pexecute)
+AC_SUBST(ltpexecute)
 
 libiberty_AC_FUNC_STRNCMP
 
@@ -545,16 +540,6 @@ else
 fi
 AC_SUBST(INSTALL_DEST)
 
-m4_pattern_allow(LIBOBJS)
-L=""
-for l in x $LIBOBJS; do
-  case $l in
-    x) ;;
-    *) L="$L ./$l" ;;
-  esac
-done
-LIBOBJS="$L"
-
 # We need multilib support, but only if configuring for the target.
 AC_CONFIG_FILES([Makefile testsuite/Makefile])
 AC_CONFIG_COMMANDS([default],
--- binutils/libiberty/maint-tool.libtool	2004-01-28 14:46:41.000000000 -0800
+++ binutils/libiberty/maint-tool	2004-12-17 15:16:16.961814146 -0800
@@ -76,7 +76,7 @@ sub missing {
     for $f (sort keys %listed) {
 	if ($f =~ /(.*)\.c$/) {
 	    $base = $1;
-	    if (! $listed{"$base.o"}) {
+	    if (! $listed{"$base.lo"}) {
 		print "O $f\n";
 	    }
 	}
@@ -213,10 +213,7 @@ sub locals_first {
 
 sub deps {
 
-    $crule  = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n";
-    $crule .= "\t  \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n";
-    $crule .= "\telse true; fi\n";
-    $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n";
+    $crule .= "\t\$(LTCOMPILE) -c -o \$@ \$<\n";
     $crule .= "\n";
 
     $incdir = shift @ARGV;
@@ -265,7 +262,7 @@ sub deps {
 	    }
 	    @deps = sort { &locals_first($a,$b) } keys %scanned;
 	    $obj = $f;
-	    $obj =~ s/\.c$/.o/;
+	    $obj =~ s/\.c$/.lo/;
 	    $obj = "./$obj:";
 	    if ($#deps >= 0) {
 		print OUT "$obj \$(srcdir)/$f";

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-18  1:44                 ` H. J. Lu
@ 2004-12-18  1:51                   ` DJ Delorie
  2004-12-18 21:38                   ` Andrew Pinski
  1 sibling, 0 replies; 19+ messages in thread
From: DJ Delorie @ 2004-12-18  1:51 UTC (permalink / raw)
  To: hjl; +Cc: binutils, gcc-patches


> Here is the updated patch.

Ok with one change:

> +	  mkdir -p ../pic; \

This needs a -d test somewhere, else we'll get error messages on
rebuild.

And drop the -p; it's neither needed nor portable.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-18  1:44                 ` H. J. Lu
  2004-12-18  1:51                   ` DJ Delorie
@ 2004-12-18 21:38                   ` Andrew Pinski
  1 sibling, 0 replies; 19+ messages in thread
From: Andrew Pinski @ 2004-12-18 21:38 UTC (permalink / raw)
  To: H. J. Lu; +Cc: binutils, gcc-patches, DJ Delorie


On Dec 17, 2004, at 8:44 PM, H. J. Lu wrote:

> On Fri, Dec 17, 2004 at 07:49:25PM -0500, DJ Delorie wrote:
>>> +# (alphabetical), and add them to 
>>> REQUIRED_OFILES/REQUIRED_LTOFILES, or
>>> +# CONFIGURED_OFILES/CONFIGURED_LTOFILES and funcs in configure.ac.
>>
>> Sigh, too bad we can't automate this, but we can't use gnumake yet.
>>
>> Hmmm... I wonder if maint-tool can be tweaked to use one of the lists
>> to update the others?  At least it will occasionally fix any
>> inconsistencies.  (Don't do this yet!  One thing at a time.)
>>
>>> +# Also run "make maint-deps" to build the new rules.
>>
>> Good idea to add this comment.
>
> Here is the updated patch.

And this causes a bootstrap failure with --disable-shared.
I would like to start the clock at reverting the patch.

I filed PR 19072 to track this problem.

Someone reported this to me via IRC.

Thanks,
Andrew Pinski

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-16 23:01 PATCH: Fix shared library build for libiberty H. J. Lu
  2004-12-17  2:01 ` DJ Delorie
@ 2004-12-24 14:10 ` Andreas Jaeger
  2004-12-24 15:23   ` DJ Delorie
  1 sibling, 1 reply; 19+ messages in thread
From: Andreas Jaeger @ 2004-12-24 14:10 UTC (permalink / raw)
  To: H. J. Lu; +Cc: binutils, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 414 bytes --]


Note that the manual in gcc/doc/install.texi mentions:
"Note @samp{libiberty} does not support shared libraries at all."

If we want to support shared libraries, we should sync the
documentation,

Andreas
-- 
 Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
  SUSE Linux Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

[-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: PATCH: Fix shared library build for libiberty
  2004-12-24 14:10 ` Andreas Jaeger
@ 2004-12-24 15:23   ` DJ Delorie
  0 siblings, 0 replies; 19+ messages in thread
From: DJ Delorie @ 2004-12-24 15:23 UTC (permalink / raw)
  To: aj; +Cc: binutils, gcc-patches


> Note that the manual in gcc/doc/install.texi mentions:
> "Note @samp{libiberty} does not support shared libraries at all."
> 
> If we want to support shared libraries,

We do not.

We do want to avoid libiberty-specific hacks in toplevel dealing with
building PIC objects.

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2004-12-24 15:23 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-12-16 23:01 PATCH: Fix shared library build for libiberty H. J. Lu
2004-12-17  2:01 ` DJ Delorie
2004-12-17  2:08   ` H. J. Lu
2004-12-17  2:10     ` DJ Delorie
2004-12-17  2:56       ` Zack Weinberg
2004-12-17  4:16         ` Gabriel Dos Reis
2004-12-17  6:03           ` Zack Weinberg
2004-12-17  5:21       ` H. J. Lu
2004-12-17 15:41         ` H. J. Lu
2004-12-17 17:48           ` DJ Delorie
2004-12-17 19:01             ` H. J. Lu
2004-12-17 19:11               ` DJ Delorie
2004-12-18  0:22             ` H. J. Lu
2004-12-18  0:49               ` DJ Delorie
2004-12-18  1:44                 ` H. J. Lu
2004-12-18  1:51                   ` DJ Delorie
2004-12-18 21:38                   ` Andrew Pinski
2004-12-24 14:10 ` Andreas Jaeger
2004-12-24 15:23   ` DJ Delorie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).