Release/Makefile
author Eric Richie
Sun Dec 04 16:41:29 2011 -0500 (5 months ago)
changeset 4347 5be91264f5d8
parent 4345 45eb40ad9991
child 4389 28a0306802ee
permissions -rw-r--r--
For the Localizers!

b7.
David@0
     1
###########
David@0
     2
# What to do before running this script:
David@0
     3
# - openUp needs to be installed.
David@0
     4
# - Set VERSION, BUILD_IN_DEBUG_MODE, BETA, and OFFICIAL_BUILD below.
David@0
     5
#    * The Adium plists will automatically updated to match these values.
David@0
     6
#    * BETA should be TRUE for all beta builds and FALSE for all releases.
David@0
     7
#      It primarily affects the appcast used by Adium for detecting updates.
David@0
     8
#    * BUILD_IN_DEBUG_MODE should be set to FALSE for the last beta
David@0
     9
#      in addition to the release itself. If FALSE, debug logging is disabled
David@0
    10
#      and certain space optimizations for nibs and strings are done which
David@0
    11
#      also prevent modification.
David@0
    12
#    * OFFICIAL_BUILD is TRUE for the benefit of our Adium build machine, which signs 
David@0
    13
#      official release builds. When building a release yourself, set this to FALSE, 
David@0
    14
#      since you don't have the Adium certificate on your machine.
David@0
    15
#
David@0
    16
# How to run this script:
David@0
    17
# - make all
David@0
    18
###########
David@0
    19
Eric@4347
    20
VERSION=1.5b7
David@0
    21
BUILD_IN_DEBUG_MODE?=TRUE
zacw@2237
    22
BETA?=TRUE
zacw@2241
    23
OFFICIAL_BUILD?=TRUE
David@0
    24
David@0
    25
# Always builds in debug mode.
David@0
    26
NIGHTLY?=FALSE
robotive@4075
    27
NIGHTLY_REPO?=adium #change to adium-1.4 on the 1.4 branch
robotive@4075
    28
NIGHTLY_BRANCH?=default
David@0
    29
David@0
    30
###########
David@0
    31
# To release!
David@0
    32
# Releasing requires cachefly access and adiumx.com access.
David@0
    33
#
David@0
    34
# First upload to cachefly. If you don't have access and need to do a release, get with Evan or Chris (tick).
David@0
    35
# Triggering the version checker once the release is up:
David@0
    36
# 1) Build Adium
David@0
    37
# 2) Get the number out of the 'buildnum' file in Adium.app/Contents/Resources
David@0
    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 ***
David@0
    39
# 4) Update and commit the appcast.xml file in the adium checkout root
David@0
    40
# 5) Run the appcast update php script.
David@0
    41
###########
David@0
    42
David@0
    43
###########
David@0
    44
# No need for changes below this point
David@0
    45
###########
David@0
    46
David@0
    47
###########
David@0
    48
# Variables
David@0
    49
###########
David@0
    50
SRC_DIR=..
David@0
    51
BUILD_DIR=build
David@0
    52
ART_DIR=Artwork
David@0
    53
ADIUM_DIR=$(BUILD_DIR)/Adium
David@0
    54
RELEASE_NAME=Adium_$(VERSION)
David@0
    55
VERSION_ESCAPED=$(VERSION)
David@0
    56
RELEASE_NAME_ESCAPED=Adium_$(VERSION_ESCAPED)
David@0
    57
TARBALL_DIR=adium-$(VERSION)
David@0
    58
zacw@2107
    59
REVISION = r$(shell hg parent --template {rev})
zacw@1787
    60
David@0
    61
ifeq ($(NIGHTLY),TRUE)
zacw@2239
    62
	BETA=FALSE
zacw@1787
    63
	ADIUM_DIR:=$(ADIUM_DIR)\ $(REVISION)
zacw@1787
    64
	VERSION_ESCAPED:=$(VERSION_ESCAPED)\ $(REVISION)
zacw@1787
    65
	VERSION:=$(VERSION)$(REVISION)
David@0
    66
	BUILD_IN_DEBUG_MODE=TRUE
David@0
    67
	BUILDFLAGS+="ADIUM_CFLAGS=-DNIGHTLY_RELEASE"
David@0
    68
endif
David@0
    69
David@0
    70
ifeq ($(BUILD_IN_DEBUG_MODE),TRUE)
Peter@59
    71
    BUILDSTYLE=Release-Debug
David@0
    72
else
Peter@59
    73
    BUILDSTYLE=Release
David@0
    74
endif
David@0
    75
David@0
    76
BUILDFLAGS+="BUILDCONFIGURATION=$(BUILDSTYLE)"
David@0
    77
ifeq ($(BETA),TRUE)
David@0
    78
	BUILDFLAGS+="ADIUM_CFLAGS=-DBETA_RELEASE"
David@0
    79
endif
David@0
    80
hg@2456
    81
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)
David@0
    82
David@0
    83
ifeq ($(strip $(PRODUCT_DIR)),)
David@0
    84
	ADIUM_BUILD_DIR=$(SRC_DIR)/build/$(BUILDSTYLE)
David@0
    85
else
David@0
    86
	TARGET_BUILD_DIR=$(PRODUCT_DIR)/$(BUILDSTYLE)
David@0
    87
	ADIUM_BUILD_DIR=$(TARGET_BUILD_DIR)
David@0
    88
endif
David@0
    89
David@0
    90
PLIST_DIR=`pwd`/../Plists
David@0
    91
ADIUM_PLIST=$(PLIST_DIR)/Info
David@0
    92
David@0
    93
###########
David@0
    94
# Targets
David@0
    95
###########
zacw@1341
    96
.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
David@0
    97
David@0
    98
all: update assertnochanges version clean compile release
David@0
    99
all-withlocalchanges: update assertnoconflicts version clean compile release
David@0
   100
all-withlocalchanges-noclean: update assertnoconflicts version compile release
David@0
   101
David@0
   102
#doesn't bother putting things in a dmg
David@0
   103
#useful for builds not intended for distribution
zacw@1341
   104
all-nopackage-noclean: update assertnoconflicts version compile createfolder prepare-release-bundle
David@0
   105
David@0
   106
update:
zacwest@1790
   107
	hg pull -uf
David@0
   108
David@0
   109
assertnochanges: assertnoconflicts
zacwest@1790
   110
	if [[ 0 -ne `hg st $(SRC_DIR) | egrep --invert-match '\?|Info\.plist' | wc -l` ]]; then \
David@0
   111
		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; \
David@0
   112
		exit 1; \
David@0
   113
	fi
David@0
   114
assertnoconflicts:
zacwest@1790
   115
	if [[ 0 -ne `hg st $(SRC_DIR) | egrep '^C' | wc -l` ]]; then \
zacwest@1790
   116
		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; \
David@0
   117
		exit 2; \
David@0
   118
	fi
David@0
   119
David@0
   120
version:
David@0
   121
	@# update the plists
robotive@4075
   122
	defaults write $(ADIUM_PLIST) CFBundleGetInfoString "$(VERSION), Copyright 2001-$(shell date +"%Y") The Adium Team"
David@0
   123
	defaults write $(ADIUM_PLIST) CFBundleVersion "$(VERSION)"
David@0
   124
	defaults write $(ADIUM_PLIST) CFBundleShortVersionString "$(VERSION)"
robotive@4075
   125
ifeq ($(NIGHTLY),TRUE)
robotive@4077
   126
	defaults write $(ADIUM_PLIST) AINightlyRepo "$(NIGHTLY_REPO)"
robotive@4077
   127
	defaults write $(ADIUM_PLIST) AINightlyBranch "$(NIGHTLY_BRANCH)"
robotive@4078
   128
endif
David@0
   129
	plutil -convert xml1 $(ADIUM_PLIST).plist
David@0
   130
David@0
   131
compile:
David@0
   132
	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
David@0
   133
David@0
   134
testcompile:
David@0
   135
	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
David@0
   136
David@0
   137
clean:
David@0
   138
	rm -rf $(BUILD_DIR)
David@0
   139
	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR) clean
David@0
   140
zacw@1341
   141
release: createfolder prepare-release-bundle diskimage
David@0
   142
David@0
   143
prepare-release-bundle:
David@0
   144
	@# Convert all nibs to the smaller binary format
David@0
   145
	@echo Converting nibs to binary format...
David@0
   146
	find $(BUILD_DIR) -name keyedobjects.nib -print0 | xargs -0 plutil -convert binary1
David@0
   147
David@0
   148
	@# delete unneeded nib files for non-beta builds
David@0
   149
	@echo Cleaning Adium.app for release
David@0
   150
ifeq ($(BUILD_IN_DEBUG_MODE),FALSE)
Smew@3098
   151
	find $(BUILD_DIR) \( -name classes.nib -or -name info.nib -or -name designable.nib \) -type f -delete
David@0
   152
endif
robotive@4075
   153
zacwest@1790
   154
	@# delete backup files
David@0
   155
	find $(BUILD_DIR) \( -name "*~" -or -name .DS_Store \) -type f -delete
robotive@4075
   156
catfish@1807
   157
	@# delete header files
zacw@1843
   158
	find $(BUILD_DIR) \( -name "*.h" \) -type f -delete
David@0
   159
David@0
   160
	@# sign the executable
David@0
   161
ifeq ($(OFFICIAL_BUILD),TRUE)
David@0
   162
	if [ -e ~/adium-password ]; then \
David@0
   163
		security unlock-keychain -p `cat ~/adium-password`; \
David@0
   164
	fi
David@0
   165
	codesign -v -s Adium $(ADIUM_DIR)/Adium.app/Contents/MacOS/Adium
David@0
   166
endif
David@0
   167
David@0
   168
createfolder:
David@0
   169
	@# clean build directory
David@0
   170
	rm -rf $(BUILD_DIR)
David@0
   171
	mkdir $(BUILD_DIR)
David@0
   172
David@0
   173
	mkdir $(ADIUM_DIR)
robotive@4075
   174
David@0
   175
	@# copy the app
hg@2455
   176
	cp -R "$(ADIUM_BUILD_DIR)/Adium.app" $(ADIUM_DIR)
David@0
   177
David@0
   178
	@# copy the text files
David@0
   179
	cp $(SRC_DIR)/ChangeLogs/Changes.txt $(ADIUM_DIR)
David@0
   180
	cp $(SRC_DIR)/License.txt $(ADIUM_DIR)
robotive@4075
   181
David@0
   182
	@# symlink /Applications
David@0
   183
	./mkalias -r /Applications $(ADIUM_DIR)/Applications
David@0
   184
David@0
   185
diskimage:
David@0
   186
	rm "$(BUILD_DIR)/$(RELEASE_NAME).dmg" || true
David@0
   187
	@# make Adium disk image
David@0
   188
	mkdir -p $(ADIUM_DIR)/.background
David@0
   189
	cp $(ART_DIR)/dmgBackground.png $(ADIUM_DIR)/.background
David@0
   190
David@0
   191
	./ensureCustomIconsExtracted $(ART_DIR)
zacw@2073
   192
	./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_NAME).dmg $(ADIUM_DIR) "Adium $(VERSION)" dmg_adium.scpt $(ART_DIR)
robotive@4075
   193
zacw@1329
   194
ifeq ($(OFFICIAL_BUILD),TRUE)
zacw@1338
   195
	@echo DSA for Sparkle: `ruby sign_update.rb $(BUILD_DIR)/$(RELEASE_NAME_ESCAPED).dmg ~/adium-dsa-sign/dsa_priv.pem`
zacw@1329
   196
endif
zacw@1329
   197
David@0
   198
	@echo Build finished. `md5 $(BUILD_DIR)/$(RELEASE_NAME_ESCAPED).dmg`
David@0
   199
David@0
   200
#This is what nightly builds use. Does not update because buildbot does.
zacw@2071
   201
nightly: version clean compile createfolder prepare-release-bundle diskimage
zacw@1976
   202
	echo $(RELEASE_NAME) > $(BUILD_DIR)/latest.info
zacw@1976
   203
	echo $(REVISION) >> $(BUILD_DIR)/latest.info
zacw@2071
   204
	md5 -q $(BUILD_DIR)/$(RELEASE_NAME).dmg >> $(BUILD_DIR)/latest.info
zacw@2071
   205
	md5 -q $(BUILD_DIR)/$(RELEASE_NAME).dmg >> $(BUILD_DIR)/$(RELEASE_NAME).dmg.md5
zacw@2071
   206
	ls -l $(BUILD_DIR)/$(RELEASE_NAME).dmg | awk '{print $$5}' >>$(BUILD_DIR)/latest.info
zacw@1976
   207
	echo $(VERSION) >> $(BUILD_DIR)/latest.info
zacw@1340
   208
ifeq ($(OFFICIAL_BUILD),TRUE)
zacw@2071
   209
	ruby sign_update.rb $(BUILD_DIR)/$(RELEASE_NAME).dmg ~/adium-dsa-sign/dsa_priv.pem >> $(BUILD_DIR)/latest.info
zacw@1340
   210
endif
zacw@1316
   211
zacw@1316
   212
tarballapp:
zacw@1848
   213
	rm $(BUILD_DIR)/$(RELEASE_NAME).tgz || true
zacwest@1790
   214
	cd $(BUILD_DIR) && tar zcf $(RELEASE_NAME).tgz Adium*/ && cd ..
David@0
   215
David@0
   216
tarball:
robotive@4075
   217
	hg archive -t tgz ($TARBALL_DIR).tgz