Version up for rc1.
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?=TRUE
25 # Always builds in debug mode.
27 NIGHTLY_REPO?=adium #change to adium-1.4 on the 1.4 branch
28 NIGHTLY_BRANCH?=default
32 # Releasing requires cachefly access and adiumx.com access.
34 # First upload to cachefly. If you don't have access and need to do a release, get with Evan or Chris (tick).
35 # Triggering the version checker once the release is up:
37 # 2) Get the number out of the 'buildnum' file in Adium.app/Contents/Resources
38 # 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 ***
39 # 4) Update and commit the appcast.xml file in the adium checkout root
40 # 5) Run the appcast update php script.
44 # No need for changes below this point
53 ADIUM_DIR=$(BUILD_DIR)/Adium
54 RELEASE_NAME=Adium_$(VERSION)
55 VERSION_ESCAPED=$(VERSION)
56 RELEASE_NAME_ESCAPED=Adium_$(VERSION_ESCAPED)
57 TARBALL_DIR=adium-$(VERSION)
59 REVISION = r$(shell hg parent --template {rev})
61 ifeq ($(NIGHTLY),TRUE)
63 ADIUM_DIR:=$(ADIUM_DIR)\ $(REVISION)
64 VERSION_ESCAPED:=$(VERSION_ESCAPED)\ $(REVISION)
65 VERSION:=$(VERSION)$(REVISION)
66 BUILD_IN_DEBUG_MODE=TRUE
67 BUILDFLAGS+="ADIUM_CFLAGS=-DNIGHTLY_RELEASE"
68 BUILDFLAGS+="ADIUM_NIGHTLY_FLAGS=CACHE_ROOT=/var/tmp/buildbot/com.apple.Xcode.$(strip $(shell id -u))/nightly/$(strip $(NIGHTLY_REPO))/$(strip $(NIGHTLY_BRANCH))" # Required, otherwise wrong precompiled headers are used.
71 ifeq ($(BUILD_IN_DEBUG_MODE),TRUE)
72 BUILDSTYLE=Release-Debug
77 BUILDFLAGS+="BUILDCONFIGURATION=$(BUILDSTYLE)"
80 BUILDFLAGS+="ADIUM_CFLAGS=-DBETA_RELEASE"
83 PRODUCT_DIR=$(shell defaults read com.apple.Xcode PBXApplicationwideBuildSettings 2> /dev/null > XcodeBuildSettings.plist && defaults read $PWD/XcodeBuildSettings SYMROOT 2> /dev/null; rm XcodeBuildSettings.plist)
85 ifeq ($(strip $(PRODUCT_DIR)),)
86 ADIUM_BUILD_DIR=$(SRC_DIR)/build/$(BUILDSTYLE)
88 TARGET_BUILD_DIR=$(PRODUCT_DIR)/$(BUILDSTYLE)
89 ADIUM_BUILD_DIR=$(TARGET_BUILD_DIR)
92 PLIST_DIR=`pwd`/../Plists
93 ADIUM_PLIST=$(PLIST_DIR)/Info
98 .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
100 all: update assertnochanges version clean compile release
101 all-withlocalchanges: update assertnoconflicts version clean compile release
102 all-withlocalchanges-noclean: update assertnoconflicts version compile release
104 #doesn't bother putting things in a dmg
105 #useful for builds not intended for distribution
106 all-nopackage-noclean: update assertnoconflicts version compile createfolder prepare-release-bundle
111 assertnochanges: assertnoconflicts
112 if [[ 0 -ne `hg st $(SRC_DIR) | egrep --invert-match '\?|Info\.plist' | wc -l` ]]; then \
113 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; \
117 if [[ 0 -ne `hg st $(SRC_DIR) | egrep '^C' | wc -l` ]]; then \
118 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 "hg resolve"; otherwise, hg will still believe the files are conflicted.' 1>&2; \
124 defaults write $(ADIUM_PLIST) CFBundleGetInfoString "$(VERSION), Copyright 2001-$(shell date +"%Y") The Adium Team"
125 defaults write $(ADIUM_PLIST) CFBundleVersion "$(VERSION)"
126 defaults write $(ADIUM_PLIST) CFBundleShortVersionString "$(VERSION)"
127 ifeq ($(NIGHTLY),TRUE)
128 defaults write $(ADIUM_PLIST) AINightlyRepo "$(NIGHTLY_REPO)"
129 defaults write $(ADIUM_PLIST) AINightlyBranch "$(NIGHTLY_BRANCH)"
131 plutil -convert xml1 $(ADIUM_PLIST).plist
134 $(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
137 $(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
141 $(MAKE) $(BUILDFLAGS) -C $(SRC_DIR) clean
143 release: createfolder prepare-release-bundle diskimage
145 prepare-release-bundle:
146 @# Convert all nibs to the smaller binary format
147 @echo Converting nibs to binary format...
148 find $(BUILD_DIR) -name keyedobjects.nib -print0 | xargs -0 plutil -convert binary1
150 @# delete unneeded nib files for non-beta builds
151 @echo Cleaning Adium.app for release
152 ifeq ($(BUILD_IN_DEBUG_MODE),FALSE)
153 find $(BUILD_DIR) \( -name classes.nib -or -name info.nib -or -name designable.nib \) -type f -delete
156 @# delete backup files
157 find $(BUILD_DIR) \( -name "*~" -or -name .DS_Store \) -type f -delete
159 @# delete header files
160 find $(BUILD_DIR) \( -name "*.h" \) -type f -delete
162 @# sign the executable
163 ifeq ($(OFFICIAL_BUILD),TRUE)
164 if [ -e ~/adium-password ]; then \
165 security unlock-keychain -p `cat ~/adium-password`; \
167 codesign -v -s Adium $(ADIUM_DIR)/Adium.app/Contents/MacOS/Adium
171 @# clean build directory
178 cp -R "$(ADIUM_BUILD_DIR)/Adium.app" $(ADIUM_DIR)
180 @# copy the text files
181 cp $(SRC_DIR)/ChangeLogs/Changes.txt $(ADIUM_DIR)
182 cp $(SRC_DIR)/License.txt $(ADIUM_DIR)
184 @# symlink /Applications
185 ./mkalias -r /Applications $(ADIUM_DIR)/Applications
188 rm "$(BUILD_DIR)/$(RELEASE_NAME).dmg" || true
189 @# make Adium disk image
190 mkdir -p $(ADIUM_DIR)/.background
191 cp $(ART_DIR)/dmgBackground.png $(ADIUM_DIR)/.background
193 ./ensureCustomIconsExtracted $(ART_DIR)
194 ./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_NAME).dmg $(ADIUM_DIR) "Adium $(VERSION)" dmg_adium.scpt $(ART_DIR)
196 ifeq ($(OFFICIAL_BUILD),TRUE)
197 @echo DSA for Sparkle: `ruby sign_update.rb $(BUILD_DIR)/$(RELEASE_NAME_ESCAPED).dmg ~/adium-dsa-sign/dsa_priv.pem`
200 @echo Build finished. `md5 $(BUILD_DIR)/$(RELEASE_NAME_ESCAPED).dmg`
202 #This is what nightly builds use. Does not update because buildbot does.
203 nightly: version clean compile createfolder prepare-release-bundle diskimage
204 echo $(RELEASE_NAME) > $(BUILD_DIR)/latest.info
205 echo $(REVISION) >> $(BUILD_DIR)/latest.info
206 md5 -q $(BUILD_DIR)/$(RELEASE_NAME).dmg >> $(BUILD_DIR)/latest.info
207 md5 -q $(BUILD_DIR)/$(RELEASE_NAME).dmg >> $(BUILD_DIR)/$(RELEASE_NAME).dmg.md5
208 ls -l $(BUILD_DIR)/$(RELEASE_NAME).dmg | awk '{print $$5}' >>$(BUILD_DIR)/latest.info
209 echo $(VERSION) >> $(BUILD_DIR)/latest.info
210 ifeq ($(OFFICIAL_BUILD),TRUE)
211 ruby sign_update.rb $(BUILD_DIR)/$(RELEASE_NAME).dmg ~/adium-dsa-sign/dsa_priv.pem >> $(BUILD_DIR)/latest.info
215 rm $(BUILD_DIR)/$(RELEASE_NAME).tgz || true
216 cd $(BUILD_DIR) && tar zcf $(RELEASE_NAME).tgz Adium*/ && cd ..
219 hg archive -t tgz ($TARBALL_DIR).tgz