c2e60dd7a6
Via a build flag this time, that's off by default because hackage demands it be so, but that gets turned on by the Makefile and by stack.
244 lines
8.3 KiB
Makefile
244 lines
8.3 KiB
Makefile
all=git-annex git-annex-shell mans docs
|
|
|
|
# set to "./Setup" if you lack a cabal program. Or can be set to "stack"
|
|
BUILDER?=cabal
|
|
ifeq ($(BUILDER),stack)
|
|
GHC?=stack ghc --
|
|
else
|
|
GHC?=ghc
|
|
endif
|
|
|
|
PREFIX?=/usr
|
|
SHAREDIR?=share
|
|
|
|
# On Debian systems, zsh does not look here, and you will have to override
|
|
# this to /usr/share/zsh/vendor-completions
|
|
ZSH_COMPLETIONS_PATH?=$(PREFIX)/$(SHAREDIR)/zsh/site-functions
|
|
|
|
# Am I typing :make in vim? Do a dev build.
|
|
ifdef VIM
|
|
all=dev
|
|
endif
|
|
|
|
build: $(all)
|
|
|
|
# install system-wide
|
|
# Set PREFIX and DESTDIR to configure where it is installed
|
|
install: install-bins install-docs install-completions install-desktop
|
|
|
|
# installs into your home directory
|
|
install-home:
|
|
$(MAKE) install-bins PREFIX=$(HOME)/.local
|
|
$(MAKE) install-mans PREFIX=$(HOME)/.local
|
|
$(MAKE) install-desktop PREFIX=$(HOME)/.local USERDIR=1
|
|
|
|
tmp/configure-stamp: Build/TestConfig.hs Build/Configure.hs
|
|
if [ "$(BUILDER)" = ./Setup ]; then $(GHC) --make Setup; fi
|
|
if [ "$(BUILDER)" != stack ]; then \
|
|
$(BUILDER) configure -fParallelBuild $(BUILDERCOMMONOPTIONS) --ghc-options="$(shell Build/collect-ghc-options.sh)"; \
|
|
rm cabal.project.local~* 2>/dev/null || true; \
|
|
else \
|
|
$(BUILDER) setup $(BUILDERCOMMONOPTIONS); \
|
|
fi
|
|
mkdir -p tmp
|
|
touch tmp/configure-stamp
|
|
|
|
# Build with stack if it was used to build before, otherwise cabal.
|
|
dev:
|
|
@if [ -d .stack-work ]; then BUILDER=stack make; else make; fi
|
|
|
|
# Non-optimised build for development, with profiling enabled (for memory
|
|
# profiling).
|
|
#
|
|
# This leaves cabal.project.local configured for a prof build,
|
|
# so just running make will continue to do prof builds.
|
|
prof:
|
|
$(BUILDER) configure -f"-Production" -fParallelBuild \
|
|
--enable-executable-dynamic --enable-profiling
|
|
rm cabal.project.local~* 2>/dev/null || true
|
|
mkdir -p tmp
|
|
touch tmp/configure-stamp
|
|
$(MAKE) git-annex tags
|
|
|
|
git-annex: tmp/configure-stamp
|
|
$(BUILDER) build $(BUILDERCOMMONOPTIONS) $(BUILDEROPTIONS)
|
|
@if [ "$(BUILDER)" = stack ]; then \
|
|
ln -f $$(stack path $(BUILDERCOMMONOPTIONS) --dist-dir)/build/git-annex/git-annex git-annex; \
|
|
else \
|
|
if [ -d dist-newstyle ]; then \
|
|
ln -f $$(cabal exec -- sh -c 'command -v git-annex') git-annex; \
|
|
else \
|
|
ln -f dist/build/git-annex/git-annex git-annex; \
|
|
fi; \
|
|
fi
|
|
|
|
git-annex-shell: git-annex
|
|
ln -sf git-annex git-annex-shell
|
|
|
|
# These are not built normally.
|
|
git-union-merge.1: doc/git-union-merge.mdwn
|
|
./Build/mdwn2man git-union-merge 1 doc/git-union-merge.mdwn > git-union-merge.1
|
|
git-union-merge:
|
|
$(GHC) --make -threaded $@
|
|
|
|
install-mans: mans
|
|
install -d $(DESTDIR)$(PREFIX)/$(SHAREDIR)/man/man1
|
|
install -m 0644 man/*.1 $(DESTDIR)$(PREFIX)/$(SHAREDIR)/man/man1
|
|
|
|
install-docs: docs install-mans
|
|
install -d $(DESTDIR)$(PREFIX)/$(SHAREDIR)/doc/git-annex
|
|
if [ -d html ]; then \
|
|
rsync -a --delete html/ $(DESTDIR)$(PREFIX)/$(SHAREDIR)/doc/git-annex/html/; \
|
|
fi
|
|
|
|
install-bins: build
|
|
install -d $(DESTDIR)$(PREFIX)/bin
|
|
install git-annex $(DESTDIR)$(PREFIX)/bin
|
|
ln -sf git-annex $(DESTDIR)$(PREFIX)/bin/git-annex-shell
|
|
ln -sf git-annex $(DESTDIR)$(PREFIX)/bin/git-remote-tor-annex
|
|
|
|
install-desktop: build Build/InstallDesktopFile
|
|
./Build/InstallDesktopFile $(PREFIX)/bin/git-annex || true
|
|
|
|
install-completions: build
|
|
install -d $(DESTDIR)$(PREFIX)/$(SHAREDIR)/bash-completion/completions
|
|
install -m 0644 bash-completion.bash $(DESTDIR)$(PREFIX)/$(SHAREDIR)/bash-completion/completions/git-annex
|
|
install -d $(DESTDIR)$(ZSH_COMPLETIONS_PATH)
|
|
./git-annex --zsh-completion-script git-annex 2>/dev/null \
|
|
> $(DESTDIR)$(ZSH_COMPLETIONS_PATH)/_git-annex
|
|
install -d $(DESTDIR)$(PREFIX)/$(SHAREDIR)/fish/vendor_completions.d
|
|
./git-annex --fish-completion-script git-annex 2>/dev/null \
|
|
> $(DESTDIR)$(PREFIX)/$(SHAREDIR)/fish/vendor_completions.d/git-annex.fish
|
|
|
|
test: git-annex git-annex-shell
|
|
./git-annex test
|
|
|
|
retest: git-annex
|
|
./git-annex test --rerun-update --rerun-filter failures
|
|
|
|
tags:
|
|
hasktags . -c || true
|
|
|
|
mans: Build/MakeMans
|
|
./Build/MakeMans
|
|
|
|
# If ikiwiki is available, build static html docs suitable for being
|
|
# shipped in the software package.
|
|
docs: mans
|
|
@if command -v ikiwiki; then \
|
|
LC_ALL=C TZ=UTC ikiwiki doc html -v --wikiname git-annex \
|
|
--plugin=goodstuff \
|
|
--no-usedirs --disable-plugin=openid --plugin=sidebar \
|
|
--plugin theme --set theme=actiontabs --set deterministic=1 \
|
|
--disable-plugin=shortcut --disable-plugin=smiley \
|
|
--plugin=comments --set comments_pagespec="*" \
|
|
--exclude='ikiwiki/*' \
|
|
--exclude='news/.*' --exclude='design/assistant/blog/*' \
|
|
--exclude='bugs/*' --exclude='todo/*' --exclude='forum/*' \
|
|
--exclude='users/*' --exclude='devblog/*' --exclude='thanks'; \
|
|
else \
|
|
echo "** ikiwiki not found, skipping building docs" >&2; \
|
|
fi
|
|
|
|
clean:
|
|
if [ "$(BUILDER)" != ./Setup ] && [ "$(BUILDER)" != cabal ]; then $(BUILDER) clean; fi
|
|
rm -rf tmp dist dist-newstyle git-annex $(mans) configure *.tix .hpc \
|
|
doc/.ikiwiki html dist tags Build/SysConfig Build/Version \
|
|
Setup Build/InstallDesktopFile Build/Standalone \
|
|
Build/DistributionUpdate Build/BuildVersion Build/MakeMans \
|
|
git-annex-shell git-union-merge .tasty-rerun-log
|
|
find . -name \*.o -exec rm {} \;
|
|
find . -name \*.hi -exec rm {} \;
|
|
|
|
Build/InstallDesktopFile: Build/InstallDesktopFile.hs
|
|
$(GHC) --make $@ -Wall -fno-warn-tabs
|
|
Build/Standalone: Build/Standalone.hs Build/LinuxMkLibs.hs Utility/LinuxMkLibs.hs tmp/configure-stamp
|
|
$(GHC) --make $@ -Wall -fno-warn-tabs
|
|
Build/BuildVersion: Build/BuildVersion.hs
|
|
$(GHC) --make $@ -Wall -fno-warn-tabs
|
|
Build/MakeMans: Build/MakeMans.hs
|
|
$(GHC) --make $@ -Wall -fno-warn-tabs
|
|
|
|
LINUXSTANDALONE_DEST=tmp/git-annex.linux
|
|
linuxstandalone:
|
|
$(MAKE) git-annex Build/Standalone
|
|
./Build/Standalone "$(LINUXSTANDALONE_DEST)" "$(LINUXSTANDALONE_DEST)"
|
|
|
|
$(MAKE) install-mans DESTDIR="$(LINUXSTANDALONE_DEST)"
|
|
zcat standalone/licences.gz > $(LINUXSTANDALONE_DEST)/LICENSE
|
|
cp doc/logo_16x16.png doc/logo.svg $(LINUXSTANDALONE_DEST)
|
|
cp standalone/trustedkeys.gpg $(LINUXSTANDALONE_DEST)
|
|
|
|
md5sum git-annex | cut -d ' ' -f 1 > "$(LINUXSTANDALONE_DEST)/buildid"
|
|
cd tmp/git-annex.linux && find . -type f > git-annex.MANIFEST
|
|
cd tmp/git-annex.linux && find . -type l >> git-annex.MANIFEST
|
|
cd tmp && tar c git-annex.linux | gzip -9 --rsyncable > git-annex-standalone-$(shell dpkg --print-architecture).tar.gz
|
|
|
|
# Run this target to build git-annex-standalone.deb
|
|
debianstandalone: dpkg-buildpackage-F
|
|
# Run this target to build git-annex-standalone.dsc
|
|
debianstandalone-dsc: dpkg-buildpackage-S
|
|
|
|
prep-standalone:
|
|
$(MAKE) undo-standalone
|
|
QUILT_PATCHES=debian/patches QUILT_SERIES=series.standalone-build quilt push -a
|
|
debian/create-standalone-changelog
|
|
|
|
undo-standalone:
|
|
test -e .git
|
|
git checkout debian/changelog CHANGELOG
|
|
quilt pop -a || true
|
|
|
|
commit-standalone:
|
|
QUILT_PATCHES=debian/patches QUILT_SERIES=series.standalone-build quilt refresh
|
|
|
|
dpkg-buildpackage%: prep-standalone
|
|
umask 022; dpkg-buildpackage -rfakeroot $*
|
|
$(MAKE) undo-standalone
|
|
|
|
OSXAPP_DEST=tmp/build-dmg/git-annex.app
|
|
OSXAPP_TOP=$(OSXAPP_DEST)/Contents/MacOS/bundle
|
|
osxapp:
|
|
$(MAKE) git-annex
|
|
# Remove all RPATHs, both because this overloads the linker on
|
|
# OSX Sierra, and to avoid the binary looking in someone's home
|
|
# directory.
|
|
if otool -l git-annex | grep -q "path "; then \
|
|
eval install_name_tool $$(otool -l git-annex | grep "path " | sed 's/.*path /-delete_rpath /' | sed 's/ (.*//') git-annex; \
|
|
fi
|
|
|
|
$(MAKE) Build/Standalone
|
|
./Build/Standalone $(OSXAPP_TOP) $(OSXAPP_DEST)
|
|
|
|
gzcat standalone/licences.gz > $(OSXAPP_TOP)/LICENSE
|
|
cp $(OSXAPP_TOP)/LICENSE tmp/build-dmg/LICENSE.txt
|
|
cp standalone/trustedkeys.gpg $(OSXAPP_DEST)/Contents/MacOS
|
|
|
|
# OSX looks in man dir nearby the bin
|
|
$(MAKE) install-mans DESTDIR="$(OSXAPP_TOP)/.." SHAREDIR="" PREFIX=""
|
|
|
|
cd $(OSXAPP_DEST) && find . -type f > Contents/MacOS/git-annex.MANIFEST
|
|
cd $(OSXAPP_DEST) && find . -type l >> Contents/MacOS/git-annex.MANIFEST
|
|
rm -f tmp/git-annex.dmg
|
|
|
|
# hdiutil sometimes fails with "resource busy", so try a few times
|
|
ok=0; for x in 1 2 3 4 5; do \
|
|
if [ $$ok = 0 ]; then \
|
|
if hdiutil create -format UDBZ -size 640m -srcfolder tmp/build-dmg \
|
|
-volname git-annex -o tmp/git-annex.dmg; \
|
|
then \
|
|
ok=1; \
|
|
else \
|
|
sleep 60; \
|
|
fi \
|
|
fi \
|
|
done; if [ $$ok = 0 ]; then exit 1; fi
|
|
|
|
distributionupdate:
|
|
git pull
|
|
cabal configure
|
|
rm cabal.project.local~* 2>/dev/null || true
|
|
ghc -Wall -fno-warn-tabs --make Build/DistributionUpdate -XLambdaCase -XPackageImports
|
|
./Build/DistributionUpdate
|
|
|
|
.PHONY: git-annex git-union-merge tags
|