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 ##########################
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 $(SRC_DIR)/Extras/GrowlMail/*.rtf $(GROWL_DIR)/Extras/GrowlMail
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
181 @# copy the webloc files
182 cp "Growl Developer Documentation.webloc" "Growl version history for developers.webloc" $(SDK_DIR)
184 @# hide extensions of webloc files
185 /Developer/Tools/SetFile -a E $(SDK_DIR)/*.webloc
188 #cp -R $(SRC_DIR)/Scripts $(GROWL_DIR)
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
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
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
217 cp -R $(SRC_DIR)/Bindings $(SDK_DIR)
218 @# remove the AppleScript binding
219 rm -rf $(SDK_DIR)/Bindings/applescript
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
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
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
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
243 -growlnotify -n 'Growl Release Makefile' 'Growl disk image built successfully' -m $(RELEASE_FILENAME).dmg --iconpath $(BUILD_DIR)/$(RELEASE_FILENAME).dmg
245 framework-archive: assertnochanges
246 -mkdir "$(BUILD_DIR)"
249 -rm "$(BUILD_DIR)/$(FMWK_TBZ_NAME)"
251 $(MAKE) $(BUILDFLAGS) -C "$(SRC_DIR)" growlapplicationbridge
253 cp -R "$(GROWL_BUILD_DIR)/Growl.framework" "$(GROWL_BUILD_DIR)/Growl.framework.dSYM" "$(SRC_DIR)/License.txt" "$(FMWK_DIR)"
255 tar cjf "$(BUILD_DIR)/$(FMWK_TBZ_NAME)" -C "$(dir $(FMWK_DIR))" "$(notdir $(FMWK_DIR))"