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