Guess we're not done with this yet...
2 # What to do before running this script:
3 # - openUp needs to be installed.
4 # - Set VERSION, BUILD_IN_DEBUG_MODE, BETA, and OFFICIAL_BUILD below.
5 # * The Adium plists will automatically updated to match these values.
6 # * BETA should be TRUE for all beta builds and FALSE for all releases.
7 # It primarily affects the appcast used by Adium for detecting updates.
8 # * BUILD_IN_DEBUG_MODE should be set to FALSE for the last beta
9 # in addition to the release itself. If FALSE, debug logging is disabled
10 # and certain space optimizations for nibs and strings are done which
11 # also prevent modification.
12 # * OFFICIAL_BUILD is TRUE for the benefit of our Adium build machine, which signs
13 # official release builds. When building a release yourself, set this to FALSE,
14 # since you don't have the Adium certificate on your machine.
16 # How to run this script:
21 BUILD_IN_DEBUG_MODE?=FALSE
25 # Always builds in debug mode.
30 # Releasing requires cachefly access and adiumx.com access.
32 # First upload to cachefly. If you don't have access and need to do a release, get with Evan or Eric.
33 # Triggering the version checker once the release is up:
35 # 2) Get the number out of the 'buildnum' file in Adium.app/Contents/Resources
36 # 3) Paste that number into the appropriate place (adium version or adium-beta version, depending on which you're triggering) in the version.plist file in our public_html folder. *** (2) and (3) are to support the old version checker, in Adium 0.8x and earlier ***
37 # 4) Update and commit the appcast.xml file in the adium checkout root
38 # 5) Run the appcast update php script.
42 # No need for changes below this point
51 ADIUM_DIR=$(BUILD_DIR)/Adium
52 RELEASE_NAME=Adium_$(VERSION)
53 VERSION_ESCAPED=$(VERSION)
54 RELEASE_NAME_ESCAPED=Adium_$(VERSION_ESCAPED)
55 TARBALL_DIR=adium-$(VERSION)
57 ifeq ($(NIGHTLY),TRUE)
58 VERSION_ESCAPED:=$(VERSION_ESCAPED)\`date +%Y%m%d\`
59 VERSION:=$(VERSION)`date +%Y%m%d`
60 BUILD_IN_DEBUG_MODE=TRUE
61 BUILDFLAGS+="ADIUM_CFLAGS=-DNIGHTLY_RELEASE"
64 ifeq ($(BUILD_IN_DEBUG_MODE),TRUE)
65 BUILDSTYLE=Deployment-Debug
70 BUILDFLAGS+="BUILDCONFIGURATION=$(BUILDSTYLE)"
72 BUILDFLAGS+="ADIUM_CFLAGS=-DBETA_RELEASE"
75 PRODUCT_DIR=$(shell defaults read com.apple.Xcode PBXProductDirectory 2> /dev/null)
77 ifeq ($(strip $(PRODUCT_DIR)),)
78 ADIUM_BUILD_DIR=$(SRC_DIR)/build/$(BUILDSTYLE)
80 TARGET_BUILD_DIR=$(PRODUCT_DIR)/$(BUILDSTYLE)
81 ADIUM_BUILD_DIR=$(TARGET_BUILD_DIR)
84 PLIST_DIR=`pwd`/../Plists
85 ADIUM_PLIST=$(PLIST_DIR)/Info
90 .PHONY: all all-withlocalchanges all-withlocalchanges-noclean all-nopackage-noclean all-nightly update assertnochanges assertnoconflicts version compile clean release source prepare-release-bundle createfolder diskimage nightly tarball
92 all: update assertnochanges version clean compile release
93 all-withlocalchanges: update assertnoconflicts version clean compile release
94 all-withlocalchanges-noclean: update assertnoconflicts version compile release
96 #doesn't bother putting things in a dmg
97 #useful for builds not intended for distribution
98 all-nopackage-noclean: update assertnoconflicts version compile createfolder prepare-release-bundle
101 svn update $(SRC_DIR)
103 assertnochanges: assertnoconflicts
104 if [[ 0 -ne `svn st $(SRC_DIR) | egrep --invert-match '\?|Info\.plist' | wc -l` ]]; then \
105 echo 'You have local changes. Please do not build releases from an unclean checkout. You must revert the changes, commit them, or check out another working copy and build from that.' 1>&2; \
109 if [[ 0 -ne `svn st $(SRC_DIR) | egrep '^C' | wc -l` ]]; then \
110 echo 'You have conflicts in your checkout. You will not be able to build until these are resolved. Also, remember that even after you have fixed all conflict marks, you must use "svn resolved"; otherwise, svn will still believe the files are conflicted.' 1>&2; \
116 defaults write $(ADIUM_PLIST) CFBundleGetInfoString "$(VERSION), Copyright 2001-2008 The Adium Team"
117 defaults write $(ADIUM_PLIST) CFBundleVersion "$(VERSION)"
118 defaults write $(ADIUM_PLIST) CFBundleShortVersionString "$(VERSION)"
119 plutil -convert xml1 $(ADIUM_PLIST).plist
122 $(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
125 $(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
129 $(MAKE) $(BUILDFLAGS) -C $(SRC_DIR) clean
131 release: createfolder prepare-release-bundle diskimage
133 prepare-release-bundle:
134 @# Convert all nibs to the smaller binary format
135 @echo Converting nibs to binary format...
136 find $(BUILD_DIR) -name keyedobjects.nib -print0 | xargs -0 plutil -convert binary1
138 @# delete unneeded nib files for non-beta builds
139 @echo Cleaning Adium.app for release
140 ifeq ($(BUILD_IN_DEBUG_MODE),FALSE)
141 find $(BUILD_DIR) \( -name classes.nib -or -name info.nib \) -type f -delete
144 @# delete svn and backup files
145 find $(BUILD_DIR) -name ".svn" -type d -exec rm -rf {} \; -prune
146 find $(BUILD_DIR) \( -name "*~" -or -name .DS_Store \) -type f -delete
148 @# sign the executable
149 ifeq ($(OFFICIAL_BUILD),TRUE)
150 if [ -e ~/adium-password ]; then \
151 security unlock-keychain -p `cat ~/adium-password`; \
153 codesign -v -s Adium $(ADIUM_DIR)/Adium.app/Contents/MacOS/Adium
157 @# clean build directory
164 cp -R $(ADIUM_BUILD_DIR)/Adium.app $(ADIUM_DIR)
166 @# copy the text files
167 cp $(SRC_DIR)/ChangeLogs/Changes.txt $(ADIUM_DIR)
168 cp $(SRC_DIR)/License.txt $(ADIUM_DIR)
170 @# symlink /Applications
171 ./mkalias -r /Applications $(ADIUM_DIR)/Applications
174 rm "$(BUILD_DIR)/$(RELEASE_NAME).dmg" || true
175 @# make Adium disk image
176 mkdir -p $(ADIUM_DIR)/.background
177 cp $(ART_DIR)/dmgBackground.png $(ADIUM_DIR)/.background
179 ./ensureCustomIconsExtracted $(ART_DIR)
180 ./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_NAME).dmg $(ADIUM_DIR) "Adium X $(VERSION)" dmg_adium.scpt $(ART_DIR)
182 @echo Build finished. `md5 $(BUILD_DIR)/$(RELEASE_NAME_ESCAPED).dmg`
184 #This is what nightly builds use. Does not update because buildbot does.
185 nightly: assertnochanges version clean compile release
186 echo $(RELEASE_NAME) > $(BUILD_DIR)/latest
187 (svn info | perl -nle 's/Revision: ([0-9]+)/$$1/g and print "r".$$_') >> $(BUILD_DIR)/latest
188 md5 -q $(BUILD_DIR)/$(RELEASE_NAME).dmg > $(BUILD_DIR)/$(RELEASE_NAME).dmg.md5sum
191 svn export -q --non-interactive $(SRC_DIR) $(TARBALL_DIR)
192 tar zcf $(TARBALL_DIR).tgz $(TARBALL_DIR)
193 rm -rf $(TARBALL_DIR)