]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/Makefile.am
New targets for staff client Makefile
[working/Evergreen.git] / Open-ILS / xul / staff_client / Makefile.am
1 #---------------------------------------------------------
2 # Makefile.am for xul/staff_client
3 ## Process this file with automake to generate Makefile.in
4 #---------------------------------------------------------
5
6 export STAFF_CLIENT_BUILD_ID = $$(/bin/cat build/BUILD_ID)
7 export STAFF_CLIENT_VERSION = $$(/bin/cat build/VERSION)
8 export STAFF_CLIENT_STAMP_ID = $$(/bin/cat build/STAMP_ID)
9
10 # from http://closure-compiler.googlecode.com/files/compiler-latest.zip  FIXME: Autotools this?
11 export CLOSURE_COMPILER_JAR = ~/closure-compiler/compiler.jar
12 XULRUNNER_VERSION=1.9.2.16
13 XULRUNNER_WINFILE=xulrunner-$(XULRUNNER_VERSION).en-US.win32.zip
14 XULRUNNER_LINUXFILE=xulrunner-$(XULRUNNER_VERSION).en-US.linux-i686.tar.bz2
15 XULRUNNER_URL=http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/$(XULRUNNER_VERSION)/runtimes/
16
17 OPENSRF_JSLIBS = "$(OPENSRF_LIBS)/javascript"
18 CHROME_LOCALES = $$(ls -1 chrome/locale)
19 SKIN_CSS = $$(ls -1 server/skin/*css | sed -e "s/.css/_custom.css/")
20 UPDATESDIR=@localstatedir@/updates
21
22 SVN=svn # Because some people might need to override this to 'git svn' or something
23
24 export NSIS_EXTRAOPTS
25 export NSIS_WICON=$$(if [ -f client/evergreen.ico ]; then echo '-DWICON'; fi)
26 export NSIS_AUTOUPDATE=$$([ -f client/defaults/preferences/autoupdate.js ] && echo '-DAUTOUPDATE')
27 export NSIS_DEV=$$([ -f client/defaults/preferences/developers.js ] && echo '-DDEVELOPER')
28 export NSIS_PERMACHINE=$$([ -f client/defaults/preferences/aa_per_machine.js ] && echo '-DPERMACHINE')
29 # Url taken from http://nsis.sourceforge.net/AccessControl_plug-in
30 NSIS_ACCESSCONTROL=http://nsis.sourceforge.net/mediawiki/images/4/4a/AccessControl.zip
31
32 #------------------------------
33 # Build ILS XUL CLIENT/SERVER
34 #------------------------------
35
36 if BUILDILSCLIENT
37 OILSSERVER_INST = server-xul
38 endif
39
40 install-exec-local: $(OILSSERVER_INST)
41
42 # Helper target
43 # For when you want to add devbuild/permachine/autoupdate to an existing stamp id
44 rebuild: export STAFF_CLIENT_STAMP_ID=`cat PREV_STAMP_ID`
45 rebuild: export STAFF_CLIENT_VERSION=`cat PREV_VERSION`
46 rebuild: build
47
48 rigrelease:
49         @echo ' * Rigging for release branding'
50         @cp xulrunner-stub.release.exe xulrunner-stub.exe
51         @mkdir -p branding
52         @cp evergreen-icon.ico branding/evergreen.ico
53         @sed -i -e 's/^\s*;\?\s*!define UI_IMAGESET "release"/!define UI_IMAGESET "release"/' -e 's/^\s*;\?\s*!define UI_IMAGESET "beta"/;!define UI_IMAGESET "beta"/' windowssetup.nsi
54
55 rigbeta:
56         @echo ' * Rigging for beta branding'
57         @cp xulrunner-stub.beta.exe xulrunner-stub.exe
58         @mkdir -p branding
59         @cp evergreen-icon-beta.ico branding/evergreen.ico
60         @sed -i -e 's/^\s*;\?\s*!define UI_IMAGESET "release"/;!define UI_IMAGESET "release"/' -e 's/^\s*;\?\s*!define UI_IMAGESET "beta"/!define UI_IMAGESET "beta"/' windowssetup.nsi
61
62 devbuild: build
63         @echo ' * Copying in developer preferences'
64         @cp external/developers.js build/defaults/preferences/
65
66 permachine: build
67         @echo ' * Copying in default to machine level registration file'
68         @cp external/aa_per_machine.js build/defaults/preferences/
69
70 build: build_dir chrome2remote localize_manifest generated custom_skins open-ils stamp 
71         @echo To test the staff client:
72         @echo "  cd build/"
73         @echo "  xulrunner application.ini"
74
75 build_dir:
76         @echo ' * Creating and populating build/ '
77         @rm -rf build/
78         @mkdir -p build/
79         @cp -fR chrome build/
80         @cp -fR server build/
81         @cp -fR defaults build/
82         @cp -fR components build/
83         @cp application.ini build/
84         @if [ -f "install.mccoy.rdf" ]; then cp install.mccoy.rdf build/install.rdf; else cp install.rdf build/; fi
85         @cp -fR build/chrome/content/util/ build/server/
86         @cp -fR build/chrome/content/auth/ build/server/
87         @cp build/chrome/content/main/constants.js build/server/main/constants.js
88         @cp build/chrome/content/main/bindings.xml build/server/main/bindings.xml
89         @cp build/chrome/content/OpenILS/data.js build/server/OpenILS/data.js
90         @cp build/chrome/content/OpenILS/global_util.js build/server/OpenILS/global_util.js
91         @if [ -d branding ]; then cp -fR branding/* build/; fi
92         @external/prune_dirs.sh build/
93
94 # Convert chrome to remote for server localization
95 chrome2remote:
96         @for loc in $(CHROME_LOCALES); do \
97                 cp -fr chrome/locale/$$loc build/server/locale/. ; \
98         done;
99
100 # Update the manifest for our installed locales
101 localize_manifest:
102         @for loc in $(CHROME_LOCALES) ; do \
103                 if [ "$$loc" != "en-US" ]; then ( echo "locale open_ils_staff_client $$loc locale/$$loc/" >> build/chrome/chrome.manifest ) ; fi; \
104         done;
105
106 # On this page:
107 # https://developer.mozilla.org/en/xul_application_packaging
108 # The Documentation states:
109 # BUILD ID should be a unique build identifier, usually date based, and should be different for each released version
110 # VERSION should be in a format as described here:
111 # https://developer.mozilla.org/en/Toolkit_version_format
112
113 # The default "automatic" BUILD ID is acceptable.
114
115 # The version from the README usually conforms to that documentation, unless it is trunk.
116 # If we are in trunk, we probably have svn kicking around, ask it for the revision and build an appropriate version string.
117
118 # Neither really applies to the STAMP, though.
119 # The method below gives the same format STAMPS as previous instructions provided. If README has version 1.2.3.4 then STAMP_ID will become rel_1_2_3_4.
120 # Trunk VERSION will end up with 0trunk.release, trunk STAMP ID will be 0trunk_release.
121 stamp:
122         @/bin/date +"%Y%m%d.%H%M%S" > build/BUILD_ID
123         @if [ -n "${STAFF_CLIENT_BUILD_ID}" ]; then ( echo "Stamping with Build ID: ${STAFF_CLIENT_BUILD_ID}" ; echo ${STAFF_CLIENT_BUILD_ID} > build/BUILD_ID ) ; fi
124         @if [ -z "${STAFF_CLIENT_BUILD_ID}" ]; then ( echo "No Build ID for versioning" ; echo "none" > build/BUILD_ID ) ; fi
125         @sed -n -e '1 s/^.* \([^ ]*\)$$/\1/p' @top_srcdir@/README > build/VERSION
126         @if [ "${STAFF_CLIENT_VERSION}" == "trunk" ]; then echo "0trunk.$$(${SVN} info | sed -n -e 's/Last Changed Rev: \([0-9][0-9]*\)/\1/p')" > build/VERSION; fi 
127         @if [ -n "${STAFF_CLIENT_VERSION}" ]; then ( echo "Stamping with Version: ${STAFF_CLIENT_VERSION}" ; echo ${STAFF_CLIENT_VERSION} > build/VERSION ) ; fi
128         @if [ -z "${STAFF_CLIENT_VERSION}" ]; then ( echo "No Version" ; echo "none" > build/VERSION ) ; fi
129         @sed -e 's/\./_/g' -e 's/^\([0-9_]*\)$$/rel_&/' build/VERSION > build/STAMP_ID
130         @if [ -n "${STAFF_CLIENT_STAMP_ID}" ]; then ( echo "Stamping with Stamp ID: ${STAFF_CLIENT_STAMP_ID}" ; echo ${STAFF_CLIENT_STAMP_ID} > build/STAMP_ID ) ; fi
131         @if [ -z "${STAFF_CLIENT_STAMP_ID}" ]; then ( echo "No Stamp ID for versioning" ; echo "none" > build/STAMP_ID ) ; fi
132         @if [ -n "${STAFF_CLIENT_VERSION}" ]; then sed -i -e s/^Version=.\*/Version=${STAFF_CLIENT_VERSION}/ build/application.ini ; fi
133         @if [ -n "${STAFF_CLIENT_VERSION}" ]; then sed -i -e "s|<em:version>.*</em:version>|<em:version>${STAFF_CLIENT_VERSION}</em:version>|" build/install.rdf ; fi
134         @if [ -n "${STAFF_CLIENT_VERSION}" ]; then find build/ -name 'constants.js' -exec sed -i -e "s/\(CLIENT_VERSION *= '\)'/\1${STAFF_CLIENT_VERSION}'/" {} \; ; fi
135         @if [ -n "${STAFF_CLIENT_BUILD_ID}" ]; then sed -i -e s/^BuildID=.\*/BuildID=${STAFF_CLIENT_BUILD_ID}/ build/application.ini ; fi
136         @if [ -n "${STAFF_CLIENT_STAMP_ID}" ]; then find build/ -name '*.css' -exec sed -i -e s/xul\\\/server/xul\\\/${STAFF_CLIENT_STAMP_ID}\\\/server/g {} \; ; fi
137         @if [ -n "${STAFF_CLIENT_STAMP_ID}" ]; then find build/ -name '*.xul' -exec sed -i -e s/xul\\\/server/xul\\\/${STAFF_CLIENT_STAMP_ID}\\\/server/g {} \; ; fi
138         @if [ -n "${STAFF_CLIENT_STAMP_ID}" ]; then find build/ -name '*.html' -exec sed -i -e s/xul\\\/server/xul\\\/${STAFF_CLIENT_STAMP_ID}\\\/server/g {} \; ; fi
139         @if [ -n "${STAFF_CLIENT_STAMP_ID}" ]; then find build/ -name '*.xhtml' -exec sed -i -e s/xul\\\/server/xul\\\/${STAFF_CLIENT_STAMP_ID}\\\/server/g {} \; ; fi
140         @if [ -n "${STAFF_CLIENT_STAMP_ID}" ]; then find build/ -name '*.js' -exec sed -i -e s/xul\\\/server/xul\\\/${STAFF_CLIENT_STAMP_ID}\\\/server/g {} \; ; fi
141         @if [ -n "${STAFF_CLIENT_STAMP_ID}" ]; then find build/ -name '*.xml' -exec sed -i -e s/xul\\\/server/xul\\\/${STAFF_CLIENT_STAMP_ID}\\\/server/g {} \; ; fi
142         @if [ -n "${STAFF_CLIENT_STAMP_ID}" ]; then find build/ -name 'constants.js' -exec sed -i -e "s/\(CLIENT_STAMP *= '\)'/\1${STAFF_CLIENT_STAMP_ID}'/" {} \; ; fi
143         @if [ -z "${AUTOUPDATE_HOST}" ]; then rm -f build/defaults/preferences/autoupdate.js; fi
144         @if [ -z "${AUTOUPDATE_HOST}" ]; then sed -i -e /updateURL/d build/install.rdf; fi
145         @if [ -n "${AUTOUPDATE_HOST}" ]; then echo "Applying automatic update host ${AUTOUPDATE_HOST}"; fi
146         @if [ -n "${AUTOUPDATE_HOST}" ]; then sed -i -e "s|::HOSTNAME::|${AUTOUPDATE_HOST}|" -e "s|https\?://\(https\?://\)|\1|" build/defaults/preferences/autoupdate.js; fi
147         @if [ -n "${AUTOUPDATE_HOST}" ]; then sed -i -e "s|::HOSTNAME::|${AUTOUPDATE_HOST}|" -e "s|https\?://\(https\?://\)|\1|" build/install.rdf; fi
148         @cp build/STAMP_ID PREV_STAMP_ID
149         @cp build/VERSION PREV_VERSION
150
151 bell:
152         @perl -e 'print "Ringing bell..." . chr(7) . "\n";'
153
154 bundle:
155         @rm -f build/build.tar
156         @tar -c --exclude=server -f build.tar build/
157         @mv build.tar build/
158         @md5sum build/build.tar > build/build.tar.md5
159
160 generated:
161         @echo ' * Grabbing lang.dtd from the OPAC code '
162         @cp @top_srcdir@/Open-ILS/web/opac/locale/en-US/lang.dtd build/chrome/locale/en-US/
163
164 open-ils:
165         @echo ' * Grabbing more OPAC code and legacy code and custom code'
166         @cp @top_srcdir@/Open-ILS/web/opac/common/js/*.js build/chrome/content/OpenILS/util/
167         @cp $(OPENSRF_JSLIBS)/*.js build/chrome/content/OpenILS/util/
168         @external/prune_dirs.sh build/
169
170 custom_skins:
171         @for skin in $(SKIN_CSS); do \
172                 if [ ! -f "$$skin" ]; then ( touch build/"$$skin" ); fi \
173         done;
174
175 needwebdir:
176         @if [ -z "$(WEBDIR)" ]; then echo "!!!--------!!!"; echo "WEBDIR is not set. Must use top level Makefile or set WEBDIR to use this target."; echo "!!!--------!!!"; exit 1; fi
177
178 server-xul: needwebdir build
179         @echo $@
180         mkdir -p $(WEBDIR)
181         mkdir -p $(WEBDIR)/xul/
182         @echo "STAMP_ID = $(STAFF_CLIENT_STAMP_ID)"
183         @echo "Copying xul into $(WEBDIR)/xul/$(STAFF_CLIENT_STAMP_ID)"
184         mkdir -p "$(WEBDIR)/xul/$(STAFF_CLIENT_STAMP_ID)"
185         cp -R @top_srcdir@/Open-ILS/xul/staff_client/build/server "${WEBDIR}/xul/${STAFF_CLIENT_STAMP_ID}/"
186
187 compress-javascript: build
188         @echo "Size of build/ before compression = " `du -sh build/`
189         @echo " * Running Google's Closure Compiler against javascript.  Errors in build/compression.err"
190         @external/closure_compiler.sh $(CLOSURE_COMPILER_JAR) 2>> build/compression.err
191         @echo `find build/ -name '*.js~' -size 0 -print | wc -l` compression failures
192         @find build/ -name '*.js~' -size 0 -exec rm {} \; # remove the output files for those that did not compile
193         @echo `find build/ -name '*.js~' -print | wc -l` compression successes
194         @find build/ -name '*.js~' -exec perl -e '$$a = "{}"; chop $$a; `mv $$a~ $$a`;' \;
195         @echo "Size of build/ (minus compression.err) after compression = " `du -sh --exclude compression.err build/`
196
197 # Easy way to make all three kinds of clients
198
199 clients:
200         @make win-client
201         @make linux-client
202         @make generic-client
203
204 # By doing this we don't change the original build in the build folder
205 # Great for adding/changing things without a full rebuild
206
207 client_dir:
208         @if [ ! -f build/BUILD_ID ]; then echo 'ERROR! Current build not stamped!'; exit 1; fi
209         @echo 'Prepping Client Set'
210         @rm -rf client/
211         @mkdir -p client
212         @cp -fR build/* client/
213         @rm -rf client/server/
214         @rm -f client/build.tar*
215
216 # When building as a standalone client install.rdf is a bad thing
217 # as we haven't "sanitized" the client for extension use
218
219 client_app: client_dir
220         @echo 'Cleaning Extension Information'
221         @rm -f client/install.rdf
222
223 # If automatic updates are enabled, or the standalone_xul_app.js is present,
224 # the extension can break Firefox.
225 # Remove those, and we need a chrome.manifest
226
227 client_ext: client_dir
228         @echo 'Cleaning App Information'
229         @rm -f client/application.ini
230         @rm -f client/defaults/preferences/autoupdate.js
231         @rm -f client/defaults/preferences/autochannel.js
232         @rm -f client/defaults/preferences/standalone_xul_app.js
233         @echo 'Prepping chrome.manifest'
234         @perl -ne 'if(/open_ils_staff_client/) { s/ (?!chrome:\/\/open_ils_staff_client)([^ ]*)$$/ chrome\/\1/; print; }' client/chrome/chrome.manifest > client/chrome.manifest
235
236 # Would merge client_ext into this one, but this way an installer that doesn't
237 # use an xpi can be made for extension later, if desired
238
239 extension: client_ext
240         @echo ' * Packaging as an XPI'
241         @(cd client/ && zip -q -r ../evergreen.xpi * -x defaults/preferences/standalone_xul_app.js)
242         @md5sum evergreen.xpi > evergreen.xpi.md5
243
244 # Generic client, as an xpi, theoretically suitable for --install-app usage
245
246 generic-client: client_app
247         @echo 'Packing Generic Client via zip (as xpi file)'
248         @rm -f evergreen_staff_client.xpi
249         @cd client && zip -q -r ../evergreen_staff_client.xpi *
250         @echo done
251
252 # These two targets complete the layout defined on
253 # https://developer.mozilla.org/en/XULRunner/Deploying_XULRunner_1.8
254 # for their respective platforms in regards to XULRunner deployment
255
256 # Note that I decided to use win/lin channels for ease of coding platform specific updates
257
258 win-xulrunner: client_app
259         @echo 'Preparing Windows xulrunner'
260         @if [ ! -f ${XULRUNNER_WINFILE} ]; then wget ${XULRUNNER_URL}${XULRUNNER_WINFILE}; fi
261         @unzip -q ${XULRUNNER_WINFILE} -dclient
262         @if [ -f client/defaults/preferences/autoupdate.js ]; then echo 'pref("app.update.channel","win");' >> client/defaults/preferences/autochannel.js; fi;
263         @echo 'Preparing stub'
264         @if [ -f xulrunner-stub.exe ]; then cp xulrunner-stub.exe client/evergreen.exe; rm client/xulrunner/xulrunner-stub.exe; else mv client/xulrunner/xulrunner-stub.exe client/evergreen.exe; fi
265
266 linux-xulrunner: client_app
267         @echo 'Preparing Linux xulrunner'
268         @if [ ! -f ${XULRUNNER_LINUXFILE} ]; then wget ${XULRUNNER_URL}${XULRUNNER_LINUXFILE}; fi
269         @cd client; tar xjf ../${XULRUNNER_LINUXFILE}; cd ..
270         @if [ -f client/defaults/preferences/autoupdate.js ]; then echo 'pref("app.update.channel","lin");' >> client/defaults/preferences/autochannel.js; fi;
271         @echo 'Preparing stub'
272         @mv client/xulrunner/xulrunner-stub client/evergreen
273
274 # Build a windows installer.
275
276 win-client: win-xulrunner
277         @if [ "${NSIS_AUTOUPDATE}${NSIS_PERMACHINE}" -a ! -d AccessControl ]; then echo 'Fetching AccessControl Plugin'; wget ${NSIS_ACCESSCONTROL} -O AccessControl.zip; unzip AccessControl.zip; fi
278         @echo 'Building installer'
279         @makensis -V2 -DPRODUCT_VERSION="${STAFF_CLIENT_VERSION}" ${NSIS_WICON} ${NSIS_AUTOUPDATE} ${NSIS_DEV} ${NSIS_PERMACHINE} ${NSIS_EXTRAOPTS} windowssetup.nsi
280         @echo 'Done'
281
282 # For linux, just build a tar.bz2 archive
283
284 linux-client: linux-xulrunner
285         @echo 'Packing as evergreen_staff_client.tar.bz2'
286         @rm -f evergreen_staff_client.tar.bz2
287         @cd client; tar cjf ../evergreen_staff_client.tar.bz2 *; cd ..
288         @echo 'Done'
289
290 # For running the updates script with the correct updates directory, optionally building clients as well
291
292 updates updates-client win-updates win-updates-client linux-updates linux-updates-client generic-updates generic-updates-client extension-updates:
293         @if [ ! -f build/BUILD_ID ]; then echo 'ERROR! Current build not stamped!'; exit 1; fi
294         @if [ ! -x external/make_updates.sh ]; then chmod u+x external/make_updates.sh; fi
295         @if [ ! -x external/make_updates.sh ]; then echo 'ERROR! external/make_updates.sh is not executable!'; exit 1; fi
296         @external/make_updates.sh ${UPDATESDIR} $@