Release/Makefile
author Zachary West <zacw@adium.im>
Sun May 17 16:47:13 2009 -0400 (2009-05-17)
branchadium-1.3
changeset 341 8d7ab9d0f614
parent 339 e57f9ea7df95
child 343 7d85f1a8ba50
permissions -rw-r--r--
1.3.4
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@341
    20
VERSION=1.3.4
zacw@341
    21
BUILD_IN_DEBUG_MODE?=FALSE
zacw@338
    22
BETA?=FALSE
Evan@315
    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
#
Eric@96
    32
# First upload to cachefly. If you don't have access and need to do a release, get with Evan or Eric.
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
David@0
    57
ifeq ($(NIGHTLY),TRUE)
David@0
    58
	VERSION_ESCAPED:=$(VERSION_ESCAPED)\`date +%Y%m%d\`
David@0
    59
	VERSION:=$(VERSION)`date +%Y%m%d`
David@0
    60
	BUILD_IN_DEBUG_MODE=TRUE
David@0
    61
	BUILDFLAGS+="ADIUM_CFLAGS=-DNIGHTLY_RELEASE"
David@0
    62
endif
David@0
    63
David@0
    64
ifeq ($(BUILD_IN_DEBUG_MODE),TRUE)
David@0
    65
    BUILDSTYLE=Deployment-Debug
David@0
    66
else
David@0
    67
    BUILDSTYLE=Deployment
David@0
    68
endif
David@0
    69
David@0
    70
BUILDFLAGS+="BUILDCONFIGURATION=$(BUILDSTYLE)"
David@0
    71
ifeq ($(BETA),TRUE)
David@0
    72
	BUILDFLAGS+="ADIUM_CFLAGS=-DBETA_RELEASE"
David@0
    73
endif
David@0
    74
David@0
    75
PRODUCT_DIR=$(shell defaults read com.apple.Xcode PBXProductDirectory 2> /dev/null)
David@0
    76
David@0
    77
ifeq ($(strip $(PRODUCT_DIR)),)
David@0
    78
	ADIUM_BUILD_DIR=$(SRC_DIR)/build/$(BUILDSTYLE)
David@0
    79
else
David@0
    80
	TARGET_BUILD_DIR=$(PRODUCT_DIR)/$(BUILDSTYLE)
David@0
    81
	ADIUM_BUILD_DIR=$(TARGET_BUILD_DIR)
David@0
    82
endif
David@0
    83
David@0
    84
PLIST_DIR=`pwd`/../Plists
David@0
    85
ADIUM_PLIST=$(PLIST_DIR)/Info
David@0
    86
David@0
    87
###########
David@0
    88
# Targets
David@0
    89
###########
David@0
    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
David@0
    91
David@0
    92
all: update assertnochanges version clean compile release
David@0
    93
all-withlocalchanges: update assertnoconflicts version clean compile release
David@0
    94
all-withlocalchanges-noclean: update assertnoconflicts version compile release
David@0
    95
David@0
    96
#doesn't bother putting things in a dmg
David@0
    97
#useful for builds not intended for distribution
David@0
    98
all-nopackage-noclean: update assertnoconflicts version compile createfolder prepare-release-bundle
David@0
    99
David@0
   100
update:
zacwest@299
   101
	hg pull -u -R $(SRC_DIR)
David@0
   102
David@0
   103
assertnochanges: assertnoconflicts
zacwest@299
   104
	if [[ 0 -ne `hg st $(SRC_DIR) | egrep --invert-match '\?|Info\.plist' | wc -l` ]]; then \
David@0
   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; \
David@0
   106
		exit 1; \
David@0
   107
	fi
David@0
   108
assertnoconflicts:
zacwest@299
   109
	if [[ 0 -ne `hg st $(SRC_DIR) | egrep '^C' | wc -l` ]]; then \
zacwest@299
   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 "hg resolve"; otherwise, hg will still believe the files are conflicted.' 1>&2; \
David@0
   111
		exit 2; \
David@0
   112
	fi
David@0
   113
David@0
   114
version:
David@0
   115
	@# update the plists
zacw@331
   116
	defaults write $(ADIUM_PLIST) CFBundleGetInfoString "$(VERSION), Copyright 2001-2009 The Adium Team"
David@0
   117
	defaults write $(ADIUM_PLIST) CFBundleVersion "$(VERSION)"
David@0
   118
	defaults write $(ADIUM_PLIST) CFBundleShortVersionString "$(VERSION)"
David@0
   119
	plutil -convert xml1 $(ADIUM_PLIST).plist
David@0
   120
David@0
   121
compile:
David@0
   122
	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
David@0
   123
David@0
   124
testcompile:
David@0
   125
	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
David@0
   126
David@0
   127
clean:
David@0
   128
	rm -rf $(BUILD_DIR)
David@0
   129
	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR) clean
David@0
   130
David@0
   131
release: createfolder prepare-release-bundle diskimage
David@0
   132
David@0
   133
prepare-release-bundle:
David@0
   134
	@# Convert all nibs to the smaller binary format
David@0
   135
	@echo Converting nibs to binary format...
David@0
   136
	find $(BUILD_DIR) -name keyedobjects.nib -print0 | xargs -0 plutil -convert binary1
David@0
   137
David@0
   138
	@# delete unneeded nib files for non-beta builds
David@0
   139
	@echo Cleaning Adium.app for release
David@0
   140
ifeq ($(BUILD_IN_DEBUG_MODE),FALSE)
David@0
   141
	find $(BUILD_DIR) \( -name classes.nib -or -name info.nib \) -type f -delete
David@0
   142
endif
David@0
   143
	
zacwest@299
   144
	@# delete backup files
David@0
   145
	find $(BUILD_DIR) \( -name "*~" -or -name .DS_Store \) -type f -delete
David@0
   146
David@0
   147
	@# sign the executable
David@0
   148
ifeq ($(OFFICIAL_BUILD),TRUE)
David@0
   149
	if [ -e ~/adium-password ]; then \
David@0
   150
		security unlock-keychain -p `cat ~/adium-password`; \
David@0
   151
	fi
David@0
   152
	codesign -v -s Adium $(ADIUM_DIR)/Adium.app/Contents/MacOS/Adium
David@0
   153
endif
David@0
   154
David@0
   155
createfolder:
David@0
   156
	@# clean build directory
David@0
   157
	rm -rf $(BUILD_DIR)
David@0
   158
	mkdir $(BUILD_DIR)
David@0
   159
David@0
   160
	mkdir $(ADIUM_DIR)
David@0
   161
	
David@0
   162
	@# copy the app
David@0
   163
	cp -R $(ADIUM_BUILD_DIR)/Adium.app $(ADIUM_DIR)
David@0
   164
David@0
   165
	@# copy the text files
David@0
   166
	cp $(SRC_DIR)/ChangeLogs/Changes.txt $(ADIUM_DIR)
David@0
   167
	cp $(SRC_DIR)/License.txt $(ADIUM_DIR)
David@0
   168
	
David@0
   169
	@# symlink /Applications
David@0
   170
	./mkalias -r /Applications $(ADIUM_DIR)/Applications
David@0
   171
David@0
   172
diskimage:
David@0
   173
	rm "$(BUILD_DIR)/$(RELEASE_NAME).dmg" || true
David@0
   174
	@# make Adium disk image
David@0
   175
	mkdir -p $(ADIUM_DIR)/.background
David@0
   176
	cp $(ART_DIR)/dmgBackground.png $(ADIUM_DIR)/.background
David@0
   177
David@0
   178
	./ensureCustomIconsExtracted $(ART_DIR)
zacw@325
   179
	./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_NAME).dmg $(ADIUM_DIR) "Adium $(VERSION)" dmg_adium.scpt $(ART_DIR)
David@0
   180
	
David@0
   181
	@echo Build finished. `md5 $(BUILD_DIR)/$(RELEASE_NAME_ESCAPED).dmg`
David@0
   182
David@0
   183
#This is what nightly builds use. Does not update because buildbot does.
David@0
   184
nightly: assertnochanges version clean compile release
David@0
   185
	echo $(RELEASE_NAME) > $(BUILD_DIR)/latest
David@0
   186
	(svn info | perl -nle 's/Revision: ([0-9]+)/$$1/g and print "r".$$_') >> $(BUILD_DIR)/latest
David@0
   187
	md5 -q $(BUILD_DIR)/$(RELEASE_NAME).dmg > $(BUILD_DIR)/$(RELEASE_NAME).dmg.md5sum
David@0
   188
David@0
   189
tarball:
zacwest@299
   190
	hg archive -t tgz ($TARBALL_DIR).tgz