1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
LANGUAGES_BUILD=bs ca cs da de en_GB en_US es et fa fi fr he hr hu it lt nb nl pl pt ru sk sl sv tr vi
LANGUAGES_EXTRA=af ar dv el en_AU fo gl id nn oc pt_BR ro sr sr@Latn ta zh
PO_DIR=po
MO_DIR=mo
MO_FILES=$(patsubst %,$(MO_DIR)/%.mo,$(LANGUAGES_BUILD) $(LANGUAGES_EXTRA))
MO_EXTRA=$(patsubst %,webtrees/language/%.mo,$(LANGUAGES_EXTRA))
SHELL=bash
SVN_VERSION=$(shell svnversion .. | tr -d 'M')
WT_VERSION=$(shell grep "'WT_VERSION'" ../includes/session.php | cut -d "'" -f 4)
WT_VERSION_RELEASE=$(shell grep "'WT_VERSION_RELEASE'" ../includes/session.php | cut -d "'" -f 4)
BUILD_VERSION=$(if $(WT_VERSION_RELEASE),$(SVN_VERSION),$(WT_VERSION)$(WT_VERSION_RELEASE))
################################################################################
# Create a release from this SVN working copy
################################################################################
default: clean webtrees
# Package up the extra language files
zip -qr language-extra.zip $(MO_EXTRA)
rm -f $(MO_EXTRA)
zip -qr language.zip webtrees/language
zip -qr webtrees-$(BUILD_VERSION).zip webtrees
# If we have a GNU private key, sign the file with it
if test -d ~/.gnupg; then gpg --armor --sign --detach-sig webtrees-$(BUILD_VERSION).zip; fi
# If we have a public html area, publish the files
if test -d ~/public_html; then mkdir -p ~/public_html/build && cp language*.zip webtrees*.zip ~/public_html/build/ && echo ${BUILD_VERSION} > ~/public_html/build/latest-svn.txt; fi
# If we have a public html area, clean up old files
if test -d ~/public_html/build; then find ~/public_html/build -ctime +7 -exec rm -f {} \; ; fi
# Create an updated message catalog
mkdir -p webtrees_tmp
rm -Rf webtrees_tmp/*
find webtrees/modules_v3 -name "*.xml" | while read file; do sed -e 's~\(WT_I18N::[^)]*[)]\)~<?php echo \1; ?>~g' $$file > webtrees_tmp/$$(echo $$file.php | cut -c 10- | tr / _); done
find webtrees webtrees_tmp -name "*.php" | xargs xgettext --package-name=webtrees --package-version=1.0 --msgid-bugs-address=i18n@webtrees.net --output=webtrees.pot --no-wrap --language=PHP --add-comments=I18N --from-code=utf-8 --keyword --keyword=translate:1 --keyword=translate_c:1c,2 --keyword=plural:1,2 --keyword=noop:1
rm -Rf webtrees_tmp webtrees
################################################################################
# Remove temporary and intermediate files
################################################################################
clean:
rm -Rf webtrees* mo language.zip language-extra.zip
################################################################################
# Remove temporary and intermediate files
################################################################################
dist-clean: clean
rm -Rf po
################################################################################
# Create a release from this SVN working copy
################################################################################
webtrees: $(PO_DIR) $(MO_DIR)
svn export .. $@
bzr revert $(PO_DIR)
bzr update $(PO_DIR)
make $(MO_FILES)
# Embed the SVN version number in the code (for SVN builds only)
sed -i "s/define('WT_VERSION_RELEASE', 'svn')/define('WT_VERSION_RELEASE', 'svn$(SVN_VERSION)')/" $@/includes/session.php
# Exclude unused Zend Framework components
rm -R $@/library/Zend/{Acl,Amf,Application,Auth,Barcode,Captcha,CodeGenerator,Console,Controller,Config,Crypt,Currency,Date,Db,Debug,Dojo,Dom,Feed,File,Form,Gdata,Http,InfoCard,Json,Layout,Ldap,Log,Mail,Markup,Measure,Memory,Mime,Navigation,Oauth,OpenId,Paginator,Pdf,ProgressBar,Queue,Reflection,Rest,Search,Serializer,Service,Soap,Test,Text,TimeSync,Tool,Uri,Validate,Version,View,Wildfire,XmlRpc}*
# Exclude unused locale data
rm -f $@/library/Zend/Locale/Data/{aa,ak,am,ar_,as,az,be,bg,bn,bo,byn,ca_,cch,cop,cs_CZ,cy,da_,de_,dv_,dz,ee,el_,en_{AS,B,C,D,GU,H,I,J,M,N,P,S,T,UM,US_,VI,ZA,ZW},eo,es_,eu,et_,fa_,fil,fo_,fr_,fur,ga,gaa,gez,gsw,gu,gv,ha,haw,he_,hi,hr_,hu_,hy,ia,id_,ig,ii,in,is,it_,iu,iw,j,k,ln,lo,lt_,lv,m{k,l,n,o,r,t,y},nb_,nd,ne,nl_,no,nn_,nso,nr,ny,oc_,om,or,pa,pl_,ps,pt_PT,ro_,ru_,rw,sa,se,sh,si,sk_,sl_,so,sq,sr_B,sr_C,sr_Latn_,sr_ME,sr_RS,sr_YU,ss,st,sv_,sw,syr,ta_,te,tg,th,ti,tl,tn,to,tr_,trv,ts,tt,u,ve,vi_,w,x,y,zh_H,zh_{MO,SG,TW},zu}*.xml
rm -Rf $@/build
# Check for syntax errors
if find $@ -name '*.php' -exec php -l {} \; | grep -v "No syntax errors"; then false; else true; fi
# Add standard language files
cp $(MO_FILES) $@/language/
################################################################################
# Zip a directory to create an archive
################################################################################
%.zip: %
zip -qrTm $@ $<
################################################################################
# PO files are stored in launchpad.net
# NOTE: due to a bug in launchpad, translations can only be exported to branches
# owned by individuals (fisharebest), rather than teams (webtrees-team)
################################################################################
$(PO_DIR):
mkdir -p $@
bzr checkout lp:~fisharebest/webtrees/translations $@
$(MO_DIR):
mkdir -p $@
################################################################################
# Compile PO files to make MO files. Most MO files correspond exactly to their
# PO file, but there are some special cases.
################################################################################
$(MO_DIR)/sr@Latn.mo: $(PO_DIR)/sr@latin.po
msgfmt --output=$@ $<
$(MO_DIR)/zh.mo: $(PO_DIR)/zh_CN.po
msgfmt --output=$@ $<
$(MO_DIR)/en_US.mo: en_US.po
msgfmt --output=$@ $<
$(MO_DIR)/%.mo: $(PO_DIR)/%.po
msgfmt --output=$@ $<
################################################################################
# Extract the static files for use on a content-delivery-network.
# Minify the CSS and JS files, if a suitable tool is available.
################################################################################
webtrees-static-$(WT_VERSION):
rm -Rf $@
mkdir $@
cd .. && find . "(" -name "*.css" -o -name "*.gif" -o -name "*.html" -o -name "*.ico" -o -name "*.jpg" -o -name "*.js" -o -name "*.mp3" -o -name "*.png" -o -name "*.swf" ")" -print0 | xargs -0 tar cf - | (cd build/$@ && tar xfp -)
# Minify CSS using the YUI compressor
if [ -f ~/bin/yuicompressor-2.4.6.jar ]; then find $@ -name "*.css" | while read FILE; do java -jar ~/bin/yuicompressor-2.4.6.jar --charset UTF-8 --verbose -o tmp.css "$$FILE" && mv tmp.css "$$FILE"; done; fi
# Minify JS using Google's closure compiler
if [ -f ~/bin/compiler.jar ]; then find $@ -name "*.js" | while read FILE; do java -jar ~/bin/compiler.jar --js "$$FILE" --js_output_file tmp.js && mv tmp.js "$$FILE"; done; fi
################################################################################
# Create a second copy of the static files, with compressed CSS and JS,
# for servers that require two versions, such as Amazon S3
################################################################################
webtrees-static-$(WT_VERSION)z: webtrees-static-$(WT_VERSION)
cp -pR $< $@
find $@ "(" -name "*.js" -o -name "*.css" ")" -exec gzip {} \; -exec mv {}.gz {} \;
################################################################################
# Create .ZIP archives of the static files, for use with a CDN.
################################################################################
static: webtrees-static-$(WT_VERSION)z.zip webtrees-static-$(WT_VERSION).zip
################################################################################
# Upload the static files to an S3 bucket.
# Explicitly set the mime type for files that we have compressed.
# Set the bucket using, for example, "export S3_BUCKET=my_bucket".
################################################################################
static-S3: webtrees-static-$(WT_VERSION) webtrees-static-$(WT_VERSION)z
s3cmd sync --acl-private --no-delete-removed --add-header=Cache-Control:public,max-age=864000 --guess-mime-type webtrees-static-$(WT_VERSION) s3://$(S3_BUCKET)/
s3cmd sync --acl-private --no-delete-removed --add-header=Cache-Control:public,max-age=864000 --guess-mime-type "--rexclude=(css|js)$$" webtrees-static-$(WT_VERSION)z s3://$(S3_BUCKET)/
s3cmd sync --acl-private --no-delete-removed --add-header=Cache-Control:public,max-age=864000 --mime-type=text/css --add-header=Content-Encoding:gzip "--rinclude=css$$" webtrees-static-$(WT_VERSION)z s3://$(S3_BUCKET)/
s3cmd sync --acl-private --no-delete-removed --add-header=Cache-Control:public,max-age=864000 --mime-type=application/javascript --add-header=Content-Encoding:gzip "--rinclude=js$$" webtrees-static-$(WT_VERSION)z s3://$(S3_BUCKET)/
|