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