From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Hannu Koivisto Newsgroups: gmane.emacs.devel Subject: A few Windows build fixes Date: Mon, 29 Aug 2011 01:46:59 +0300 Organization: NOYB Message-ID: <83vcth40ik.fsf@kalahari.s2.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: dough.gmane.org 1314571826 27811 80.91.229.12 (28 Aug 2011 22:50:26 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 28 Aug 2011 22:50:26 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Aug 29 00:50:21 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1QxoBI-0006vP-DT for ged-emacs-devel@m.gmane.org; Mon, 29 Aug 2011 00:50:20 +0200 Original-Received: from localhost ([::1]:34757 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QxoBI-0005JS-1d for ged-emacs-devel@m.gmane.org; Sun, 28 Aug 2011 18:50:20 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:50572) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QxoBC-0005JN-KT for emacs-devel@gnu.org; Sun, 28 Aug 2011 18:50:18 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QxoB8-0004Gz-7w for emacs-devel@gnu.org; Sun, 28 Aug 2011 18:50:14 -0400 Original-Received: from lo.gmane.org ([80.91.229.12]:53119) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QxoB7-0004GU-59 for emacs-devel@gnu.org; Sun, 28 Aug 2011 18:50:10 -0400 Original-Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1QxoB5-0006rP-71 for emacs-devel@gnu.org; Mon, 29 Aug 2011 00:50:07 +0200 Original-Received: from s2.org ([80.83.7.53]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 29 Aug 2011 00:50:07 +0200 Original-Received: from azure by s2.org with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 29 Aug 2011 00:50:07 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 1381 Original-X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: s2.org User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.3 (gnu/linux) Cancel-Lock: sha1:JGT7UTS0dtHEsW1inR6HwFz1i38= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 80.91.229.12 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:143614 Archived-At: --=-=-= 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 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-NT-build-support-modern-Cygwins-where-gcc-is-a-symli.patch Content-Transfer-Encoding: 8bit >From 90258756a199738e4cb7ae406893827d9ef83cc3 Mon Sep 17 00:00:00 2001 From: Hannu Koivisto 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 -@echo gcc %cf% -c junk.c >>config.log -gcc %cf% -c junk.c >>config.log 2>&1 +@echo %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 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0002-NT-build-ensure-GNU-make-makefiles-don-t-have-CRLF-l.patch Content-Transfer-Encoding: 8bit >From 4f6735c28b423556e61e9af85f9683aa384d8237 Mon Sep 17 00:00:00 2001 From: Hannu Koivisto 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 . - - -# 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 . + +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 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0003-NT-build-fix-path-conflict-with-Cygwin-make-and-nati.patch >From 2345fc78ffb35a7669e47605ad298d71da94fa15 Mon Sep 17 00:00:00 2001 From: Hannu Koivisto 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 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0004-NT-build-install-target-fixes.patch >From 3383279d4141bea1bd8fca37bd6f6bfd0483487d Mon Sep 17 00:00:00 2001 From: Hannu Koivisto 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)$@$(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 --=-=-=--