bump hyper dependency, fix Windows build
[couchdb.git] / Makefile.win
1 # Licensed under the Apache License, Version 2.0 (the "License"); you may not
2 # use this file except in compliance with the License. You may obtain a copy of
3 # the License at
4 #
5 #   http:\\www.apache.org\licenses\LICENSE-2.0
6 #
7 # Unless required by applicable law or agreed to in writing, software
8 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10 # License for the specific language governing permissions and limitations under
11 # the License.
12
13 include version.mk
14
15 SHELL=cmd.exe
16 REBAR?=$(shell where rebar.cmd)
17
18 # Handle the following scenarios:
19 #   1. When building from a tarball, use version.mk.
20 #   2. When building from a clean release tag (#.#.#), use that tag.
21 #   3. When building from a clean RC tag (#.#.#-RC#), use JUST the version
22 #      number inside the tarball, but use the full name for the name of the
23 #      tarball itself.
24 #   4. When not on a clean tag, use version.mk + git sha + dirty status.
25
26 COUCHDB_GIT_SHA=$(git_sha)
27 IN_RELEASE = $(shell if not exist .git echo true)
28
29 ifeq ($(IN_RELEASE), true)
30
31 # 1. Building from tarball, use version.mk.
32 COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch)
33
34 else
35
36 # Gather some additional information.
37 # We do it this way so we don't bake shell-isms into Makefile
38 # to make it easier to port to Windows. I know, I know. -jst
39 # COUCHDB_GIT_SHA is our current git hash.
40 COUCHDB_GIT_SHA=$(shell git rev-parse --short --verify HEAD)
41 # IN_RC contains the -RCx suffix in the name if present
42 IN_RC = $(shell git describe --tags --always --first-parent \
43         | grep -Eo -- '-RC[0-9]+' 2>/dev/null)
44 # ON_TAG matches *ONLY* if we are on a release or RC tag
45 ON_TAG = $(shell git describe --tags --always --first-parent \
46         | grep -Eo -- '^[0-9]+\.[0-9]\.[0-9]+(-RC[0-9]+)?$$' 2>/dev/null)
47 # RELTAG contains the #.#.# from git describe, which might be used
48 RELTAG = $(shell git describe --tags --always --first-parent \
49         | grep -Eo -- '^[0-9]+\.[0-9]\.[0-9]+' 2>/dev/null)
50 # DIRTY identifies if we're not on a commit
51 DIRTY = $(shell git describe --dirty | grep -Eo -- '-dirty' 2>/dev/null)
52
53 ifeq ($(ON_TAG),)
54 # 4. Not on a tag.
55 COUCHDB_VERSION_SUFFIX = $(COUCHDB_GIT_SHA)$(DIRTY)
56 COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch)-$(COUCHDB_VERSION_SUFFIX)
57 else
58 # 2 and 3. On a tag.
59 COUCHDB_VERSION = $(RELTAG)$(DIRTY)
60 endif
61 endif
62
63 DESTDIR=
64
65 # Rebar options
66 apps=
67 skip_deps=folsom,meck,mochiweb,triq,snappy
68 suites=
69 tests=
70
71 # no sed on Windows, hard code since apps\suites\tests are empty
72 EUNIT_OPTS=skip_deps=$(skip_deps)
73 DIALYZE_OPTS=skip_deps=$(skip_deps)
74
75 ################################################################################
76 # Main commands
77 ################################################################################
78
79
80 .PHONY: all
81 # target: all - Build everything
82 all: couch fauxton docs
83
84
85 ################################################################################
86 # Building
87 ################################################################################
88
89
90 .PHONY: couch
91 # target: couch - Build CouchDB core
92 couch: config.erl
93         @set COUCHDB_VERSION=$(COUCHDB_VERSION) && set COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) && $(REBAR) compile
94         @copy src\couch\priv\couchjs.exe bin
95
96
97 .PHONY: docs
98 # target: docs - Build documentation
99 ifeq ($(IN_RELEASE), true)
100 docs: share\docs\html
101 else
102 docs: src\docs\build
103 endif
104
105 .PHONY: fauxton
106 # target: fauxton - Build Fauxton web UI
107 fauxton: share\www
108
109
110 ################################################################################
111 # Testing
112 ################################################################################
113
114
115 .PHONY: check
116 # target: check - Test everything
117 check: all
118         @$(MAKE) -f Makefile.win eunit
119         @$(MAKE) -f Makefile.win javascript
120
121
122 .PHONY: eunit
123 # target: eunit - Run EUnit tests, use EUNIT_OPTS to provide custom options
124 eunit: export ERL_AFLAGS = $(shell echo "-config rel/files/eunit.config")
125 eunit: export BUILDDIR = $(shell echo %cd%)
126 eunit:
127         @$(REBAR) setup_eunit 2> nul
128         @$(REBAR) -r eunit $(EUNIT_OPTS)
129
130
131 .PHONY: javascript
132 # target: javascript - Run JavaScript test suites or specific ones defined by suites option
133 javascript:
134         -@mkdir share\www\script\test
135 ifeq ($(IN_RELEASE), true)
136         @copy test\javascript\tests\lorem*.txt share\www\script\test
137 else
138         -@mkdir src\fauxton\dist\release\test
139         @copy test\javascript\tests\lorem*.txt src\fauxton\dist\release\test
140 endif
141         -@rmdir /s/q dev\lib
142         @python dev\run -n 1 -q --with-admin-party-please \
143                 --enable-erlang-views \
144                 -c startup_jitter=0 \
145                 python test\javascript\run $(suites)
146
147
148 .PHONY: check-qs
149 # target: check-qs - Run query server tests (ruby and rspec required!)
150 check-qs:
151         @QS_LANG=js rspec test\view_server\query_server_spec.rb
152
153
154 ################################################################################
155 # Developing
156 ################################################################################
157
158
159 .PHONY: build-plt
160 # target: build-plt - Build project-specific PLT
161 build-plt:
162         @$(REBAR) -r build-plt $(DIALYZE_OPTS)
163
164
165 .PHONY: check-plt
166 # target: check-plt - Check the PLT for consistency and rebuild it if it is not up-to-date
167 check-plt:
168         @$(REBAR) -r check-plt $(DIALYZE_OPTS)
169
170
171 .PHONY: dialyze
172 # target: dialyze - Analyze the code for discrepancies
173 dialyze: .rebar
174         @$(REBAR) -r dialyze $(DIALYZE_OPTS)
175
176
177 .PHONY: introspect
178 # target: introspect - Check for commits difference between rebar.config and repository
179 introspect:
180         @$(REBAR) -r update-deps
181         @escript build-aux\introspect
182
183
184 ################################################################################
185 # Distributing
186 ################################################################################
187
188
189 .PHONY: dist
190 # target: dist - Make release tarball
191 dist: all
192         @.\build-aux\couchdb-build-release.sh $(COUCHDB_VERSION)
193
194         @copy -r share\www apache-couchdb-$(COUCHDB_VERSION)\share
195         @mkdir apache-couchdb-$(COUCHDB_VERSION)\share\docs\html
196         @copy -r src\docs\build\html apache-couchdb-$(COUCHDB_VERSION)\share\docs
197
198         @mkdir apache-couchdb-$(COUCHDB_VERSION)\share\docs\man
199         @copy src\docs\build\man\apachecouchdb.1 apache-couchdb-$(COUCHDB_VERSION)\share\docs\man
200
201         @tar czf apache-couchdb-$(COUCHDB_VERSION).tar.gz apache-couchdb-$(COUCHDB_VERSION)
202         @echo "Done: apache-couchdb-$(COUCHDB_VERSION).tar.gz"
203
204
205 .PHONY: release
206 # target: release - Create an Erlang release including CouchDB!
207 -include install.mk
208 release: all
209         @echo Installing CouchDB into rel\couchdb\ ...
210         -@rmdir /s/q rel\couchdb
211         @$(REBAR) generate
212         @copy src\couch\priv\couchjs.exe rel\couchdb\bin
213
214 ifeq ($(with_fauxton), 1)
215         -@mkdir rel\couchdb\share
216         -@xcopy share\www rel\couchdb\share\www /E/I
217 endif
218
219 ifeq ($(with_docs), 1)
220         -@mkdir rel\couchdb\share\www\docs
221         -@mkdir rel\couchdb\share\docs
222 ifeq ($(IN_RELEASE), true)
223         @xcopy share\docs\html rel\couchdb\share\www\docs /E /I
224         @copy share\docs\man\apachecouchdb.1 rel\couchdb\share\docs\couchdb.1
225 else
226         @xcopy src\docs\build\html rel\couchdb\share\www\docs /E /I
227         @copy src\docs\build\man\apachecouchdb.1 rel\couchdb\share\docs\couchdb.1
228 endif
229 endif
230
231         @echo ... done
232         @echo .
233         @echo     You can now copy the rel\couchdb directory anywhere on your system.
234         @echo     Start CouchDB with .\bin\couchdb.cmd from within that directory.
235         @echo .
236
237 .PHONY: install
238 # target: install- install CouchDB :)
239 install:
240         @echo .
241         @echo Notice: There is no 'make install' command for CouchDB 2.0 yet.
242         @echo .
243         @echo     To install CouchDB into your system, copy the rel\couchdb
244         @echo     to your desired installation location. For example:
245         @echo     xcopy /E rel\couchdb \usr\local\lib
246         @echo .
247
248 ################################################################################
249 # Cleaning
250 ################################################################################
251
252
253 .PHONY: clean
254 # target: clean - Remove build artifacts
255 clean:
256         @$(REBAR) -r clean
257         -@rmdir /s/q .rebar
258         -@del /f/q bin\couchjs.exe
259         -@rmdir /s/q src\*\ebin
260         -@rmdir /s/q src\*\.rebar
261         -@del /f/q/s src\*.dll
262         -@del /f/q src\couch\priv\*.exe
263         -@del /f/q share\server\main.js share\server\main-coffee.js
264         -@rmdir /s/q tmp 
265         -@rmdir /s/q dev\data
266         -@rmdir /s/q dev\lib
267         -@rmdir /s/q dev\logs
268         -@del /f/q src\couch\priv\couch_js\config.h
269         -@del /f/q dev\boot_node.beam dev\pbkdf2.pyc log\crash.log
270
271
272 .PHONY: distclean
273 # target: distclean - Remove build and release artifacts
274 distclean: clean
275         -@del install.mk
276         -@del config.erl
277         -@del rel\couchdb.config
278 ifneq ($(IN_RELEASE), true)
279 # when we are in a release, don’t delete the
280 # copied sources, generated docs, or fauxton
281         -@rmdir /s/q rel\couchdb
282         -@rmdir /s/q share\www
283         -@rmdir /s/q src\docs
284 endif
285
286
287 .PHONY: devclean
288 # target: devclean - Remove dev cluster artifacts
289 devclean:
290         -@rmdir /s/q dev\lib\node1\data
291         -@rmdir /s/q dev\lib\node2\data
292         -@rmdir /s/q dev\lib\node3\data
293
294
295 .PHONY: uninstall
296 # target: uninstall - Uninstall CouchDB :-(
297 uninstall:
298         -@rmdir /s/q $(DESTDIR)\$(install_dir)
299         -@del $(DESTDIR)\$(bin_dir)\couchdb
300         -@rmdir /s/q $(DESTDIR)\$(libexec_dir)
301         -@rmdir /s/q $(DESTDIR)\$(sysconf_dir)
302         -@rmdir /s/q $(DESTDIR)\$(data_dir)
303         -@rmdir /s/q $(DESTDIR)\$(doc_dir)
304         -@rmdir /s/q $(DESTDIR)\$(html_dir)
305         -@rmdir /s/q $(DESTDIR)\$(man_dir)
306
307
308 ################################################################################
309 # Misc
310 ################################################################################
311
312
313 .rebar: build-plt
314
315 config.erl:
316         @echo Apache CouchDB has not been configured.
317         @echo Try "powershell -ExecutionPolicy Bypass .\configure.ps1 -?" for help.
318         @echo You probably want "powershell -ExecutionPolicy Bypass .\configure.ps1 -WithCurl".
319         @echo.
320         @false
321
322
323 src\docs\build:
324         @echo Building docs...
325 ifeq ($(with_docs), 1)
326         @cd src\docs && make.bat html && make.bat man
327 endif
328
329
330 share\www:
331 ifeq ($(with_fauxton), 1)
332         @echo "Building Fauxton"
333         @cd src\fauxton && npm install --production && .\node_modules\.bin\grunt couchdb
334 endif