| # Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| # use this file except in compliance with the License. You may obtain a copy of |
| # the License at |
| # |
| # http:\\www.apache.org\licenses\LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations under |
| # the License. |
| |
| include version.mk |
| |
| REBAR?=$(shell where rebar.cmd) |
| IN_RELEASE = $(shell if not exist .git echo true) |
| ifeq ($(IN_RELEASE), true) |
| COUCHDB_VERSION_SUFFIX = -$(shell git rev-parse --short --verify HEAD) |
| else |
| COUCHDB_VERSION_SUFFIX = |
| endif |
| COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch) |
| |
| DESTDIR= |
| |
| # Rebar options |
| apps= |
| skip_deps=folsom,meck,mochiweb,proper,snappy |
| suites= |
| tests= |
| |
| # no sed on Windows, hard code since apps\suites\tests are empty |
| EUNIT_OPTS=skip_deps=$(skip_deps) |
| DIALYZE_OPTS=skip_deps=$(skip_deps) |
| |
| ################################################################################ |
| # Main commands |
| ################################################################################ |
| |
| |
| .PHONY: all |
| # target: all - Build everything |
| all: couch fauxton docs |
| |
| |
| ################################################################################ |
| # Building |
| ################################################################################ |
| |
| |
| .PHONY: couch |
| # target: couch - Build CouchDB core |
| couch: config.erl |
| @set COUCHDB_VERSION=$(COUCHDB_VERSION) && $(REBAR) compile |
| @copy src\couch\priv\couchjs.exe bin |
| |
| |
| .PHONY: docs |
| # target: docs - Build documentation |
| ifeq ($(IN_RELEASE), true) |
| docs: share\docs\html |
| else |
| docs: src\docs\build |
| endif |
| |
| .PHONY: fauxton |
| # target: fauxton - Build Fauxton web UI |
| fauxton: share\www |
| |
| |
| ################################################################################ |
| # Testing |
| ################################################################################ |
| |
| |
| .PHONY: check |
| # target: check - Test everything |
| check: all |
| @$(MAKE) -f Makefile.win eunit |
| @$(MAKE) -f Makefile.win javascript |
| |
| |
| .PHONY: eunit |
| # target: eunit - Run EUnit tests, use EUNIT_OPTS to provide custom options |
| eunit: export ERL_AFLAGS = $(shell echo "-config rel/files/eunit.config") |
| eunit: export BUILDDIR = $(shell echo %cd%) |
| eunit: |
| @$(REBAR) setup_eunit 2> nul |
| @$(REBAR) -r eunit $(EUNIT_OPTS) |
| |
| |
| .PHONY: javascript |
| # target: javascript - Run JavaScript test suites or specific ones defined by suites option |
| javascript: |
| -@mkdir share\www\script\test |
| ifeq ($(IN_RELEASE), true) |
| @copy test\javascript\tests\lorem*.txt share\www\script\test |
| else |
| -@mkdir src\fauxton\dist\release\test |
| @copy test\javascript\tests\lorem*.txt src\fauxton\dist\release\test |
| endif |
| -@rmdir /s/q dev\lib |
| @python dev\run -n 1 -q --with-admin-party-please python test\javascript\run $(suites) |
| |
| |
| .PHONY: check-qs |
| # target: check-qs - Run query server tests (ruby and rspec required!) |
| check-qs: |
| @QS_LANG=js rspec test\view_server\query_server_spec.rb |
| |
| |
| ################################################################################ |
| # Developing |
| ################################################################################ |
| |
| |
| .PHONY: build-plt |
| # target: build-plt - Build project-specific PLT |
| build-plt: |
| @$(REBAR) -r build-plt $(DIALYZE_OPTS) |
| |
| |
| .PHONY: check-plt |
| # target: check-plt - Check the PLT for consistency and rebuild it if it is not up-to-date |
| check-plt: |
| @$(REBAR) -r check-plt $(DIALYZE_OPTS) |
| |
| |
| .PHONY: dialyze |
| # target: dialyze - Analyze the code for discrepancies |
| dialyze: .rebar |
| @$(REBAR) -r dialyze $(DIALYZE_OPTS) |
| |
| |
| .PHONY: docker-image |
| # target: docker-image - Build Docker image |
| docker-image: |
| @docker build --rm -t couchdb\dev-cluster . |
| |
| |
| .PHONY: docker-start |
| # target: docker-start - Start CouchDB in Docker container |
| docker-start: |
| @docker run -d -P -t couchdb\dev-cluster > .docker-id |
| |
| |
| .PHONY: docker-stop |
| # target: docker-stop - Stop Docker container |
| docker-stop: |
| @docker stop `cat .docker-id` |
| |
| |
| .PHONY: introspect |
| # target: introspect - Check for commits difference between rebar.config and repository |
| introspect: |
| @$(REBAR) -r update-deps |
| @escript .\introspect |
| |
| |
| ################################################################################ |
| # Distributing |
| ################################################################################ |
| |
| |
| .PHONY: dist |
| # target: dist - Make release tarball |
| dist: all |
| @.\build-aux\couchdb-build-release.sh $(COUCHDB_VERSION) |
| |
| @copy -r share\www apache-couchdb-$(COUCHDB_VERSION)\share |
| @mkdir apache-couchdb-$(COUCHDB_VERSION)\share\docs\html |
| @copy -r src\docs\build\html apache-couchdb-$(COUCHDB_VERSION)\share\docs |
| @mkdir apache-couchdb-$(COUCHDB_VERSION)\share\docs\pdf |
| @copy src\docs\build\latex\CouchDB.pdf apache-couchdb-$(COUCHDB_VERSION)\share\docs\pdf |
| |
| @mkdir apache-couchdb-$(COUCHDB_VERSION)\share\docs\man |
| @copy src\docs\build\man\apachecouchdb.1 apache-couchdb-$(COUCHDB_VERSION)\share\docs\man |
| @mkdir apache-couchdb-$(COUCHDB_VERSION)\share\docs\info |
| @copy src\docs\build\texinfo\CouchDB.info apache-couchdb-$(COUCHDB_VERSION)\share\docs\info |
| |
| @tar czf apache-couchdb-$(COUCHDB_VERSION).tar.gz apache-couchdb-$(COUCHDB_VERSION) |
| @echo "Done: apache-couchdb-$(COUCHDB_VERSION).tar.gz" |
| |
| |
| .PHONY: release |
| # target: release - Create an Erlang release including CouchDB! |
| -include install.mk |
| release: all |
| @echo Installing CouchDB into rel\couchdb\ ... |
| -@rmdir /s/q rel\couchdb |
| @$(REBAR) generate |
| @copy src\couch\priv\couchjs.exe rel\couchdb\bin |
| |
| ifeq ($(with_fauxton), 1) |
| -@mkdir rel\couchdb\share |
| -@xcopy share\www rel\couchdb\share\www /E/I |
| endif |
| |
| ifeq ($(with_docs), 1) |
| -@mkdir rel\couchdb\share\www\docs |
| -@mkdir rel\couchdb\share\docs |
| ifeq ($(IN_RELEASE), true) |
| @xcopy share\docs\html rel\couchdb\share\www\docs /E /I |
| @copy share\docs\man\apachecouchdb.1 rel\couchdb\share\docs\couchdb.1 |
| -@copy share\docs\info\CouchDB.info rel\couchdb\share\docs\CouchDB.info |
| else |
| @xcopy src\docs\build\html rel\couchdb\share\www\docs /E /I |
| @copy src\docs\build\man\apachecouchdb.1 rel\couchdb\share\docs\couchdb.1 |
| -@copy src\docs\build\texinfo\CouchDB.info rel\couchdb\share\docs\CouchDB.info |
| endif |
| endif |
| |
| @echo ... done |
| @echo . |
| @echo You can now copy the rel\couchdb directory anywhere on your system. |
| @echo Start CouchDB with .\bin\couchdb.cmd from within that directory. |
| @echo . |
| |
| .PHONY: install |
| # target: install- install CouchDB :) |
| install: |
| @echo . |
| @echo Notice: There is no 'make install' command for CouchDB 2.0 yet. |
| @echo . |
| @echo To install CouchDB into your system, copy the rel\couchdb |
| @echo to your desired installation location. For example: |
| @echo xcopy /E rel\couchdb \usr\local\lib |
| @echo . |
| |
| ################################################################################ |
| # Cleaning |
| ################################################################################ |
| |
| |
| .PHONY: clean |
| # target: clean - Remove build artifacts |
| clean: |
| @$(REBAR) -r clean |
| -@rmdir /s/q .rebar |
| -@del /f/q bin\couchjs.exe |
| -@rmdir /s/q src\*\ebin |
| -@rmdir /s/q src\*\.rebar |
| -@del /f/q/s src\*.dll |
| -@del /f/q src\couch\priv\*.exe |
| -@del /f/q share\server\main.js share\server\main-coffee.js |
| -@rmdir /s/q tmp |
| -@rmdir /s/q dev\data |
| -@rmdir /s/q dev\lib |
| -@rmdir /s/q dev\logs |
| -@del /f/q src\couch\priv\couch_js\config.h |
| -@del /f/q dev\boot_node.beam dev\pbkdf2.pyc log\crash.log |
| |
| |
| .PHONY: distclean |
| # target: distclean - Remove build and release artifacts |
| distclean: clean |
| -@del install.mk |
| -@del config.erl |
| -@del rel\couchdb.config |
| ifneq ($(IN_RELEASE), true) |
| # when we are in a release, don’t delete the |
| # copied sources, generated docs, or fauxton |
| -@rmdir /s/q rel\couchdb |
| -@rmdir /s/q share\www |
| -@rmdir /s/q src\docs |
| endif |
| |
| |
| .PHONY: devclean |
| # target: devclean - Remove dev cluster artifacts |
| devclean: |
| -@rmdir /s/q dev\lib\node1\data |
| -@rmdir /s/q dev\lib\node2\data |
| -@rmdir /s/q dev\lib\node3\data |
| |
| |
| .PHONY: uninstall |
| # target: uninstall - Uninstall CouchDB :-( |
| uninstall: |
| -@rmdir /s/q $(DESTDIR)\$(install_dir) |
| -@del $(DESTDIR)\$(bin_dir)\couchdb |
| -@rmdir /s/q $(DESTDIR)\$(libexec_dir) |
| -@rmdir /s/q $(DESTDIR)\$(sysconf_dir) |
| -@rmdir /s/q $(DESTDIR)\$(data_dir) |
| -@rmdir /s/q $(DESTDIR)\$(doc_dir) |
| -@rmdir /s/q $(DESTDIR)\$(html_dir) |
| -@rmdir /s/q $(DESTDIR)\$(pdf_dir) |
| -@rmdir /s/q $(DESTDIR)\$(man_dir) |
| -@rmdir /s/q $(DESTDIR)\$(info_dir) |
| |
| |
| ################################################################################ |
| # Misc |
| ################################################################################ |
| |
| |
| .rebar: build-plt |
| |
| config.erl: |
| @echo Apache CouchDB has not been configured. |
| @echo Try "powershell -ExecutionPolicy Bypass .\configure.ps1 -?" for help. |
| @echo You probably want "powershell -ExecutionPolicy Bypass .\configure.ps1 -WithCurl". |
| @echo. |
| @false |
| |
| |
| src\docs\build: |
| @echo Building docs... |
| ifeq ($(with_docs), 1) |
| @cd src\docs && make.bat html && make.bat texinfo && make.bat man |
| endif |
| |
| |
| share\www: |
| ifeq ($(with_fauxton), 1) |
| @echo "Building Fauxton" |
| @cd src\fauxton && npm install --production && .\node_modules\.bin\grunt couchdb |
| endif |