Added an uninstaller for GrowlMail, based off of the one for Growl.
1 ##########################
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
12 #########################
14 # No changes should be needed below this line
16 #########################
17 RELEASE_FILENAME=Growl-$(VERSION)
18 RELEASE_NAME="Growl-$(VERSION)"
19 RELEASE_SDK_NAME="Growl $(VERSION) SDK"
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
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)
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)
46 DSYM_DIR=$(BUILD_DIR)/Growl-dSYM-$(VERSION)
47 PACKAGE_MAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
50 #########################
52 .PHONY: all assertnochanges assertnoconflicts compile clean release source version
54 all: assertnochanges version compile release
55 all-withlocalchanges: assertnoconflicts version compile release
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; \
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; \
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)'
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)'
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
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
126 @# clean build directory
131 @# Archive dSYM bundles.
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))
143 cp -R "Uninstall Growl.app" $(GROWL_DIR)
144 /Developer/Tools/SetFile -a E $(GROWL_DIR)/Uninstall\ Growl.app
147 cp "Growl Documentation.webloc" "Growl version history.webloc" "Get more styles.webloc" $(GROWL_DIR)
149 @# hide extensions of webloc files
150 /Developer/Tools/SetFile -a E $(GROWL_DIR)/*.webloc
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
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
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
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
183 @# copy the webloc files
184 cp "Growl Developer Documentation.webloc" "Growl version history for developers.webloc" $(SDK_DIR)
186 @# hide extensions of webloc files
187 /Developer/Tools/SetFile -a E $(SDK_DIR)/*.webloc
190 #cp -R $(SRC_DIR)/Scripts $(GROWL_DIR)
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
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
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
219 cp -R $(SRC_DIR)/Bindings $(SDK_DIR)
220 @# remove the AppleScript binding
221 rm -rf $(SDK_DIR)/Bindings/applescript
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
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
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
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
245 -growlnotify -n 'Growl Release Makefile' 'Growl disk image built successfully' -m $(RELEASE_FILENAME).dmg --iconpath $(BUILD_DIR)/$(RELEASE_FILENAME).dmg
247 framework-archive: assertnochanges
248 -mkdir "$(BUILD_DIR)"
251 -rm "$(BUILD_DIR)/$(FMWK_TBZ_NAME)"
253 $(MAKE) $(BUILDFLAGS) -C "$(SRC_DIR)" growlapplicationbridge
255 cp -R "$(GROWL_BUILD_DIR)/Growl.framework" "$(GROWL_BUILD_DIR)/Growl.framework.dSYM" "$(SRC_DIR)/License.txt" "$(FMWK_DIR)"
257 tar cjf "$(BUILD_DIR)/$(FMWK_TBZ_NAME)" -C "$(dir $(FMWK_DIR))" "$(notdir $(FMWK_DIR))"