Subject: Re: bug#6602: [PATCH] make dist target for Windows

From: Christoph <[email-masked]>
Date: Sat, 24 Jul 2010 16:19:03 -0600

On 7/24/2010 7:28 AM, Juanma Barranquero wrote:

> That said, I'm committing your change right now. Great work. Thanks!

Thanks for doing this.

After testing it in the trunk I remembered: one thing I never was quite 
sure how to fix best is the fact that when you run `make dist' on the 
trunk, the root directory the zip file contains is `trunk' (or whatever 
you named your bzr checkout), but it should be `emacs-VERSION'.

Well, I guess it helps to have the code sitting around for a while. :) 
Find attached a patch that fixes this.

The main change is that it copies all necessary files to a temporary 
directory and then creates the zip files from that. After that the 
temporary directory is removed.

This change also made `zipdist.bat' a lot simpler, since I don't need to 
do funky path processing.

Now the correct root directory (based on version) will show inside the 
zip file for the trunk as well as any pretest or final version.

There is also a minor bugfix: README.W32 was not copied to the install 
directory when using `make install'.

Christoph

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [email-masked]
# target_branch: http://bzr.savannah.gnu.org/r/emacs/trunk/
# testament_sha1: cbe7fd9fdcab5324d5db459af1712f057ad38e25
# timestamp: 2010-07-24 16:10:20 -0600
# base_revision_id: [email-masked]
# 
# Begin patch
=== modified file 'nt/ChangeLog'
--- nt/ChangeLog	2010-07-24 13:35:31 +0000
+++ nt/ChangeLog	2010-07-24 22:10:01 +0000
@@ -1,5 +1,12 @@
 2010-07-24  Christoph Scholtes  <[email-masked]>
 
+	* makefile.w32-in: Copy README.W32 to installation directory
+	during `make install'.  Use temporary directory to create
+	distribution zip files in `dist' target.
+	* zipdist.bat: Simplify code using temporary directory.
+
+2010-07-24  Christoph Scholtes  <[email-masked]>
+
 	New make target for Windows platform: make dist (bug#6602)
 
 	* INSTALL: Document new dist target and add section about

=== modified file 'nt/makefile.w32-in'
--- nt/makefile.w32-in	2010-07-24 13:35:31 +0000
+++ nt/makefile.w32-in	2010-07-24 22:07:04 +0000
@@ -25,6 +25,8 @@
 
 VERSION		= 24.0.50
 
+TMP_DIST_DIR 	= emacs-$(VERSION)
+
 TRES		= $(BLD)/emacs.res
 CLIENTRES	= $(BLD)/emacsclient.res
 
@@ -208,6 +210,7 @@
 	- $(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"
@@ -246,10 +249,22 @@
 install-shortcuts:
 	"$(INSTALL_DIR)/bin/addpm" -q
 
-dist: install-bin 
-	$(CP) $(DIST_FILES) $(INSTALL_DIR)/bin
-	$(CP) README.W32 $(INSTALL_DIR)
-	$(COMSPEC)$(ComSpec) /c $(ARGQUOTE)zipdist.bat $(INSTALL_DIR) $(VERSION)$(ARGQUOTE)
+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

=== modified file 'nt/zipdist.bat'
--- nt/zipdist.bat	2010-07-24 13:35:31 +0000
+++ nt/zipdist.bat	2010-07-24 22:04:10 +0000
@@ -20,25 +20,10 @@
 rem along with GNU Emacs.  If not, see http://www.gnu.org/licenses/.
 
 SETLOCAL
-rem arg 1: full path to Emacs root directory
-set ARG_PATH="%~f1"
-rem Path separator cannot be parsed correctly, substitute
-set ARG_PATH=%ARG_PATH:\=;%
-
-rem arg 2: Emacs version number
-set EMACS_VER=%2
-
-rem Parse out last directory from passed in full path (arg 1)
-for /f "tokens=* delims=;" %%G in (%ARG_PATH%) do call :PARSE_PATH %%G
-goto :EXIT
-
-:PARSE_PATH
-if "%1"=="" (
-  goto :ZIP_CHECK
-)
-set ROOT_DIR=%1
-SHIFT
-goto :PARSE_PATH
+rem arg 1: Emacs version number
+set EMACS_VER=%1
+
+set TMP_DIST_DIR=emacs-%EMACS_VER%
 
 rem Check, if 7zip is installed and available on path
 :ZIP_CHECK
@@ -53,14 +38,12 @@
 
 rem Build distributions
 :ZIP_DIST
-pushd ..\..
 rem Build and verify full distribution
-7z a -bd -tZIP -mx=9 -x!.bzrignore -x!.gitignore -xr!emacs.mdp -xr!*.pdb -xr!*.opt -xr!*~ -xr!CVS -xr!.arch-inventory emacs-%EMACS_VER%-bin-i386.zip %ROOT_DIR%/BUGS %ROOT_DIR%/COPYING %ROOT_DIR%/README %ROOT_DIR%/README.W32 %ROOT_DIR%/INSTALL %ROOT_DIR%/bin %ROOT_DIR%/etc %ROOT_DIR%/info %ROOT_DIR%/lisp %ROOT_DIR%/leim %ROOT_DIR%/site-lisp
+7z a -bd -tZIP -mx=9 -x!.bzrignore -x!.gitignore -xr!emacs.mdp -xr!*.pdb -xr!*.opt -xr!*~ -xr!CVS -xr!.arch-inventory emacs-%EMACS_VER%-bin-i386.zip %TMP_DIST_DIR%
 7z t emacs-%EMACS_VER%-bin-i386.zip
 rem Build and verify binary only distribution
-7z a -bd -tZIP -mx=9 emacs-%EMACS_VER%-barebin-i386.zip %ROOT_DIR%/README.W32 %ROOT_DIR%/bin %ROOT_DIR%/etc/DOC-X %ROOT_DIR%/COPYING
+7z a -bd -tZIP -mx=9 -x!.bzrignore -x!.gitignore -xr!emacs.mdp -xr!*.pdb -xr!*.opt -xr!*~ -xr!CVS -xr!.arch-inventory emacs-%EMACS_VER%-barebin-i386.zip %TMP_DIST_DIR%/README.W32 %TMP_DIST_DIR%/bin %TMP_DIST_DIR%/etc/DOC-X %TMP_DIST_DIR%/COPYING
 7z t emacs-%EMACS_VER%-barebin-i386.zip
-popd
 goto EXIT
 
 :EXIT

# Begin bundle