Added nt/Makefile.in and appropriate tweaks to configure.ac.

Added emacsclient.res support to lib-src/.
Fixed temacs and dumping commands in src/Makefile.in.
Miscellaneous fixes all over the place.

Not tried to build yet.
This commit is contained in:
Eli Zaretskii 2013-04-01 16:18:20 +03:00
parent a74b0e1bdf
commit 095bf25383
5 changed files with 294 additions and 24 deletions

View file

@ -93,6 +93,9 @@ version=@version@
### for, like `mips-dec-ultrix' or `sparc-sun-sunos'.
configuration=@configuration@
### The nt/ subdirectory gets built only for MinGW
NTDIR=@NTDIR@
# ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / Mac OS X.
@ -271,17 +274,17 @@ EMACS = ${EMACS_NAME}${EXEEXT}
EMACSFULL = `echo emacs-${version} | sed '$(TRANSFORM)'`${EXEEXT}
# Subdirectories to make recursively.
SUBDIR = lib lib-src src lisp leim
SUBDIR = lib lib-src src lisp leim $(NTDIR)
# The subdir makefiles created by config.status.
SUBDIR_MAKEFILES_IN = @SUBDIR_MAKEFILES_IN@
SUBDIR_MAKEFILES = `echo $(SUBDIR_MAKEFILES_IN:.in=) | sed 's|$(srcdir)/||g'`
# Subdirectories to install, and where they'll go.
# lib-src's makefile knows how to install it, so we don't do that here.
# Directories that cannot simply be copied, eg info,
# are treated separately.
# quail appears twice because in out-of-tree builds, it exists twice.
# Subdirectories to install, and where they'll go. lib-src's and nt's
# makefiles know how to install them, so we don't do that here.
# Directories that cannot simply be copied, eg info, are treated
# separately. quail appears twice because in out-of-tree builds, it
# exists twice.
COPYDIR = ${srcdir}/etc ${srcdir}/lisp ${srcdir}/leim/ja-dic ${srcdir}/leim/quail leim/quail
COPYDESTS = $(DESTDIR)${etcdir} $(DESTDIR)${lispdir} $(DESTDIR)${leimdir}/ja-dic $(DESTDIR)${leimdir}/quail $(DESTDIR)${leimdir}/quail

View file

@ -1544,8 +1544,10 @@ AC_SUBST(NS_OBJC_OBJ)
HAVE_W32=no
W32_OBJ=
W32_LIBS=
W32_RES=
EMACSRES=
CLIENTRES=
W32_RES_LINK=
EMACS_MANIFEST=
if test "${with_w32}" != no; then
if test "${opsys}" != "cygwin"; then
if test "${opsys}" != "mingw32"; then
@ -1573,29 +1575,39 @@ if test "${opsys}" = "mingw32"; then
fi
fi
FIRSTFILE_OBJ=
if test "${HAVE_W32}" = "yes"; then
AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.])
AC_CHECK_TOOL(WINDRES, [windres],
[AC_MSG_ERROR([No resource compiler found.])])
W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"
W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o"
EMACSRES="emacs.res"
case "$canonical" in
x86_64-*-*) EMACS_MANIFEST="emacs-x64.manifest" ;;
*) EMACS_MANIFEST="emacs-x86.manifest" ;;
esac
if test "${opsys}" = "cygwin"; then
W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32"
W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool"
W32_RES="emacs.res"
# Tell the linker that emacs.res is an object (which we compile from
# the rc file), not a linker script.
W32_RES_LINK="-Wl,-bpe-i386 -Wl,emacs.res"
else
W32_OBJ="$W32_OBJ w32.o w32console.o w32heap.o w32inevt.o w32proc.o"
W32_LIBS="$W32_LIBS -lwinmm -lgdi32 -lcomdlg32"
W32_LIBS="$W32_LIBS -lmpr -lwinspool -lole32 -lusp10"
W32_LIBS="$W32_LIBS -lmpr -lwinspool -lole32 -lcomctl32 -lusp10"
CLIENTRES="emacsclient.res"
FIRSTFILE_OBJ=firstfile.o
fi
fi
AC_SUBST(W32_OBJ)
AC_SUBST(W32_LIBS)
AC_SUBST(W32_RES)
AC_SUBST(EMACSRES)
AC_SUBST(EMACS_MANIFEST)
AC_SUBST(CLIENTRES)
AC_SUBST(W32_RES_LINK)
AC_SUBST(FIRSTFILE_OBJ)
if test "${HAVE_W32}" = "yes"; then
window_system=w32
@ -4016,6 +4028,9 @@ case $opsys in
mingw32)
AC_DEFINE(DOS_NT, [])
AC_DEFINE(WINDOWSNT, 1, [Define if compiling for native MS Windows.])
if test "x$ac_enable_checking" != "x" ; then
AC_DEFINE(EMACSDEBUG, 1, [Define to 1 to enable w32 debug facilities.])
fi
;;
sol2*)
@ -4362,7 +4377,7 @@ CFLAGS=$SAVE_CFLAGS
LIBS=$SAVE_LIBS
if test "${opsys}" = "mingw32"; then
CPPFLAGS="-DUSE_CRT_DLL=1 -I $srcdir/nt/inc"
CPPFLAGS="$CPPFLAGS -DUSE_CRT_DLL=1 -I $srcdir/nt/inc"
# Remove unneeded switches from the value of CC that goes to Makefiles
CC=`echo $CC | sed -e "s,$GCC_TEST_OPTIONS,,"`
fi
@ -4401,7 +4416,10 @@ case "$opsys" in
gnu*) LD_SWITCH_SYSTEM_TEMACS="\$(LD_SWITCH_X_SITE_RPATH)" ;;
mingw32)
LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-subsystem,console -Wl,-entry,__start -Wl,-Map,./temacs.map"
case "$canonical" in
x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-subsystem,console -Wl,-entry,_start -Wl,-Map,./temacs.map" ;;
*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-subsystem,console -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
esac
;;
*) LD_SWITCH_SYSTEM_TEMACS= ;;
@ -4409,6 +4427,24 @@ esac
AC_SUBST(LD_SWITCH_SYSTEM_TEMACS)
## MinGW-specific post-link processing of temacs.
TEMACS_POST_LINK=":"
ADDSECTION=
EMACS_HEAPSIZE=
if test "${opsys}" = "mingw32"; then
TEMACS_POST_LINK="\$(MINGW_TEMACS_POST_LINK)"
ADDSECTION="../nt/addsection\$(EXEEXT)"
## Preload heap size of temacs.exe in MB.
case "$canonical" in
x86_64-*-*) EMACS_HEAPSIZE=42 ;;
*) EMACS_HEAPSIZE=27 ;;
esac
fi
AC_SUBST(ADDSECTION)
AC_SUBST(TEMACS_POST_LINK)
AC_SUBST(EMACS_HEAPSIZE)
## Common for all window systems
if test "$window_system" != "none"; then
AC_DEFINE(HAVE_WINDOW_SYSTEM, 1, [Define if you have a window system.])
@ -4567,12 +4603,12 @@ dnl This will work, but you get a config.status that is not quite right
dnl (see http://lists.gnu.org/archive/html/bug-autoconf/2008-08/msg00028.html).
dnl That doesn't have any obvious consequences for Emacs, but on the whole
dnl it seems better to just live with the duplication.
SUBDIR_MAKEFILES="lib/Makefile lib-src/Makefile oldXMenu/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile leim/Makefile nextstep/Makefile"
SUBDIR_MAKEFILES="lib/Makefile lib-src/Makefile oldXMenu/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile leim/Makefile nextstep/Makefile nt/Makefile"
AC_CONFIG_FILES([Makefile lib/Makefile lib-src/Makefile oldXMenu/Makefile \
doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile \
doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile \
leim/Makefile nextstep/Makefile])
leim/Makefile nextstep/Makefile nt/Makefile])
dnl test/ is not present in release tarfiles.
opt_makefile=test/automated/Makefile

View file

@ -172,6 +172,8 @@ LIBS_MOVE = $(LIBS_MAIL) $(KRB4LIB) $(DESLIB) $(KRB5LIB) $(CRYPTOLIB) \
## Extra object files for linking emacsclient
NTLIB = @NTLIB@
CLIENTRES = @CLIENTRES@
WINDRES = @WINDRES@
## Some systems define this to request special libraries.
LIBS_SYSTEM = @LIBS_SYSTEM@
@ -339,9 +341,9 @@ movemail${EXEEXT}: ${srcdir}/movemail.c pop.o $(NTLIB) $(config_h)
pop.o: ${srcdir}/pop.c ${srcdir}/../lib/min-max.h $(config_h)
$(CC) -c ${CPP_CFLAGS} ${MOVE_FLAGS} ${srcdir}/pop.c
emacsclient${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(config_h)
emacsclient${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(CLIENTRES) $(config_h)
$(CC) ${ALL_CFLAGS} ${srcdir}/emacsclient.c \
-DVERSION="\"${version}\"" $(LIB_WSOCK32) \
-DVERSION="\"${version}\"" $(CLIENTRES) $(LIB_WSOCK32) \
$(LOADLIBES) $(LIB_FDATASYNC) -o emacsclient${EXEEXT}
ntlib.o: ${srcdir}/ntlib.c ${srcdir}/ntlib.h
@ -355,4 +357,7 @@ update-game-score${EXEEXT}: ${srcdir}/update-game-score.c $(NTLIB) $(config_h)
${srcdir}/update-game-score.c $(NTLIB) $(LOADLIBES) \
-o update-game-score${EXEEXT}
emacsclient.res: ${srcdir}/nt/emacsclient.rc
$(WINDRES) -O coff --include-dir=${srcdir}/nt -o emacscient.res
## Makefile ends here.

212
nt/Makefile.in Normal file
View file

@ -0,0 +1,212 @@
# nt/Makefile for GNU Emacs.
# Copyright (C) 2013 Free Software Foundation, Inc.
# This file is part of GNU Emacs.
# GNU Emacs 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 3 of the License, or
# (at your option) any later version.
# GNU Emacs 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
# Avoid trouble on systems where the `SHELL' variable might be
# inherited from the environment.
SHELL = /bin/sh
# ==================== Things `configure' will edit ====================
CC=@CC@
CFLAGS=@CFLAGS@
version=@version@
## Used in $archlibdir.
configuration=@configuration@
EXEEXT=@EXEEXT@
C_SWITCH_SYSTEM=@C_SWITCH_SYSTEM@
C_SWITCH_MACHINE=@C_SWITCH_MACHINE@
PROFILING_CFLAGS = @PROFILING_CFLAGS@
WARN_CFLAGS = @WARN_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
# Program name transformation.
TRANSFORM = @program_transform_name@
# ==================== Where To Install Things ====================
# The default location for installation. Everything is placed in
# subdirectories of this directory. The default values for many of
# the variables below are expressed in terms of this one, so you may
# not need to change them. This is set with the --prefix option to
# `../configure'.
prefix=@prefix@
# Like `prefix', but used for architecture-specific files. This is
# set with the --exec-prefix option to `../configure'.
exec_prefix=@exec_prefix@
# Where to install Emacs and other binaries that people will want to
# run directly (like etags). This is set with the --bindir option
# to `../configure'.
bindir=@bindir@
# Where to install and expect executable files to be run by Emacs
# rather than directly by users, and other architecture-dependent
# data. ${archlibdir} is usually below this. This is set with the
# --libexecdir option to `../configure'.
libexecdir=@libexecdir@
# Directory for local state files for all programs.
localstatedir=@localstatedir@
# Where to find the source code. This is set by the configure
# script's `--srcdir' option. However, the value of ${srcdir} in
# this makefile is not identical to what was specified with --srcdir,
# since the variable here has `/lib-src' added at the end.
# We use $(srcdir) explicitly in dependencies so as not to depend on VPATH.
srcdir=@srcdir@
VPATH=@srcdir@
# The top-level source directory, also set by configure.
top_srcdir=@top_srcdir@
# ==================== Emacs-specific directories ====================
# These variables hold the values Emacs will actually use. They are
# based on the values of the standard Make variables above.
# Where to put executables to be run by Emacs rather than the user.
# This path usually includes the Emacs version and configuration name,
# so that multiple configurations for multiple versions of Emacs may
# be installed at once. This can be set with the --archlibdir option
# to `../configure'.
archlibdir=@archlibdir@
# ==================== Utility Programs for the Build =================
# ../configure figures out the correct values for these.
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
# By default, we uphold the dignity of our programs.
INSTALL_STRIP =
MKDIR_P = @MKDIR_P@
# ========================== Lists of Files ===========================
# Things that a user might actually run, which should be installed in bindir.
INSTALLABLES = runemacs${EXEEXT} addpm${EXEEXT}
# Things that Emacs runs internally, which should not be installed in bindir.
UTILITIES = cmdproxy${EXEEXT} ddeclient${EXEEXT}
# Things that Emacs runs during the build process.
DONT_INSTALL = addsection${EXEEXT}
# All files that are created by the linker, i.e., whose names end in ${EXEEXT}.
EXE_FILES = ${INSTALLABLES} ${UTILITIES} ${DONT_INSTALL}
# =========================== Configuration ===========================
# MS-Windows resource files and resource compiler
EMACSRES = @EMACSRES@
EMACS_MANIFEST = @EMACS_MANIFEST@
WINDRES = @WINDRES@
## Extra libraries to use when linking addpm.
LIBS_ADDPM = -lole32 -luuid
## Compilation and linking flags
BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \
$(WARN_CFLAGS) $(WERROR_CFLAGS) \
-I. -I${srcdir}
ALL_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS}
LINK_CFLAGS = ${BASE_CFLAGS} ${LDFLAGS} ${CFLAGS}
CPP_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLAGS}
all: ${EXE_FILES}
.PHONY: all
## Install the internal utilities. Until they are installed, we can
## just run them directly from nt/.
$(DESTDIR)${archlibdir}: all
@echo
@echo "Installing utilities run internally by Emacs."
umask 022; ${MKDIR_P} $(DESTDIR)${archlibdir}
if [ `cd $(DESTDIR)${archlibdir} && /bin/pwd` != `/bin/pwd` ]; then \
for file in ${UTILITIES}; do \
$(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file $(DESTDIR)${archlibdir}/$$file ; \
done ; \
fi
.PHONY: install uninstall mostlyclean clean distclean maintainer-clean
.PHONY: extraclean check tags
install: $(DESTDIR)${archlibdir}
@echo
@echo "Installing utilities for users to run."
umask 022; ${MKDIR_P} $(DESTDIR)${bindir}
for file in ${INSTALLABLES} ; do \
$(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} $(DESTDIR)${bindir}/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)'`${EXEEXT} ; \
done
uninstall:
for file in ${INSTALLABLES}; do \
rm -f $(DESTDIR)${bindir}/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)'`${EXEEXT} ; \
done
if [ -d $(DESTDIR)${archlibdir} ]; then \
(cd $(DESTDIR)${archlibdir} && rm -f ${UTILITIES}) \
fi
mostlyclean:
-rm -f core *.o
clean: mostlyclean
-rm -f ${EXE_FILES}
distclean: clean
-rm -f TAGS
-rm -f Makefile
maintainer-clean: distclean
true
extraclean: maintainer-clean
-rm -f *~ \#*
## Test the contents of the directory.
check:
@echo "We don't have any tests for the nt/ directory yet."
tags: TAGS
TAGS: ${EXE_FILES:${EXEEXT}=.c}
../lib-src/etags *.[ch]
## Build the programs
addsection${EXEEXT}: ${srcdir}/addsection.c
$(CC) ${ALL_CFLAGS} ${srcdir}/addsection.c -o addsection${EXEEXT}
addpm${EXEEXT}: ${srcdir}/addpm.c
$(CC) ${ALL_CFLAGS} ${srcdir}/addpm.c $(LIBS_ADDPM) -o addpm${EXEEXT}
ddeclient${EXEEXT}: ${srcdir}/ddeclient.c
$(CC) ${ALL_CFLAGS} ${srcdir}/ddeclient.c -o ddeclient${EXEEXT}
cmdproxy{EXEEXT}: ${srcdir}/cmdproxy.c
$(CC) ${ALL_CFLAGS} ${srcdir}/cmdproxy.c -o cmdproxy${EXEEXT}
runemacs{EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES)
$(CC) ${ALL_CFLAGS} ${srcdir}/runemacs.c $(EMACSRES) \
-o runemacs${EXEEXT}
emacs.res: ${srcdir}/emacs.rc ${srcdir}/emacs.ico ${srcdir}/$(EMACS_MANIFEST)
${WINDRES} -O coff -o emacs.res emacs.rc

View file

@ -260,8 +260,10 @@ W32_OBJ=@W32_OBJ@
W32_LIBS=@W32_LIBS@
## emacs.res if HAVE_W32
W32_RES=@W32_RES@
## If HAVE_W32, compiler arguments for including
EMACSRES = @EMACSRES@
## emacs-*.manifest if HAVE_W32
EMACS_MANIFEST = @EMACS_MANIFEST@
## If HAVE_W32 and CYGWIN, compiler arguments for including
## the resource file in the binary.
## XXX -Wl,-b -Wl,pe-i386 -Wl,emacs.res
W32_RES_LINK=@W32_RES_LINK@
@ -292,6 +294,14 @@ GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
RUN_TEMACS = `/bin/pwd`/temacs
## Invoke ../nt/addsection for MinGW, ":" elsewhere.
TEMACS_POST_LINK = @TEMACS_POST_LINK@
ADDSECTION = @ADDSECTION@
EMACS_HEAPSIZE = @EMACS_HEAPSIZE@
MINGW_TEMACS_POST_LINK = \
mv temacs$(EXEEXT) temacs.tmp; \
../nt/addsection temacs.tmp temacs$(EXEEXT) EMHEAP $(EMACS_HEAPSIZE)
UNEXEC_OBJ = @UNEXEC_OBJ@
CANNOT_DUMP=@CANNOT_DUMP@
@ -372,9 +382,9 @@ VMLIMIT_OBJ=@VMLIMIT_OBJ@
## ralloc.o if !SYSTEM_MALLOC && REL_ALLOC, else empty.
RALLOC_OBJ=@RALLOC_OBJ@
## Empty on Cygwin, lastfile.o elsewhere.
## Empty on Cygwin and MinGW, lastfile.o elsewhere.
PRE_ALLOC_OBJ=@PRE_ALLOC_OBJ@
## lastfile.o on Cygwin, empty elsewhere.
## lastfile.o on Cygwin and MinGW, empty elsewhere.
POST_ALLOC_OBJ=@POST_ALLOC_OBJ@
## List of object files that make-docfile should not be told about.
@ -382,7 +392,9 @@ otherobj= $(TERMCAP_OBJ) $(PRE_ALLOC_OBJ) $(GMALLOC_OBJ) $(RALLOC_OBJ) \
$(POST_ALLOC_OBJ) $(WIDGET_OBJ) $(LIBOBJS)
## All object files linked into temacs. $(VMLIMIT_OBJ) should be first.
ALLOBJS = $(VMLIMIT_OBJ) $(obj) $(otherobj)
## (On MinGW, firstfile.o should be before vm-limit.o.)
FIRSTFILE_OBJ=@FIRSTFILE_OBJ@
ALLOBJS = $(FIRSTFILE_OBJ) $(VMLIMIT_OBJ) $(obj) $(otherobj)
## Configure inserts the file lisp.mk at this point, defining $lisp.
@lisp_frag@
@ -411,7 +423,8 @@ $(leimdir)/leim-list.el: bootstrap-emacs$(EXEEXT)
## Strictly speaking, emacs does not depend directly on all of $lisp,
## since not all pieces are used on all platforms. But DOC depends
## on all of $lisp, and emacs depends on DOC, so it is ok to use $lisp here.
emacs$(EXEEXT): temacs$(EXEEXT) $(etc)/DOC $(lisp) $(leimdir)/leim-list.el
emacs$(EXEEXT): temacs$(EXEEXT) $(ADDSECTION) \
$(etc)/DOC $(lisp) $(leimdir)/leim-list.el
if test "$(CANNOT_DUMP)" = "yes"; then \
rm -f emacs$(EXEEXT); \
ln temacs$(EXEEXT) emacs$(EXEEXT); \
@ -463,10 +476,11 @@ $(lib)/libgnu.a: $(config_h)
cd $(lib) && $(MAKE) libgnu.a
temacs$(EXEEXT): stamp-oldxmenu $(ALLOBJS) \
$(lib)/libgnu.a $(W32_RES)
$(lib)/libgnu.a $(EMACSRES)
$(CC) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \
-o temacs $(ALLOBJS) $(lib)/libgnu.a $(LIBES) \
$(W32_RES_LINK)
$(TEMACS_POST_LINK)
test "$(CANNOT_DUMP)" = "yes" || \
test "X$(PAXCTL)" = X || $(PAXCTL) -r temacs$(EXEEXT)
@ -509,7 +523,7 @@ doc.o: buildobj.h
emacs.res: $(ntsource)/emacs.rc \
$(ntsource)/icons/emacs.ico \
$(ntsource)/emacs-x86.manifest
$(ntsource)/$(EMACS_MANIFEST)
$(WINDRES) -O COFF -o $@ $(ntsource)/emacs.rc
ns-app: emacs$(EXEEXT)