[Vimperator] [PATCH] makefile does VERSION / DATE substitutions

Bart Trojanowski bart at jukie.net
Sat Apr 28 10:20:06 PDT 2007


As discussed on irc, this patch will build the jar and xpi in a build
directory and while doing so it will substitute some patterns for
makefile variables.  Currently the ones that are done are:

        sed -e "s,###VERSION###,${VERSION},g" \
            -e "s,###DATE###,${DATE},g"

I haven't tested it much.  The resulting xpi does install. :)  Version
seems right.

For easier verification, I leave the build directory around so you can
compare, and I dump out any modifications made.

        # make xpi
        Building JAR...
        modified: chrome/content/vimperator/vimperator.js
        -var g_vimperator_version  = "###VERSION### (created: ###DATE###)";
        +var g_vimperator_version  = "0.4 (created: 2007/04/28)";
        ....
        Building XPI...
        modified: install.rdf
        -       <em:version>###VERSION###</em:version>
        +       <em:version>0.4</em:version>
        ...

-Bart

---
 src/Makefile |   74 +++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 56 insertions(+), 18 deletions(-)

diff --git a/src/Makefile b/src/Makefile
index 92091e4..4f875f3 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,20 +1,30 @@
 #### configuration
 
-VERSION  = 0.4
+TOP       = $(shell pwd)
 
-JAR_FILES     = ${shell find chrome/content/ -type f -a ! -path '*CVS*' ! -name 'tags'} chrome.manifest
-JAR           = chrome/vimperator.jar
+VERSION   = 0.4
+OS        = $(shell uname -s)
+DATE      = $(shell date "+%Y/%m/%d")
 
-RELEASE_FILES = ${JAR} install.rdf chrome.manifest TODO AUTHORS Donators ChangeLog Makefile
-RELEASE_DIR   = ../downloads
-RELEASE_XPI   = vimperator_${VERSION}.xpi
-RELEASE       = ${RELEASE_DIR}/${RELEASE_XPI}
+JAR_FILES = ${shell find chrome/content/ -type f -a ! -path '*CVS*' ! -name 'tags'} chrome.manifest
+JAR_DIRS  = $(foreach f, ${JAR_FILES}, $(dir $f))
+JAR       = chrome/vimperator.jar
+
+XPI_TXT_FILES = install.rdf chrome.manifest TODO AUTHORS Donators ChangeLog
+XPI_DIRS  = $(foreach f, ${XPI_FILES}, $(dir $f))
+XPI_BIN_FILES = ${JAR} Makefile
+XPI_FILES = ${XPI_BIN_FILES} ${XPI_TXT_FILES}
+XPI_NAME  = vimperator_${VERSION}.xpi
+XPI       = ../downloads/${XPI_NAME}
+
+BUILD_DIR=build.${VERSION}.${OS}
+BUILD_JAR_DIR=${BUILD_DIR}/jar
+BUILD_XPI_DIR=${BUILD_DIR}/xpi
 
 ZIP = zip
 
 # find the vimperator chrome dir
 
-OS=$(shell uname -s)
 ifeq (${OS},Darwin)
 FIREFOX_DEFAULT = $(wildcard ${HOME}/Library/Application\ Support/Firefox/Profiles/*default)
 else
@@ -43,14 +53,14 @@ help:
 	@echo "  make info      - shome some info about the system"
 	@echo "  make jar       - build a JAR (${JAR})"
 	@echo "  make install   - install into your firefox dir (run info)"
-	@echo "  make xpi       - build an XPI (${RELEASE_XPI})"
+	@echo "  make xpi       - build an XPI (${XPI_NAME})"
 	@echo "  make clean     - clean up"
 	@echo
 	@echo "running some commands with V=1 will show more build details"
 
 info:
 	@echo    "version             ${VERSION}"
-	@echo    "release file        ${RELEASE}"
+	@echo    "release file        ${XPI}"
 	@echo -e "jar files           $(shell echo ${JAR_FILES} | sed 's/ /\\n                    /g' )"
 	@test -d "${FIREFOX_DEFAULT}" || ( echo "E: didn't find your .mozilla/firefox/*.default/ dir" ; false )
 	@echo    "firefox default     ${FIREFOX_DEFAULT}"
@@ -67,7 +77,7 @@ needs_chrome_dir:
 	-${Q}mkdir -p "${INSTALL_CHROME}"
 	${Q}test -d "${INSTALL_CHROME}"
 
-xpi: ${RELEASE}
+xpi: ${XPI}
 jar: ${JAR}
 
 install: needs_chrome_dir ${JAR}
@@ -79,13 +89,41 @@ clean:
 	${Q}rm -f ${JAR} ${XPI}
 	${Q}find . -name '*~' -exec rm -f {} \;
 
-${RELEASE}: ${RELEASE_FILES}
-	@echo "Building XPI..."
-	@mkdir -p ${RELEASE_DIR}
-	${Q}${ZIP} -r ${RELEASE} ${RELEASE_FILES}
-	@echo "SUCCESS: ${RELEASE}"
+.PHONY: build-xpi-dirs
+build-xpi-dirs: 
+	@mkdir -p ${XPI_DIRS:%=${BUILD_XPI_DIR}/%}
+	@mkdir -p $(dir ${XPI})
 
-${JAR}: ${JAR_FILES}
+${XPI}: build-xpi-dirs ${XPI_FILES}
+	@echo "Building XPI..."
+	${Q}for f in ${XPI_BIN_FILES} ; do \
+		cp $$f ${BUILD_XPI_DIR}/$$f ; \
+	    done
+	${Q}for f in ${XPI_TXT_FILES} ; do \
+		sed -e "s,###VERSION###,${VERSION},g" \
+		    -e "s,###DATE###,${DATE},g" \
+		    < $$f > ${BUILD_XPI_DIR}/$$f ; \
+		( diff -q $$f ${BUILD_XPI_DIR}/$$f 1>/dev/null ) || \
+		( echo "modified: $$f" ; \
+		  diff -u $$f ${BUILD_XPI_DIR}/$$f | grep '^[-+][^-+]' ) ; \
+	    done
+	${Q}( cd ${BUILD_XPI_DIR} && ${ZIP} -r ${TOP}/${XPI} ${XPI_FILES} )
+	@echo "SUCCESS: ${XPI}"
+
+.PHONY: build-jar-dirs
+build-jar-dirs: 
+	@mkdir -p ${JAR_DIRS:%=${BUILD_JAR_DIR}/%}
+
+${JAR}: build-jar-dirs ${JAR_FILES}
 	@echo "Building JAR..."
-	${Q}${ZIP} -r ${JAR} ${JAR_FILES}
+	${Q}for f in ${JAR_FILES} ; do \
+		sed -e "s,###VERSION###,${VERSION},g" \
+		    -e "s,###DATE###,${DATE},g" \
+		    < $$f > ${BUILD_JAR_DIR}/$$f ; \
+		( diff -q $$f ${BUILD_JAR_DIR}/$$f 1>/dev/null ) || \
+		( echo "modified: $$f" ; \
+		  diff -u $$f ${BUILD_JAR_DIR}/$$f | grep '^[-+][^-+]' ) ; \
+	    done
+	${Q}( cd ${BUILD_JAR_DIR} && ${ZIP} -r ${TOP}/${JAR} ${JAR_FILES} )
 	@echo "SUCCESS: ${JAR}"
+
-- 
1.5.2.rc0.56.g6169a


-- 
				WebSig: http://www.jukie.net/~bart/sig/


More information about the Vimperator mailing list