06f7e3f6ac2be81ea6fba0c08ae0b03a23c075ec
[featherfall2.git] / Makefile
1 #!/usr/bin/make -f
2
3 node-webkit-version := 0.10.2
4 node-webkit-version-win-ia32.zip := 0.8.6
5
6 .DELETE_ON_ERROR:
7 include rules/programs.mk
8 include rules/javascript.mk
9 include rules/icons.mk
10 include rules/git.mk
11 include rules/node-webkit.mk
12 include rules/pngcrush.mk
13
14 .PHONY: all check distclean lint test dist clean serve
15
16 APPLICATION := pwl6
17 DISTDIR := build/dist
18 VERSION := $(call git-describe)
19 DISTROOT := $(DISTDIR)/$(APPLICATION)-$(VERSION)
20
21 FIND_FILES := -type f ! -name '.*'
22 FIND_JS := -type f -name '*.js'
23
24 SOURCES := $(shell cd src && find . $(FIND_FILES))
25 MY_SOURCES := $(shell cd src && find . $(FIND_JS) -not -path './ext/*')
26
27 TEST_SOURCES := $(shell find test/spec $(FIND_JS))
28
29 LINT_TARGETS := $(call jshint-stampify,$(MY_SOURCES))
30 TEST_TARGETS := $(call jstest-stampify,$(TEST_SOURCES))
31
32 JSHINTCONFIG := test/jshint.config
33 JSTEST_NODE_PATH := src
34 VPATH := src
35
36 ICONSETS := $(shell find src -type d -name '*.iconset')
37 ICONS := $(ICONSETS:.iconset=.icns) $(ICONSETS:.iconset=.ico)
38
39 IMAGEGZSRC := $(shell find src -type f -name '*.xcf.gz')
40 IMAGESRC := $(shell find src -type f -name '*.xcf')
41 IMAGES := $(IMAGEGZSRC:.xcf.gz=.png) $(IMAGESRC:.xcf=.png)
42
43 BUILT := $(ICONS) $(IMAGES)
44
45 HTTP_SERVER_PORT ?= 8000
46
47 all: check $(BUILT) $(call pngcrush-stampify,$(IMAGES))
48
49 $(DISTDIR):
50 mkdir -p $@
51
52 dist: $(addprefix $(DISTROOT),-src.zip -src.tar.gz .appcache .nw -osx-ia32.zip -osx-x64.zip -linux-ia32.tar.gz -linux-x64.tar.gz -win-ia32.zip)
53
54 test/spec/%.js: %.js
55 touch $@
56
57 lint: $(LINT_TARGETS)
58
59 test: $(TEST_TARGETS)
60
61 check: lint test
62
63 serve: | $(npmbindir)/http-server
64 $(npmbindir)/http-server $(@D) -p $(HTTP_SERVER_PORT) -c-1
65
66 clean:
67 $(RM) $(IMAGES)
68 $(RM) $(ICONS)
69 $(RM) -r build
70
71 distclean: clean
72 $(RM) -r node_modules
73 $(RM) $(node-webkit-archives)
74
75 $(DISTROOT)-src.zip $(DISTROOT)-src.tar.gz: | .git
76 mkdir -p $(@D)
77 $(call git-archive,$@,$(notdir $(DISTROOT))/)
78
79 $(DISTROOT).bare.zip: | .git
80 $(RM) $@
81 $(RM) -r $@.tmp
82 mkdir -p $@.tmp
83 cd src && $(GIT) archive $(call git-describe) . | tar -x -C ../$@.tmp
84 $(MAKE) $(BUILT:src/%=$@.tmp/%)
85 $(RM) $(IMAGESRC:src/%=$@.tmp/%) $(IMAGEGZSRC:src/%=$@.tmp/%)
86 cd $@.tmp && $(ZIP) ../$(@F) -r .
87 $(RM) -r $@.tmp
88
89 %.appcache: %.bare.zip tools/generate-appcache
90 $(RM) -r $@.tmp $@
91 $(UNZIP) -d $@.tmp $<
92 tools/generate-appcache $@.tmp
93 mv $@.tmp $@
94
95 # Python's zipfile module generates zipfiles that node-webkit cannot
96 # read, so delegate to a real zip tool.
97 %.nw: %.bare.zip tools/generate-nw
98 $(RM) -r $@ $@.tmp
99 $(UNZIP) -d $@.tmp $<
100 tools/generate-nw $@.tmp
101 cd $@.tmp && $(ZIP) -r ../$(@F) .
102 $(RM) -r $@.tmp