Release/Makefile
author Peter Hosey <hg@boredzo.org>
Fri Sep 11 10:50:56 2009 -0700 (2009-09-11)
changeset 4394 6e6d39bbec43
parent 4386 c317682ae865
child 4407 abfcfbcdbaf8
permissions -rw-r--r--
Added an uninstaller for GrowlMail, based off of the one for Growl.
     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.2b3
     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 -R "Uninstall GrowlMail.app" $(GROWL_DIR)/Extras/GrowlMail
   173 	/Developer/Tools/SetFile -a E $(GROWL_DIR)/Extras/GrowlMail/Uninstall\ GrowlMail.app
   174 	cp $(SRC_DIR)/Extras/GrowlMail/*.rtf $(GROWL_DIR)/Extras/GrowlMail
   175 	
   176 	@# build GrowlSafari package
   177 	mkdir $(GROWL_DIR)/Extras/GrowlSafari
   178 	$(PACKAGE_MAKER) --no-relocate --doc GrowlSafari/GrowlSafari\ Installer.pmdoc --out $(GROWL_DIR)/Extras/GrowlSafari/GrowlSafari.pkg --version $(VERSION) --id com.growl.growlsafari.pkg -v	
   179 	
   180 	@# build the SDK
   181 	mkdir $(SDK_DIR)
   182 	
   183 	@# copy the webloc files
   184 	cp "Growl Developer Documentation.webloc" "Growl version history for developers.webloc" $(SDK_DIR)
   185 	
   186 	@# hide extensions of webloc files
   187 	/Developer/Tools/SetFile -a E $(SDK_DIR)/*.webloc
   188 	
   189 	@# copy the scripts
   190 	#cp -R $(SRC_DIR)/Scripts $(GROWL_DIR)
   191 	
   192 	@# copy over beep hammer
   193 	mkdir $(SDK_DIR)/BeepHammer
   194 	cp -R $(SRC_DIR)/Developer\ Tools/BeepHammer/build/$(BUILDSTYLE)/BeepHammer.app $(SDK_DIR)/BeepHammer
   195 	
   196 	@# copy over relevant files to compile directly into app
   197 	mkdir $(SDK_DIR)/Built-In
   198 	cp $(SRC_DIR)/Framework/Source/GrowlApplicationBridge.h $(SDK_DIR)/Built-In
   199 	cp $(SRC_DIR)/Framework/Source/GrowlApplicationBridge.m $(SDK_DIR)/Built-In
   200 	cp $(SRC_DIR)/Common/Source/GrowlDefines.h $(SDK_DIR)/Built-In
   201 	cp $(SRC_DIR)/Common/Source/GrowlDefinesInternal.h $(SDK_DIR)/Built-In
   202 	cp $(SRC_DIR)/Common/Source/GrowlPathUtilities.h $(SDK_DIR)/Built-In
   203 	cp $(SRC_DIR)/Common/Source/GrowlPathUtilities.m $(SDK_DIR)/Built-In 
   204 	cp $(SRC_DIR)/Common/Source/CFGrowlAdditions.h $(SDK_DIR)/Built-In
   205 	cp $(SRC_DIR)/Common/Source/CFGrowlAdditions.c $(SDK_DIR)/Built-In
   206 	cp $(SRC_DIR)/Common/Source/CFGrowlDefines.h $(SDK_DIR)/Built-In
   207 	cp $(SRC_DIR)/Common/Source/CFURLAdditions.h $(SDK_DIR)/Built-In
   208 	cp $(SRC_DIR)/Common/Source/CFURLAdditions.c $(SDK_DIR)/Built-In
   209 	cp $(SRC_DIR)/Common/Source/CFMutableDictionaryAdditions.h $(SDK_DIR)/Built-In
   210 	cp $(SRC_DIR)/Common/Source/CFMutableDictionaryAdditions.c $(SDK_DIR)/Built-In
   211 	cp $(SRC_DIR)/Core/Source/GrowlPreferencesController.h $(SDK_DIR)/Built-In
   212 	cp $(SRC_DIR)/Core/Source/GrowlTicketController.h $(SDK_DIR)/Built-In
   213 	
   214 	@# copy the frameworks
   215 	mkdir $(SDK_DIR)/Frameworks
   216 	cp -R $(GROWL_BUILD_DIR)/Growl.framework $(GROWL_BUILD_DIR)/Growl-WithInstaller.framework $(SDK_DIR)/Frameworks
   217 	
   218 	@# copy the bindings
   219 	cp -R $(SRC_DIR)/Bindings $(SDK_DIR)
   220 	@# remove the AppleScript binding
   221 	rm -rf $(SDK_DIR)/Bindings/applescript
   222 	
   223 	@# remove some symlinks
   224 	rm $(SDK_DIR)/Bindings/tcl/GrowlDefines.h
   225 	rm $(SDK_DIR)/Bindings/tcl/GrowlApplicationBridge.h
   226 	rm $(SDK_DIR)/Bindings/tcl/GrowlApplicationBridge.m
   227 	
   228 	@# delete svn and backup files
   229 	find $(BUILD_DIR) -name ".svn" -type d -exec rm -rf {} \; -prune
   230 	find $(BUILD_DIR) \( -name "*~" -or -name .DS_Store \) -type f -delete
   231 
   232 	@# make Growl disk image
   233 	mkdir $(GROWL_DIR)/.background
   234 	cp $(SRC_DIR)/images/dmg/growlDMGBackground.png $(GROWL_DIR)/.background
   235 	./ensureCustomIconsExtracted $(ART_DIR)
   236 	./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_FILENAME).dmg $(GROWL_DIR) $(RELEASE_NAME) dmg_growl.applescript $(ART_DIR)
   237 	rm $(ART_DIR)/GrowlIcon
   238 	
   239 	@# make SDK disk image
   240 	mkdir $(SDK_DIR)/.background
   241 	cp $(SRC_DIR)/images/dmg/growlSDK.png $(SDK_DIR)/.background
   242 	./make-diskimage.sh $(BUILD_DIR)/$(RELEASE_FILENAME)-SDK.dmg $(SDK_DIR) $(RELEASE_SDK_NAME) dmg_sdk.applescript
   243 	
   244 	@echo Build finished
   245 	-growlnotify -n 'Growl Release Makefile' 'Growl disk image built successfully' -m $(RELEASE_FILENAME).dmg --iconpath $(BUILD_DIR)/$(RELEASE_FILENAME).dmg
   246 
   247 framework-archive: assertnochanges
   248 	-mkdir "$(BUILD_DIR)"
   249 	-rm -R "$(FMWK_DIR)"
   250 	mkdir "$(FMWK_DIR)"
   251 	-rm "$(BUILD_DIR)/$(FMWK_TBZ_NAME)"
   252 	
   253 	$(MAKE) $(BUILDFLAGS) -C "$(SRC_DIR)" growlapplicationbridge
   254 	
   255 	cp -R "$(GROWL_BUILD_DIR)/Growl.framework" "$(GROWL_BUILD_DIR)/Growl.framework.dSYM" "$(SRC_DIR)/License.txt" "$(FMWK_DIR)"
   256 	
   257 	tar cjf "$(BUILD_DIR)/$(FMWK_TBZ_NAME)" -C "$(dir $(FMWK_DIR))" "$(notdir $(FMWK_DIR))"