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