Release/Makefile
author Evan Schoenberg
Thu Oct 09 23:44:30 2008 +0000 (2008-10-09)
branchadium-1.3
changeset 182 e41e547babce
parent 176 a9cdab1f5fb9
child 183 73b01abefcbf
permissions -rw-r--r--
Versioned to 1.3.2
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
Evan@182
    20
VERSION=1.3.2
Evan@182
    21
BUILD_IN_DEBUG_MODE?=FALSE
Evan@182
    22
BETA?=FALSE
David@0
    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:
David@0
   101
	svn update $(SRC_DIR)
David@0
   102
David@0
   103
assertnochanges: assertnoconflicts
David@0
   104
	if [[ 0 -ne `svn 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:
David@0
   109
	if [[ 0 -ne `svn st $(SRC_DIR) | egrep '^C' | wc -l` ]]; then \
David@0
   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; \
David@0
   111
		exit 2; \
David@0
   112
	fi
David@0
   113
David@0
   114
version:
David@0
   115
	@# update the plists
David@0
   116
	defaults write $(ADIUM_PLIST) CFBundleGetInfoString "$(VERSION), Copyright 2001-2008 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
	
David@0
   144
	@# delete svn  and backup files
David@0
   145
	find $(BUILD_DIR) -name ".svn" -type d -exec rm -rf {} \; -prune
David@0
   146
	find $(BUILD_DIR) \( -name "*~" -or -name .DS_Store \) -type f -delete
David@0
   147
David@0
   148
	@# sign the executable
David@0
   149
ifeq ($(OFFICIAL_BUILD),TRUE)
David@0
   150
	if [ -e ~/adium-password ]; then \
David@0
   151
		security unlock-keychain -p `cat ~/adium-password`; \
David@0
   152
	fi
David@0
   153
	codesign -v -s Adium $(ADIUM_DIR)/Adium.app/Contents/MacOS/Adium
David@0
   154
endif
David@0
   155
David@0
   156
createfolder:
David@0
   157
	@# clean build directory
David@0
   158
	rm -rf $(BUILD_DIR)
David@0
   159
	mkdir $(BUILD_DIR)
David@0
   160
David@0
   161
	mkdir $(ADIUM_DIR)
David@0
   162
	
David@0
   163
	@# copy the app
David@0
   164
	cp -R $(ADIUM_BUILD_DIR)/Adium.app $(ADIUM_DIR)
David@0
   165
David@0
   166
	@# copy the text files
David@0
   167
	cp $(SRC_DIR)/ChangeLogs/Changes.txt $(ADIUM_DIR)
David@0
   168
	cp $(SRC_DIR)/License.txt $(ADIUM_DIR)
David@0
   169
	
David@0
   170
	@# symlink /Applications
David@0
   171
	./mkalias -r /Applications $(ADIUM_DIR)/Applications
David@0
   172
David@0
   173
diskimage:
David@0
   174
	rm "$(BUILD_DIR)/$(RELEASE_NAME).dmg" || true
David@0
   175
	@# make Adium disk image
David@0
   176
	mkdir -p $(ADIUM_DIR)/.background
David@0
   177
	cp $(ART_DIR)/dmgBackground.png $(ADIUM_DIR)/.background
David@0
   178
David@0
   179
	./ensureCustomIconsExtracted $(ART_DIR)
David@0
   180
	./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_NAME).dmg $(ADIUM_DIR) "Adium X $(VERSION)" dmg_adium.scpt $(ART_DIR)
David@0
   181
	
David@0
   182
	@echo Build finished. `md5 $(BUILD_DIR)/$(RELEASE_NAME_ESCAPED).dmg`
David@0
   183
David@0
   184
#This is what nightly builds use. Does not update because buildbot does.
David@0
   185
nightly: assertnochanges version clean compile release
David@0
   186
	echo $(RELEASE_NAME) > $(BUILD_DIR)/latest
David@0
   187
	(svn info | perl -nle 's/Revision: ([0-9]+)/$$1/g and print "r".$$_') >> $(BUILD_DIR)/latest
David@0
   188
	md5 -q $(BUILD_DIR)/$(RELEASE_NAME).dmg > $(BUILD_DIR)/$(RELEASE_NAME).dmg.md5sum
David@0
   189
David@0
   190
tarball:
David@0
   191
	svn export -q --non-interactive $(SRC_DIR) $(TARBALL_DIR)
David@0
   192
	tar zcf $(TARBALL_DIR).tgz $(TARBALL_DIR)
David@0
   193
	rm -rf $(TARBALL_DIR)