From c1d0dcfd127b3f9742c31f794e2a6d886048bb1e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 18 May 2010 19:42:04 -0700 Subject: [PATCH] Set linker-related things with configure. * configure.in (LINKER, YMF_PASS_LDFLAGS): New output variables. (ORDINARY_LINK): New AC_DEFINE. (LIB_GCC): No need to set if ORDINARY_LINK. * src/Makefile.in (LD, YMF_PASS_LDFLAGS): Set with configure, not cpp. (GNULIB_VAR): Remove. (LIBES): Use LIB_GCC instead of GNULIB_VAR. * src/m/ibms390x.h (LINKER): * src/m/macppc.h (LINKER) [GNU_LINUX]: * src/s/aix4-2.h (ORDINARY_LINK): * src/s/cygwin.h (LINKER): * src/s/darwin.h (ORDINARY_LINK): * src/s/gnu.h (ORDINARY_LINK): * src/s/netbsd.h (LINKER): * src/s/usg5-4.h (ORDINARY_LINK): Move to configure. * msdos/sed1v2.inp (LD): Edit to $(CC). (YMF_PASS_LDFLAGS): Edit to `flags'. --- ChangeLog | 6 +++++ configure.in | 69 +++++++++++++++++++++++++++++++++++++++++++++++- msdos/ChangeLog | 5 ++++ msdos/sed1v2.inp | 2 ++ src/ChangeLog | 14 ++++++++++ src/Makefile.in | 54 +++++-------------------------------- src/m/ibms390x.h | 2 -- src/m/macppc.h | 6 ----- src/s/aix4-2.h | 2 -- src/s/cygwin.h | 5 ++-- src/s/darwin.h | 3 --- src/s/gnu.h | 3 +-- src/s/netbsd.h | 6 ----- src/s/usg5-4.h | 2 -- 14 files changed, 104 insertions(+), 75 deletions(-) diff --git a/ChangeLog b/ChangeLog index eb3ed433d0a..d51d9afc3a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-05-19 Glenn Morris + + * configure.in (LINKER, YMF_PASS_LDFLAGS): New output variables. + (ORDINARY_LINK): New AC_DEFINE. + (LIB_GCC): No need to set if ORDINARY_LINK. + 2010-05-18 Glenn Morris * configure.in (POST_ALLOC_OBJ) [cygwin]: Omit vm-limit.o. diff --git a/configure.in b/configure.in index 57fb0548f53..5d168d77886 100644 --- a/configure.in +++ b/configure.in @@ -3277,8 +3277,75 @@ fi AC_SUBST(LD_SWITCH_SYSTEM_EXTRA) +LINKER= +ORDINARY_LINK= +case "$opsys" in + ## gnu: GNU needs its own crt0. + aix4-2|darwin|gnu|usg5-4|irix6-5|sol2*|unixware) ORDINARY_LINK=yes ;; + + cygwin) LINKER="\$(CC)" ;; + + ## On post 1.3 releases of NetBSD, gcc -nostdlib also clears the + ## library search parth, i.e. it won't search /usr/lib for libc and + ## friends. Using -nostartfiles instead avoids this problem, and + ## will also work on earlier NetBSD releases. + netbsd|openbsd) LINKER="\$(CC) -nostartfiles" ;; + + ## macpcc: NAKAJI Hiroyuki says + ## MkLinux/LinuxPPC needs this. + ## ibms390x only supports opsys = gnu-linux so it can be added here. + gnu-*) + case "$machine" in + macppc|ibms390x) LINKER="\$(CC) -nostdlib" ;; + esac + ;; +esac + +## A macro which other sections of Makefile can redefine to munge the +## flags before they are passed to LD. This is helpful if you have +## redefined LD to something odd, like "gcc". +## (The YMF prefix is a holdover from the old name "ymakefile".) +YMF_PASS_LDFLAGS=flags +if test "x$ORDINARY_LINK" = "xyes"; then + + LINKER="\$(CC)" + AC_DEFINE(ORDINARY_LINK, 1, [Define if the C compiler is the linker.]) + +## The system files defining neither ORDINARY_LINK nor LINKER are: +## (bsd-common), freebsd, gnu-* not on macppc|ibms390x, hpux*. +elif test "x$GCC" = "xyes" && test "x$LINKER" = "x"; then + + ## Versions of GCC >= 2.0 put their library, libgcc.a, in obscure + ## places that are difficult to figure out at make time. Fortunately, + ## these same versions allow you to pass arbitrary flags on to the + ## linker, so there is no reason not to use it as a linker. + ## + ## Well, it is not quite perfect. The "-nostdlib" keeps GCC from + ## searching for libraries in its internal directories, so we have to + ## ask GCC explicitly where to find libgcc.a (LIB_GCC below). + LINKER="\$(CC) -nostdlib" + ## GCC passes any argument prefixed with -Xlinker directly to the linker. + ## See prefix-args.c for an explanation of why we do not do this with the + ## shell''s ``for'' construct. Note that sane people do not have '.' in + ## their paths, so we must use ./prefix-args. + ## TODO either make prefix-args check ORDINARY_LINK internally, + ## or remove it altogether (bug#6184), removing the need for this macro. + YMF_PASS_LDFLAGS='`./prefix-args -Xlinker flags`' +fi +AC_SUBST(YMF_PASS_LDFLAGS) + +test "x$LINKER" = "x" && LINKER=ld +## FIXME? What setting of YMF_PASS_LDFLAGS should this have? +test "$NS_IMPL_GNUSTEP" = "yes" && LINKER="\$(CC) -rdynamic" + +AC_SUBST(LINKER) + + +## FIXME? The logic here is not precisely the same as that above +## setting YMF_PASS_LDFLAGS. There is no check here for a pre-defined +## LINKER. Should we only be setting LIB_GCC if LD ~ -nostdlib? LIB_GCC= -if test "x$GCC" = "xyes"; then +if test "x$GCC" = "xyes" && test "x$ORDINARY_LINK" != "xyes"; then case "$opsys" in ## cygwin: don't link against static libgcc. diff --git a/msdos/ChangeLog b/msdos/ChangeLog index fd320d85920..cbc018dffe6 100644 --- a/msdos/ChangeLog +++ b/msdos/ChangeLog @@ -1,3 +1,8 @@ +2010-05-19 Glenn Morris + + * sed1v2.inp (LD): Edit to $(CC). + (YMF_PASS_LDFLAGS): Edit to `flags'. + 2010-05-18 Eli Zaretskii * sed1x.inp: Add copyright notice. diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp index 574910d2beb..7b9b77309df 100644 --- a/msdos/sed1v2.inp +++ b/msdos/sed1v2.inp @@ -55,6 +55,7 @@ s/\.h\.in/.h-in/ /^TEMACS_LDFLAGS2 *=/s/@TEMACS_LDFLAGS2@/$(LDFLAGS)/ /^LIBS_SYSTEM *=/s/@LIBS_SYSTEM@// /^LIB_GCC *=/s/@LIB_GCC@/-Lgcc/ +/^LD *=/s/@LINKER@/$(CC)/ /^LIB_STANDARD *=/s/@LIB_STANDARD@// /^LIB_MATH *=/s/@LIB_MATH@/-lm/ /^LIBTIFF *=/s/@LIBTIFF@// @@ -143,6 +144,7 @@ s/\.h\.in/.h-in/ /^ @: /d /^ -\{0,1\}ln -/s/ln -f/cp -pf/ /^[ ]touch /s/touch/djecho $@ >/ +s/@YMF_PASS_LDFLAGS@/flags/ s/bootstrap-emacs/b-emacs/ s/bootstrap-temacs/b-temacs/ s/bootstrap-doc/b-doc/ diff --git a/src/ChangeLog b/src/ChangeLog index 1fbfcb314ef..5d1c53bf7ba 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,19 @@ 2010-05-19 Glenn Morris + * Makefile.in (LD, YMF_PASS_LDFLAGS): Set with configure, not cpp. + (GNULIB_VAR): Remove. + (LIBES): Use LIB_GCC instead of GNULIB_VAR. + + * m/ibms390x.h (LINKER): + * m/macppc.h (LINKER) [GNU_LINUX]: + * s/aix4-2.h (ORDINARY_LINK): + * s/cygwin.h (LINKER): + * s/darwin.h (ORDINARY_LINK): + * s/gnu.h (ORDINARY_LINK): + * s/netbsd.h (LINKER): + * s/usg5-4.h (ORDINARY_LINK): + Move to configure. + * s/aix4-2.h (LINKER): Remove; this file sets ORDINARY_LINK. 2010-05-18 Chong Yidong diff --git a/src/Makefile.in b/src/Makefile.in index 676d2a0834e..bab812e656f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -124,6 +124,8 @@ LIBS_SYSTEM=@LIBS_SYSTEM@ ## Where to find libgcc.a, if using gcc and necessary. LIB_GCC=@LIB_GCC@ +LD=@LINKER@ + ## May use $CRT_DIR. LIB_STANDARD=@LIB_STANDARD@ @@ -329,52 +331,6 @@ ALL_OBJC_CFLAGS=$(ALL_CFLAGS) $(GNU_OBJC_CFLAGS) $(CC) -c $(CPPFLAGS) $(ALL_OBJC_CFLAGS) $< -/* A macro which other sections of Makefile can redefine to munge the - flags before they are passed to LD. This is helpful if you have - redefined LD to something odd, like "gcc". - (The YMF prefix is a holdover from the old name "ymakefile".) */ -#define YMF_PASS_LDFLAGS(flags) flags - - -#ifdef ORDINARY_LINK -LD = $(CC) - -#else /* not ORDINARY_LINK */ -GNULIB_VAR = $(LIB_GCC) - -/* Fix linking if compiled with GCC. */ -#if defined (__GNUC__) && ! defined (LINKER) -/* Versions of GCC >= 2.0 put their library, libgcc.a, in obscure - places that are difficult to figure out at make time. Fortunately, - these same versions allow you to pass arbitrary flags on to the - linker, so there is no reason not to use it as a linker. - - Well, it is not quite perfect. The "-nostdlib" keeps GCC from - searching for libraries in its internal directories, so we have to - ask GCC explicitly where to find libgcc.a. */ -#define LINKER $(CC) -nostdlib -/* GCC passes any argument prefixed with -Xlinker directly to the linker. - See prefix-args.c for an explanation of why we do not do this with the - shell''s ``for'' construct. Note that sane people do not have '.' in - their paths, so we must use ./prefix-args. */ -#undef YMF_PASS_LDFLAGS -#define YMF_PASS_LDFLAGS(flags) `./prefix-args -Xlinker flags` -#endif /* defined (__GNUC__) && ! defined (LINKER) */ - -#ifdef LINKER -LD=LINKER -#else /* not LINKER */ -LD=ld -#endif /* not LINKER */ - -#endif /* not ORDINARY_LINK */ - - -#ifdef NS_IMPL_GNUSTEP -LD=$(CC) -rdynamic -#endif - - /* lastfile must follow all files whose initialized data areas should be dumped as pure by dump-emacs. */ obj= dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \ @@ -634,13 +590,13 @@ SOME_MACHINE_LISP = ../lisp/mouse.elc \ /* Construct full set of libraries to be linked. Note that SunOS needs -lm to come before -lc; otherwise, you get duplicated symbols. If the standard libraries were compiled - with GCC, we might need gnulib again after them. */ + with GCC, we might need LIB_GCC again after them. */ LIBES = $(LOADLIBES) $(LIBS) $(LIBX_BASE) $(LIBX_OTHER) $(LIBSOUND) \ $(RSVG_LIBS) $(DBUS_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \ $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) ${GCONF_LIBS} ${LIBSELINUX_LIBS} \ $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \ - $(GNULIB_VAR) $(LIB_MATH) $(LIB_STANDARD) $(GNULIB_VAR) + $(LIB_GCC) $(LIB_MATH) $(LIB_STANDARD) $(LIB_GCC) all: emacs${EXEEXT} $(OTHER_FILES) @@ -682,6 +638,8 @@ ${libsrc}make-docfile${EXEEXT}: buildobj.h: Makefile echo "#define BUILDOBJ \"${obj} ${otherobj} " "\"" > buildobj.h +#define YMF_PASS_LDFLAGS(flags) @YMF_PASS_LDFLAGS@ + temacs${EXEEXT}: $(START_FILES) stamp-oldxmenu ${obj} ${otherobj} prefix-args${EXEEXT} $(LD) YMF_PASS_LDFLAGS ( ${TEMACS_LDFLAGS} \ ${NS_IMPL_GNUSTEP_TEMACS_LDFLAGS} ) \ diff --git a/src/m/ibms390x.h b/src/m/ibms390x.h index fda3007cb74..d6aa0c713c6 100644 --- a/src/m/ibms390x.h +++ b/src/m/ibms390x.h @@ -62,8 +62,6 @@ along with GNU Emacs. If not, see . */ /* On the 64 bit architecture, we can use 60 bits for addresses */ #define VALBITS 60 -#define LINKER $(CC) -nostdlib - /* Define XPNTR to avoid or'ing with DATA_SEG_BITS */ #define XPNTR(a) XUINT (a) diff --git a/src/m/macppc.h b/src/m/macppc.h index b9dcf3bdc92..f348286030c 100644 --- a/src/m/macppc.h +++ b/src/m/macppc.h @@ -32,12 +32,6 @@ along with GNU Emacs. If not, see . */ #define HAVE_TEXT_START #endif -/* NAKAJI Hiroyuki says this is needed - For MkLinux/LinuxPPC. */ -#ifdef GNU_LINUX -#define LINKER $(CC) -nostdlib -#endif - #ifdef _ARCH_PPC64 #ifndef _LP64 #define _LP64 diff --git a/src/s/aix4-2.h b/src/s/aix4-2.h index 9963e5744bf..5212c432843 100644 --- a/src/s/aix4-2.h +++ b/src/s/aix4-2.h @@ -106,7 +106,5 @@ along with GNU Emacs. If not, see . */ #define UNEXEC unexaix.o -#define ORDINARY_LINK - /* arch-tag: 38fe75ea-6aef-42bd-8449-bc34d921a562 (do not change this comment) */ diff --git a/src/s/cygwin.h b/src/s/cygwin.h index e2afb7ddc44..b6d0c7c88ff 100644 --- a/src/s/cygwin.h +++ b/src/s/cygwin.h @@ -1,7 +1,7 @@ /* System description header file for Cygwin. Copyright (C) 1985, 1986, 1992, 1999, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ /* SYSTEM_TYPE should indicate the kind of system you are using. - It sets the Lisp variable system-type. */ + It sets the Lisp variable system-type. */ #define SYSTEM_TYPE "cygwin" /* Emacs can read input using SIGIO and buffering characters itself, @@ -94,7 +94,6 @@ along with GNU Emacs. If not, see . */ #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) #define SYSV_SYSTEM_DIR 1 #define UNEXEC unexcw.o -#define LINKER $(CC) #define HAVE_SOCKETS diff --git a/src/s/darwin.h b/src/s/darwin.h index 76c0054cd3f..a30360576a8 100644 --- a/src/s/darwin.h +++ b/src/s/darwin.h @@ -147,9 +147,6 @@ along with GNU Emacs. If not, see . */ #undef HAVE_POSIX_MEMALIGN #endif -/* Link this program just by running cc. */ -#define ORDINARY_LINK - /* Define the following so emacs symbols will not conflict with those in the System framework. Otherwise -prebind will not work. */ diff --git a/src/s/gnu.h b/src/s/gnu.h index cb4c4a9d807..4567f4e9f4f 100644 --- a/src/s/gnu.h +++ b/src/s/gnu.h @@ -29,8 +29,7 @@ along with GNU Emacs. If not, see . */ #define SIGNALS_VIA_CHARACTERS -/* GNU needs its own crt0, and libc defines data_start. */ -#define ORDINARY_LINK +/* libc defines data_start. */ #define DATA_START ({ extern int data_start; (char *) &data_start; }) /* Some losing code fails to include this and then assumes diff --git a/src/s/netbsd.h b/src/s/netbsd.h index 4874ec9af56..af8fd00a6bd 100644 --- a/src/s/netbsd.h +++ b/src/s/netbsd.h @@ -26,12 +26,6 @@ along with GNU Emacs. If not, see . */ #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) -/* On post 1.3 releases of NetBSD, gcc -nostdlib also clears - the library search parth, i.e. it won't search /usr/lib - for libc and friends. Using -nostartfiles instead avoids - this problem, and will also work on earlier NetBSD releases. */ -#define LINKER $(CC) -nostartfiles - #define DEFAULT_SOUND_DEVICE "/dev/audio" /* Greg A. Woods says we must include signal.h diff --git a/src/s/usg5-4.h b/src/s/usg5-4.h index f870086368c..85499fb1124 100644 --- a/src/s/usg5-4.h +++ b/src/s/usg5-4.h @@ -69,8 +69,6 @@ along with GNU Emacs. If not, see . */ /* On USG systems signal handlers return void. */ #define SIGTYPE void -#define ORDINARY_LINK - /* Undump with ELF. */ #undef COFF -- 2.39.2