Makefile
296 lines
| 9.5 KiB
| text/x-makefile
|
MakefileLexer
|
r10134 | # If you want to change PREFIX, do not just edit it below. The changed | ||
# value wont get passed on to recursive make calls. You should instead | ||||
# override the variable on the command like: | ||||
# | ||||
# % make PREFIX=/opt/ install | ||||
|
r29004 | export PREFIX=/usr/local | ||
|
r46425 | |||
# Default to Python 3. | ||||
# | ||||
|
r46510 | # Windows ships Python 3 as `python.exe`, which may not be on PATH. py.exe is. | ||
|
r46425 | ifeq ($(OS),Windows_NT) | ||
|
r46510 | PYTHON?=py -3 | ||
|
r46425 | else | ||
PYTHON?=python3 | ||||
endif | ||||
|
r46437 | PYOXIDIZER?=pyoxidizer | ||
|
r29009 | $(eval HGROOT := $(shell pwd)) | ||
|
r24194 | HGPYTHONS ?= $(HGROOT)/build/pythons | ||
|
r7706 | PURE= | ||
|
r38849 | PYFILESCMD=find mercurial hgext doc -name '*.py' | ||
PYFILES:=$(shell $(PYFILESCMD)) | ||||
|
r44135 | DOCFILES=mercurial/helptext/*.txt | ||
|
r19427 | export LANGUAGE=C | ||
export LC_ALL=C | ||||
|
r24195 | TESTFLAGS ?= $(shell echo $$HGTESTFLAGS) | ||
|
r33596 | OSXVERSIONFLAGS ?= $(shell echo $$OSXVERSIONFLAGS) | ||
|
r43073 | CARGO = cargo | ||
|
r1008 | |||
|
r18056 | # Set this to e.g. "mingw32" to use a non-default compiler. | ||
COMPILER= | ||||
|
r29003 | COMPILERFLAG_tmp_ = | ||
COMPILERFLAG_tmp_${COMPILER} ?= -c $(COMPILER) | ||||
COMPILERFLAG=${COMPILERFLAG_tmp_${COMPILER}} | ||||
|
r2244 | help: | ||
@echo 'Commonly used make targets:' | ||||
@echo ' all - build program and documentation' | ||||
|
r20311 | @echo ' install - install program and man pages to $$PREFIX ($(PREFIX))' | ||
@echo ' install-home - install with setup.py install --home=$$HOME ($(HOME))' | ||||
|
r4706 | @echo ' local - build for inplace usage' | ||
|
r2244 | @echo ' tests - run all tests in the automatic test suite' | ||
|
r15379 | @echo ' test-foo - run only specified tests (e.g. test-merge1.t)' | ||
|
r2244 | @echo ' dist - run all tests and create a source tarball in dist/' | ||
@echo ' clean - remove files created by other targets' | ||||
@echo ' (except installed files or dist source tarball)' | ||||
|
r7648 | @echo ' update-pot - update i18n/hg.pot' | ||
|
r2244 | @echo | ||
@echo 'Example for a system-wide installation under /usr/local:' | ||||
@echo ' make all && su -c "make install" && hg version' | ||||
@echo | ||||
@echo 'Example for a local installation (usable in this directory):' | ||||
@echo ' make local && ./hg version' | ||||
all: build doc | ||||
|
r2235 | |||
local: | ||||
|
r18056 | $(PYTHON) setup.py $(PURE) \ | ||
build_py -c -d . \ | ||||
|
r29003 | build_ext $(COMPILERFLAG) -i \ | ||
build_hgexe $(COMPILERFLAG) -i \ | ||||
|
r18056 | build_mo | ||
|
r17927 | env HGRCPATH= $(PYTHON) hg version | ||
|
r1020 | |||
|
r2235 | build: | ||
|
r29003 | $(PYTHON) setup.py $(PURE) build $(COMPILERFLAG) | ||
|
r2235 | |||
r47484 | build-chg: | |||
make -C contrib/chg | ||||
r47486 | build-rhg: | |||
(cd rust/rhg; cargo build --release) | ||||
|
r26601 | wheel: | ||
|
r29003 | FORCE_SETUPTOOLS=1 $(PYTHON) setup.py $(PURE) bdist_wheel $(COMPILERFLAG) | ||
|
r26601 | |||
|
r2235 | doc: | ||
$(MAKE) -C doc | ||||
|
r1008 | |||
|
r29640 | cleanbutpackages: | ||
|
r44683 | rm -f hg.exe | ||
|
r8365 | -$(PYTHON) setup.py clean --all # ignore errors from this command | ||
|
r33606 | find contrib doc hgext hgext3rd i18n mercurial tests hgdemandimport \ | ||
|
r20007 | \( -name '*.py[cdo]' -o -name '*.so' \) -exec rm -f '{}' ';' | ||
|
r22375 | rm -f MANIFEST MANIFEST.in hgext/__index__.py tests/*.err | ||
|
r28430 | rm -f mercurial/__modulepolicy__.py | ||
|
r22375 | if test -d .hg; then rm -f mercurial/__version__.py; fi | ||
|
r29640 | rm -rf build mercurial/locale | ||
|
r1423 | $(MAKE) -C doc clean | ||
|
r28974 | $(MAKE) -C contrib/chg distclean | ||
|
r40868 | rm -rf rust/target | ||
|
r41003 | rm -f mercurial/rustext.so | ||
|
r1008 | |||
|
r29640 | clean: cleanbutpackages | ||
rm -rf packages | ||||
|
r2527 | install: install-bin install-doc | ||
install-bin: build | ||||
|
r10961 | $(PYTHON) setup.py $(PURE) install --root="$(DESTDIR)/" --prefix="$(PREFIX)" --force | ||
|
r2527 | |||
r47485 | install-chg: build-chg | |||
make -C contrib/chg install PREFIX="$(PREFIX)" | ||||
|
r2527 | install-doc: doc | ||
|
r2235 | cd doc && $(MAKE) $(MFLAGS) install | ||
|
r2527 | install-home: install-home-bin install-home-doc | ||
install-home-bin: build | ||||
|
r20614 | $(PYTHON) setup.py $(PURE) install --home="$(HOME)" --prefix="" --force | ||
|
r2527 | |||
install-home-doc: doc | ||||
|
r2235 | cd doc && $(MAKE) $(MFLAGS) PREFIX="$(HOME)" install | ||
r47487 | install-rhg: build-rhg | |||
install -m 755 rust/target/release/rhg "$(PREFIX)"/bin/ | ||||
|
r3872 | MANIFEST-doc: | ||
$(MAKE) -C doc MANIFEST | ||||
|
r14558 | MANIFEST.in: MANIFEST-doc | ||
hg manifest | sed -e 's/^/include /' > MANIFEST.in | ||||
echo include mercurial/__version__.py >> MANIFEST.in | ||||
sed -e 's/^/include /' < doc/MANIFEST >> MANIFEST.in | ||||
|
r3872 | |||
|
r2234 | dist: tests dist-notests | ||
|
r14558 | dist-notests: doc MANIFEST.in | ||
|
r3865 | TAR_OPTIONS="--owner=root --group=root --mode=u+w,go-w,a+rX-s" $(PYTHON) setup.py -q sdist | ||
|
r1008 | |||
|
r14172 | check: tests | ||
|
r1008 | tests: | ||
|
r43073 | # Run Rust tests if cargo is installed | ||
if command -v $(CARGO) >/dev/null 2>&1; then \ | ||||
|
r43583 | $(MAKE) rust-tests; \ | ||
|
r43073 | fi | ||
|
r3969 | cd tests && $(PYTHON) run-tests.py $(TESTFLAGS) | ||
|
r1008 | |||
|
r1426 | test-%: | ||
|
r3969 | cd tests && $(PYTHON) run-tests.py $(TESTFLAGS) $@ | ||
|
r1426 | |||
|
r24194 | testpy-%: | ||
@echo Looking for Python $* in $(HGPYTHONS) | ||||
[ -e $(HGPYTHONS)/$*/bin/python ] || ( \ | ||||
cd $$(mktemp --directory --tmpdir) && \ | ||||
$(MAKE) -f $(HGROOT)/contrib/Makefile.python PYTHONVER=$* PREFIX=$(HGPYTHONS)/$* python ) | ||||
cd tests && $(HGPYTHONS)/$*/bin/python run-tests.py $(TESTFLAGS) | ||||
|
r43583 | rust-tests: py_feature = $(shell $(PYTHON) -c \ | ||
'import sys; print(["python27-bin", "python3-bin"][sys.version_info[0] >= 3])') | ||||
rust-tests: | ||||
cd $(HGROOT)/rust/hg-cpython \ | ||||
&& $(CARGO) test --quiet --all \ | ||||
|
r46184 | --no-default-features --features "$(py_feature) $(HG_RUST_FEATURES)" | ||
|
r43583 | |||
|
r18598 | check-code: | ||
hg manifest | xargs python contrib/check-code.py | ||||
|
r34860 | format-c: | ||
clang-format --style file -i \ | ||||
|
r37201 | `hg files 'set:(**.c or **.cc or **.h) and not "listfile:contrib/clang-format-ignorelist"'` | ||
|
r34860 | |||
|
r7893 | update-pot: i18n/hg.pot | ||
|
r20358 | i18n/hg.pot: $(PYFILES) $(DOCFILES) i18n/posplit i18n/hggettext | ||
|
r8542 | $(PYTHON) i18n/hggettext mercurial/commands.py \ | ||
|
r16126 | hgext/*.py hgext/*/__init__.py \ | ||
mercurial/fileset.py mercurial/revset.py \ | ||||
|
r36940 | mercurial/templatefilters.py \ | ||
mercurial/templatefuncs.py \ | ||||
mercurial/templatekw.py \ | ||||
|
r16126 | mercurial/filemerge.py \ | ||
|
r24859 | mercurial/hgweb/webcommands.py \ | ||
|
r33819 | mercurial/util.py \ | ||
|
r20121 | $(DOCFILES) > i18n/hg.pot.tmp | ||
|
r7710 | # All strings marked for translation in Mercurial contain | ||
# ASCII characters only. But some files contain string | ||||
# literals like this '\037\213'. xgettext thinks it has to | ||||
|
r8273 | # parse them even though they are not marked for translation. | ||
# Extracting with an explicit encoding of ISO-8859-1 will make | ||||
# xgettext "parse" and ignore them. | ||||
|
r38849 | $(PYFILESCMD) | xargs \ | ||
|
r9278 | xgettext --package-name "Mercurial" \ | ||
|
r30890 | --msgid-bugs-address "<mercurial-devel@mercurial-scm.org>" \ | ||
|
r47575 | --copyright-holder "Olivia Mackall <olivia@selenic.com> and others" \ | ||
|
r12806 | --from-code ISO-8859-1 --join --sort-by-file --add-comments=i18n: \ | ||
|
r20121 | -d hg -p i18n -o hg.pot.tmp | ||
$(PYTHON) i18n/posplit i18n/hg.pot.tmp | ||||
|
r20080 | # The target file is not created before the last step. So it never is in | ||
# an intermediate state. | ||||
|
r20121 | mv -f i18n/hg.pot.tmp i18n/hg.pot | ||
|
r1008 | |||
|
r7893 | %.po: i18n/hg.pot | ||
|
r19991 | # work on a temporary copy for never having a half completed target | ||
cp $@ $@.tmp | ||||
msgmerge --no-location --update $@.tmp $^ | ||||
|
r20120 | mv -f $@.tmp $@ | ||
|
r7893 | |||
|
r21255 | # Packaging targets | ||
|
r38034 | packaging_targets := \ | ||
|
r49613 | rhel7 \ | ||
rhel8 \ | ||||
|
r38034 | deb \ | ||
|
r49613 | docker-rhel7 \ | ||
docker-rhel8 \ | ||||
|
r43908 | docker-debian-bullseye \ | ||
docker-debian-buster \ | ||||
|
r38034 | docker-debian-stretch \ | ||
|
r43677 | docker-fedora \ | ||
|
r38034 | docker-ubuntu-xenial \ | ||
docker-ubuntu-xenial-ppa \ | ||||
docker-ubuntu-bionic \ | ||||
docker-ubuntu-bionic-ppa \ | ||||
|
r46582 | docker-ubuntu-focal \ | ||
docker-ubuntu-focal-ppa \ | ||||
|
r43677 | fedora \ | ||
|
r38034 | linux-wheels \ | ||
linux-wheels-x86_64 \ | ||||
linux-wheels-i686 \ | ||||
ppa | ||||
# Forward packaging targets for convenience. | ||||
$(packaging_targets): | ||||
$(MAKE) -C contrib/packaging $@ | ||||
|
r21559 | osx: | ||
|
r31611 | rm -rf build/mercurial | ||
|
r29535 | /usr/bin/python2.7 setup.py install --optimize=1 \ | ||
|
r29027 | --root=build/mercurial/ --prefix=/usr/local/ \ | ||
--install-lib=/Library/Python/2.7/site-packages/ | ||||
make -C doc all install DESTDIR="$(PWD)/build/mercurial/" | ||||
|
r32603 | # Place a bogon .DS_Store file in the target dir so we can be | ||
# sure it doesn't get included in the final package. | ||||
touch build/mercurial/.DS_Store | ||||
|
r31142 | # install zsh completions - this location appears to be | ||
# searched by default as of macOS Sierra. | ||||
|
r31609 | install -d build/mercurial/usr/local/share/zsh/site-functions/ | ||
|
r32604 | install -m 0644 contrib/zsh_completion build/mercurial/usr/local/share/zsh/site-functions/_hg | ||
|
r31142 | # install bash completions - there doesn't appear to be a | ||
# place that's searched by default for bash, so we'll follow | ||||
# the lead of Apple's git install and just put it in a | ||||
# location of our own. | ||||
|
r31609 | install -d build/mercurial/usr/local/hg/contrib/ | ||
install -m 0644 contrib/bash_completion build/mercurial/usr/local/hg/contrib/hg-completion.bash | ||||
|
r32471 | make -C contrib/chg \ | ||
HGPATH=/usr/local/bin/hg \ | ||||
PYTHON=/usr/bin/python2.7 \ | ||||
DESTDIR=../../build/mercurial \ | ||||
PREFIX=/usr/local \ | ||||
clean install | ||||
|
r29027 | mkdir -p $${OUTPUTDIR:-dist} | ||
|
r33779 | HGVER=$$(python contrib/genosxversion.py $(OSXVERSIONFLAGS) build/mercurial/Library/Python/2.7/site-packages/mercurial/__version__.py) && \ | ||
|
r29027 | OSXVER=$$(sw_vers -productVersion | cut -d. -f1,2) && \ | ||
|
r32603 | pkgbuild --filter \\.DS_Store --root build/mercurial/ \ | ||
|
r29777 | --identifier org.mercurial-scm.mercurial \ | ||
--version "$${HGVER}" \ | ||||
build/mercurial.pkg && \ | ||||
|
r38032 | productbuild --distribution contrib/packaging/macosx/distribution.xml \ | ||
|
r29027 | --package-path build/ \ | ||
--version "$${HGVER}" \ | ||||
|
r38032 | --resources contrib/packaging/macosx/ \ | ||
|
r29027 | "$${OUTPUTDIR:-dist/}"/Mercurial-"$${HGVER}"-macosx"$${OSXVER}".pkg | ||
|
r21559 | |||
|
r46437 | pyoxidizer: | ||
$(PYOXIDIZER) build --path ./rust/hgcli --release | ||||
r48643 | ||||
PYOX_DIR=build/pyoxidizer/x86_64-pc-windows-msvc/release/app | ||||
r48642 | # a temporary target to setup all we need for run-tests.py --pyoxidizer | |||
# (should go away as the run-tests implementation improves | ||||
pyoxidizer-windows-tests: pyoxidizer | ||||
r48643 | rm -rf $(PYOX_DIR)/templates | |||
cp -ar $(PYOX_DIR)/lib/mercurial/templates $(PYOX_DIR)/templates | ||||
r48645 | rm -rf $(PYOX_DIR)/helptext | |||
cp -ar $(PYOX_DIR)/lib/mercurial/helptext $(PYOX_DIR)/helptext | ||||
r48646 | rm -rf $(PYOX_DIR)/defaultrc | |||
cp -ar $(PYOX_DIR)/lib/mercurial/defaultrc $(PYOX_DIR)/defaultrc | ||||
r48647 | rm -rf $(PYOX_DIR)/contrib | |||
cp -ar contrib $(PYOX_DIR)/contrib | ||||
r48648 | rm -rf $(PYOX_DIR)/doc | |||
cp -ar doc $(PYOX_DIR)/doc | ||||
r48643 | ||||
r48642 | ||||
|
r29640 | .PHONY: help all local build doc cleanbutpackages clean install install-bin \ | ||
install-doc install-home install-home-bin install-home-doc \ | ||||
|
r43583 | dist dist-notests check tests rust-tests check-code format-c \ | ||
r48642 | update-pot pyoxidizer pyoxidizer-windows-tests \ | |||
|
r38034 | $(packaging_targets) \ | ||
osx | ||||