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'.
This commit is contained in:
Glenn Morris 2010-05-18 19:42:04 -07:00
parent 7f34aec377
commit c1d0dcfd12
14 changed files with 104 additions and 75 deletions

View file

@ -1,3 +1,9 @@
2010-05-19 Glenn Morris <rgm@gnu.org>
* 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 <rgm@gnu.org>
* configure.in (POST_ALLOC_OBJ) [cygwin]: Omit vm-limit.o.

View file

@ -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 <nakaji@tutrp.tut.ac.jp> 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.

View file

@ -1,3 +1,8 @@
2010-05-19 Glenn Morris <rgm@gnu.org>
* sed1v2.inp (LD): Edit to $(CC).
(YMF_PASS_LDFLAGS): Edit to `flags'.
2010-05-18 Eli Zaretskii <eliz@gnu.org>
* sed1x.inp: Add copyright notice.

View file

@ -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/

View file

@ -1,5 +1,19 @@
2010-05-19 Glenn Morris <rgm@gnu.org>
* 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 <cyd@stupidchicken.com>

View file

@ -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} ) \

View file

@ -62,8 +62,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* 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)

View file

@ -32,12 +32,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define HAVE_TEXT_START
#endif
/* NAKAJI Hiroyuki <nakaji@tutrp.tut.ac.jp> says this is needed
For MkLinux/LinuxPPC. */
#ifdef GNU_LINUX
#define LINKER $(CC) -nostdlib
#endif
#ifdef _ARCH_PPC64
#ifndef _LP64
#define _LP64

View file

@ -106,7 +106,5 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define UNEXEC unexaix.o
#define ORDINARY_LINK
/* arch-tag: 38fe75ea-6aef-42bd-8449-bc34d921a562
(do not change this comment) */

View file

@ -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 <http://www.gnu.org/licenses/>. */
/* 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 <http://www.gnu.org/licenses/>. */
#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

View file

@ -147,9 +147,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#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. */

View file

@ -29,8 +29,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#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

View file

@ -26,12 +26,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#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 <woods@weird.com> says we must include signal.h

View file

@ -69,8 +69,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* On USG systems signal handlers return void. */
#define SIGTYPE void
#define ORDINARY_LINK
/* Undump with ELF. */
#undef COFF