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