diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 526 |
1 files changed, 0 insertions, 526 deletions
diff --git a/Makefile b/Makefile deleted file mode 100644 index 390aa4685..000000000 --- a/Makefile +++ /dev/null @@ -1,526 +0,0 @@ -# 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. - -# ******************************************************* -# WARNING! If you edit this file, also edit Makefile.win! -# ******************************************************* - -include version.mk - -REBAR?=$(shell echo `pwd`/bin/rebar) - -# Handle the following scenarios: -# 1. When building from a tarball, use version.mk. -# 2. When building from a clean release tag (#.#.#), use that tag. -# 3. When building from a clean RC tag (#.#.#-RC#), use JUST the version -# number inside the tarball, but use the full name for the name of the -# tarball itself. -# 4. When not on a clean tag, use version.mk + git sha + dirty status. - -COUCHDB_GIT_SHA=$(git_sha) - -IN_RELEASE = $(shell if [ ! -d .git ]; then echo true; fi) -ifeq ($(IN_RELEASE), true) - -# 1. Building from tarball, use version.mk. -COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch) - -else - -# Gather some additional information. -# We do it this way so we don't bake shell-isms into Makefile -# to make it easier to port to Windows. I know, I know. -jst -# IN_RC contains the -RCx suffix in the name if present -IN_RC = $(shell git describe --tags --always --first-parent \ - | grep -Eo -- '-RC[0-9]+' 2>/dev/null) -# ON_TAG matches *ONLY* if we are on a release or RC tag -ON_TAG = $(shell git describe --tags --always --first-parent \ - | grep -Eo -- '^[0-9]+\.[0-9]\.[0-9]+(-RC[0-9]+)?$$' 2>/dev/null) -# REL_TAG contains the #.#.# from git describe, which might be used -REL_TAG = $(shell git describe --tags --always --first-parent \ - | grep -Eo -- '^[0-9]+\.[0-9]\.[0-9]+' 2>/dev/null) -# DIRTY identifies if we're not on a commit -DIRTY = $(shell git describe --dirty | grep -Eo -- '-dirty' 2>/dev/null) -# COUCHDB_GIT_SHA is our current git hash. -COUCHDB_GIT_SHA=$(shell git rev-parse --short=7 --verify HEAD) - -ifeq ($(ON_TAG),) -# 4. Not on a tag. -COUCHDB_VERSION_SUFFIX = $(COUCHDB_GIT_SHA)$(DIRTY) -COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch)-$(COUCHDB_VERSION_SUFFIX) -else -# 2 and 3. On a tag. -COUCHDB_VERSION = $(REL_TAG)$(DIRTY) -endif -endif - -# needed to do text substitutions -comma:= , -empty:= -space:= $(empty) $(empty) - -DESTDIR= - -# Rebar options -apps= -skip_deps=folsom,meck,mochiweb,triq,proper,snappy,bcrypt,hyper -suites= -tests= - -COMPILE_OPTS=$(shell echo "\ - apps=$(apps) \ - " | sed -e 's/[a-z_]\{1,\}= / /g') -EUNIT_OPTS=$(shell echo "\ - skip_deps=$(skip_deps) \ - suites=$(suites) \ - tests=$(tests) \ - " | sed -e 's/[a-z]\{1,\}= / /g') -DIALYZE_OPTS=$(shell echo "\ - apps=$(apps) \ - skip_deps=$(skip_deps) \ - " | sed -e 's/[a-z]\{1,\}= / /g') -EXUNIT_OPTS=$(subst $(comma),$(space),$(tests)) - -#ignore javascript tests -ignore_js_suites= - -TEST_OPTS="-c 'startup_jitter=0' -c 'default_security=admin_local'" - -################################################################################ -# Main commands -################################################################################ - - -.PHONY: all -# target: all - Build everything -all: couch fauxton docs - - -.PHONY: help -# target: help - Print this help -help: - @egrep "^# target: " Makefile \ - | sed -e 's/^# target: //g' \ - | sort \ - | awk '{printf(" %-20s", $$1); $$1=$$2=""; print "-" $$0}' - - -################################################################################ -# Building -################################################################################ - - -.PHONY: couch -# target: couch - Build CouchDB core, use ERL_OPTS to provide custom compiler's options -couch: config.erl - @COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) compile $(COMPILE_OPTS) - @cp src/couch/priv/couchjs 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 python-black - @$(MAKE) emilio - @$(MAKE) eunit - @$(MAKE) mango-test - @$(MAKE) elixir - -ifdef apps -subdirs = $(apps) -else -subdirs=$(shell ls src) -endif - -.PHONY: eunit -# target: eunit - Run EUnit tests, use EUNIT_OPTS to provide custom options -eunit: export BUILDDIR = $(shell pwd) -eunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config -eunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(shell pwd)/bin/couchjs $(shell pwd)/share/server/main.js -eunit: export COUCHDB_TEST_ADMIN_PARTY_OVERRIDE=1 -eunit: couch - @COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) setup_eunit 2> /dev/null - @for dir in $(subdirs); do \ - COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) -r eunit $(EUNIT_OPTS) apps=$$dir || exit 1; \ - done - - -.PHONY: exunit -# target: exunit - Run ExUnit tests -exunit: export BUILDDIR = $(shell pwd) -exunit: export MIX_ENV=test -exunit: export ERL_LIBS = $(shell pwd)/src -exunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config -exunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(shell pwd)/bin/couchjs $(shell pwd)/share/server/main.js -exunit: couch elixir-init setup-eunit elixir-check-formatted elixir-credo - @mix test --cover --trace $(EXUNIT_OPTS) - -setup-eunit: export BUILDDIR = $(shell pwd) -setup-eunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config -setup-eunit: - @$(REBAR) setup_eunit 2> /dev/null - -just-eunit: export BUILDDIR = $(shell pwd) -just-eunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config -just-eunit: - @$(REBAR) -r eunit $(EUNIT_OPTS) - -.PHONY: soak-eunit -soak-eunit: export BUILDDIR = $(shell pwd) -soak-eunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config -soak-eunit: couch - @$(REBAR) setup_eunit 2> /dev/null - while [ $$? -eq 0 ] ; do $(REBAR) -r eunit $(EUNIT_OPTS) ; done - -emilio: - @bin/emilio -c emilio.config src/ | bin/warnings_in_scope -s 3 - -.venv/bin/black: - @python3 -m venv .venv - @.venv/bin/pip3 install black || touch .venv/bin/black - -# Python code formatter - only runs if we're on Python 3.6 or greater -python-black: .venv/bin/black - @python3 -c "import sys; exit(1 if sys.version_info < (3,6) else 0)" || \ - echo "Python formatter not supported on Python < 3.6; check results on a newer platform" - @python3 -c "import sys; exit(1 if sys.version_info >= (3,6) else 0)" || \ - LC_ALL=C.UTF-8 LANG=C.UTF-8 .venv/bin/black --check \ - --exclude="build/|buck-out/|dist/|_build/|\.git/|\.hg/|\.mypy_cache/|\.nox/|\.tox/|\.venv/|src/rebar/pr2relnotes.py|src/fauxton" \ - build-aux/*.py dev/run test/javascript/run src/mango/test/*.py src/docs/src/conf.py src/docs/ext/*.py . - -python-black-update: .venv/bin/black - @python3 -c "import sys; exit(1 if sys.version_info < (3,6) else 0)" || \ - echo "Python formatter not supported on Python < 3.6; check results on a newer platform" - @python3 -c "import sys; exit(1 if sys.version_info >= (3,6) else 0)" || \ - LC_ALL=C.UTF-8 LANG=C.UTF-8 .venv/bin/black \ - --exclude="build/|buck-out/|dist/|_build/|\.git/|\.hg/|\.mypy_cache/|\.nox/|\.tox/|\.venv/|src/rebar/pr2relnotes.py|src/fauxton" \ - build-aux/*.py dev/run test/javascript/run src/mango/test/*.py src/docs/src/conf.py src/docs/ext/*.py . - -.PHONY: elixir -elixir: export MIX_ENV=integration -elixir: export COUCHDB_TEST_ADMIN_PARTY_OVERRIDE=1 -elixir: elixir-init elixir-check-formatted elixir-credo devclean - @dev/run "$(TEST_OPTS)" -a adm:pass -n 1 \ - --enable-erlang-views \ - --locald-config test/elixir/test/config/test-config.ini \ - --no-eval 'mix test --trace --exclude without_quorum_test --exclude with_quorum_test $(EXUNIT_OPTS)' - -.PHONY: elixir-init -elixir-init: MIX_ENV=test -elixir-init: config.erl - @mix local.rebar --force && mix local.hex --force && mix deps.get - -.PHONY: elixir-cluster-without-quorum -elixir-cluster-without-quorum: export MIX_ENV=integration -elixir-cluster-without-quorum: elixir-init elixir-check-formatted elixir-credo devclean - @dev/run -n 3 -q -a adm:pass \ - --degrade-cluster 2 \ - --no-eval 'mix test --trace --only without_quorum_test $(EXUNIT_OPTS)' - -.PHONY: elixir-cluster-with-quorum -elixir-cluster-with-quorum: export MIX_ENV=integration -elixir-cluster-with-quorum: elixir-init elixir-check-formatted elixir-credo devclean - @dev/run -n 3 -q -a adm:pass \ - --degrade-cluster 1 \ - --no-eval 'mix test --trace --only with_quorum_test $(EXUNIT_OPTS)' - -.PHONY: elixir-check-formatted -elixir-check-formatted: elixir-init - @mix format --check-formatted - -# Credo is a static code analysis tool for Elixir. -# We use it in our tests -.PHONY: elixir-credo -elixir-credo: elixir-init - @mix credo - -.PHONY: javascript -# target: javascript - Run JavaScript test suites or specific ones defined by suites option -javascript: export COUCHDB_TEST_ADMIN_PARTY_OVERRIDE=1 -javascript: - - @$(MAKE) devclean - @mkdir -p share/www/script/test -ifeq ($(IN_RELEASE), true) - @cp test/javascript/tests/lorem*.txt share/www/script/test/ -else - @mkdir -p src/fauxton/dist/release/test - @cp test/javascript/tests/lorem*.txt src/fauxton/dist/release/test/ -endif - @dev/run -n 1 -q --with-admin-party-please \ - --enable-erlang-views \ - "$(TEST_OPTS)" \ - 'test/javascript/run --suites "$(suites)" \ - --ignore "$(ignore_js_suites)"' - - -.PHONY: soak-javascript -soak-javascript: export COUCHDB_TEST_ADMIN_PARTY_OVERRIDE=1 -soak-javascript: - @mkdir -p share/www/script/test -ifeq ($(IN_RELEASE), true) - @cp test/javascript/tests/lorem*.txt share/www/script.test/ -else - @mkdir -p src/fauxton/dist/release/test - @cp test/javascript/tests/lorem*.txt src/fauxton/dist/release/test/ -endif - @rm -rf dev/lib - while [ $$? -eq 0 ]; do \ - dev/run -n 1 -q --with-admin-party-please \ - "$(TEST_OPTS)" \ - 'test/javascript/run --suites "$(suites)" \ - --ignore "$(ignore_js_suites)"' \ - done - -.PHONY: build-report -# target: build-report - Generate and upload a build report -build-report: - build-aux/show-test-results.py --suites=10 --tests=10 > test-results.log - build-aux/logfile-uploader.py - -.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 - - -.PHONY: list-eunit-apps -# target: list-eunit-apps - List EUnit target apps -list-eunit-apps: - @find ./src/ -type f -name *_test.erl -o -name *_tests.erl \ - | cut -d '/' -f 3 \ - | sort -u - - -.PHONY: list-eunit-suites -# target: list-eunit-suites - List EUnit target test suites -list-eunit-suites: - @find ./src/ -type f -name *_test.erl -o -name *_tests.erl -exec basename {} \; \ - | cut -d '.' -f -1 \ - | sort - - -.PHONY: list-js-suites -# target: list-js-suites - List JavaScript test suites -list-js-suites: - @find ./test/javascript/tests/ -type f -name *.js -exec basename {} \; \ - | cut -d '.' -f -1 \ - | sort - - -.PHONY: build-test -# target: build-test - Test build script -build-test: - @test/build/test-configure.sh - - -.PHONY: mango-test -# target: mango-test - Run Mango tests -mango-test: export COUCHDB_TEST_ADMIN_PARTY_OVERRIDE=1 -mango-test: devclean all - @cd src/mango && \ - python3 -m venv .venv && \ - .venv/bin/python3 -m pip install -r requirements.txt - @cd src/mango && ../../dev/run "$(TEST_OPTS)" -n 1 --admin=testuser:testpass '.venv/bin/python3 -m nose --with-xunit' - -################################################################################ -# 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: introspect -# target: introspect - Check for commits difference between rebar.config and repository -introspect: - @$(REBAR) -r update-deps - @build-aux/introspect - -################################################################################ -# Distributing -################################################################################ - - -.PHONY: dist -# target: dist - Make release tarball -dist: all derived - @./build-aux/couchdb-build-release.sh $(COUCHDB_VERSION) - - @cp -r share/www apache-couchdb-$(COUCHDB_VERSION)/share/ - @mkdir -p apache-couchdb-$(COUCHDB_VERSION)/share/docs/html - @cp -r src/docs/build/html apache-couchdb-$(COUCHDB_VERSION)/share/docs/ - - @mkdir -p apache-couchdb-$(COUCHDB_VERSION)/share/docs/man - @cp src/docs/build/man/apachecouchdb.1 apache-couchdb-$(COUCHDB_VERSION)/share/docs/man/ - - @tar czf apache-couchdb-$(COUCHDB_VERSION)$(IN_RC).tar.gz apache-couchdb-$(COUCHDB_VERSION) - @echo "Done: apache-couchdb-$(COUCHDB_VERSION)$(IN_RC).tar.gz" - - -.PHONY: release -# target: release - Create an Erlang release including CouchDB! --include install.mk -release: all - @echo "Installing CouchDB into rel/couchdb/ ..." - @rm -rf rel/couchdb - @$(REBAR) generate # make full erlang release - -ifeq ($(with_fauxton), 1) - @mkdir -p rel/couchdb/share/ - @cp -R share/www rel/couchdb/share/ -endif - -ifeq ($(with_docs), 1) -ifeq ($(IN_RELEASE), true) - @mkdir -p rel/couchdb/share/www/docs/ - @mkdir -p rel/couchdb/share/docs/ - @cp -R share/docs/html/* rel/couchdb/share/www/docs/ - @cp share/docs/man/apachecouchdb.1 rel/couchdb/share/docs/couchdb.1 -else - @mkdir -p rel/couchdb/share/www/docs/ - @mkdir -p rel/couchdb/share/docs/ - @cp -R src/docs/build/html/ rel/couchdb/share/www/docs - @cp src/docs/build/man/apachecouchdb.1 rel/couchdb/share/docs/couchdb.1 -endif -endif - - @echo "... done" - @echo - @echo " You can now copy the rel/couchdb directory anywhere on your system." - @echo " Start CouchDB with ./bin/couchdb from within that directory." - @echo - -.PHONY: install -# target: install- install CouchDB :) -install: release - @echo - @echo "Notice: There is no 'make install' command for CouchDB 2.x+." - @echo - @echo " To install CouchDB into your system, copy the rel/couchdb" - @echo " to your desired installation location. For example:" - @echo " cp -r rel/couchdb /usr/local/lib" - @echo - -################################################################################ -# Cleaning -################################################################################ - - -.PHONY: clean -# target: clean - Remove build artifacts -clean: - @$(REBAR) -r clean - @rm -rf .rebar/ - @rm -f bin/couchjs - @rm -rf src/*/ebin - @rm -rf src/*/.rebar - @rm -rf src/*/priv/*.so - @rm -rf src/couch/priv/{couchspawnkillable,couchjs} - @rm -rf share/server/main.js share/server/main-coffee.js - @rm -rf tmp dev/data dev/lib dev/logs - @rm -rf src/mango/.venv - @rm -f src/couch/priv/couchspawnkillable - @rm -f src/couch/priv/couch_js/config.h - @rm -f dev/boot_node.beam dev/pbkdf2.pyc log/crash.log - - -.PHONY: distclean -# target: distclean - Remove build and release artifacts -distclean: clean - @rm -f install.mk - @rm -f config.erl - @rm -f rel/couchdb.config -ifneq ($(IN_RELEASE), true) -# when we are in a release, don’t delete the -# copied sources, generated docs, or fauxton - @rm -rf rel/couchdb - @rm -rf share/www - @rm -rf src/docs -endif - - -.PHONY: devclean -# target: devclean - Remove dev cluster artifacts -devclean: - @rm -rf dev/lib/*/data - @rm -rf dev/lib/*/etc - -################################################################################ -# Misc -################################################################################ - - -.rebar: build-plt - -config.erl: - @echo "Apache CouchDB has not been configured." - @echo "Try \"./configure -h\" for help." - @echo - @false - - -src/docs/build: -ifeq ($(with_docs), 1) - @cd src/docs; $(MAKE) -endif - - -share/www: -ifeq ($(with_fauxton), 1) - @echo "Building Fauxton" - @cd src/fauxton && npm install --production && ./node_modules/grunt-cli/bin/grunt couchdb -endif - - -derived: - @echo "COUCHDB_GIT_SHA: $(COUCHDB_GIT_SHA)" - @echo "COUCHDB_VERSION: $(COUCHDB_VERSION)" - @echo "COUCHDB_VERSION_SUFFIX: $(COUCHDB_VERSION_SUFFIX)" - @echo "DIRTY: $(DIRTY)" - @echo "IN_RC: $(IN_RC)" - @echo "IN_RELEASE: $(IN_RELEASE)" - @echo "ON_TAG: $(ON_TAG)" - @echo "REL_TAG: $(REL_TAG)" - @echo "SUB_VSN: $(SUB_VSN)" |