emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

A few Windows build fixes


From: Hannu Koivisto
Subject: A few Windows build fixes
Date: Mon, 29 Aug 2011 01:46:59 +0300
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.3 (gnu/linux)

Greetings,

I wanted to build the latest bzr trunk version of Emacs for Windows
but soon realized that the makefiles and the configure process have
lots of problems.

I'm attaching four patches that fix enough of the problems that
building and installing with a modern Cygwin (I'm talking about
building and installing a native Windows binary, not a Cygwin one)
works now.  Mingw/MSYS remains broken (I started to fix that too
but got disgusted by MSYS' automatic path conversion that cannot
even be toggled off, and decided not to continue).  Visual
C++/nmake combination is broken too but the first problems I faced
were not related to the build system but Visual Studio .NET 2003's
inability to compile the code (some missing types, use of inline
keyword).  Perhaps later versions work better.  I'll try that when
I get my hands on one.

The patches were generated with git format-patch (and thus include
commit messages that provide information about what was done) but
they can be applied with "patch -p1" to a Bazaar repository.  They
are as attachments because some of them change line endings from
CRLF to LF and I'm hoping to avoid any screwups with that.  In case
you find them useful, note that I haven't signed papers with FSF
(I'm hoping I don't have to, as the majority of the changes are
rather systematic search&replace operations).

Hannu

>From 90258756a199738e4cb7ae406893827d9ef83cc3 Mon Sep 17 00:00:00 2001
From: Hannu Koivisto <address@hidden>
Date: Sun, 28 Aug 2011 23:00:00 +0300
Subject: [PATCH 1/4] NT build: support modern Cygwins where gcc is a symlink

---
 nt/configure.bat |   35 ++++++++++++++++++++++-------------
 1 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/nt/configure.bat b/nt/configure.bat
index 45d966f..9db688f 100755
--- a/nt/configure.bat
+++ b/nt/configure.bat
@@ -89,6 +89,7 @@ echo. character by enclosing them in quotes will not be 
supported.
 
 rem ----------------------------------------------------------------------
 rem   Default settings.
+set gccbin=gcc
 set prefix=
 set nodebug=N
 set noopt=N
@@ -379,6 +380,14 @@ echo main(){} >junk.c
 gcc -c junk.c
 if exist junk.o goto checkgcc
 
+gcc-3 -c junk.c
+set gccbin=gcc-3
+if exist junk.o goto checkgcc
+
+gcc-4 -c junk.c
+set gccbin=gcc-4
+if exist junk.o goto checkgcc
+
 echo Checking whether 'cl' is available...
 cl -nologo -c junk.c
 if exist junk.obj goto clOK
@@ -394,11 +403,11 @@ if (%nocygwin%) == (Y) goto chkapiN
 echo Checking whether gcc requires '-mno-cygwin'...
 echo #include "cygwin/version.h" >junk.c
 echo main(){} >>junk.c
-echo gcc -c junk.c >>config.log
-gcc -c junk.c >>config.log 2>&1
+echo %gccbin% -c junk.c >>config.log
+%gccbin% -c junk.c >>config.log 2>&1
 if not exist junk.o goto chkapi
-echo gcc -mno-cygwin -c junk.c >>config.log
-gcc -mno-cygwin -c junk.c >>config.log 2>&1
+echo %gccbin% -mno-cygwin -c junk.c >>config.log
+%gccbin% -mno-cygwin -c junk.c >>config.log 2>&1
 if exist junk.o set nocygwin=Y
 
 :chkapi
@@ -430,10 +439,10 @@ set cf=%usercflags% -mno-cygwin
 
 :chkapi2
 echo on
-gcc %cf% -c junk.c
+%gccbin% %cf% -c junk.c
 @echo off
address@hidden gcc %cf% -c junk.c >>config.log
-gcc %cf% -c junk.c >>config.log 2>&1
address@hidden %gccbin% %cf% -c junk.c >>config.log
+%gccbin% %cf% -c junk.c >>config.log 2>&1
 set cf=
 if exist junk.o goto chkuser
 echo The failed program was: >>config.log
@@ -445,8 +454,8 @@ rm -f junk.o
 echo int main (int argc, char *argv[]) {>junk.c
 echo char *usercflags = "%escusercflags%";>>junk.c
 echo }>>junk.c
-echo gcc -Werror -c junk.c >>config.log
-gcc -Werror -c junk.c >>config.log 2>&1
+echo %gccbin% -Werror -c junk.c >>config.log
+%gccbin% -Werror -c junk.c >>config.log 2>&1
 if exist junk.o goto gccOk
 echo.
 echo Error in --cflags argument: %usercflags%
@@ -471,8 +480,8 @@ rm -f junk.c junk.o
 Rem It is not clear what GCC version began supporting -mtune
 Rem and pentium4 on x86, so check this explicitly.
 echo main(){} >junk.c
-echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
-gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
+echo %gccbin% -c -O2 -mtune=pentium4 junk.c >>config.log
+%gccbin% -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
 if not errorlevel 1 goto gccMtuneOk
 echo The failed program was: >>config.log
 type junk.c >>config.log
@@ -488,8 +497,8 @@ rm -f junk.c junk.o
 :gccdebug
 rem Check for DWARF-2 debug info support, else default to stabs
 echo main(){} >junk.c
-echo gcc -c -gdwarf-2 -g3 junk.c >>config.log
-gcc -c -gdwarf-2 -g3 junk.c >>config.log 2>&1
+echo %gccbin% -c -gdwarf-2 -g3 junk.c >>config.log
+%gccbin% -c -gdwarf-2 -g3 junk.c >>config.log 2>&1
 if not errorlevel 1 goto gccdwarf
 echo The failed program was: >>config.log
 type junk.c >>config.log
-- 
1.7.7.rc0

>From 4f6735c28b423556e61e9af85f9683aa384d8237 Mon Sep 17 00:00:00 2001
From: Hannu Koivisto <address@hidden>
Date: Sun, 28 Aug 2011 23:00:00 +0300
Subject: [PATCH 2/4] NT build: ensure GNU make makefiles don't have CRLF line
 ends

---
 nt/configure.bat   |    2 +
 nt/makefile.w32-in |  902 ++++++++++++++++++++++++++--------------------------
 2 files changed, 451 insertions(+), 453 deletions(-)

diff --git a/nt/configure.bat b/nt/configure.bat
index 9db688f..db57661 100755
--- a/nt/configure.bat
+++ b/nt/configure.bat
@@ -774,6 +774,8 @@ if "(%HAVE_RSVG%)" == "(1)" echo #define HAVE_RSVG 1 
>>config.tmp
 
 echo /* End of settings from configure.bat.  */ >>config.tmp
 
+if %MAKECMD% == gmake dos2unix config.tmp config.settings
+
 Rem See if fc.exe returns a meaningful exit status.  If it does, we
 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
 Rem since this forces recompilation of every source file.
diff --git a/nt/makefile.w32-in b/nt/makefile.w32-in
index 31ca314..05ce4eb 100644
--- a/nt/makefile.w32-in
+++ b/nt/makefile.w32-in
@@ -1,453 +1,449 @@
-# -*- Makefile -*- for GNU Emacs on the Microsoft W32 API.
-# Copyright (C) 2000-2011 Free Software Foundation, Inc.
-#
-# Top level makefile for building GNU Emacs on Windows NT
-#
-# 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/>.
-
-
-# FIXME: This file uses DOS EOLs.  Convert to Unix after 22.1 is out
-#        (and remove or replace this comment).
-
-VERSION                = 24.0.50
-
-TMP_DIST_DIR   = emacs-$(VERSION)
-
-TRES           = $(BLD)/emacs.res
-CLIENTRES      = $(BLD)/emacsclient.res
-
-XMFLAGS                =
-
-ALL            = addpm ddeclient runemacs cmdproxy addsection preprep
-
-.PHONY: $(ALL)
-
-
-addpm:           stamp_BLD $(BLD)/addpm.exe
-$(BLD)/addpm.exe: $(BLD)/addpm.$(O)
-                 $(LINK) $(LINK_OUT)$@ \
-                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) \
-                 $(USER32) $(OLE32) $(UUID) $(SHELL32)
-
-ddeclient:       stamp_BLD $(BLD)/ddeclient.exe
-$(BLD)/ddeclient.exe: $(BLD)/ddeclient.$(O)
-                 $(LINK) $(LINK_OUT)$@ \
-                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)
-
-cmdproxy:        stamp_BLD $(BLD)/cmdproxy.exe
-$(BLD)/cmdproxy.exe: $(BLD)/cmdproxy.$(O)
-                 $(LINK) $(LINK_OUT)$@ \
-                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(USER32)
-
-addsection:      stamp_BLD $(BLD)/addsection.exe
-$(BLD)/addsection.exe: $(BLD)/addsection.$(O)
-                 $(LINK) $(LINK_OUT)$@ \
-                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(USER32)
-
-preprep:         stamp_BLD $(BLD)/preprep.exe
-$(BLD)/preprep.exe: $(BLD)/preprep.$(O)
-                 $(LINK) $(LINK_OUT)$@ \
-                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS)
-
-#
-# The resource file.  NT 3.10 requires the use of cvtres; even though
-# it is not necessary on later versions, it is still ok to use it.
-#
-$(TRES):       emacs.rc icons/emacs.ico emacs.manifest stamp_BLD
-               $(RC) $(RC_OUT)$(TRES) emacs.rc
-
-$(CLIENTRES):  emacsclient.rc stamp_BLD
-               $(RC) $(RC_OUT)$(CLIENTRES) emacsclient.rc
-
-runemacs:        stamp_BLD $(BLD)/runemacs.exe
-$(BLD)/runemacs.exe: $(BLD)/runemacs.$(O) $(TRES)
-                 $(LINK) $(LINK_OUT)$@ $(SUBSYSTEM_WINDOWS) \
-                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)
-
-which-sh:
-       @echo Using $(THE_SHELL) as shell.
-
-# These depend on stamp_BLD to make sure the $(BLD) directory is created
-# before the compilation begins, even if Make runs several commands
-# in parallel under "make -j".
-#
-$(BLD)/addpm.$(O) $(BLD)/ddeclient.$(O) $(BLD)/runemacs.$(O) 
$(BLD)/cmdproxy.$(O) $(BLD)/addsection.$(O) $(BLD)/preprep.$(O): stamp_BLD
-
-#
-# Build emacs
-#
-all:   which-sh stamp_BLD $(ALL) $(CLIENTRES) maybe-bootstrap 
all-other-dirs-$(MAKETYPE)
-
-all-other-dirs-nmake: addsection
-       cd ..\lib
-       $(MAKE) $(MFLAGS) all
-       cd ..\lib-src
-       $(MAKE) $(MFLAGS) all
-       cd ..\src
-       $(MAKE) $(MFLAGS) all
-       cd ..\lisp
-       $(MAKE) $(MFLAGS) all
-       cd ..\leim
-       $(MAKE) $(MFLAGS) all
-       cd ..\nt
-
-all-other-dirs-gmake: addsection
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib all
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src all
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src all
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp all
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim all
-
-recompile:     recompile-$(MAKETYPE)
-
-recompile-nmake:
-       cd ..\lisp
-       $(MAKE) $(MFLAGS) recompile
-       cd ..\nt
-
-recompile-gmake:
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp recompile
-
-#### Bootstrapping.
-
-### This is meant for Emacs maintainers only.  It first cleans the
-### lisp subdirectory, removing all compiled Lisp files.  Then a
-### special emacs executable is built from Lisp sources, which is then
-### used to compile Lisp files.  The last step is a "normal" make.
-
-maybe-bootstrap: maybe-bootstrap-$(SHELLTYPE)
-
-# dummy target to force other targets to be evaluated.
-doit:
-
-maybe-bootstrap-CMD:   doit
-       @echo .
-       @if not EXIST ..\lisp\abbrev.elc echo Essential Lisp files seem to be 
missing.  You should either
-       @if not EXIST ..\lisp\abbrev.elc echo do 'make bootstrap' or create 
'lisp/abbrev.elc' somehow
-       @echo .
-       @if not EXIST ..\lisp\abbrev.elc exit -1
-
-maybe-bootstrap-SH: doit
-       @if [ ! -f ../lisp/abbrev.elc ] ; then \
-         echo; \
-         echo "Essential Lisp files seem to be missing.  You should either"; \
-         echo "do \`make bootstrap' or create \`lisp/abbrev.elc' somehow.";  \
-         echo; \
-         exit -1; \
-       fi
-
-# Bootstrap depends on cmdproxy because some Lisp functions
-# loaded during bootstrap may need to run shell commands.
-bootstrap:     addsection cmdproxy bootstrap-$(MAKETYPE)
-       $(MAKE) $(MFLAGS) $(XMFLAGS) all
-
-bootstrap-nmake: addsection cmdproxy
-       cd ..\lisp
-       $(MAKE) $(MFLAGS) bootstrap-clean
-       cd ..\src
-       $(MAKE) $(MFLAGS) clean
-       cd ..\lib-src
-       $(MAKE) $(MFLAGS) clean make-docfile
-       cd ..\lib
-       $(MAKE) $(MFLAGS) clean all
-       cd ..\src
-       $(MAKE) $(MFLAGS) bootstrap
-       $(MAKE) $(MFLAGS) bootstrap-clean
-       cd ..\nt
-       $(CP) $(BLD)/cmdproxy.exe ../bin
-       cd ..\lisp
-       $(MAKE) $(MFLAGS) SHELL=$(SHELLTYPE) bootstrap
-       cd ..\lib-src
-       $(MAKE) $(MFLAGS) DOC
-       cd ..\nt
-
-bootstrap-gmake: addsection cmdproxy
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src clean make-docfile
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib clean all
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap-clean
-       $(CP) $(BLD)/cmdproxy.exe ../bin
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src DOC
-
-bootstrap-clean: bootstrap-clean-$(MAKETYPE)
-
-bootstrap-clean-nmake:
-       cd ..\src
-       $(MAKE) $(MFLAGS) bootstrap-clean
-       cd ..\lib
-       $(MAKE) $(MFLAGS) clean
-       cd ..\lisp
-       $(MAKE) $(MFLAGS) bootstrap-clean
-
-bootstrap-clean-gmake:
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean
-
-$(INSTALL_DIR):
-       - mkdir "$(INSTALL_DIR)"
-
-$(INSTALL_DIR)/bin: $(INSTALL_DIR)
-       - mkdir "$(INSTALL_DIR)/bin"
-
-#
-# Build and install emacs in INSTALL_DIR
-#
-.PHONY: install-bin install-shortcuts
-
-install: install-bin install-shortcuts
-
-install-bin: all $(INSTALL_DIR)/bin install-other-dirs-$(MAKETYPE)
-       - $(CP) $(BLD)/addpm.exe $(INSTALL_DIR)/bin
-       - $(CP) $(BLD)/ddeclient.exe $(INSTALL_DIR)/bin
-       - $(CP) $(BLD)/cmdproxy.exe $(INSTALL_DIR)/bin
-       - $(CP) $(BLD)/runemacs.exe $(INSTALL_DIR)/bin
-       - $(CP) README.W32 $(INSTALL_DIR)
-       - $(DEL) ../same-dir.tst
-       - $(DEL) $(INSTALL_DIR)/same-dir.tst
-       echo SameDirTest > "$(INSTALL_DIR)/same-dir.tst"
-       - mkdir "$(INSTALL_DIR)/etc"
-       - mkdir "$(INSTALL_DIR)/info"
-       - mkdir "$(INSTALL_DIR)/lock"
-       - mkdir "$(INSTALL_DIR)/data"
-       - mkdir "$(INSTALL_DIR)/site-lisp"
-       - mkdir "$(INSTALL_DIR)/etc/icons"
-       $(IFNOTSAMEDIR) $(CP) ../site-lisp/subdirs.el $(INSTALL_DIR)/site-lisp 
$(ENDIF)
-       $(IFNOTSAMEDIR) $(CP_DIR) ../etc $(INSTALL_DIR) $(ENDIF)
-       - $(CP_DIR) icons $(INSTALL_DIR)/etc
-       $(IFNOTSAMEDIR) $(CP_DIR) ../info $(INSTALL_DIR) $(ENDIF)
-       $(IFNOTSAMEDIR) $(CP) ../COPYING $(INSTALL_DIR) $(ENDIF)
-       - $(CP) ../COPYING $(INSTALL_DIR)/bin
-       - $(DEL) ../same-dir.tst
-       - $(DEL) $(INSTALL_DIR)/same-dir.tst
-
-install-other-dirs-nmake:
-       cd ..\lib-src
-       $(MAKE) $(MFLAGS) install
-       cd ..\src
-       $(MAKE) $(MFLAGS) install
-       cd ..\lisp
-       $(MAKE) $(MFLAGS) install
-       cd ..\leim
-       $(MAKE) $(MFLAGS) install
-       cd ..\nt
-
-install-other-dirs-gmake:
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src install
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src install
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp install
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim install
-
-install-shortcuts:
-       "$(INSTALL_DIR)/bin/addpm" -q
-
-dist: install-bin
-       mkdir $(TMP_DIST_DIR)
-       $(CP) "$(INSTALL_DIR)/BUGS" $(TMP_DIST_DIR)
-       $(CP) "$(INSTALL_DIR)/COPYING" $(TMP_DIST_DIR)
-       $(CP) "$(INSTALL_DIR)/README" $(TMP_DIST_DIR)
-       $(CP) "$(INSTALL_DIR)/README.W32" $(TMP_DIST_DIR)
-       $(CP) "$(INSTALL_DIR)/INSTALL" $(TMP_DIST_DIR)
-       $(CP_DIR) "$(INSTALL_DIR)/bin" $(TMP_DIST_DIR)
-       $(CP_DIR) "$(INSTALL_DIR)/etc" $(TMP_DIST_DIR)
-       $(CP_DIR) "$(INSTALL_DIR)/info" $(TMP_DIST_DIR)
-       $(CP_DIR) "$(INSTALL_DIR)/lisp" $(TMP_DIST_DIR)
-       $(CP_DIR) "$(INSTALL_DIR)/leim" $(TMP_DIST_DIR)
-       $(CP_DIR) "$(INSTALL_DIR)/site-lisp" $(TMP_DIST_DIR)
-       $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin
-       $(COMSPEC)$(ComSpec) /c $(ARGQUOTE)zipdist.bat $(VERSION)$(ARGQUOTE)
-       $(DEL_TREE) $(TMP_DIST_DIR)
-
-force-info:
-# Note that doc/emacs/makefile knows how to
-# put the info files in $(infodir),
-# so we can do ok running make in the build dir.
-info: force-info info-$(MAKETYPE)
-
-info-nmake:
-       cd ..\doc\emacs
-       $(MAKE) $(MFLAGS) info
-       cd ..\misc
-       $(MAKE) $(MFLAGS) info
-       cd ..\lispref
-       $(MAKE) $(MFLAGS) info
-       cd ..\lispintro
-       $(MAKE) $(MFLAGS) info
-       cd $(MAKEDIR)
-
-info-gmake:
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs info
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc info
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref info
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro info
-#
-# Maintenance
-#
-clean: clean-other-dirs-$(MAKETYPE)
-       - $(DEL) $(COMPILER_TEMP_FILES)
-       - $(DEL_TREE) $(OBJDIR)
-       - $(DEL) stamp_BLD
-       - $(DEL) ../etc/DOC ../etc/DOC-X
-
-clean-other-dirs-nmake:
-       cd ..\lib
-       $(MAKE) $(MFLAGS) clean
-       cd ..\lib-src
-       $(MAKE) $(MFLAGS) clean
-       cd ..\src
-       $(MAKE) $(MFLAGS) clean
-       cd ..\doc\lispintro
-       $(MAKE) $(MFLAGS) clean
-       cd ..\doc\lispref
-       $(MAKE) $(MFLAGS) clean
-       cd ..\leim
-       $(MAKE) $(MFLAGS) clean
-       cd ..\doc\emacs
-       $(MAKE) $(MFLAGS) clean
-       cd ..\doc\misc
-       $(MAKE) $(MFLAGS) clean
-       cd ..\nt
-
-clean-other-dirs-gmake:
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref clean
-
-cleanall-other-dirs-nmake:
-       cd ..\lib
-       $(MAKE) $(MFLAGS) cleanall
-       cd ..\lib-src
-       $(MAKE) $(MFLAGS) cleanall
-       cd ..\src
-       $(MAKE) $(MFLAGS) cleanall
-       cd ..\nt
-
-cleanall-other-dirs-gmake:
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib cleanall
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src cleanall
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src cleanall
-
-# We used to delete *~ here, but that might inadvertently remove
-# precious files if it happens to match their short 8+3 aliases.
-cleanall: clean cleanall-other-dirs-$(MAKETYPE)
-        - $(DEL_TREE) obj
-        - $(DEL_TREE) obj-spd
-        - $(DEL_TREE) oo
-        - $(DEL_TREE) oo-spd
-
-top-distclean:
-       - $(DEL) $(COMPILER_TEMP_FILES)
-       - $(DEL_TREE) obj
-       - $(DEL_TREE) obj-spd
-       - $(DEL_TREE) oo
-       - $(DEL_TREE) oo-spd
-       - $(DEL) stamp_BLD
-       - $(DEL) ../etc/DOC ../etc/DOC-X
-       - $(DEL) config.log Makefile
-       - $(DEL) ../README.W32
-
-distclean: distclean-other-dirs-$(MAKETYPE) top-distclean
-
-distclean-other-dirs-nmake:
-       cd ..\lib
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\lib-src
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\src
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\lisp
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\leim
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\doc\emacs
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\doc\misc
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\doc\lispintro
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\doc\lispref
-       $(MAKE) $(MFLAGS) distclean
-       cd ..\nt
-
-distclean-other-dirs-gmake:
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib distclean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src distclean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src distclean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp distclean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim distclean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs distclean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc distclean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro distclean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref distclean
-
-maintainer-clean: maintainer-clean-other-dirs-$(MAKETYPE) top-distclean
-
-maintainer-clean-other-dirs-nmake:
-       cd ..\lib
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\lib-src
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\src
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\lisp
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\leim
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\doc\emacs
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\doc\misc
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\doc\lispintro
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\doc\lispref
-       $(MAKE) $(MFLAGS) maintainer-clean
-       cd ..\nt
-
-maintainer-clean-other-dirs-gmake:
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib maintainer-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src maintainer-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src maintainer-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp maintainer-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim maintainer-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs maintainer-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc maintainer-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro maintainer-clean
-       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref maintainer-clean
-
-realclean: cleanall
-       - $(DEL_TREE) ../bin
-
-TAGS: TAGS-$(MAKETYPE)
-
-frc:
-TAGS-gmake: frc
-       ../lib-src/$(BLD)/etags $(CURDIR)/*.c
-       $(MAKE) $(MFLAGS) -C ../src TAGS TAGS-LISP
-       $(MAKE) $(MFLAGS) -C ../lib-src TAGS
-       $(MAKE) $(MFLAGS) -C ../lib TAGS
-
-TAGS-nmake:
-       echo This target is not supported with NMake
-
-.PHONY: frc
+# -*- Makefile -*- for GNU Emacs on the Microsoft W32 API.
+# Copyright (C) 2000-2011 Free Software Foundation, Inc.
+#
+# Top level makefile for building GNU Emacs on Windows NT
+#
+# 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/>.
+
+VERSION                = 24.0.50
+
+TMP_DIST_DIR   = emacs-$(VERSION)
+
+TRES           = $(BLD)/emacs.res
+CLIENTRES      = $(BLD)/emacsclient.res
+
+XMFLAGS                =
+
+ALL            = addpm ddeclient runemacs cmdproxy addsection preprep
+
+.PHONY: $(ALL)
+
+
+addpm:           stamp_BLD $(BLD)/addpm.exe
+$(BLD)/addpm.exe: $(BLD)/addpm.$(O)
+                 $(LINK) $(LINK_OUT)$@ \
+                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) \
+                 $(USER32) $(OLE32) $(UUID) $(SHELL32)
+
+ddeclient:       stamp_BLD $(BLD)/ddeclient.exe
+$(BLD)/ddeclient.exe: $(BLD)/ddeclient.$(O)
+                 $(LINK) $(LINK_OUT)$@ \
+                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)
+
+cmdproxy:        stamp_BLD $(BLD)/cmdproxy.exe
+$(BLD)/cmdproxy.exe: $(BLD)/cmdproxy.$(O)
+                 $(LINK) $(LINK_OUT)$@ \
+                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(USER32)
+
+addsection:      stamp_BLD $(BLD)/addsection.exe
+$(BLD)/addsection.exe: $(BLD)/addsection.$(O)
+                 $(LINK) $(LINK_OUT)$@ \
+                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(USER32)
+
+preprep:         stamp_BLD $(BLD)/preprep.exe
+$(BLD)/preprep.exe: $(BLD)/preprep.$(O)
+                 $(LINK) $(LINK_OUT)$@ \
+                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS)
+
+#
+# The resource file.  NT 3.10 requires the use of cvtres; even though
+# it is not necessary on later versions, it is still ok to use it.
+#
+$(TRES):       emacs.rc icons/emacs.ico emacs.manifest stamp_BLD
+               $(RC) $(RC_OUT)$(TRES) emacs.rc || $(RC) $(RC_OUT)$(TRES) 
emacs22.rc
+
+$(CLIENTRES):  emacsclient.rc stamp_BLD
+               $(RC) $(RC_OUT)$(CLIENTRES) emacsclient.rc || $(RC) 
$(RC_OUT)$(CLIENTRES) emacsclient22.rc
+
+runemacs:        stamp_BLD $(BLD)/runemacs.exe
+$(BLD)/runemacs.exe: $(BLD)/runemacs.$(O) $(TRES)
+                 $(LINK) $(LINK_OUT)$@ $(SUBSYSTEM_WINDOWS) \
+                 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)
+
+which-sh:
+       @echo Using $(THE_SHELL) as shell.
+
+# These depend on stamp_BLD to make sure the $(BLD) directory is created
+# before the compilation begins, even if Make runs several commands
+# in parallel under "make -j".
+#
+$(BLD)/addpm.$(O) $(BLD)/ddeclient.$(O) $(BLD)/runemacs.$(O) 
$(BLD)/cmdproxy.$(O) $(BLD)/addsection.$(O) $(BLD)/preprep.$(O): stamp_BLD
+
+#
+# Build emacs
+#
+all:   which-sh stamp_BLD $(ALL) $(CLIENTRES) maybe-bootstrap 
all-other-dirs-$(MAKETYPE)
+
+all-other-dirs-nmake: addsection
+       cd ..\lib
+       $(MAKE) $(MFLAGS) all
+       cd ..\lib-src
+       $(MAKE) $(MFLAGS) all
+       cd ..\src
+       $(MAKE) $(MFLAGS) all
+       cd ..\lisp
+       $(MAKE) $(MFLAGS) all
+       cd ..\leim
+       $(MAKE) $(MFLAGS) all
+       cd ..\nt
+
+all-other-dirs-gmake: addsection
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib all
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src all
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src all
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp all
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim all
+
+recompile:     recompile-$(MAKETYPE)
+
+recompile-nmake:
+       cd ..\lisp
+       $(MAKE) $(MFLAGS) recompile
+       cd ..\nt
+
+recompile-gmake:
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp recompile
+
+#### Bootstrapping.
+
+### This is meant for Emacs maintainers only.  It first cleans the
+### lisp subdirectory, removing all compiled Lisp files.  Then a
+### special emacs executable is built from Lisp sources, which is then
+### used to compile Lisp files.  The last step is a "normal" make.
+
+maybe-bootstrap: maybe-bootstrap-$(SHELLTYPE)
+
+# dummy target to force other targets to be evaluated.
+doit:
+
+maybe-bootstrap-CMD:   doit
+       @echo .
+       @if not EXIST ..\lisp\abbrev.elc echo Essential Lisp files seem to be 
missing.  You should either
+       @if not EXIST ..\lisp\abbrev.elc echo do 'make bootstrap' or create 
'lisp/abbrev.elc' somehow
+       @echo .
+       @if not EXIST ..\lisp\abbrev.elc exit -1
+
+maybe-bootstrap-SH: doit
+       @if [ ! -f ../lisp/abbrev.elc ] ; then \
+         echo; \
+         echo "Essential Lisp files seem to be missing.  You should either"; \
+         echo "do \`make bootstrap' or create \`lisp/abbrev.elc' somehow.";  \
+         echo; \
+         exit -1; \
+       fi
+
+# Bootstrap depends on cmdproxy because some Lisp functions
+# loaded during bootstrap may need to run shell commands.
+bootstrap:     addsection cmdproxy bootstrap-$(MAKETYPE)
+       $(MAKE) $(MFLAGS) $(XMFLAGS) all
+
+bootstrap-nmake: addsection cmdproxy
+       cd ..\lisp
+       $(MAKE) $(MFLAGS) bootstrap-clean
+       cd ..\src
+       $(MAKE) $(MFLAGS) clean
+       cd ..\lib-src
+       $(MAKE) $(MFLAGS) clean make-docfile
+       cd ..\lib
+       $(MAKE) $(MFLAGS) clean all
+       cd ..\src
+       $(MAKE) $(MFLAGS) bootstrap
+       $(MAKE) $(MFLAGS) bootstrap-clean
+       cd ..\nt
+       $(CP) $(BLD)/cmdproxy.exe ../bin
+       cd ..\lisp
+       $(MAKE) $(MFLAGS) SHELL=$(SHELLTYPE) bootstrap
+       cd ..\lib-src
+       $(MAKE) $(MFLAGS) DOC
+       cd ..\nt
+
+bootstrap-gmake: addsection cmdproxy
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src clean make-docfile
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib clean all
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap-clean
+       $(CP) $(BLD)/cmdproxy.exe ../bin
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src DOC
+
+bootstrap-clean: bootstrap-clean-$(MAKETYPE)
+
+bootstrap-clean-nmake:
+       cd ..\src
+       $(MAKE) $(MFLAGS) bootstrap-clean
+       cd ..\lib
+       $(MAKE) $(MFLAGS) clean
+       cd ..\lisp
+       $(MAKE) $(MFLAGS) bootstrap-clean
+
+bootstrap-clean-gmake:
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean
+
+$(INSTALL_DIR):
+       - mkdir "$(INSTALL_DIR)"
+
+$(INSTALL_DIR)/bin: $(INSTALL_DIR)
+       - mkdir "$(INSTALL_DIR)/bin"
+
+#
+# Build and install emacs in INSTALL_DIR
+#
+.PHONY: install-bin install-shortcuts
+
+install: install-bin install-shortcuts
+
+install-bin: all $(INSTALL_DIR)/bin install-other-dirs-$(MAKETYPE)
+       - $(CP) $(BLD)/addpm.exe $(INSTALL_DIR)/bin
+       - $(CP) $(BLD)/ddeclient.exe $(INSTALL_DIR)/bin
+       - $(CP) $(BLD)/cmdproxy.exe $(INSTALL_DIR)/bin
+       - $(CP) $(BLD)/runemacs.exe $(INSTALL_DIR)/bin
+       - $(CP) README.W32 $(INSTALL_DIR)
+       - $(DEL) ../same-dir.tst
+       - $(DEL) $(INSTALL_DIR)/same-dir.tst
+       echo SameDirTest > "$(INSTALL_DIR)/same-dir.tst"
+       - mkdir "$(INSTALL_DIR)/etc"
+       - mkdir "$(INSTALL_DIR)/info"
+       - mkdir "$(INSTALL_DIR)/lock"
+       - mkdir "$(INSTALL_DIR)/data"
+       - mkdir "$(INSTALL_DIR)/site-lisp"
+       - mkdir "$(INSTALL_DIR)/etc/icons"
+       $(IFNOTSAMEDIR) $(CP) ../site-lisp/subdirs.el $(INSTALL_DIR)/site-lisp 
$(ENDIF)
+       $(IFNOTSAMEDIR) $(CP_DIR) ../etc $(INSTALL_DIR) $(ENDIF)
+       - $(CP_DIR) icons $(INSTALL_DIR)/etc
+       $(IFNOTSAMEDIR) $(CP_DIR) ../info $(INSTALL_DIR) $(ENDIF)
+       $(IFNOTSAMEDIR) $(CP) ../COPYING $(INSTALL_DIR) $(ENDIF)
+       - $(CP) ../COPYING $(INSTALL_DIR)/bin
+       - $(DEL) ../same-dir.tst
+       - $(DEL) $(INSTALL_DIR)/same-dir.tst
+
+install-other-dirs-nmake:
+       cd ..\lib-src
+       $(MAKE) $(MFLAGS) install
+       cd ..\src
+       $(MAKE) $(MFLAGS) install
+       cd ..\lisp
+       $(MAKE) $(MFLAGS) install
+       cd ..\leim
+       $(MAKE) $(MFLAGS) install
+       cd ..\nt
+
+install-other-dirs-gmake:
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src install
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src install
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp install
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim install
+
+install-shortcuts:
+       "$(INSTALL_DIR)/bin/addpm" -q
+
+dist: install-bin
+       mkdir $(TMP_DIST_DIR)
+       $(CP) "$(INSTALL_DIR)/BUGS" $(TMP_DIST_DIR)
+       $(CP) "$(INSTALL_DIR)/COPYING" $(TMP_DIST_DIR)
+       $(CP) "$(INSTALL_DIR)/README" $(TMP_DIST_DIR)
+       $(CP) "$(INSTALL_DIR)/README.W32" $(TMP_DIST_DIR)
+       $(CP) "$(INSTALL_DIR)/INSTALL" $(TMP_DIST_DIR)
+       $(CP_DIR) "$(INSTALL_DIR)/bin" $(TMP_DIST_DIR)
+       $(CP_DIR) "$(INSTALL_DIR)/etc" $(TMP_DIST_DIR)
+       $(CP_DIR) "$(INSTALL_DIR)/info" $(TMP_DIST_DIR)
+       $(CP_DIR) "$(INSTALL_DIR)/lisp" $(TMP_DIST_DIR)
+       $(CP_DIR) "$(INSTALL_DIR)/leim" $(TMP_DIST_DIR)
+       $(CP_DIR) "$(INSTALL_DIR)/site-lisp" $(TMP_DIST_DIR)
+       $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin
+       $(COMSPEC)$(ComSpec) /c $(ARGQUOTE)zipdist.bat $(VERSION)$(ARGQUOTE)
+       $(DEL_TREE) $(TMP_DIST_DIR)
+
+force-info:
+# Note that doc/emacs/makefile knows how to
+# put the info files in $(infodir),
+# so we can do ok running make in the build dir.
+info: force-info info-$(MAKETYPE)
+
+info-nmake:
+       cd ..\doc\emacs
+       $(MAKE) $(MFLAGS) info
+       cd ..\misc
+       $(MAKE) $(MFLAGS) info
+       cd ..\lispref
+       $(MAKE) $(MFLAGS) info
+       cd ..\lispintro
+       $(MAKE) $(MFLAGS) info
+       cd $(MAKEDIR)
+
+info-gmake:
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs info
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc info
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref info
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro info
+#
+# Maintenance
+#
+clean: clean-other-dirs-$(MAKETYPE)
+       - $(DEL) $(COMPILER_TEMP_FILES)
+       - $(DEL_TREE) $(OBJDIR)
+       - $(DEL) stamp_BLD
+       - $(DEL) ../etc/DOC ../etc/DOC-X
+
+clean-other-dirs-nmake:
+       cd ..\lib
+       $(MAKE) $(MFLAGS) clean
+       cd ..\lib-src
+       $(MAKE) $(MFLAGS) clean
+       cd ..\src
+       $(MAKE) $(MFLAGS) clean
+       cd ..\doc\lispintro
+       $(MAKE) $(MFLAGS) clean
+       cd ..\doc\lispref
+       $(MAKE) $(MFLAGS) clean
+       cd ..\leim
+       $(MAKE) $(MFLAGS) clean
+       cd ..\doc\emacs
+       $(MAKE) $(MFLAGS) clean
+       cd ..\doc\misc
+       $(MAKE) $(MFLAGS) clean
+       cd ..\nt
+
+clean-other-dirs-gmake:
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref clean
+
+cleanall-other-dirs-nmake:
+       cd ..\lib
+       $(MAKE) $(MFLAGS) cleanall
+       cd ..\lib-src
+       $(MAKE) $(MFLAGS) cleanall
+       cd ..\src
+       $(MAKE) $(MFLAGS) cleanall
+       cd ..\nt
+
+cleanall-other-dirs-gmake:
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib cleanall
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src cleanall
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src cleanall
+
+# We used to delete *~ here, but that might inadvertently remove
+# precious files if it happens to match their short 8+3 aliases.
+cleanall: clean cleanall-other-dirs-$(MAKETYPE)
+        - $(DEL_TREE) obj
+        - $(DEL_TREE) obj-spd
+        - $(DEL_TREE) oo
+        - $(DEL_TREE) oo-spd
+
+top-distclean:
+       - $(DEL) $(COMPILER_TEMP_FILES)
+       - $(DEL_TREE) obj
+       - $(DEL_TREE) obj-spd
+       - $(DEL_TREE) oo
+       - $(DEL_TREE) oo-spd
+       - $(DEL) stamp_BLD
+       - $(DEL) ../etc/DOC ../etc/DOC-X
+       - $(DEL) config.log Makefile
+       - $(DEL) ../README.W32
+
+distclean: distclean-other-dirs-$(MAKETYPE) top-distclean
+
+distclean-other-dirs-nmake:
+       cd ..\lib
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\lib-src
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\src
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\lisp
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\leim
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\doc\emacs
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\doc\misc
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\doc\lispintro
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\doc\lispref
+       $(MAKE) $(MFLAGS) distclean
+       cd ..\nt
+
+distclean-other-dirs-gmake:
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib distclean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src distclean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src distclean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp distclean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim distclean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs distclean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc distclean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro distclean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref distclean
+
+maintainer-clean: maintainer-clean-other-dirs-$(MAKETYPE) top-distclean
+
+maintainer-clean-other-dirs-nmake:
+       cd ..\lib
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\lib-src
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\src
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\lisp
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\leim
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\doc\emacs
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\doc\misc
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\doc\lispintro
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\doc\lispref
+       $(MAKE) $(MFLAGS) maintainer-clean
+       cd ..\nt
+
+maintainer-clean-other-dirs-gmake:
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib maintainer-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src maintainer-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src maintainer-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp maintainer-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim maintainer-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs maintainer-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc maintainer-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro maintainer-clean
+       $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref maintainer-clean
+
+realclean: cleanall
+       - $(DEL_TREE) ../bin
+
+TAGS: TAGS-$(MAKETYPE)
+
+frc:
+TAGS-gmake: frc
+       ../lib-src/$(BLD)/etags $(CURDIR)/*.c
+       $(MAKE) $(MFLAGS) -C ../src TAGS TAGS-LISP
+       $(MAKE) $(MFLAGS) -C ../lib-src TAGS
+       $(MAKE) $(MFLAGS) -C ../lib TAGS
+
+TAGS-nmake:
+       echo This target is not supported with NMake
+
+.PHONY: frc
-- 
1.7.7.rc0

>From 2345fc78ffb35a7669e47605ad298d71da94fa15 Mon Sep 17 00:00:00 2001
From: Hannu Koivisto <address@hidden>
Date: Sun, 28 Aug 2011 23:00:00 +0300
Subject: [PATCH 3/4] NT build: fix path conflict with Cygwin make and native
 Emacs

Cygwin make doesn't like c:/foo/bar style paths at least in targets and
native Windows Emacs doesn't like Cygwin style /cygdrive/c/foo/bar paths.
Use relative paths to avoid the problem.
---
 leim/makefile.w32-in |    7 +++----
 lisp/makefile.w32-in |   10 ++++++----
 nt/gmake.defs        |   13 ++++---------
 3 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/leim/makefile.w32-in b/leim/makefile.w32-in
index 2313843..736a49a 100644
--- a/leim/makefile.w32-in
+++ b/leim/makefile.w32-in
@@ -37,10 +37,9 @@ BUILT_EMACS = $(THISDIR)/$(dot)$(dot)/src/$(BLD)/emacs.exe
 buildlisppath=$(CURDIR)/$(dot)$(dot)/lisp
 
 # How to run Emacs.
-RUN_EMACS = "$(BUILT_EMACS)" -batch --no-site-file --no-site-lisp
-
-# Set EMACSLOADPATH correctly (already defined in environment).
-EMACSLOADPATH=$(buildlisppath)
+RUN_EMACS = "$(BUILT_EMACS)" -batch --no-site-file --no-site-lisp \
+            --eval $(ARGQUOTE)(push (expand-file-name 
$(DQUOTE)$(buildlisppath)$(DQUOTE)) load-path)$(ARGQUOTE)
+EMACSLOADPATH=
 
 # Subdirectories to be made if $(srcdir) is different from the current
 # directory.
diff --git a/lisp/makefile.w32-in b/lisp/makefile.w32-in
index c844a8f..4619776 100644
--- a/lisp/makefile.w32-in
+++ b/lisp/makefile.w32-in
@@ -33,7 +33,12 @@ EMACS = ../src/$(BLD)/emacs.exe
 
 # Command line flags for Emacs.
 
-EMACSOPT = -batch --no-site-file --no-site-lisp
+# Instead of using EMACSLOADPATH, which is cleared just in case, we'll rely
+# on expanded current directory set in EMACSOPT so that relative CURDIR can
+# be used.
+EMACSOPT = -batch --no-site-file --no-site-lisp \
+          --eval $(ARGQUOTE)(push (expand-file-name $(DQUOTE).$(DQUOTE)) 
load-path)$(ARGQUOTE)
+EMACSLOADPATH=
 
 # Extra flags to pass to the byte compiler
 BYTE_COMPILE_EXTRA_FLAGS =
@@ -41,9 +46,6 @@ BYTE_COMPILE_EXTRA_FLAGS =
 # BYTE_COMPILE_EXTRA_FLAGS = --eval '(setq byte-compile-warnings (quote (not 
unresolved)))'
 # The example above is just for developers, it should not be used by default.
 
-# Set EMACSLOADPATH correctly (already defined in environment).
-EMACSLOADPATH=$(lisp)
-
 # Use C locale
 LC_ALL = C
 
diff --git a/nt/gmake.defs b/nt/gmake.defs
index bbb5602..2ceb216 100644
--- a/nt/gmake.defs
+++ b/nt/gmake.defs
@@ -77,15 +77,10 @@ endif
 
 MAKETYPE=gmake
 
-# The following "ifeq" does not appear to DTRT, and therefore breaks
-# the build on mingw32. Also the -m option does not exist in many
-# (reasonably recent even) versions of Cygwin. These issues need to be
-# remedied before putting this cygpath kludge back in.
-
-# Convert CURDIR to native file name, if in Cygwin format
-#ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
-#CURDIR                := $(shell cygpath -m $(CURDIR))
-#endif
+# Use relative CURDIR to work around the conflict of Cygwin make
+# requiring /cygpath/c/.. style paths and native Windows Emacs not
+# understanding them.
+CURDIR=.
 
 THISDIR                = .
 
-- 
1.7.7.rc0

>From 3383279d4141bea1bd8fca37bd6f6bfd0483487d Mon Sep 17 00:00:00 2001
From: Hannu Koivisto <address@hidden>
Date: Sun, 28 Aug 2011 23:00:00 +0300
Subject: [PATCH 4/4] NT build: install target fixes

Support install directory with spaces in it.
Don't fail if target directories exist already.
---
 leim/makefile.w32-in    |   14 +++++++-------
 lib-src/makefile.w32-in |   18 +++++++++---------
 lisp/makefile.w32-in    |    6 +++---
 nt/gmake.defs           |    5 +++++
 nt/makefile.w32-in      |   40 ++++++++++++++++++++--------------------
 src/makefile.w32-in     |    4 ++--
 6 files changed, 46 insertions(+), 41 deletions(-)

diff --git a/leim/makefile.w32-in b/leim/makefile.w32-in
index 736a49a..60b9161 100644
--- a/leim/makefile.w32-in
+++ b/leim/makefile.w32-in
@@ -199,14 +199,14 @@ leim-list.el: $(SUBDIRS) $(WORLD) $(srcdir)/leim-ext.el
        $(RUN_EMACS) --eval $(ARGQUOTE)(w32-append-code-lines 
$(DQUOTE)address@hidden(DQUOTE) 
$(DQUOTE)$(srcdir)/leim-ext.el$(DQUOTE))$(ARGQUOTE)
 
 install: all
-       - mkdir "$(INSTALLDIR)"
+       - mkdir -p "$(INSTALLDIR)"
        - $(DEL) same-dir.tst
-       - $(DEL) $(INSTALL_DIR)/same-dir.tst
-       echo SameDirTest > $(INSTALL_DIR)/same-dir.tst
-       $(IFNOTSAMEDIR) $(CP) leim-list.el $(INSTALLDIR) $(ENDIF)
-       $(IFNOTSAMEDIR) $(CP_DIR) quail $(INSTALLDIR) $(ENDIF)
-       $(IFNOTSAMEDIR) $(CP_DIR) ja-dic $(INSTALLDIR) $(ENDIF)
-       - $(DEL) $(INSTALL_DIR)/same-dir.tst
+       - $(DEL) "$(INSTALL_DIR)/same-dir.tst"
+       echo SameDirTest > "$(INSTALL_DIR)/same-dir.tst"
+       $(IFNOTSAMEDIR) $(CP) leim-list.el "$(INSTALLDIR)" $(ENDIF)
+       $(IFNOTSAMEDIR) $(CP_DIR) quail "$(INSTALLDIR)" $(ENDIF)
+       $(IFNOTSAMEDIR) $(CP_DIR) ja-dic "$(INSTALLDIR)" $(ENDIF)
+       - $(DEL) "$(INSTALL_DIR)/same-dir.tst"
 
 clean mostlyclean:
        - $(FOREACH) $(TIT) $(FORDO) $(DEL) $(FORVAR) $(ENDFOR)
diff --git a/lib-src/makefile.w32-in b/lib-src/makefile.w32-in
index 28f913a..1cc9634 100644
--- a/lib-src/makefile.w32-in
+++ b/lib-src/makefile.w32-in
@@ -304,15 +304,15 @@ all:              stamp_BLD $(ALL) $(DOC)
 #
 INSTALL_FILES = $(ALL)
 install:       $(INSTALL_FILES)
-               - mkdir "$(INSTALL_DIR)/bin"
-               $(CP) $(BLD)/etags.exe $(INSTALL_DIR)/bin
-               $(CP) $(BLD)/ebrowse.exe $(INSTALL_DIR)/bin
-               $(CP) $(BLD)/ctags.exe $(INSTALL_DIR)/bin
-               $(CP) $(BLD)/hexl.exe $(INSTALL_DIR)/bin
-               $(CP) $(BLD)/movemail.exe $(INSTALL_DIR)/bin
-               $(CP) $(BLD)/emacsclient.exe $(INSTALL_DIR)/bin
-               $(CP) $(BLD)/emacsclientw.exe $(INSTALL_DIR)/bin
-               - mkdir "$(INSTALL_DIR)/etc"
+               - mkdir -p "$(INSTALL_DIR)/bin"
+               $(CP) $(BLD)/etags.exe "$(INSTALL_DIR)/bin"
+               $(CP) $(BLD)/ebrowse.exe "$(INSTALL_DIR)/bin"
+               $(CP) $(BLD)/ctags.exe "$(INSTALL_DIR)/bin"
+               $(CP) $(BLD)/hexl.exe "$(INSTALL_DIR)/bin"
+               $(CP) $(BLD)/movemail.exe "$(INSTALL_DIR)/bin"
+               $(CP) $(BLD)/emacsclient.exe "$(INSTALL_DIR)/bin"
+               $(CP) $(BLD)/emacsclientw.exe "$(INSTALL_DIR)/bin"
+               - mkdir -p "$(INSTALL_DIR)/etc"
                $(CP) $(DOC) $(INSTALL_DIR)/etc
 
 #
diff --git a/lisp/makefile.w32-in b/lisp/makefile.w32-in
index 4619776..7a292c6 100644
--- a/lisp/makefile.w32-in
+++ b/lisp/makefile.w32-in
@@ -508,7 +508,7 @@ bootstrap: update-subdirs autoloads mh-autoloads compile 
finder-data custom-deps
 # Windows 95 makes this harder than it should be.
 #
 install:
-               - mkdir "$(INSTALL_DIR)/lisp"
+               - mkdir -p "$(INSTALL_DIR)/lisp"
                - $(DEL) ../same-dir.tst
                - $(DEL) "$(INSTALL_DIR)/same-dir.tst"
                echo SameDirTest > "$(INSTALL_DIR)/same-dir.tst"
@@ -534,13 +534,13 @@ install:
 # since cp does not preserve time stamps
 install-lisp-SH:
        cp -f *.el "$(INSTALL_DIR)/lisp"
-       for dir in $(WINS); do [ -d "$(INSTALL_DIR)/lisp/$$dir" ] || mkdir 
"$(INSTALL_DIR)/lisp/$$dir"; done
+       for dir in $(WINS); do [ -d "$(INSTALL_DIR)/lisp/$$dir" ] || mkdir -p 
"$(INSTALL_DIR)/lisp/$$dir"; done
        for dir in $(WINS); do cp -f $$dir/*.el "$(INSTALL_DIR)/lisp/$$dir"; 
done
        for dir in . $(WINS); do cp $$dir/*.elc "$(INSTALL_DIR)/lisp/$$dir"; 
done
 
 install-lisp-CMD:
        cp -f *.el "$(INSTALL_DIR)/lisp"
-       for %%f in ($(WINS)) do if not exist "$(INSTALL_DIR)/lisp/%%f" mkdir 
"$(INSTALL_DIR)/lisp/%%f"
+       for %%f in ($(WINS)) do if not exist "$(INSTALL_DIR)/lisp/%%f" mkdir -p 
"$(INSTALL_DIR)/lisp/%%f"
        for %%f in ($(WINS)) do cp -f %%f/*.el "$(INSTALL_DIR)/lisp/%%f"
        for %%f in (. $(WINS)) do cp -f %%f/*.elc "$(INSTALL_DIR)/lisp/%%f"
 
diff --git a/nt/gmake.defs b/nt/gmake.defs
index 2ceb216..74d1664 100644
--- a/nt/gmake.defs
+++ b/nt/gmake.defs
@@ -119,6 +119,11 @@ ifndef INSTALL_DIR
 INSTALL_DIR     = $(CURDIR)/..
 endif
 
+INSTALL_DIR_MIXED := $(INSTALL_DIR)
+ifeq "$(shell cygpath $(INSTALL_DIR))" "$(INSTALL_DIR)"
+INSTALL_DIR_MIXED := $(shell cygpath -m "$(INSTALL_DIR)")
+endif
+
 export EMACSLOADPATH
 
 # Determine the architecture we're running on.
diff --git a/nt/makefile.w32-in b/nt/makefile.w32-in
index 05ce4eb..c7cdf4a 100644
--- a/nt/makefile.w32-in
+++ b/nt/makefile.w32-in
@@ -197,10 +197,10 @@ bootstrap-clean-gmake:
        $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean
 
 $(INSTALL_DIR):
-       - mkdir "$(INSTALL_DIR)"
+       - mkdir -p "$(INSTALL_DIR)"
 
 $(INSTALL_DIR)/bin: $(INSTALL_DIR)
-       - mkdir "$(INSTALL_DIR)/bin"
+       - mkdir -p "$(INSTALL_DIR)/bin"
 
 #
 # Build and install emacs in INSTALL_DIR
@@ -210,28 +210,28 @@ $(INSTALL_DIR)/bin: $(INSTALL_DIR)
 install: install-bin install-shortcuts
 
 install-bin: all $(INSTALL_DIR)/bin install-other-dirs-$(MAKETYPE)
-       - $(CP) $(BLD)/addpm.exe $(INSTALL_DIR)/bin
-       - $(CP) $(BLD)/ddeclient.exe $(INSTALL_DIR)/bin
-       - $(CP) $(BLD)/cmdproxy.exe $(INSTALL_DIR)/bin
-       - $(CP) $(BLD)/runemacs.exe $(INSTALL_DIR)/bin
-       - $(CP) README.W32 $(INSTALL_DIR)
+       - $(CP) $(BLD)/addpm.exe "$(INSTALL_DIR_MIXED)/bin"
+       - $(CP) $(BLD)/ddeclient.exe "$(INSTALL_DIR_MIXED)/bin"
+       - $(CP) $(BLD)/cmdproxy.exe "$(INSTALL_DIR_MIXED)/bin"
+       - $(CP) $(BLD)/runemacs.exe "$(INSTALL_DIR_MIXED)/bin"
+       - $(CP) README.W32 "$(INSTALL_DIR)"
        - $(DEL) ../same-dir.tst
        - $(DEL) $(INSTALL_DIR)/same-dir.tst
        echo SameDirTest > "$(INSTALL_DIR)/same-dir.tst"
-       - mkdir "$(INSTALL_DIR)/etc"
-       - mkdir "$(INSTALL_DIR)/info"
-       - mkdir "$(INSTALL_DIR)/lock"
-       - mkdir "$(INSTALL_DIR)/data"
-       - mkdir "$(INSTALL_DIR)/site-lisp"
-       - mkdir "$(INSTALL_DIR)/etc/icons"
-       $(IFNOTSAMEDIR) $(CP) ../site-lisp/subdirs.el $(INSTALL_DIR)/site-lisp 
$(ENDIF)
-       $(IFNOTSAMEDIR) $(CP_DIR) ../etc $(INSTALL_DIR) $(ENDIF)
-       - $(CP_DIR) icons $(INSTALL_DIR)/etc
-       $(IFNOTSAMEDIR) $(CP_DIR) ../info $(INSTALL_DIR) $(ENDIF)
-       $(IFNOTSAMEDIR) $(CP) ../COPYING $(INSTALL_DIR) $(ENDIF)
-       - $(CP) ../COPYING $(INSTALL_DIR)/bin
+       - mkdir -p "$(INSTALL_DIR)/etc"
+       - mkdir -p "$(INSTALL_DIR)/info"
+       - mkdir -p "$(INSTALL_DIR)/lock"
+       - mkdir -p "$(INSTALL_DIR)/data"
+       - mkdir -p "$(INSTALL_DIR)/site-lisp"
+       - mkdir -p "$(INSTALL_DIR)/etc/icons"
+       $(IFNOTSAMEDIR) $(CP) ../site-lisp/subdirs.el 
"$(INSTALL_DIR)/site-lisp" $(ENDIF)
+       $(IFNOTSAMEDIR) $(CP_DIR) ../etc "$(INSTALL_DIR)" $(ENDIF)
+       - $(CP_DIR) icons "$(INSTALL_DIR)/etc"
+       $(IFNOTSAMEDIR) $(CP_DIR) ../info "$(INSTALL_DIR)" $(ENDIF)
+       $(IFNOTSAMEDIR) $(CP) ../COPYING "$(INSTALL_DIR)" $(ENDIF)
+       - $(CP) ../COPYING "$(INSTALL_DIR)/bin"
        - $(DEL) ../same-dir.tst
-       - $(DEL) $(INSTALL_DIR)/same-dir.tst
+       - $(DEL) "$(INSTALL_DIR)/same-dir.tst"
 
 install-other-dirs-nmake:
        cd ..\lib-src
diff --git a/src/makefile.w32-in b/src/makefile.w32-in
index 53cb5f8..c46d57c 100644
--- a/src/makefile.w32-in
+++ b/src/makefile.w32-in
@@ -307,8 +307,8 @@ $(TLASTLIB):        $(BLD)/lastfile.$(O)
 # Assuming INSTALL_DIR is defined, build and install emacs in it.
 #
 install:        $(ALL)
-       - mkdir "$(INSTALL_DIR)/bin"
-       $(CP) $(EMACS) $(INSTALL_DIR)/bin
+       - mkdir -p "$(INSTALL_DIR)/bin"
+       $(CP) $(EMACS) "$(INSTALL_DIR)/bin"
 
 #
 # Maintenance
-- 
1.7.7.rc0


reply via email to

[Prev in Thread] Current Thread [Next in Thread]