# HG changeset patch # User Andrew Innes # Date 968002629 0 # Node ID 1f87115b334a1d06e472e246cf935c1175086a89 # Parent cd1a81ef52d125c17e025c1c3f24c889d44853d8 (CFLAGS): No need for -D_ANONYMOUS_UNION -D_ANONYMOUS_STRUCT on compile line. (EMACS_EXTRA_C_FLAGS): No need for -DORDINARY_LINK. (ARCH_CFLAGS): Change optimization flags to -O2. (FOREACH, FORVAR, FORDO, ENDFOR): New definitions. (ARGQUOTE, DQUOTE): New defines. diff -r cd1a81ef52d1 -r 1f87115b334a nt/gmake.defs --- a/nt/gmake.defs Sun Sep 03 17:36:34 2000 +0000 +++ b/nt/gmake.defs Sun Sep 03 17:37:09 2000 +0000 @@ -1,220 +1,231 @@ -# -# Makefile definition file for building GNU Emacs on Windows NT -# -# 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 2, 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; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# Ensure 'all' is the default target -all: - -# NOTES -# -# I tried to force gmake to use the native shell for simplicity, by -# setting SHELL as below, but this didn't work reliably because of -# various case sensitivity niggles. Specifically, COMSPEC (which is in -# fact usually spelled ComSpec on NT, to make life difficult) typically -# references "cmd.exe" (on NT) when the file is actually called -# "CMD.EXE" on disk for hysterical raisons. As a result, GNU make -# thinks it doesn't exist (unless compiled with a switch to ignore -# case), and so doesn't change which shell it will invoke to execute -# commands. -# -# It would be possible, though very tedious using just gmake facilities, -# to convert the COMSPEC value to uppercase to solve this problem, but -# it isn't worth it. That is partly because, even when using the native -# shell, gmake tends to not be happy with backslashes in command -# strings. The obvious solution is to use forward slashes as much as -# possible, which can be made to work most of the time (putting -# filenames in quotes often helps), but there are still some internal -# cmd.exe commands like `del' and `copy' that won't work with them. -# Although it is possible to convert slashes to backslashes when -# necessary, gmake requires explicitly calling its subst function, which -# nmake does not understand). For this reason, it is simplest to -# mandate that rm and cp be available, so we can use Unix-format file -# names everywhere. (Fortunately both MS and GNU make, and the -# respective compilers, are happy with Unix-format names.) -# -# Since we cannot easily force the choice of a particular shell, we must -# make the effort to cope with whichever shell is being used. -# Fortunately, the only command we need to use that is shell specific is -# the testing of a file's existence for the purpose of working out when -# we are copying files to their original location. That particular -# requirement is abstracted easily enough. -# -# The only other problem area was the change of directory when running -# temacs to dump emacs.exe (where gmake doesn't support cd foo in any -# useful way), but that has been resolved by modifying the Windows -# unexec function slightly to not require the directory change while -# still allowing objects and binaries to be in subdirectories. - -# This doesn't work. -#SHELL:=$(COMSPEC) - -# Determine whether make is using sh or cmd/command as shell; cmd.exe -# will output "ECHO is on" when echo is given by itself, while sh will -# not produce any output. -sh_output := $(shell echo) -ifeq "$(findstring ECHO, $(sh_output))" "ECHO" -THE_SHELL = $(COMSPEC)$(ComSpec) -else -USING_SH = 1 -THE_SHELL = $(SHELL) -endif - -MAKEDIR = $(CURDIR) -ALL_DEPS = $^ -EMPTY = -SPACE = $(EMPTY) $(EMPTY) - -SUBSYSTEM_WINDOWS=-Wl,-subsystem,windows -SUBSYSTEM_CONSOLE=-Wl,-subsystem,console - -# INSTALL_DIR is the directory into which emacs will be installed. -# -ifndef INSTALL_DIR -INSTALL_DIR = $(MAKEDIR)/.. -endif - -# Determine the architecture we're running on. -# Define ARCH for our purposes; -# Define CPU for use by ntwin32.mak; -# Define CONFIG_H to the appropriate config.h for the system; -# -ifdef PROCESSOR_ARCHITECTURE -# We're on Windows NT -CPU = $(PROCESSOR_ARCHITECTURE) -CONFIG_H = config.nt -OS_TYPE = windowsnt - ifeq "$(PROCESSOR_ARCHITECTURE)" "x86" -ARCH = i386 -CPU = i386 - else - ifeq "$(PROCESSOR_ARCHITECTURE)" "MIPS" -ARCH = mips - else - ifeq "$(PROCESSOR_ARCHITECTURE)" "ALPHA" -ARCH = alpha - else - ifeq "$(PROCESSOR_ARCHITECTURE)" "PPC" -ARCH = ppc - else -error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)" - endif - endif - endif - endif -else -# We're on Windows 95 -ARCH = i386 -CPU = i386 -CONFIG_H = config.nt -OS_TYPE = windows95 -endif - -AR = ar -rsc -AR_OUT = -CC = gcc -CC_OUT = -o$(SPACE) -LINK = gcc -LINK_OUT = -o$(SPACE) -RC = windres -O coff -RC_OUT = -o$(SPACE) -RC_INCLUDE = --include-dir$(SPACE) - -libc = -baselibs = -O = o -A = a - -BASE_LIBS = $(libc) $(baselibs) - -ADVAPI32 = -ladvapi32 -COMDLG32 = -lcomdlg32 -GDI32 = -lgdi32 -MPR = -lmpr -SHELL32 = -lshell32 -USER32 = -luser32 -WSOCK32 = -lwsock32 - -ifdef NOOPT -DEBUG_CFLAGS = -DEMACSDEBUG -else -DEBUG_CFLAGS = -endif -CFLAGS = -I. -DWIN32_LEAN_AND_MEAN $(ARCH_CFLAGS) -D$(ARCH) \ - -D_CRTAPI1=_cdecl -D_ANONYMOUS_UNION -D_ANONYMOUS_STRUCT \ - $(DEBUG_CFLAGS) $(USER_CFLAGS) $(LOCAL_FLAGS) -EMACS_EXTRA_C_FLAGS = -DUSE_CRT_DLL=1 -DORDINARY_LINK=1 - -# see comments in allocate_heap in w32heap.c before changing any of the -# -stack, -heap, or -image-base settings. -TEMACS_EXTRA_LINK = -Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -g $(SUBSYSTEM_CONSOLE) -Wl,-entry,__start -Wl,-Map,$(BLD)/temacs.map - -ifdef NOOPT -OBJDIR = oo -else -OBJDIR = oo-spd -endif -$(OBJDIR):; -mkdir "$(OBJDIR)" -BLD = $(OBJDIR)/$(ARCH) -$(BLD): $(OBJDIR) - -mkdir "$(BLD)" - -CP = cp -f -CP_DIR = cp -rf -DEL = rm -DEL_TREE = rm -r -ifdef USING_SH -IFNOTSAMEDIR = if [ ! -s ../same-dir.tst ] ; then -ENDIF = ; fi -else -IFNOTSAMEDIR = if not exist ../same-dir.tst -ENDIF = -endif - -# The location of the icon file -EMACS_ICON_PATH = ../nt/emacs.ico - -ifdef NODEBUG -DEBUG_FLAG = -else -DEBUG_FLAG = -g -endif - -ifdef NOCYGWIN -NOCYGWIN = -mno-cygwin -endif - -ifeq "$(ARCH)" "i386" -ifdef NOOPT -ARCH_CFLAGS = -D_X86_=1 -c $(DEBUG_FLAG) $(NOCYGWIN) -else -ARCH_CFLAGS = -D_X86_=1 -c $(DEBUG_FLAG) $(NOCYGWIN) -O -Os \ - -mcpu=i686 -fno-exceptions -fbuiltins \ - # -mpreferred-stack-boundary=2 \ - # -finline-functions \ - # -fomit-frame-pointer -endif -ARCH_LDFLAGS = $(SYS_LDFLAGS) -else -ERROR Unknown architecture type "$(ARCH)". -endif - -LINK_FLAGS = $(ARCH_LDFLAGS) $(NOCYGWIN) $(USER_LDFLAGS) - -.DEFAULT: - -$(BLD)/%.o: %.c - $(CC) $(CFLAGS) $(CC_OUT)$@ $< +# +# Makefile definition file for building GNU Emacs on Windows NT +# +# 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 2, 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; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# Ensure 'all' is the default target +all: + +# NOTES +# +# I tried to force gmake to use the native shell for simplicity, by +# setting SHELL as below, but this didn't work reliably because of +# various case sensitivity niggles. Specifically, COMSPEC (which is in +# fact usually spelled ComSpec on NT, to make life difficult) typically +# references "cmd.exe" (on NT) when the file is actually called +# "CMD.EXE" on disk for hysterical raisons. As a result, GNU make +# thinks it doesn't exist (unless compiled with a switch to ignore +# case), and so doesn't change which shell it will invoke to execute +# commands. +# +# It would be possible, though very tedious using just gmake facilities, +# to convert the COMSPEC value to uppercase to solve this problem, but +# it isn't worth it. That is partly because, even when using the native +# shell, gmake tends to not be happy with backslashes in command +# strings. The obvious solution is to use forward slashes as much as +# possible, which can be made to work most of the time (putting +# filenames in quotes often helps), but there are still some internal +# cmd.exe commands like `del' and `copy' that won't work with them. +# Although it is possible to convert slashes to backslashes when +# necessary, gmake requires explicitly calling its subst function, which +# nmake does not understand). For this reason, it is simplest to +# mandate that rm and cp be available, so we can use Unix-format file +# names everywhere. (Fortunately both MS and GNU make, and the +# respective compilers, are happy with Unix-format names.) +# +# Since we cannot easily force the choice of a particular shell, we must +# make the effort to cope with whichever shell is being used. +# Fortunately, the only command we need to use that is shell specific is +# the testing of a file's existence for the purpose of working out when +# we are copying files to their original location. That particular +# requirement is abstracted easily enough. +# +# The only other problem area was the change of directory when running +# temacs to dump emacs.exe (where gmake doesn't support cd foo in any +# useful way), but that has been resolved by modifying the Windows +# unexec function slightly to not require the directory change while +# still allowing objects and binaries to be in subdirectories. + +# This doesn't work. +#SHELL:=$(COMSPEC) + +# Determine whether make is using sh or cmd/command as shell; cmd.exe +# will output "ECHO is on" when echo is given by itself, while sh will +# not produce any output. +sh_output := $(shell echo) +ifeq "$(findstring ECHO, $(sh_output))" "ECHO" +THE_SHELL = $(COMSPEC)$(ComSpec) +else +USING_SH = 1 +THE_SHELL = $(SHELL) +endif + +MAKEDIR = $(CURDIR) +ALL_DEPS = $^ +EMPTY = +SPACE = $(EMPTY) $(EMPTY) + +SUBSYSTEM_WINDOWS=-Wl,-subsystem,windows +SUBSYSTEM_CONSOLE=-Wl,-subsystem,console + +# INSTALL_DIR is the directory into which emacs will be installed. +# +ifndef INSTALL_DIR +INSTALL_DIR = $(MAKEDIR)/.. +endif + +# Determine the architecture we're running on. +# Define ARCH for our purposes; +# Define CPU for use by ntwin32.mak; +# Define CONFIG_H to the appropriate config.h for the system; +# +ifdef PROCESSOR_ARCHITECTURE +# We're on Windows NT +CPU = $(PROCESSOR_ARCHITECTURE) +CONFIG_H = config.nt +OS_TYPE = windowsnt + ifeq "$(PROCESSOR_ARCHITECTURE)" "x86" +ARCH = i386 +CPU = i386 + else + ifeq "$(PROCESSOR_ARCHITECTURE)" "MIPS" +ARCH = mips + else + ifeq "$(PROCESSOR_ARCHITECTURE)" "ALPHA" +ARCH = alpha + else + ifeq "$(PROCESSOR_ARCHITECTURE)" "PPC" +ARCH = ppc + else +error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)" + endif + endif + endif + endif +else +# We're on Windows 95 +ARCH = i386 +CPU = i386 +CONFIG_H = config.nt +OS_TYPE = windows95 +endif + +AR = ar -rsc +AR_OUT = +CC = gcc +CC_OUT = -o$(SPACE) +LINK = gcc +LINK_OUT = -o$(SPACE) +RC = windres -O coff +RC_OUT = -o$(SPACE) +RC_INCLUDE = --include-dir$(SPACE) + +libc = +baselibs = +O = o +A = a + +BASE_LIBS = $(libc) $(baselibs) + +ADVAPI32 = -ladvapi32 +COMDLG32 = -lcomdlg32 +GDI32 = -lgdi32 +MPR = -lmpr +SHELL32 = -lshell32 +USER32 = -luser32 +WSOCK32 = -lwsock32 + +ifdef NOOPT +DEBUG_CFLAGS = -DEMACSDEBUG +else +DEBUG_CFLAGS = +endif +CFLAGS = -I. -DWIN32_LEAN_AND_MEAN $(ARCH_CFLAGS) -D$(ARCH) \ + -D_CRTAPI1=_cdecl \ + $(DEBUG_CFLAGS) $(USER_CFLAGS) $(LOCAL_FLAGS) +EMACS_EXTRA_C_FLAGS = -DUSE_CRT_DLL=1 + +# see comments in allocate_heap in w32heap.c before changing any of the +# -stack, -heap, or -image-base settings. +TEMACS_EXTRA_LINK = -Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -g $(SUBSYSTEM_CONSOLE) -Wl,-entry,__start -Wl,-Map,$(BLD)/temacs.map + +ifdef NOOPT +OBJDIR = oo +else +OBJDIR = oo-spd +endif +$(OBJDIR):; -mkdir "$(OBJDIR)" +BLD = $(OBJDIR)/$(ARCH) +$(BLD): $(OBJDIR) + -mkdir "$(BLD)" + +CP = cp -f +CP_DIR = cp -rf +DEL = rm +DEL_TREE = rm -r +ifdef USING_SH +IFNOTSAMEDIR = if [ ! -s ../same-dir.tst ] ; then +FOREACH = for f in +FORVAR = $${f} +FORDO = ; do +ENDFOR = ; done +ENDIF = ; fi +ARGQUOTE = ' +DQUOTE = "" +else +IFNOTSAMEDIR = if not exist ../same-dir.tst +FOREACH = for %%f in ( +FORVAR = %%f +FORDO = ) do +ENDFOR = +ENDIF = +ARGQUOTE = " +DQUOTE = \" +endif + +# The location of the icon file +EMACS_ICON_PATH = ../nt/emacs.ico + +ifdef NODEBUG +DEBUG_FLAG = +else +DEBUG_FLAG = -g +endif + +ifdef NOCYGWIN +NOCYGWIN = -mno-cygwin +endif + +ifeq "$(ARCH)" "i386" +ifdef NOOPT +ARCH_CFLAGS = -D_X86_=1 -c $(DEBUG_FLAG) $(NOCYGWIN) +else +ARCH_CFLAGS = -D_X86_=1 -c $(DEBUG_FLAG) $(NOCYGWIN) -mcpu=i686 -O2 \ + # -fbuiltin \ + # -finline-functions \ + # -fomit-frame-pointer +endif +ARCH_LDFLAGS = $(SYS_LDFLAGS) +else +ERROR Unknown architecture type "$(ARCH)". +endif + +LINK_FLAGS = $(ARCH_LDFLAGS) $(NOCYGWIN) $(USER_LDFLAGS) + +.DEFAULT: + +$(BLD)/%.o: %.c + $(CC) $(CFLAGS) $(CC_OUT)$@ $<