This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Build-side libiberty
- From: Zack Weinberg <zack at codesourcery dot com>
- To: DJ Delorie <dj at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Fri, 23 Nov 2001 23:11:09 -0800
- Subject: Re: Build-side libiberty
- References: <20011123103545.G21936@codesourcery.com>
On Fri, Nov 23, 2001 at 10:35:45AM -0800, Zack Weinberg wrote:
> I've finally been able to test out DJ's patch to compile libiberty for
> the build machine when build != host.
The native build exposed a few more issues; mostly, I'd only done C,
and so I missed the uses of safe-ctype.o in the fortran Make-lang.in.
This one, I believe, is ready for inclusion.
zw
top level:
When build != host, create libiberty for the build machine.
* Makefile.in (TARGET_CONFIGARGS, BUILD_CONFIGARGS): Replace
CONFIG_ARGUMENTS.
(ALL_BUILD_MODULES_LIST, BUILD_CONFIGDIRS, BUILD_SUBDIR):
New variables.
(ALL_BUILD_MODULES, CONFIGURE_BUILD_MODULES): New variables
and rules.
(all.normal): Depend on ALL_BUILD_MODULES.
(CONFIGURE_TARGET_MODULES rule): Use TARGET_CONFIGARGS.
(all-build-libiberty): Depend on configure-build-libiberty.
* configure: Calculate and substitute proper value for
ALL_BUILD_MODULES.
* configure.in: Create the build subdirectory.
Calculate and substitute TARGET_CONFIGARGS (formerly
CONFIG_ARGUMENTS); also BUILD_SUBDIR and BUILD_CONFIGARGS
(new).
gcc:
Purge cruft now we have build libiberty.
* Makefile.in (OBSTACK, VFPRINTF, DOPRINT, STRSTR,
HOST_OBSTACK, HOST_VFPRINTF, HOST_DOPRINT, HOST_STRSTR,
USE_HOST_OBSTACK, USE_HOST_VFPRINTF, USE_HOST_DOPRINT,
USE_HOST_STRSTR): Delete variables.
(vfprintf.o, doprint.o, strstr.o, splay-tree.o, obstack.o,
hashtab.o, safe-ctype.o, $(HOST_PREFIX_1)obstack.o,
$(HOST_PREFIX_1)vfprintf.o, $(HOST_PREFIX_1)doprint.o,
$(HOST_PREFIX_1)strstr.o), $(HOST_PREFIX_1)): Delete rules.
(LIBIBERTY, BUILD_LIBIBERTY): New variables.
(LIBDEPS): Now just $(INTLDEPS) $(LIBIBERTY).
(LIBS): Now just $(INTLLIBS) @LIBS@ $(LIBIBERTY).
(HOST_LIBDEPS): Now just $(BUILD_LIBIBERTY).
(HOST_LIBS): Ditto.
(HOST_RTL): Remove hashtab.o safe-ctype.o.
(OBJS): Remove splay-tree.o.
(gen-protos): Depend on $(HOST_LIBS), not ../libiberty/libiberty.a.
(distclean): No need to delete splay-tree.c obstack.c
hashtab.c safe-ctype.c.
(mostlyclean): Delete host copies of print-rtl.c bitmap.c
errors.c ggc-none.c (all prefixed with $(HOST_PREFIX_1).
* aclocal.m4 (gcc_AC_FUNC_VFPRINTF_DOPRNT, gcc_AC_FUNC_STRSTR):
Delete.
* configure.in: Don't use them.
Set and substitute @FORBUILD@.
* config.in, configure: Regenerate.
* doprint.c: Move to libiberty/_doprnt.c.
* doc/configterms.texi: Document that libiberty is now built
up to three times. Fix typo.
gcc/f:
* Make-lang.in (f/fini, f/intdoc): Depend on $(HOST_LIBDEPS)
and link with $(HOST_LIBS), not safe-ctype.o.
libiberty:
* _doprnt.c: Moved here from gcc/doprint.c. Adjust to build
in libiberty context. Fix typo in leading comment.
* configure.in: Fix various AC_DEFINEs so autoheader works.
If any of vprintf, vsprintf, vfprintf is missing from libc,
then AC_REPLACE_FUNCS(_doprnt).
===================================================================
Index: Makefile.in
--- Makefile.in 2001/11/06 07:15:44 1.89
+++ Makefile.in 2001/11/24 07:02:19
@@ -178,9 +178,17 @@ TARGET_CONFIGDIRS = libiberty libgloss $
# Changed by configure to $(target_alias) if cross.
TARGET_SUBDIR = .
-# This is set by the configure script to the arguments passed to configure.
-CONFIG_ARGUMENTS =
+BUILD_CONFIGDIRS = libiberty
+BUILD_SUBDIR = .
+# This is set by the configure script to the arguments to use when configuring
+# directories built for the target.
+TARGET_CONFIGARGS =
+
+# This is set by the configure script to the arguments to use when configuring
+# directories built for the build system.
+BUILD_CONFIGARGS =
+
# This is set by configure to REALLY_SET_LIB_PATH if --enable-shared
# was used.
SET_LIB_PATH =
@@ -493,6 +501,18 @@ EXTRA_GCC_FLAGS = \
GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS)
# This is a list of the targets for all of the modules which are compiled
+# using the build machine's native compiler. Configure edits the second
+# macro for build!=host builds.
+ALL_BUILD_MODULES_LIST = \
+ all-build-libiberty
+ALL_BUILD_MODULES =
+
+# This is a list of the configure targets for all of the modules which
+# are compiled using the native tools.
+CONFIGURE_BUILD_MODULES = \
+ configure-build-libiberty
+
+# This is a list of the targets for all of the modules which are compiled
# using $(FLAGS_TO_PASS).
ALL_MODULES = \
all-apache \
@@ -947,6 +967,7 @@ CLEAN_X11_MODULES = \
# The target built for a native build.
.PHONY: all.normal
all.normal: \
+ $(ALL_BUILD_MODULES) \
$(ALL_MODULES) \
$(ALL_X11_MODULES) \
$(ALL_TARGET_MODULES) \
@@ -1193,6 +1214,106 @@ gcc-no-fixedincludes:
mv gcc/tmp-include gcc/include 2>/dev/null; \
else true; fi
+# This rule is used to build the modules which are built with the
+# build machine's native compiler.
+.PHONY: $(ALL_BUILD_MODULES)
+$(ALL_BUILD_MODULES):
+ dir=`echo $@ | sed -e 's/all-build-//'`; \
+ if [ -f ./$${dir}/Makefile ] ; then \
+ r=`pwd`; export r; \
+ s=`cd $(srcdir); pwd`; export s; \
+ (cd $(BUILD_SUBDIR)/$${dir} && $(MAKE) all); \
+ else \
+ true; \
+ fi
+
+# This rule is used to configure the modules which are built with the
+# native tools.
+.PHONY: $(CONFIGURE_BUILD_MODULES)
+$(CONFIGURE_BUILD_MODULES):
+ @dir=`echo $@ | sed -e 's/configure-build-//'`; \
+ if [ ! -d $(BUILD_SUBDIR) ]; then \
+ true; \
+ elif [ -f $(BUILD_SUBDIR)/$${dir}/Makefile ] ; then \
+ true; \
+ elif echo " $(BUILD_CONFIGDIRS) " | grep " $${dir} " >/dev/null 2>&1; then \
+ if [ -d $(srcdir)/$${dir} ]; then \
+ [ -d $(BUILD_SUBDIR)/$${dir} ] || mkdir $(BUILD_SUBDIR)/$${dir};\
+ r=`pwd`; export r; \
+ s=`cd $(srcdir); pwd`; export s; \
+ AR="$(AR_FOR_BUILD)"; export AR; \
+ AS="$(AS_FOR_BUILD)"; export AS; \
+ CC="$(CC_FOR_BUILD)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
+ CXX="$(CXX_FOR_BUILD)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
+ LD="$(LD_FOR_BUILD)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
+ NM="$(NM_FOR_BUILD)"; export NM; \
+ RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
+ echo Configuring in $(BUILD_SUBDIR)/$${dir}; \
+ cd "$(BUILD_SUBDIR)/$${dir}" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(BUILD_SUBDIR)" in \
+ .) topdir="../$(srcdir)" ;; \
+ *) topdir="../../$(srcdir)" ;; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(BUILD_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/$${dir} "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
+ else \
+ true; \
+ fi; \
+ else \
+ exit 1; \
+ fi; \
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/$${dir}"; \
+ libsrcdir="$$s/$${dir}"; \
+ fi; \
+ if [ -f $${libsrcdir}/configure ] ; then \
+ rm -f no-such-file skip-this-dir; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(BUILD_CONFIGARGS) $${srcdiroption} \
+ --with-build-subdir="$(BUILD_SUBDIR)"; \
+ else \
+ rm -f no-such-file skip-this-dir; \
+ CONFIG_SITE=no-such-file $(SHELL) $$s/configure \
+ $(BUILD_CONFIGARGS) $${srcdiroption} \
+ --with-build-subdir="$(BUILD_SUBDIR)"; \
+ fi || exit 1; \
+ if [ -f skip-this-dir ] ; then \
+ sh skip-this-dir; \
+ rm -f skip-this-dir; \
+ cd ..; rmdir $${dir} || true; \
+ else \
+ true; \
+ fi; \
+ else \
+ true; \
+ fi; \
+ else \
+ true; \
+ fi
+
# This rule is used to build the modules which use FLAGS_TO_PASS. To
# build a target all-X means to cd to X and make all.
#
@@ -1338,12 +1459,12 @@ $(CONFIGURE_TARGET_MODULES):
if [ -f $${libsrcdir}/configure ] ; then \
rm -f no-such-file skip-this-dir; \
CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(CONFIG_ARGUMENTS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
--with-target-subdir="$(TARGET_SUBDIR)"; \
else \
rm -f no-such-file skip-this-dir; \
CONFIG_SITE=no-such-file $(SHELL) $$s/configure \
- $(CONFIG_ARGUMENTS) $${srcdiroption} \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
--with-target-subdir="$(TARGET_SUBDIR)"; \
fi || exit 1; \
if [ -f skip-this-dir ] ; then \
@@ -1641,6 +1762,9 @@ configure-target-libgloss: $(ALL_GCC)
all-target-libgloss: configure-target-libgloss configure-target-newlib
all-libgui: all-tcl all-tk all-tcl8.1 all-tk8.1 all-itcl
all-libiberty:
+
+all-build-libiberty: configure-build-libiberty
+
configure-target-libffi: $(ALL_GCC_C)
all-target-libffi: configure-target-libffi
configure-target-libjava: $(ALL_GCC_CXX) configure-target-zlib configure-target-boehm-gc configure-target-qthreads configure-target-libffi
===================================================================
Index: configure
--- configure 2001/10/28 12:08:43 1.38
+++ configure 2001/11/24 07:02:21
@@ -1088,6 +1088,12 @@ else
GDB_TK=""
fi
+all_build_modules=
+if test x"${build_alias}" != x"${host_alias}"
+then
+ all_build_modules='$(ALL_BUILD_MODULES_LIST)'
+fi
+
for subdir in . ${subdirs} ; do
# ${subdir} is relative path from . to the directory we're currently
@@ -1384,6 +1390,7 @@ EOF
-e "s|^oldincludedir[ ]*=.*$|oldincludedir = ${oldincludedir}|" \
-e "s|^infodir[ ]*=.*$|infodir = ${infodir}|" \
-e "s|^mandir[ ]*=.*$|mandir = ${mandir}|" \
+ -e "s|^ALL_BUILD_MODULES =.*|ALL_BUILD_MODULES =${all_build_modules}|" \
-e "/^CC[ ]*=/{
:loop1
/\\\\$/ N
===================================================================
Index: configure.in
--- configure.in 2001/11/14 21:39:36 1.114
+++ configure.in 2001/11/24 07:02:22
@@ -445,6 +445,18 @@ if [ ! -d ${target_subdir} ] ; then
fi
fi
+build_subdir=${build_alias}
+
+if [ x"${build_alias}" != x"${host}" ] ; then
+ if [ ! -d ${build_subdir} ] ; then
+ if mkdir ${build_subdir} ; then true
+ else
+ echo "'*** could not make ${PWD=`pwd`}/${build_subdir}" 1>&2
+ exit 1
+ fi
+ fi
+fi
+
copy_dirs=
# Handle --with-headers=XXX. The contents of the named directory are
@@ -1349,7 +1361,8 @@ if [ "${shared}" = "yes" ]; then
esac
fi
-# Record target_configdirs and the configure arguments in Makefile.
+# Record target_configdirs and the configure arguments for target and
+# build configuration in Makefile.
target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
targargs=`echo "${arguments}" | \
sed -e 's/--no[^ ]*//' \
@@ -1358,6 +1371,11 @@ targargs=`echo "${arguments}" | \
-e 's/--bu[a-z-]*=[^ ]*//' \
-e 's/--ta[a-z-]*=[^ ]*//'`
+# For the build-side libraries, we just need to pretend we're native,
+# and not use the same cache file. Multilibs are neither needed nor
+# desired.
+buildargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} ${targargs}"
+
# Passing a --with-cross-host argument lets the target libraries know
# whether they are being built with a cross-compiler or being built
# native. However, it would be better to use other mechanisms to make the
@@ -1378,6 +1396,9 @@ if [ x${with_newlib} != xno ] && echo "
targargs="--with-newlib ${targargs}"
fi
+# Pass the appropriate --host, --build, and --cache-file arguments.
+targargs="--cache-file=../config.cache --host=${target_alias} --build=${build_alias} ${targargs}"
+
# provide a proper gxx_include_dir.
# Note, if you change the default, make sure to fix both here and in
# the gcc and libstdc++-v3 subdirectories.
@@ -1533,9 +1554,8 @@ qCXX_FOR_TARGET=`echo "$CXX_FOR_TARGET"
# macros.
qqCXX_FOR_TARGET=`echo "$qCXX_FOR_TARGET" | sed -e 's,[$][$],$$$$,g'`
-targargs="--cache-file=../config.cache --host=${target_alias} --build=${build_alias} ${targargs}"
sed -e "s:^TARGET_CONFIGDIRS[ ]*=.*$:TARGET_CONFIGDIRS = ${target_configdirs}:" \
- -e "s%^CONFIG_ARGUMENTS[ ]*=.*$%CONFIG_ARGUMENTS = ${targargs}%" \
+ -e "s%^TARGET_CONFIGARGS[ ]*=.*$%TARGET_CONFIGARGS = ${targargs}%" \
-e "s%^FLAGS_FOR_TARGET[ ]*=.*$%FLAGS_FOR_TARGET = ${FLAGS_FOR_TARGET}%" \
-e "s%^CC_FOR_TARGET[ ]*=.*$%CC_FOR_TARGET = ${CC_FOR_TARGET}%" \
-e "s%^CHILL_FOR_TARGET[ ]*=.*$%CHILL_FOR_TARGET = ${CHILL_FOR_TARGET}%" \
@@ -1543,6 +1563,8 @@ sed -e "s:^TARGET_CONFIGDIRS[ ]*=.*$:TA
-e "s%^CXX_FOR_TARGET[ ]*=.*$%CXX_FOR_TARGET = ${qCXX_FOR_TARGET}%" \
-e "s%^CXX_FOR_TARGET_FOR_RECURSIVE_MAKE[ ]*=.*$%CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = ${qqCXX_FOR_TARGET}%" \
-e "s%^TARGET_SUBDIR[ ]*=.*$%TARGET_SUBDIR = ${target_subdir}%" \
+ -e "s%^BUILD_SUBDIR[ ]*=.*$%BUILD_SUBDIR = ${build_subdir}%" \
+ -e "s%^BUILD_CONFIGARGS[ ]*=.*$%BUILD_CONFIGARGS = ${buildargs}%" \
-e "s%^gxx_include_dir[ ]*=.*$%gxx_include_dir=${gxx_include_dir}%" \
Makefile > Makefile.tem
rm -f Makefile
===================================================================
Index: gcc/Makefile.in
--- gcc/Makefile.in 2001/11/22 02:32:52 1.787
+++ gcc/Makefile.in 2001/11/24 07:02:25
@@ -341,21 +341,12 @@ LIBICONV = @LIBICONV@
# List of internationalization subdirectories.
INTL_SUBDIRS = intl
-# Change this to a null string if obstacks are installed in the
-# system library.
-OBSTACK=obstack.o
-
# The GC method to be used on this system.
GGC=@GGC@.o
# If a supplementary library is being used for the GC.
GGC_LIB=
-# Configure will set these if you need vfprintf and possibly _doprnt support.
-VFPRINTF=@vfprintf@
-DOPRINT=@doprint@
-STRSTR=@strstr@
-
# libgcc.a may be built directly or via stmp-multilib,
# and installed likewise. Overridden by t-fragment.
LIBGCC = libgcc.a
@@ -478,10 +469,6 @@ HOST_CC=$(CC)
HOST_CFLAGS=$(ALL_CFLAGS) -DGENERATOR_FILE
HOST_LDFLAGS=$(LDFLAGS)
HOST_CPPFLAGS=$(ALL_CPPFLAGS)
-HOST_OBSTACK=$(OBSTACK)
-HOST_VFPRINTF=$(VFPRINTF)
-HOST_DOPRINT=$(DOPRINT)
-HOST_STRSTR=$(STRSTR)
# Actual name to use when installing a native compiler.
GCC_INSTALL_NAME = `echo gcc|sed '$(program_transform_name)'`
@@ -605,35 +592,29 @@ ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLA
# Likewise.
ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS)
+
+# Build and host support libraries. FORBUILD is either
+# ../ or ../$(build_alias)/ depending on whether host != build.
+LIBIBERTY = ../libiberty/libiberty.a
+BUILD_LIBIBERTY = @FORBUILD@/libiberty/libiberty.a
-USE_HOST_OBSTACK= ` case "${HOST_OBSTACK}" in ?*) echo ${HOST_PREFIX}${HOST_OBSTACK} ;; esac `
-USE_HOST_VFPRINTF= ` case "${HOST_VFPRINTF}" in ?*) echo ${HOST_PREFIX}${HOST_VFPRINTF} ;; esac `
-USE_HOST_DOPRINT= ` case "${HOST_DOPRINT}" in ?*) echo ${HOST_PREFIX}${HOST_DOPRINT} ;; esac `
-USE_HOST_STRSTR= ` case "${HOST_STRSTR}" in ?*) echo ${HOST_PREFIX}${HOST_STRSTR} ;; esac `
-
-# Dependency on obstack or whatever library facilities
-# are not installed in the system libraries.
-# We don't use USE_* because backquote expansion doesn't work in deps.
-LIBDEPS= $(INTLDEPS) $(OBSTACK) $(VFPRINTF) $(DOPRINT) $(STRSTR)
+# Dependencies on the intl and portability libraries.
+LIBDEPS= $(INTLDEPS) $(LIBIBERTY)
# Likewise, for use in the tools that must run on this machine
# even if we are cross-building GCC.
-HOST_LIBDEPS= $(HOST_PREFIX)$(HOST_OBSTACK) \
- $(HOST_PREFIX)$(HOST_VFPRINTF) $(HOST_PREFIX)$(HOST_DOPRINT) \
- $(HOST_PREFIX)$(HOST_STRSTR)
+HOST_LIBDEPS= $(BUILD_LIBIBERTY)
# How to link with both our special library facilities
# and the system's installed libraries.
-LIBS = $(OBSTACK) $(INTLLIBS) @LIBS@ $(VFPRINTF) $(DOPRINT) \
- $(STRSTR) ../libiberty/libiberty.a
+LIBS = $(INTLLIBS) @LIBS@ $(LIBIBERTY)
# Likewise, for use in the tools that must run on this machine
# even if we are cross-building GCC.
-HOST_LIBS = $(USE_HOST_OBSTACK) $(USE_HOST_VFPRINTF) \
- $(USE_HOST_DOPRINT) $(USE_HOST_STRSTR)
+HOST_LIBS = $(BUILD_LIBIBERTY)
HOST_RTL = $(HOST_PREFIX)rtl.o read-rtl.o $(HOST_PREFIX)bitmap.o \
- $(HOST_PREFIX)ggc-none.o gensupport.o hashtab.o safe-ctype.o
+ $(HOST_PREFIX)ggc-none.o gensupport.o
HOST_PRINT = $(HOST_PREFIX)print-rtl.o
HOST_ERRORS = $(HOST_PREFIX)errors.o
@@ -744,7 +725,7 @@ OBJS = alias.o bb-reorder.o bitmap.o bui
profile.o real.o recog.o reg-stack.o regclass.o regmove.o regrename.o \
reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o \
sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o \
- sibcall.o simplify-rtx.o splay-tree.o ssa.o ssa-ccp.o ssa-dce.o stmt.o \
+ sibcall.o simplify-rtx.o ssa.o ssa-ccp.o ssa-dce.o stmt.o \
stor-layout.o stringpool.o timevar.o toplev.o tree.o tree-dump.o \
tree-inline.o unroll.o varasm.o varray.o version.o xcoffout.o \
cfglayout.o \
@@ -1207,29 +1188,6 @@ tlink.o: tlink.c $(DEMANGLE_H) hash.h $(
hash.o: hash.c hash.h $(SYSTEM_H) toplev.h $(GCONFIG_H)
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
-vfprintf.o: $(srcdir)/../libiberty/vfprintf.c $(GCONFIG_H) $(SYSTEM_H)
- rm -f vfprintf.c
- $(LN_S) $(srcdir)/../libiberty/vfprintf.c vfprintf.c
- $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \
- vfprintf.c $(OUTPUT_OPTION)
-
-doprint.o: $(srcdir)/doprint.c $(GCONFIG_H) $(SYSTEM_H)
- $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \
- $(srcdir)/doprint.c $(OUTPUT_OPTION)
-
-strstr.o: $(srcdir)/../libiberty/strstr.c $(GCONFIG_H) $(SYSTEM_H)
- rm -f strstr.c
- $(LN_S) $(srcdir)/../libiberty/strstr.c strstr.c
- $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \
- strstr.c $(OUTPUT_OPTION)
-
-splay-tree.o: $(srcdir)/../libiberty/splay-tree.c $(GCONFIG_H) \
- $(srcdir)/../include/splay-tree.h $(srcdir)/../include/libiberty.h
- rm -f splay-tree.c
- $(LN_S) $(srcdir)/../libiberty/splay-tree.c splay-tree.c
- $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \
- splay-tree.c $(OUTPUT_OPTION)
-
underscore.c: s-under ; @true
s-under: $(GCC_PASSES)
@@ -1332,12 +1290,6 @@ line-map.o: line-map.c line-map.h intl.h
ggc-none.o: ggc-none.c $(GCONFIG_H) $(SYSTEM_H) $(GGC_H)
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
-obstack.o: $(srcdir)/../libiberty/obstack.c $(GCONFIG_H)
- rm -f obstack.c
- $(LN_S) $(srcdir)/../libiberty/obstack.c obstack.c
- $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \
- obstack.c $(OUTPUT_OPTION)
-
prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) Makefile prefix.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DPREFIX=\"$(prefix)\" \
@@ -1792,16 +1744,6 @@ read-rtl.o: read-rtl.c $(HCONFIG_H) $(SY
gensupport.o: gensupport.c $(RTL_H) $(OBSTACK_H) $(SYSTEM_H) errors.h gensupport.h
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gensupport.c
-hashtab.o: $(srcdir)/../libiberty/hashtab.c $(GCONFIG_H)
- rm -f hashtab.c
- $(LN_S) $(srcdir)/../libiberty/hashtab.c hashtab.c
- $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) hashtab.c
-
-safe-ctype.o: $(srcdir)/../libiberty/safe-ctype.c $(GCONFIG_H)
- rm -f safe-ctype.c
- $(LN_S) $(srcdir)/../libiberty/safe-ctype.c safe-ctype.c
- $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) safe-ctype.c
-
genconfig$(build_exeext) : genconfig.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
genconfig.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS)
@@ -1911,7 +1853,7 @@ genpreds.o : genpreds.c $(RTL_BASE_H) $(
#
# Compile the libraries to be used by gen*.
# If we are not cross-building, gen* use the same .o's that cc1 will use,
-# and HOST_PREFIX_1 is `foobar', just to ensure these rules don't conflict
+# and HOST_PREFIX_1 is `loser-', just to ensure these rules don't conflict
# with the rules for rtl.o, etc.
$(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(HCONFIG_H) $(SYSTEM_H) $(RTL_H) \
real.h $(GGC_H) errors.h
@@ -1931,39 +1873,11 @@ $(HOST_PREFIX_1)bitmap.o: $(srcdir)/bitm
sed -e 's/config[.]h/hconfig.h/' $(srcdir)/bitmap.c > $(HOST_PREFIX)bitmap.c
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)bitmap.c
-$(HOST_PREFIX_1)obstack.o: $(srcdir)/../libiberty/obstack.c $(HCONFIG_H)
- rm -f $(HOST_PREFIX)obstack.c
- sed -e 's/config[.]h/hconfig.h/' $(srcdir)/../libiberty/obstack.c > $(HOST_PREFIX)obstack.c
- $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)obstack.c
-
-$(HOST_PREFIX_1)vfprintf.o: $(srcdir)/../libiberty/vfprintf.c $(HCONFIG_H) \
- $(SYSTEM_H)
- rm -f $(HOST_PREFIX)vfprintf.c
- sed -e 's/config[.]h/hconfig.h/' $(srcdir)/../libiberty/vfprintf.c > $(HOST_PREFIX)vfprintf.c
- $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)vfprintf.c
-
-$(HOST_PREFIX_1)doprint.o: doprint.c $(HCONFIG_H) $(SYSTEM_H)
- rm -f $(HOST_PREFIX)doprint.c
- sed -e 's/config[.]h/hconfig.h/' $(srcdir)/doprint.c > $(HOST_PREFIX)doprint.c
- $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)doprint.c
-
-$(HOST_PREFIX_1)strstr.o: $(srcdir)/../libiberty/strstr.c $(HCONFIG_H) \
- $(SYSTEM_H)
- rm -f $(HOST_PREFIX)strstr.c
- sed -e 's/config[.]h/hconfig.h/' $(srcdir)/../libiberty/strstr.c > $(HOST_PREFIX)strstr.c
- $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)strstr.c
-
$(HOST_PREFIX_1)errors.o: errors.c $(HCONFIG_H) $(SYSTEM_H) errors.h
rm -f $(HOST_PREFIX)errors.c
sed -e 's/config[.]h/hconfig.h/' $(srcdir)/errors.c > $(HOST_PREFIX)errors.c
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)errors.c
-
-# This satisfies the dependency that we get if you cross-compile a compiler
-# that does not need to compile doprint or whatever.
-$(HOST_PREFIX_1):
- $(STAMP) $(HOST_PREFIX_1)
-
$(HOST_PREFIX_1)ggc-none.o: ggc-none.c $(HCONFIG_H) $(SYSTEM_H) $(GCC_H)
rm -f $(HOST_PREFIX)ggc-none.c
sed -e 's/config[.]h/hconfig.h/' $(srcdir)/ggc-none.c > $(HOST_PREFIX)ggc-none.c
@@ -2242,7 +2156,7 @@ deduced.h: $(GCC_PASSES) $(srcdir)/scan-
GEN_PROTOS_OBJS = gen-protos.o scan.o
gen-protos$(build_exeext): $(GEN_PROTOS_OBJS)
${HOST_CC} $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
- $(GEN_PROTOS_OBJS) ../libiberty/libiberty.a
+ $(GEN_PROTOS_OBJS) $(HOST_LIBS)
gen-protos.o: gen-protos.c scan.h $(HCONFIG_H) $(SYSTEM_H)
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gen-protos.c
@@ -2429,8 +2343,9 @@ mostlyclean: $(INTL_MOSTLYCLEAN) lang.mo
-rm -f $(STAGESTUFF)
-rm -rf libgcc
# Delete the temporary source copies for cross compilation.
- -rm -f $(HOST_PREFIX_1)rtl.c
- -rm -f $(HOST_PREFIX_1)obstack.c
+ -rm -f $(HOST_PREFIX_1)rtl.c $(HOST_PREFIX_1)print-rtl.c
+ -rm -f $(HOST_PREFIX_1)bitmap.c $(HOST_PREFIX_1)errors.c
+ -rm -f $(HOST_PREFIX_1)ggc-none.c
# Delete the temp files made in the course of building libgcc.a.
-rm -f xlimits.h
# Delete other built files.
@@ -2499,7 +2414,7 @@ distclean: clean $(INTL_DISTCLEAN) lang.
-rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak
-rm -f testsuite/{gcc,g++}.{log,sum}
-rm -f intl/libintl.h libintl.h
- -rm -f cxxmain.c splay-tree.c obstack.c hashtab.c safe-ctype.c
+ -rm -f cxxmain.c
-rm -f mklibgcc libgcc.map gccbug .gdbinit configargs.h
-rm -f gcov.pod
-rm -f fixinc/Makefile
===================================================================
Index: gcc/aclocal.m4
--- gcc/aclocal.m4 2001/11/06 02:39:47 1.56
+++ gcc/aclocal.m4 2001/11/24 07:02:25
@@ -75,27 +75,6 @@ if test x = y ; then
fi
])
-dnl Check if we have vprintf and possibly _doprnt.
-dnl Note autoconf checks for vprintf even though we care about vfprintf.
-AC_DEFUN(gcc_AC_FUNC_VFPRINTF_DOPRNT,
-[AC_FUNC_VPRINTF
-vfprintf=
-doprint=
-if test $ac_cv_func_vprintf != yes ; then
- vfprintf=vfprintf.o
- if test $ac_cv_func__doprnt != yes ; then
- doprint=doprint.o
- fi
-fi
-AC_SUBST(vfprintf)
-AC_SUBST(doprint)
-])
-
-dnl Check if we have strstr.
-AC_DEFUN([gcc_AC_FUNC_STRSTR],
- [AC_CHECK_FUNCS([strstr], [strstr=], [strstr=strstr.o])
- AC_SUBST([strstr])])
-
dnl See if the printf functions in libc support %p in format strings.
AC_DEFUN(gcc_AC_FUNC_PRINTF_PTR,
[AC_CACHE_CHECK(whether the printf functions support %p,
===================================================================
Index: gcc/build-make
--- gcc/build-make 2001/06/28 04:38:50 1.9
+++ gcc/build-make 2001/11/24 07:02:25
@@ -12,8 +12,6 @@ HOST_CFLAGS=$(INTERNAL_CFLAGS) $(T_CFLAG
$(XCFLAGS) -DGENERATOR_FILE
HOST_LDFLAGS=$(LDFLAGS)
HOST_CPPFLAGS=$(ALL_CPPFLAGS)
-HOST_MALLOC=$(MALLOC)
-HOST_OBSTACK=$(OBSTACK)
# To build the native compiler with the cross compiler, the headers
# for the target are already fixed. And /usr/include is for host, not
===================================================================
Index: gcc/configure.in
--- gcc/configure.in 2001/11/20 10:16:08 1.558
+++ gcc/configure.in 2001/11/24 07:02:29
@@ -606,8 +606,6 @@ else
fi
AC_SUBST(TARGET_GETGROUPS_T)
-gcc_AC_FUNC_VFPRINTF_DOPRNT
-gcc_AC_FUNC_STRSTR
gcc_AC_FUNC_PRINTF_PTR
case "${host}" in
@@ -838,6 +836,7 @@ fi
if test x$host = x$build
then
build_auto=auto-host.h
+ FORBUILD=..
else
# We create a subdir, then run autoconf in the subdir.
# To prevent recursion we set host and build for the new
@@ -863,7 +862,9 @@ else
cd ..
rm -rf $tempdir
build_auto=auto-build.h
+ FORBUILD=../$build
fi
+AC_SUBST(FORBUILD)
tm_file="${tm_file} defaults.h"
host_xm_file="auto-host.h ansidecl.h ${host_xm_file} ${tm_file}"
===================================================================
Index: gcc/doprint.c
--- gcc/doprint.c Fri Nov 23 23:02:39 2001
+++ gcc/doprint.c Tue May 5 13:32:27 1998
@@ -1,284 +0,0 @@
-/* Provide a version _doprnt in terms of fprintf.
- Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- Contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "config.h"
-#include "system.h"
-#undef _doprnt
-
-#ifdef TEST /* Make sure to use the internal one. */
-#define _doprnt my_doprnt
-#endif
-
-#define COPY_VA_INT \
- do { \
- const int value = abs (va_arg (ap, int)); \
- char buf[32]; \
- ptr++; /* Go past the asterisk. */ \
- *sptr = '\0'; /* NULL terminate sptr. */ \
- sprintf(buf, "%d", value); \
- strcat(sptr, buf); \
- while (*sptr) sptr++; \
- } while (0)
-
-#define PRINT_CHAR(CHAR) \
- do { \
- putc(CHAR, stream); \
- ptr++; \
- total_printed++; \
- continue; \
- } while (0)
-
-#define PRINT_TYPE(TYPE) \
- do { \
- int result; \
- TYPE value = va_arg (ap, TYPE); \
- *sptr++ = *ptr++; /* Copy the type specifier. */ \
- *sptr = '\0'; /* NULL terminate sptr. */ \
- result = fprintf(stream, specifier, value); \
- if (result == -1) \
- return -1; \
- else \
- { \
- total_printed += result; \
- continue; \
- } \
- } while (0)
-
-int
-_doprnt (format, ap, stream)
- const char * format;
- va_list ap;
- FILE * stream;
-{
- const char * ptr = format;
- char specifier[128];
- int total_printed = 0;
-
- while (*ptr != '\0')
- {
- if (*ptr != '%') /* While we have regular characters, print them. */
- PRINT_CHAR(*ptr);
- else /* We got a format specifier! */
- {
- char * sptr = specifier;
- int wide_width = 0, short_width = 0;
-
- *sptr++ = *ptr++; /* Copy the % and move forward. */
-
- while (strchr ("-+ #0", *ptr)) /* Move past flags. */
- *sptr++ = *ptr++;
-
- if (*ptr == '*')
- COPY_VA_INT;
- else
- while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */
- *sptr++ = *ptr++;
-
- if (*ptr == '.')
- {
- *sptr++ = *ptr++; /* Copy and go past the period. */
- if (*ptr == '*')
- COPY_VA_INT;
- else
- while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */
- *sptr++ = *ptr++;
- }
- while (strchr ("hlL", *ptr))
- {
- switch (*ptr)
- {
- case 'h':
- short_width = 1;
- break;
- case 'l':
- wide_width++;
- break;
- case 'L':
- wide_width = 2;
- break;
- default:
- abort();
- }
- *sptr++ = *ptr++;
- }
-
- switch (*ptr)
- {
- case 'd':
- case 'i':
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- case 'c':
- {
- /* Short values are promoted to int, so just copy it
- as an int and trust the C library printf to cast it
- to the right width. */
- if (short_width)
- PRINT_TYPE(int);
- else
- {
- switch (wide_width)
- {
- case 0:
- PRINT_TYPE(int);
- break;
- case 1:
- PRINT_TYPE(long);
- break;
- case 2:
- default:
-#if defined(__GNUC__) || defined(HAVE_LONG_LONG)
- PRINT_TYPE(long long);
-#else
- PRINT_TYPE(long); /* Fake it and hope for the best. */
-#endif
- break;
- } /* End of switch (wide_width) */
- } /* End of else statement */
- } /* End of integer case */
- break;
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- {
- if (wide_width == 0)
- PRINT_TYPE(double);
- else
- {
-#if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE)
- PRINT_TYPE(long double);
-#else
- PRINT_TYPE(double); /* Fake it and hope for the best. */
-#endif
- }
- }
- break;
- case 's':
- PRINT_TYPE(char *);
- break;
- case 'p':
- PRINT_TYPE(void *);
- break;
- case '%':
- PRINT_CHAR('%');
- break;
- default:
- abort();
- } /* End of switch (*ptr) */
- } /* End of else statement */
- }
-
- return total_printed;
-}
-
-#ifdef TEST
-
-#include <math.h>
-#ifndef M_PI
-#define M_PI (3.1415926535897932385)
-#endif
-
-#define RESULT(x) do \
-{ \
- int i = (x); \
- printf ("printed %d characters\n", i); \
- fflush(stdin); \
-} while (0)
-
-static int checkit PARAMS ((const char * format, ...)) ATTRIBUTE_PRINTF_1;
-
-static int
-checkit VPARAMS ((const char* format, ...))
-{
- int result;
- VA_OPEN (args, format);
- VA_FIXEDARG (args, char *, format);
-
- result = _doprnt (format, args, stdout);
- VA_CLOSE (args);
-
- return result;
-}
-
-int
-main ()
-{
- RESULT(checkit ("<%d>\n", 0x12345678));
- RESULT(printf ("<%d>\n", 0x12345678));
-
- RESULT(checkit ("<%200d>\n", 5));
- RESULT(printf ("<%200d>\n", 5));
-
- RESULT(checkit ("<%.300d>\n", 6));
- RESULT(printf ("<%.300d>\n", 6));
-
- RESULT(checkit ("<%100.150d>\n", 7));
- RESULT(printf ("<%100.150d>\n", 7));
-
- RESULT(checkit ("<%s>\n",
- "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
-777777777777777777333333333333366666666666622222222222777777777777733333"));
- RESULT(printf ("<%s>\n",
- "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
-777777777777777777333333333333366666666666622222222222777777777777733333"));
-
- RESULT(checkit ("<%f><%0+#f>%s%d%s>\n",
- 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"));
- RESULT(printf ("<%f><%0+#f>%s%d%s>\n",
- 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"));
-
- RESULT(checkit ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI));
- RESULT(printf ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI));
-
- RESULT(checkit ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI));
- RESULT(printf ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI));
-
- RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n",
- 75, 75, 75, 75, 75, 75, 75));
- RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n",
- 75, 75, 75, 75, 75, 75, 75));
-
- RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n",
- 75, 75, 75, 75, 75, 75, 75));
- RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n",
- 75, 75, 75, 75, 75, 75, 75));
-
- RESULT(checkit ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456));
- RESULT(printf ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456));
-
-#if defined(__GNUC__) || defined (HAVE_LONG_LONG)
- RESULT(checkit ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345));
- RESULT(printf ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345));
- RESULT(checkit ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345));
- RESULT(printf ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345));
-#endif
-
-#if defined(__GNUC__) || defined (HAVE_LONG_DOUBLE)
- RESULT(checkit ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n",
- 1.23456, 1.234567890123456789L, 1.23456));
- RESULT(printf ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n",
- 1.23456, 1.234567890123456789L, 1.23456));
-#endif
-
- return 0;
-}
-#endif /* TEST */
===================================================================
Index: gcc/doc/configterms.texi
--- gcc/doc/configterms.texi 2001/11/12 15:46:47 1.1
+++ gcc/doc/configterms.texi 2001/11/24 07:02:33
@@ -37,7 +37,7 @@ different system. Some people call this
@dfn{crossed native}, or @dfn{cross-built native}. If build and target
are the same, but host is different, you are using a cross compiler to
build a cross compiler that produces code for the machine you're
-building on. This is rare, so there is no common say of describing it
+building on. This is rare, so there is no common way of describing it
(although I propose calling it a @dfn{crossback}).
If build and host are the same, the GCC you are building will also be
@@ -57,9 +57,8 @@ process will adjust these variables as n
@code{$with_cross_host} to the original @option{--host} value in case you
need it.
-Libiberty, for example, is built twice. The first time, host comes from
-@option{--host} and the second time host comes from @option{--target}.
-Historically, libiberty has not been built for the build machine,
-though, which causes some interesting issues with programs used to
-generate sources for the build. Fixing this, so that libiberty is built
-three times, has long been on the to-do list.
+The @code{libiberty} support library is built up to three times: once
+for the host, once for the target (even if they are the same), and once
+for the build if build and host are different. This allows it to be
+used by all programs which are generated in the course of the build
+process.
===================================================================
Index: gcc/f/Make-lang.in
--- gcc/f/Make-lang.in 2001/11/20 04:39:13 1.100
+++ gcc/f/Make-lang.in 2001/11/24 07:02:33
@@ -129,9 +129,9 @@ f/str-op.h f/str-op.j: f/fini$(build_exe
f/str-ot.h f/str-ot.j: f/fini$(build_exeext) f/str-ot.fin
./f/fini$(build_exeext) $(srcdir)/f/str-ot.fin f/str-ot.j f/str-ot.h
-f/fini$(build_exeext): f/fini.o f/proj-h.o safe-ctype.o
+f/fini$(build_exeext): f/fini.o f/proj-h.o $(HOST_LIBDEPS)
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o f/fini$(build_exeext) \
- f/fini.o f/proj-h.o safe-ctype.o
+ f/fini.o f/proj-h.o $(HOST_LIBS)
f/fini.o:
$(HOST_CC) $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
@@ -221,9 +221,9 @@ $(srcdir)/f/intdoc.texi: $(INTDOC_DEPS)
f/intdoc$(build_exeext) > $(srcdir)/f/intdoc.texi
f/intdoc$(build_exeext): $(INTDOC_DEPS) f/intdoc.h0 hconfig.h $(SYSTEM_H) \
- safe-ctype.o
+ $(HOST_LIBDEPS)
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(INCLUDES) \
- $(srcdir)/f/intdoc.c safe-ctype.o -o f/intdoc$(build_exeext)
+ $(srcdir)/f/intdoc.c $(HOST_LIBS) -o f/intdoc$(build_exeext)
f/intdoc.h0: f/intdoc.in f/ansify$(build_exeext)
f/ansify$(build_exeext) $(srcdir)/f/intdoc.in \
===================================================================
Index: libiberty/_doprnt.c
--- libiberty/_doprnt.c Tue May 5 13:32:27 1998
+++ libiberty/_doprnt.c Fri Nov 23 23:02:36 2001
@@ -0,0 +1,296 @@
+/* Provide a version of _doprnt in terms of fprintf.
+ Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "config.h"
+#include "ansidecl.h"
+#include "safe-ctype.h"
+
+#include <stdio.h>
+#ifdef ANSI_PROTOTYPES
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#undef _doprnt
+
+#ifdef TEST /* Make sure to use the internal one. */
+#define _doprnt my_doprnt
+#endif
+
+#define COPY_VA_INT \
+ do { \
+ const int value = abs (va_arg (ap, int)); \
+ char buf[32]; \
+ ptr++; /* Go past the asterisk. */ \
+ *sptr = '\0'; /* NULL terminate sptr. */ \
+ sprintf(buf, "%d", value); \
+ strcat(sptr, buf); \
+ while (*sptr) sptr++; \
+ } while (0)
+
+#define PRINT_CHAR(CHAR) \
+ do { \
+ putc(CHAR, stream); \
+ ptr++; \
+ total_printed++; \
+ continue; \
+ } while (0)
+
+#define PRINT_TYPE(TYPE) \
+ do { \
+ int result; \
+ TYPE value = va_arg (ap, TYPE); \
+ *sptr++ = *ptr++; /* Copy the type specifier. */ \
+ *sptr = '\0'; /* NULL terminate sptr. */ \
+ result = fprintf(stream, specifier, value); \
+ if (result == -1) \
+ return -1; \
+ else \
+ { \
+ total_printed += result; \
+ continue; \
+ } \
+ } while (0)
+
+int
+_doprnt (format, ap, stream)
+ const char * format;
+ va_list ap;
+ FILE * stream;
+{
+ const char * ptr = format;
+ char specifier[128];
+ int total_printed = 0;
+
+ while (*ptr != '\0')
+ {
+ if (*ptr != '%') /* While we have regular characters, print them. */
+ PRINT_CHAR(*ptr);
+ else /* We got a format specifier! */
+ {
+ char * sptr = specifier;
+ int wide_width = 0, short_width = 0;
+
+ *sptr++ = *ptr++; /* Copy the % and move forward. */
+
+ while (strchr ("-+ #0", *ptr)) /* Move past flags. */
+ *sptr++ = *ptr++;
+
+ if (*ptr == '*')
+ COPY_VA_INT;
+ else
+ while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */
+ *sptr++ = *ptr++;
+
+ if (*ptr == '.')
+ {
+ *sptr++ = *ptr++; /* Copy and go past the period. */
+ if (*ptr == '*')
+ COPY_VA_INT;
+ else
+ while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */
+ *sptr++ = *ptr++;
+ }
+ while (strchr ("hlL", *ptr))
+ {
+ switch (*ptr)
+ {
+ case 'h':
+ short_width = 1;
+ break;
+ case 'l':
+ wide_width++;
+ break;
+ case 'L':
+ wide_width = 2;
+ break;
+ default:
+ abort();
+ }
+ *sptr++ = *ptr++;
+ }
+
+ switch (*ptr)
+ {
+ case 'd':
+ case 'i':
+ case 'o':
+ case 'u':
+ case 'x':
+ case 'X':
+ case 'c':
+ {
+ /* Short values are promoted to int, so just copy it
+ as an int and trust the C library printf to cast it
+ to the right width. */
+ if (short_width)
+ PRINT_TYPE(int);
+ else
+ {
+ switch (wide_width)
+ {
+ case 0:
+ PRINT_TYPE(int);
+ break;
+ case 1:
+ PRINT_TYPE(long);
+ break;
+ case 2:
+ default:
+#if defined(__GNUC__) || defined(HAVE_LONG_LONG)
+ PRINT_TYPE(long long);
+#else
+ PRINT_TYPE(long); /* Fake it and hope for the best. */
+#endif
+ break;
+ } /* End of switch (wide_width) */
+ } /* End of else statement */
+ } /* End of integer case */
+ break;
+ case 'f':
+ case 'e':
+ case 'E':
+ case 'g':
+ case 'G':
+ {
+ if (wide_width == 0)
+ PRINT_TYPE(double);
+ else
+ {
+#if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE)
+ PRINT_TYPE(long double);
+#else
+ PRINT_TYPE(double); /* Fake it and hope for the best. */
+#endif
+ }
+ }
+ break;
+ case 's':
+ PRINT_TYPE(char *);
+ break;
+ case 'p':
+ PRINT_TYPE(void *);
+ break;
+ case '%':
+ PRINT_CHAR('%');
+ break;
+ default:
+ abort();
+ } /* End of switch (*ptr) */
+ } /* End of else statement */
+ }
+
+ return total_printed;
+}
+
+#ifdef TEST
+
+#include <math.h>
+#ifndef M_PI
+#define M_PI (3.1415926535897932385)
+#endif
+
+#define RESULT(x) do \
+{ \
+ int i = (x); \
+ printf ("printed %d characters\n", i); \
+ fflush(stdin); \
+} while (0)
+
+static int checkit PARAMS ((const char * format, ...)) ATTRIBUTE_PRINTF_1;
+
+static int
+checkit VPARAMS ((const char* format, ...))
+{
+ int result;
+ VA_OPEN (args, format);
+ VA_FIXEDARG (args, char *, format);
+
+ result = _doprnt (format, args, stdout);
+ VA_CLOSE (args);
+
+ return result;
+}
+
+int
+main ()
+{
+ RESULT(checkit ("<%d>\n", 0x12345678));
+ RESULT(printf ("<%d>\n", 0x12345678));
+
+ RESULT(checkit ("<%200d>\n", 5));
+ RESULT(printf ("<%200d>\n", 5));
+
+ RESULT(checkit ("<%.300d>\n", 6));
+ RESULT(printf ("<%.300d>\n", 6));
+
+ RESULT(checkit ("<%100.150d>\n", 7));
+ RESULT(printf ("<%100.150d>\n", 7));
+
+ RESULT(checkit ("<%s>\n",
+ "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
+777777777777777777333333333333366666666666622222222222777777777777733333"));
+ RESULT(printf ("<%s>\n",
+ "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
+777777777777777777333333333333366666666666622222222222777777777777733333"));
+
+ RESULT(checkit ("<%f><%0+#f>%s%d%s>\n",
+ 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"));
+ RESULT(printf ("<%f><%0+#f>%s%d%s>\n",
+ 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"));
+
+ RESULT(checkit ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI));
+ RESULT(printf ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI));
+
+ RESULT(checkit ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI));
+ RESULT(printf ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI));
+
+ RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n",
+ 75, 75, 75, 75, 75, 75, 75));
+ RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n",
+ 75, 75, 75, 75, 75, 75, 75));
+
+ RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n",
+ 75, 75, 75, 75, 75, 75, 75));
+ RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n",
+ 75, 75, 75, 75, 75, 75, 75));
+
+ RESULT(checkit ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456));
+ RESULT(printf ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456));
+
+#if defined(__GNUC__) || defined (HAVE_LONG_LONG)
+ RESULT(checkit ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345));
+ RESULT(printf ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345));
+ RESULT(checkit ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345));
+ RESULT(printf ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345));
+#endif
+
+#if defined(__GNUC__) || defined (HAVE_LONG_DOUBLE)
+ RESULT(checkit ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n",
+ 1.23456, 1.234567890123456789L, 1.23456));
+ RESULT(printf ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n",
+ 1.23456, 1.234567890123456789L, 1.23456));
+#endif
+
+ return 0;
+}
+#endif /* TEST */
===================================================================
Index: libiberty/configure.in
--- libiberty/configure.in 2001/11/15 18:11:24 1.39
+++ libiberty/configure.in 2001/11/24 07:02:36
@@ -132,7 +132,7 @@ AC_EGREP_HEADER(uintptr_t, sys/types.h,
if test $libiberty_cv_uintptr_t = yes
then
- AC_DEFINE(HAVE_UINTPTR_T)
+ AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.])
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
@@ -254,9 +254,9 @@ fi
AC_SUBST(CHECK)
case "${host}" in
- *-*-cygwin*)
- AC_DEFINE(HAVE_SYS_ERRLIST)
- AC_DEFINE(HAVE_SYS_NERR)
+ *-*-cygwin*)
+ AC_DEFINE_NOAUTOHEADER(HAVE_SYS_ERRLIST)
+ AC_DEFINE_NOAUTOHEADER(HAVE_SYS_NERR)
;;
esac
@@ -351,6 +351,13 @@ if test -z "${setobjs}"; then
if test $ac_cv_func_vfork_works = no; then
LIBOBJS="$LIBOBJS vfork.o"
fi
+ # We only need _doprnt if we might use it to implement v*printf.
+ if test $ac_cv_func_vprintf != yes \
+ || test $ac_cv_func_vfprintf != yes \
+ || test $ac_cv_func_vsprintf != yes; then
+ AC_REPLACE_FUNCS(_doprnt)
+ fi
+
for v in $vars; do
AC_MSG_CHECKING([for $v])
AC_CACHE_VAL(libiberty_cv_var_$v,