Release/Makefile
author Peter Hosey <hg@boredzo.org>
Wed Sep 09 06:15:35 2009 -0700 (2009-09-09)
changeset 4382 21845064880c
parent 4376 5b4b3d13bbe8
child 4386 c317682ae865
permissions -rw-r--r--
Adding the --no-relocate flag in the Makefile so that PackageMaker will get the hint that we don't want these items to relocate.
     1 ##########################
     2 ### Versioning:
     3 ###   * Set VERSION and BETA below. BETA should be TRUE or FALSE.
     4 ###   * Update the version struct in Core/Source/GrowlApplicationController.m 
     5 ###       (needed for proper version checking)
     6 ###   * Update the version string in Extras/growlnotify/main.m
     7 #
     8 VERSION=1.2b2
     9 BETA=TRUE
    10 
    11 #
    12 #########################
    13 #
    14 # No changes should be needed below this line
    15 #
    16 #########################
    17 RELEASE_FILENAME=Growl-$(VERSION)
    18 RELEASE_NAME="Growl-$(VERSION)"
    19 RELEASE_SDK_NAME="Growl $(VERSION) SDK"
    20 
    21 SRC_DIR=$(PWD)/..
    22 BUILD_DIR=build
    23 GROWL_DIR=$(BUILD_DIR)/Growl
    24 SDK_DIR=$(BUILD_DIR)/SDK
    25 FMWK_DIR=$(BUILD_DIR)/Growl-$(VERSION)-Framework
    26 FMWK_TBZ_NAME=Growl-$(VERSION)-Framework.tbz
    27 BUILDSTYLE=Release
    28 BUILDFLAGS="BUILDCONFIGURATION=$(BUILDSTYLE)"
    29 PRODUCT_DIR=$(shell defaults read com.apple.Xcode PBXApplicationwideBuildSettings 2> /dev/null | cat > XcodeBuildSettings.plist && defaults read $PWD/XcodeBuildSettings SYMROOT 2> /dev/null; rm XcodeBuildSettings.plist)
    30 ifeq ($(strip $(PRODUCT_DIR)),)
    31 	GROWL_BUILD_DIR=$(SRC_DIR)/build/$(BUILDSTYLE)
    32 	GROWLNOTIFY_BUILD_DIR=$(SRC_DIR)/Extras/growlnotify/build/$(BUILDSTYLE)
    33 	GROWLTUNES_BUILD_DIR=$(SRC_DIR)/Extras/GrowlTunes/build/$(BUILDSTYLE)
    34 	HARDWAREGROWLER_BUILD_DIR=$(SRC_DIR)/Extras/HardwareGrowler/build/$(BUILDSTYLE)
    35 	GROWLMAIL_BUILD_DIR=$(SRC_DIR)/Extras/GrowlMail/build/$(BUILDSTYLE)
    36 	GROWLSAFARI_BUILD_DIR=$(SRC_DIR)/Extras/GrowlSafari/build/$(BUILDSTYLE)
    37 else
    38 	TARGET_BUILD_DIR=$(PRODUCT_DIR)/$(BUILDSTYLE)
    39 	GROWL_BUILD_DIR=$(TARGET_BUILD_DIR)
    40 	GROWLNOTIFY_BUILD_DIR=$(TARGET_BUILD_DIR)
    41 	GROWLTUNES_BUILD_DIR=$(TARGET_BUILD_DIR)
    42 	HARDWAREGROWLER_BUILD_DIR=$(TARGET_BUILD_DIR)
    43 	GROWLMAIL_BUILD_DIR=$(TARGET_BUILD_DIR)
    44 	GROWLSAFARI_BUILD_DIR=$(TARGET_BUILD_DIR)
    45 endif
    46 DSYM_DIR=$(BUILD_DIR)/Growl-dSYM-$(VERSION)
    47 PACKAGE_MAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
    48 ART_DIR=Artwork
    49 
    50 #########################
    51 
    52 .PHONY: all assertnochanges assertnoconflicts compile clean release source version
    53 
    54 all: assertnochanges version compile release
    55 all-withlocalchanges: assertnoconflicts version compile release
    56 
    57 assertnochanges:
    58 	if [[ 0 -ne `hg st | wc -l` ]]; then \
    59 		echo 'You have local changes. Please do not build releases from an unclean working copy. You must revert the changes, commit them, or clone your repository and build from that.' 1>&2; \
    60 		exit 1; \
    61 	fi
    62 assertnoconflicts:
    63 	if [[ 0 -ne `hg resolve --list | grep -E '^U' | wc -l` ]]; then \
    64 		echo 'You have conflicts in your working copy. 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" to re-try your last update or merge; otherwise, hg will still believe the files are conflicted.' 1>&2; \
    65 		exit 2; \
    66 	fi
    67 
    68 version:
    69 	@# update the CFBundleVersion
    70 	defaults write $(SRC_DIR)/Core/Resources/GrowlHelperApp-Info CFBundleVersion '$(VERSION)'
    71 	defaults write $(SRC_DIR)/Framework/Resources/Growl-WithInstaller.framework-Info CFBundleVersion '$(VERSION)'
    72 	defaults write $(SRC_DIR)/Framework/Resources/Growl.framework-Info CFBundleVersion '$(VERSION)'
    73 	defaults write $(SRC_DIR)/Core/Resources/Info CFBundleVersion '$(VERSION)'
    74 	defaults write $(SRC_DIR)/Extras/GrowlCode/Info CFBundleVersion '$(VERSION)'
    75 	defaults write $(SRC_DIR)/Extras/GrowlMail/Info CFBundleVersion '$(VERSION)'
    76 	defaults write $(SRC_DIR)/Extras/GrowlSafari/Info CFBundleVersion '$(VERSION)'
    77 	defaults write $(SRC_DIR)/Extras/GrowlSafari/GrowlSafariLoader-Info CFBundleVersion '$(VERSION)'
    78 	defaults write $(SRC_DIR)/Extras/GrowlTunes/Info CFBundleVersion '$(VERSION)'
    79 	defaults write $(SRC_DIR)/Extras/HardwareGrowler/Info CFBundleVersion '$(VERSION)'
    80 	defaults write $(SRC_DIR)/StatusItem/Resources/MenuExtra-Info CFBundleVersion '$(VERSION)'
    81 
    82 	@# update the CFBundleShortVersionString
    83 	defaults write $(SRC_DIR)/Core/Resources/GrowlHelperApp-Info CFBundleShortVersionString '$(VERSION)'
    84 	defaults write $(SRC_DIR)/Framework/Resources/Growl-WithInstaller.framework-Info CFBundleShortVersionString '$(VERSION)'
    85 	defaults write $(SRC_DIR)/Framework/Resources/Growl.framework-Info CFBundleShortVersionString '$(VERSION)'
    86 	defaults write $(SRC_DIR)/Core/Resources/Info CFBundleShortVersionString '$(VERSION)'
    87 	defaults write $(SRC_DIR)/Extras/GrowlCode/Info CFBundleShortVersionString '$(VERSION)'
    88 	defaults write $(SRC_DIR)/Extras/GrowlMail/Info CFBundleShortVersionString '$(VERSION)'
    89 	defaults write $(SRC_DIR)/Extras/GrowlSafari/Info CFBundleShortVersionString '$(VERSION)'
    90 	defaults write $(SRC_DIR)/Extras/GrowlSafari/GrowlSafariLoader-Info CFBundleShortVersionString '$(VERSION)'
    91 	defaults write $(SRC_DIR)/Extras/GrowlTunes/Info CFBundleShortVersionString '$(VERSION)'
    92 	defaults write $(SRC_DIR)/Extras/HardwareGrowler/Info CFBundleShortVersionString '$(VERSION)'
    93 	defaults write $(SRC_DIR)/StatusItem/Resources/MenuExtra-Info CFBundleShortVersionString '$(VERSION)'
    94 
    95 	@# Convert back to XML plist, since defaults creates binary plists
    96 	plutil -convert xml1 $(SRC_DIR)/Core/Resources/GrowlHelperApp-Info.plist
    97 	plutil -convert xml1 $(SRC_DIR)/Framework/Resources/Growl-WithInstaller.framework-Info.plist
    98 	plutil -convert xml1 $(SRC_DIR)/Framework/Resources/Growl.framework-Info.plist 
    99 	plutil -convert xml1 $(SRC_DIR)/Core/Resources/Info.plist
   100 	plutil -convert xml1 $(SRC_DIR)/Extras/GrowlCode/Info.plist
   101 	plutil -convert xml1 $(SRC_DIR)/Extras/GrowlMail/Info.plist
   102 	plutil -convert xml1 $(SRC_DIR)/Extras/GrowlSafari/Info.plist
   103 	plutil -convert xml1 $(SRC_DIR)/Extras/GrowlSafari/GrowlSafariLoader-Info.plist
   104 	plutil -convert xml1 $(SRC_DIR)/Extras/GrowlTunes/Info.plist
   105 	plutil -convert xml1 $(SRC_DIR)/Extras/HardwareGrowler/Info.plist
   106 	plutil -convert xml1 $(SRC_DIR)/StatusItem/Resources/MenuExtra-Info.plist
   107 
   108 compile:
   109 	find $(SRC_DIR) -name build -prune -print0 | xargs -0 rm -R
   110 	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)
   111 	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)/Extras/GrowlMail
   112 	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)/Extras/GrowlSafari
   113 	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)/Extras/growlnotify
   114 	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)/Extras/HardwareGrowler
   115 	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)/Extras/GrowlTunes
   116 	$(MAKE) $(BUILDFLAGS) -C $(SRC_DIR)/Developer\ Tools/BeepHammer
   117 
   118 
   119 clean:
   120 	rm -rf $(BUILD_DIR)
   121 
   122 realclean: clean
   123 	../build.sh clean
   124 
   125 release:
   126 	@# clean build directory
   127 	rm -rf $(BUILD_DIR)
   128 	mkdir $(BUILD_DIR)
   129 	mkdir $(GROWL_DIR)
   130 	
   131 	@# Archive dSYM bundles.
   132 	mkdir $(DSYM_DIR)
   133 	mv $(GROWL_BUILD_DIR)/*.dSYM $(DSYM_DIR)
   134 	mv $(GROWLNOTIFY_BUILD_DIR)/*.dSYM $(DSYM_DIR)
   135 	mv $(GROWLTUNES_BUILD_DIR)/*.dSYM $(DSYM_DIR)
   136 	mv $(HARDWAREGROWLER_BUILD_DIR)/*.dSYM $(DSYM_DIR)
   137 	mv $(GROWLMAIL_BUILD_DIR)/*.dSYM $(DSYM_DIR)
   138 	mv $(GROWLSAFARI_BUILD_DIR)/*.dSYM $(DSYM_DIR)
   139 	@# Note: -C only applies to the input names, not -f, so it is correct to use notdir on the directory name and leave it off of the tarball name.
   140 	tar -C $(dir $(DSYM_DIR)) -cjf $(DSYM_DIR).tbz $(notdir $(DSYM_DIR))
   141 	
   142 	@# copy uninstaller
   143 	cp -R "Uninstall Growl.app" $(GROWL_DIR)
   144 	/Developer/Tools/SetFile -a E $(GROWL_DIR)/Uninstall\ Growl.app
   145 	
   146 	@# copy webloc files
   147 	cp "Growl Documentation.webloc" "Growl version history.webloc" "Get more styles.webloc" $(GROWL_DIR)
   148 	
   149 	@# hide extensions of webloc files
   150 	/Developer/Tools/SetFile -a E $(GROWL_DIR)/*.webloc
   151 	
   152 	@# build the prefpane package
   153 	$(PACKAGE_MAKER) --no-relocate --doc Growl/Growl\ Installer.pmdoc --out $(GROWL_DIR)/Growl.pkg --version $(VERSION) --id com.growl.growl.pkg -v
   154 	
   155 	@# copy the extras
   156 	mkdir $(GROWL_DIR)/Extras
   157 	mkdir $(GROWL_DIR)/Extras/growlnotify
   158 	cp $(GROWLNOTIFY_BUILD_DIR)/growlnotify $(GROWL_DIR)/Extras/growlnotify
   159 	cp $(SRC_DIR)/Extras/growlnotify/growlnotify.1 $(GROWL_DIR)/Extras/growlnotify
   160 	cp $(SRC_DIR)/Extras/growlnotify/install.sh $(GROWL_DIR)/Extras/growlnotify
   161 	cp $(SRC_DIR)/Extras/growlnotify/*.txt $(GROWL_DIR)/Extras/growlnotify
   162 	mkdir $(GROWL_DIR)/Extras/GrowlTunes
   163 	cp -R $(GROWLTUNES_BUILD_DIR)/GrowlTunes.app $(GROWL_DIR)/Extras/GrowlTunes
   164 	cp -R $(SRC_DIR)/Extras/GrowlTunes/*.rtfd $(GROWL_DIR)/Extras/GrowlTunes
   165 	mkdir $(GROWL_DIR)/Extras/HardwareGrowler
   166 	cp -R $(HARDWAREGROWLER_BUILD_DIR)/HardwareGrowler.app $(GROWL_DIR)/Extras/HardwareGrowler
   167 	cp $(SRC_DIR)/Extras/HardwareGrowler/*.txt $(GROWL_DIR)/Extras/HardwareGrowler
   168 	
   169 	@# build GrowlMail package
   170 	mkdir $(GROWL_DIR)/Extras/GrowlMail
   171 	$(PACKAGE_MAKER) --no-relocate --doc GrowlMail/GrowlMail\ Installer.pmdoc --out $(GROWL_DIR)/Extras/GrowlMail/GrowlMail.pkg --version $(VERSION) --id com.growl.growlmail.pkg -v	
   172 	cp $(SRC_DIR)/Extras/GrowlMail/*.rtf $(GROWL_DIR)/Extras/GrowlMail
   173 	
   174 	@# build GrowlSafari package
   175 	mkdir $(GROWL_DIR)/Extras/GrowlSafari
   176 	$(PACKAGE_MAKER) --no-relocate --doc GrowlSafari/GrowlSafari\ Installer.pmdoc --out $(GROWL_DIR)/Extras/GrowlSafari/GrowlSafari.pkg --version $(VERSION) --id com.growl.growlsafari.pkg -v	
   177 	
   178 	@# build the SDK
   179 	mkdir $(SDK_DIR)
   180 	
   181 	@# copy the webloc files
   182 	cp "Growl Developer Documentation.webloc" "Growl version history for developers.webloc" $(SDK_DIR)
   183 	
   184 	@# hide extensions of webloc files
   185 	/Developer/Tools/SetFile -a E $(SDK_DIR)/*.webloc
   186 	
   187 	@# copy the scripts
   188 	#cp -R $(SRC_DIR)/Scripts $(GROWL_DIR)
   189 	
   190 	@# copy over beep hammer
   191 	mkdir $(SDK_DIR)/BeepHammer
   192 	cp -R $(SRC_DIR)/Developer\ Tools/BeepHammer/build/$(BUILDSTYLE)/BeepHammer.app $(SDK_DIR)/BeepHammer
   193 	
   194 	@# copy over relevant files to compile directly into app
   195 	mkdir $(SDK_DIR)/Built-In
   196 	cp $(SRC_DIR)/Framework/Source/GrowlApplicationBridge.h $(SDK_DIR)/Built-In
   197 	cp $(SRC_DIR)/Framework/Source/GrowlApplicationBridge.m $(SDK_DIR)/Built-In
   198 	cp $(SRC_DIR)/Common/Source/GrowlDefines.h $(SDK_DIR)/Built-In
   199 	cp $(SRC_DIR)/Common/Source/GrowlDefinesInternal.h $(SDK_DIR)/Built-In
   200 	cp $(SRC_DIR)/Common/Source/GrowlPathUtilities.h $(SDK_DIR)/Built-In
   201 	cp $(SRC_DIR)/Common/Source/GrowlPathUtilities.m $(SDK_DIR)/Built-In 
   202 	cp $(SRC_DIR)/Common/Source/CFGrowlAdditions.h $(SDK_DIR)/Built-In
   203 	cp $(SRC_DIR)/Common/Source/CFGrowlAdditions.c $(SDK_DIR)/Built-In
   204 	cp $(SRC_DIR)/Common/Source/CFGrowlDefines.h $(SDK_DIR)/Built-In
   205 	cp $(SRC_DIR)/Common/Source/CFURLAdditions.h $(SDK_DIR)/Built-In
   206 	cp $(SRC_DIR)/Common/Source/CFURLAdditions.c $(SDK_DIR)/Built-In
   207 	cp $(SRC_DIR)/Common/Source/CFMutableDictionaryAdditions.h $(SDK_DIR)/Built-In
   208 	cp $(SRC_DIR)/Common/Source/CFMutableDictionaryAdditions.c $(SDK_DIR)/Built-In
   209 	cp $(SRC_DIR)/Core/Source/GrowlPreferencesController.h $(SDK_DIR)/Built-In
   210 	cp $(SRC_DIR)/Core/Source/GrowlTicketController.h $(SDK_DIR)/Built-In
   211 	
   212 	@# copy the frameworks
   213 	mkdir $(SDK_DIR)/Frameworks
   214 	cp -R $(GROWL_BUILD_DIR)/Growl.framework $(GROWL_BUILD_DIR)/Growl-WithInstaller.framework $(SDK_DIR)/Frameworks
   215 	
   216 	@# copy the bindings
   217 	cp -R $(SRC_DIR)/Bindings $(SDK_DIR)
   218 	@# remove the AppleScript binding
   219 	rm -rf $(SDK_DIR)/Bindings/applescript
   220 	
   221 	@# remove some symlinks
   222 	rm $(SDK_DIR)/Bindings/tcl/GrowlDefines.h
   223 	rm $(SDK_DIR)/Bindings/tcl/GrowlApplicationBridge.h
   224 	rm $(SDK_DIR)/Bindings/tcl/GrowlApplicationBridge.m
   225 	
   226 	@# delete svn and backup files
   227 	find $(BUILD_DIR) -name ".svn" -type d -exec rm -rf {} \; -prune
   228 	find $(BUILD_DIR) \( -name "*~" -or -name .DS_Store \) -type f -delete
   229 
   230 	@# make Growl disk image
   231 	mkdir $(GROWL_DIR)/.background
   232 	cp $(SRC_DIR)/images/dmg/growlDMGBackground.png $(GROWL_DIR)/.background
   233 	./ensureCustomIconsExtracted $(ART_DIR)
   234 	./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_FILENAME).dmg $(GROWL_DIR) $(RELEASE_NAME) dmg_growl.applescript $(ART_DIR)
   235 	rm $(ART_DIR)/GrowlIcon
   236 	
   237 	@# make SDK disk image
   238 	mkdir $(SDK_DIR)/.background
   239 	cp $(SRC_DIR)/images/dmg/growlSDK.png $(SDK_DIR)/.background
   240 	./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_FILENAME)-SDK.dmg $(SDK_DIR) $(RELEASE_SDK_NAME) dmg_sdk.applescript
   241 	
   242 	@echo Build finished
   243 	-growlnotify -n 'Growl Release Makefile' 'Growl disk image built successfully' -m $(RELEASE_FILENAME).dmg --iconpath $(BUILD_DIR)/$(RELEASE_FILENAME).dmg
   244 
   245 framework-archive: assertnochanges
   246 	-mkdir "$(BUILD_DIR)"
   247 	-rm -R "$(FMWK_DIR)"
   248 	mkdir "$(FMWK_DIR)"
   249 	-rm "$(BUILD_DIR)/$(FMWK_TBZ_NAME)"
   250 	
   251 	$(MAKE) $(BUILDFLAGS) -C "$(SRC_DIR)" growlapplicationbridge
   252 	
   253 	cp -R "$(GROWL_BUILD_DIR)/Growl.framework" "$(GROWL_BUILD_DIR)/Growl.framework.dSYM" "$(SRC_DIR)/License.txt" "$(FMWK_DIR)"
   254 	
   255 	tar cjf "$(BUILD_DIR)/$(FMWK_TBZ_NAME)" -C "$(dir $(FMWK_DIR))" "$(notdir $(FMWK_DIR))"