48
|
1 |
#
|
|
2 |
# You can override such variables in Makefile.config:
|
|
3 |
#
|
|
4 |
# SF_USER SourceForge user name.
|
|
5 |
|
|
6 |
################################################################
|
|
7 |
# Standard GNU Makefile settings.
|
|
8 |
|
|
9 |
SHELL = /bin/bash
|
|
10 |
export PATH := /bin:/usr/bin:${PATH}
|
|
11 |
|
|
12 |
# Disable built in pattern rules.
|
|
13 |
MAKEFLAGS += -r
|
|
14 |
# Disable built in variables.
|
|
15 |
MAKEFLAGS += -R
|
|
16 |
# Disable built in suffix rules.
|
|
17 |
.SUFFIXES:
|
|
18 |
# Delete target file if command fails.
|
|
19 |
.DELETE_ON_ERROR:
|
|
20 |
# Default target.
|
|
21 |
.DEFAULT_GOAL = help
|
|
22 |
|
|
23 |
################################################################
|
|
24 |
# Build script definitions.
|
|
25 |
|
|
26 |
BUILD_SCRIPTS := $(firstword $(MAKEFILE_LIST))
|
|
27 |
|
|
28 |
ifneq '' '$(wildcard Makefile.config)'
|
|
29 |
include Makefile.config
|
|
30 |
BUILD_SCRIPTS += Makefile.config
|
|
31 |
endif
|
|
32 |
|
|
33 |
################################################################
|
|
34 |
# Version extracting/generation.
|
|
35 |
|
|
36 |
# Prevent making distribution with wrong version.
|
|
37 |
ifneq '' '$(filter deploy% dist%,$(MAKECMDGOALS))'
|
|
38 |
ifeq '' '$(MAKE_RESTARTS)'
|
|
39 |
$(info $(shell rm -f VERSION))
|
|
40 |
endif
|
|
41 |
endif
|
|
42 |
|
|
43 |
# Here are vmajor and vminor. Look README section "Versioning rules."
|
|
44 |
-include VERSION
|
|
45 |
|
|
46 |
VERSION:
|
|
47 |
\
|
|
48 |
vtagdist=$$(hg log -r . --template '{latesttagdistance}'); \
|
|
49 |
vatrelease=$$([ $$vtagdist -le 1 ] && echo yes || echo no); \
|
|
50 |
vtag=$$(hg log -r . --template '{latesttag}'); \
|
|
51 |
vmajor=$${vtag#t}; \
|
|
52 |
vmajor=$${vmajor%%.*}; \
|
|
53 |
vminor=$${vtag#*.}; \
|
|
54 |
vrev=$$(hg id -i); \
|
|
55 |
visclean=$$(case $$vrev in *+) echo no;; *) echo yes;; esac); \
|
|
56 |
vrev=$${vrev%+}; \
|
|
57 |
{ \
|
|
58 |
echo "vrev=$$vrev"; \
|
|
59 |
echo "vtag=$$vtag"; \
|
|
60 |
echo "vtagdist=$$vtagdist"; \
|
|
61 |
echo "visclean=$$visclean"; \
|
|
62 |
echo "vatrelease=$$vatrelease"; \
|
|
63 |
echo "vmajor=$$vmajor"; \
|
|
64 |
echo "vminor=$$vminor"; \
|
|
65 |
} >VERSION
|
|
66 |
|
|
67 |
################################################################
|
|
68 |
# Determine platform/environment.
|
|
69 |
|
|
70 |
host_os = unix
|
|
71 |
ifneq '' '$(COMSPEC)'
|
|
72 |
ifneq '' '$(WINDIR)'
|
|
73 |
# Probably under Windows.
|
|
74 |
host_os = windows
|
|
75 |
ifneq '' '$(wildcard /etc/setup/*cygwin*)'
|
|
76 |
# Probably under Cygwin.
|
|
77 |
host_os = cygwin
|
|
78 |
endif
|
|
79 |
endif
|
|
80 |
endif
|
|
81 |
|
|
82 |
################################################################
|
|
83 |
# Project dirs/files.
|
|
84 |
|
|
85 |
pkgname = 2048-js-ai
|
|
86 |
sfpkgname = js-2048-ai
|
|
87 |
fullpkgname = $(pkgname)-$(vmajor).$(vminor)
|
|
88 |
|
|
89 |
DIST_DIR = $(fullpkgname)
|
|
90 |
|
|
91 |
WWW_FILES := $(wildcard *.js) $(wildcard *.html)
|
|
92 |
|
|
93 |
DIST_FILES = $(WWW_FILES) README.rst VERSION
|
|
94 |
|
|
95 |
DIST_TARBALLS = $(DIST_DIR).tar.gz $(DIST_DIR).zip
|
|
96 |
|
|
97 |
################################################################
|
|
98 |
# Deploy targets.
|
|
99 |
|
|
100 |
ifeq '' '$(SF_USER)'
|
|
101 |
SF_USER := gavenkoa
|
|
102 |
endif
|
|
103 |
|
|
104 |
.PHONY: deploy
|
|
105 |
deploy: deploy2sf
|
|
106 |
|
|
107 |
# First time you deploy to SourceForge (sf) you need manually login to:
|
|
108 |
# $ sftp $(SF_USER),$(pkgname)@web.sourceforge.net
|
|
109 |
# as it may require interactive input for accepting server public key.
|
|
110 |
# Next time any action fully automated.
|
|
111 |
|
|
112 |
.PHONY: deploy2sf
|
|
113 |
deploy2sf: deploy2sf-src deploy2sf-www deploy2sf-release
|
|
114 |
|
|
115 |
.PHONY: deploy2sf-src
|
|
116 |
deploy2sf-src:
|
|
117 |
hg push ssh://$(SF_USER)@hg.code.sf.net/p/$(sfpkgname)/hg || [ $$? = 1 ]
|
|
118 |
|
|
119 |
# Will be accessed via http://$(pkgname).sourceforge.net
|
|
120 |
.PHONY: deploy2sf-www
|
|
121 |
deploy2sf-www: deploy-check $(WWW_FILES)
|
|
122 |
( echo 'cd htdocs'; \
|
|
123 |
for f in $(WWW_FILES); do \
|
|
124 |
echo "put $$f"; \
|
|
125 |
echo "chmod 644 $$f"; \
|
|
126 |
done; \
|
|
127 |
echo 'quit'; \
|
|
128 |
) | sftp -b - $(SF_USER),$(sfpkgname)@web.sourceforge.net
|
|
129 |
|
|
130 |
.PHONY: deploy2sf-release
|
|
131 |
deploy2sf-release: deploy-check $(DIST_TARBALLS)
|
|
132 |
( echo 'cd /home/frs/project/$(shell v=$(sfpkgname); echo $${v:0:1}/$${v:0:2})/$(sfpkgname)'; \
|
|
133 |
echo "put README.rst"; \
|
|
134 |
echo "chmod 644 README.rst"; \
|
|
135 |
echo "mkdir v$(vmajor).$(vminor)"; \
|
|
136 |
echo "cd v$(vmajor).$(vminor)"; \
|
|
137 |
for f in $(DIST_TARBALLS); do \
|
|
138 |
echo "put $$f"; \
|
|
139 |
echo "chmod 644 $$f"; \
|
|
140 |
done; \
|
|
141 |
echo 'quit'; \
|
|
142 |
) | sftp -b - $(SF_USER),$(sfpkgname)@frs.sourceforge.net
|
|
143 |
|
|
144 |
.PHONY: deploy-check
|
|
145 |
deploy-check:
|
|
146 |
\
|
|
147 |
case ${visclean} in \
|
|
148 |
no) echo "Local changes found. Build stop."; \
|
|
149 |
exit 1;; \
|
|
150 |
esac
|
|
151 |
\
|
|
152 |
case $(vatrelease) in \
|
|
153 |
no) echo "We are not at release. Build stop."; \
|
|
154 |
exit 1;; \
|
|
155 |
esac
|
|
156 |
|
|
157 |
################################################################
|
|
158 |
# Dist targets.
|
|
159 |
|
|
160 |
.PHONY: dist
|
|
161 |
dist: dist-bin
|
|
162 |
|
|
163 |
.PHONY: dist-bin
|
|
164 |
dist-release: $(DIST_TARBALLS)
|
|
165 |
|
|
166 |
%.tar.gz: %
|
|
167 |
tar zcf $*.tar.gz $*
|
|
168 |
|
|
169 |
%.tar.bz2: %
|
|
170 |
tar jcf $*.tar.bz2 $*
|
|
171 |
|
|
172 |
$(DIST_DIR): $(DIST_FILES)
|
|
173 |
rm -rf $@
|
|
174 |
mkdir $@
|
|
175 |
cp $(DIST_FILES) $@
|
|
176 |
|
|
177 |
################################################################
|
|
178 |
# Helpers targets.
|
|
179 |
|
|
180 |
.PHONY: help
|
|
181 |
help:
|
|
182 |
@\
|
|
183 |
echo; \
|
|
184 |
echo Current configuration:; \
|
|
185 |
echo; \
|
|
186 |
sed 's=^= =' <VERSION
|
|
187 |
@if [ -f Makefile.config ]; then \
|
|
188 |
echo; \
|
|
189 |
echo User configuration:; \
|
|
190 |
echo; \
|
|
191 |
sed 's=^= =' <Makefile.config; \
|
|
192 |
fi
|
|
193 |
@\
|
|
194 |
echo; \
|
|
195 |
echo Supported targets:; \
|
|
196 |
echo; \
|
|
197 |
sed -n -e '/^[[:alnum:]_-]*:/{s=^\(.*\):.*= \1=;p;}' $(BUILD_SCRIPTS)
|
|
198 |
|
|
199 |
################################################################
|
|
200 |
# Clean targets.
|
|
201 |
|
|
202 |
.PHONY: distclean
|
|
203 |
distclean: clean
|
|
204 |
rm -f VERSION
|
|
205 |
|
|
206 |
.PHONY: clean
|
|
207 |
clean:
|
|
208 |
rm -rf $(DIST_DIR) $(DIST_TARBALLS)
|