1 # Heavily based on vimperator's makefile
7 BUILD_DATE = $(shell date "+%Y-%m-%d %H:%M:%S")
8 NIGHTLY_DATE = $(shell date "+%Y%m%d")
9 GIT_VERSION = $(shell git describe)
11 JAR_TXT_FILES = $(shell find -L content skin locale \
22 JAR_BIN_FILES = $(shell find content skin \
30 JAR_FILES = ${JAR_BIN_FILES} ${JAR_TXT_FILES}
31 JAR_DIRS = $(foreach f,${JAR_FILES},$(dir $f))
32 JAR = chrome/${NAME}.jar
34 XPI_BIN_FILES = ${JAR}
35 XPI_FILES = ${XPI_BIN_FILES} ${XPI_TXT_FILES}
36 XPI_DIRS = $(foreach f,${XPI_FILES},$(dir $f))
37 XPI_NAME = ${NAME}-${VERSION}.xpi
39 MOZXPI = ${NAME}-${VERSION}_amo.xpi
40 NIGHTLYXPI = ${NAME}-${VERSION}${NIGHTLY_DATE}.xpi
42 BUILD_DIR = build.${VERSION}.${OS}
43 BUILD_JAR_DIR = ${BUILD_DIR}/jar
44 BUILD_XPI_DIR = ${BUILD_DIR}/xpi
46 BUILD_JAR_SUBDIRS = $(sort ${JAR_DIRS:%=${BUILD_JAR_DIR}/%})
47 BUILD_XPI_SUBDIRS = $(sort ${XPI_DIRS:%=${BUILD_XPI_DIR}/%})
55 .PHONY: all help info jar xpi mozxpi install clean distclean nightly upnightly uprelease
59 @echo "${NAME} ${VERSION} build"
60 @echo " make help - display this help"
61 @echo " make info - show some info about the system"
62 @echo " make jar - build a JAR (${JAR})"
63 @echo " make xpi - build an XPI (${XPI_NAME})"
64 @echo " make mozxpi - build an XPI (${MOZXPI}) for Mozilla Addons"
65 @echo " make nightly - build a nightly (${NIGHTLYXPI})"
66 @echo " make upnightly - upload a nightly snapshot and its update RDF (not for you)"
67 @echo " make uprelease - upload a new release and accompanying files (not for you)"
68 @echo " make clean - clean up"
69 @echo " make distclean - clean up more"
72 @echo "version ${VERSION}"
73 @echo "release file ${XPI}"
74 @echo -e "jar files $(shell echo ${JAR_FILES} | sed 's/ /\\n /g' )"
75 @echo -e "xpi files $(shell echo ${XPI_FILES} | sed 's/ /\\n /g' )"
81 nightly: ${NIGHTLYXPI}
85 ${Q}rm -f ${JAR} ${XPI} ${MOZXPI} ${NIGHTLYXPI}
86 ${Q}find . -name '*~' -exec rm -f {} \;
89 @echo "More cleanup..."
90 ${Q}rm -rf ${BUILD_DIR}
92 upnightly: ${NIGHTLYXPI}
93 ${Q}( cd release/ && ./mknightly.sh ${NIGHTLYXPI} ${VERSION}${NIGHTLY_DATE} ${VERSION} )
96 ${Q}( cd release/ && ./mkrelease.py -x ${XPI_NAME} \
97 --hash "sha1:$(shell sha1sum ${XPI} |cut -d ' ' -f 1)" \
98 ${VERSION} > release.rdf )
99 ${Q}( cd release/ && ./mknews.py ${VERSION} > ${VERSION}.xhtml )
100 ${Q}( cd release/ && ./put.py ../${XPI} ${XPI_NAME} ${VERSION}.xhtml news/${VERSION}.xhtml)
101 ${Q}( rm -f release/${VERSION}.xhtml )
103 @echo "Sign ./release/release.rdf with McCoy and upload."
107 ${BUILD_XPI_SUBDIRS}:
110 ${XPI}: ${BUILD_XPI_SUBDIRS} ${XPI_FILES}
111 @echo "Building XPI..."
112 ${Q}mkdir -p $(dir ${XPI})
113 ${Q}for f in ${XPI_BIN_FILES} ; do \
114 cp $$f ${BUILD_XPI_DIR}/$$f ; \
116 ${Q}for f in ${XPI_TXT_FILES} ; do \
117 ${SED} -e "s,###VERSION###,${VERSION},g" \
118 -e "s,###GIT_VERSION###,${GIT_VERSION},g" \
119 -e "s,###DATE###,${BUILD_DATE},g" \
120 < $$f > ${BUILD_XPI_DIR}/$$f ; \
121 ( diff -q $$f ${BUILD_XPI_DIR}/$$f 1>/dev/null ) || \
122 ( echo "modified: $$f" ; \
123 diff -u $$f ${BUILD_XPI_DIR}/$$f | grep '^[-+][^-+]' ) ; \
125 ${Q}${PERL} -pe 's,\s(skin|content|locale)/, jar:${JAR}!/\1/,' \
126 < chrome.manifest > ${BUILD_XPI_DIR}/chrome.manifest
127 ${Q}( cd ${BUILD_XPI_DIR} && ${ZIP} -r9 ${TOP}/${XPI} ${XPI_FILES} )
130 ${MOZXPI}: ${BUILD_XPI_SUBDIRS} ${XPI_FILES}
131 @echo "Building XPI for Mozilla Addons..."
132 ${Q}mkdir -p $(dir ${MOZXPI})
133 ${Q}for f in ${XPI_BIN_FILES} ; do \
134 cp $$f ${BUILD_XPI_DIR}/$$f ; \
136 ${Q}for f in ${XPI_TXT_FILES} ; do \
137 ${SED} -e "s,###VERSION###,${VERSION},g" \
138 -e "s,###GIT_VERSION###,${GIT_VERSION},g" \
139 -e "s,###DATE###,${BUILD_DATE},g" \
140 -e "s,<em:updateURL>.*</em:updateURL>,,g" \
141 -e "s,<em:updateKey>.*</em:updateKey>,,g" \
142 < $$f > ${BUILD_XPI_DIR}/$$f ; \
143 ( diff -q $$f ${BUILD_XPI_DIR}/$$f 1>/dev/null ) || \
144 ( echo "modified: $$f" ; \
145 diff -u $$f ${BUILD_XPI_DIR}/$$f | grep '^[-+][^-+]' ) ; \
147 ${Q}${PERL} -pe 's,\s(skin|content|locale)/, jar:${JAR}!/\1/,' \
148 < chrome.manifest > ${BUILD_XPI_DIR}/chrome.manifest
149 ${Q}( cd ${BUILD_XPI_DIR} && ${ZIP} -r9 ${TOP}/${MOZXPI} ${XPI_FILES} )
152 ${NIGHTLYXPI}: ${BUILD_XPI_SUBDIRS} ${XPI_FILES}
153 @echo "Building nightly XPI..."
154 ${Q}mkdir -p $(dir ${NIGHTLYXPI})
155 ${Q}for f in ${XPI_BIN_FILES} ; do \
156 cp $$f ${BUILD_XPI_DIR}/$$f ; \
158 ${Q}for f in ${XPI_TXT_FILES} ; do \
159 ${SED} -e "s,###VERSION###,${VERSION},g" \
160 -e "s,###GIT_VERSION###,${GIT_VERSION},g" \
161 -e "s,###DATE###,${BUILD_DATE},g" \
162 -e "s,<em:version>\([0-9.]\+\)pre</em:version>,<em:version>\1pre${NIGHTLY_DATE}</em:version>,g" \
163 -e "s,<em:updateURL>.*</em:updateURL>,<em:updateURL>http://beyondboredom.net/gfox/nightly.rdf</em:updateURL>,g" \
164 -e "s,<em:updateKey>.*</em:updateKey>,<em:updateKey>MIGfMA0GCSqGSIb3DQEB\
165 AQUAA4GNADCBiQKBgQC7eAy22UWonorb/WB+eeDeE6eMDgRB9gjRt4LGzoOB+jgxc1ZkOMuLwbU599zu+GvW038T\
166 LCyUgpvEC6Nh5NoOryFCKbPNM/Hun+GPITbSl59ZqpRj9mFie5ASlPnU3xI+FG5czTJLsBSAZF6pfhnCNzfcVD9mH\
167 gvy+qXLl73fXQIDAQAB</em:updateKey>,g" \
168 < $$f > ${BUILD_XPI_DIR}/$$f ; \
169 ( diff -q $$f ${BUILD_XPI_DIR}/$$f 1>/dev/null ) || \
170 ( echo "modified: $$f" ; \
171 diff -u $$f ${BUILD_XPI_DIR}/$$f | grep '^[-+][^-+]' ) ; \
173 ${Q}${PERL} -pe 's,\s(skin|content|locale)/, jar:${JAR}!/\1/,' \
174 < chrome.manifest > ${BUILD_XPI_DIR}/chrome.manifest
175 ${Q}( cd ${BUILD_XPI_DIR} && ${ZIP} -r9 ${TOP}/${NIGHTLYXPI} ${XPI_FILES} )
181 ${BUILD_JAR_SUBDIRS}:
184 ${JAR}: ${BUILD_JAR_SUBDIRS} ${JAR_FILES}
185 @echo "Building JAR..."
186 ${Q}mkdir -p $(dir ${JAR})
187 ${Q}for f in ${JAR_BIN_FILES} ; do \
188 cp $$f ${BUILD_JAR_DIR}/$$f ; \
190 ${Q}for f in ${JAR_TXT_FILES} ; do \
191 ${SED} -e "s,###VERSION###,${VERSION},g" \
192 -e "s,###DATE###,${BUILD_DATE},g" \
193 < $$f > ${BUILD_JAR_DIR}/$$f ; \
194 ( diff -q $$f ${BUILD_JAR_DIR}/$$f 1>/dev/null ) || \
195 ( echo "modified: $$f" ; \
196 diff -u $$f ${BUILD_JAR_DIR}/$$f | grep '^[-+][^-+]' ) ; \
198 ${Q}( cd ${BUILD_JAR_DIR} && ${ZIP} -r0 ${TOP}/${JAR} ${JAR_FILES} )