1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
|
all=git-annex git-annex-shell git-remote-annex 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
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 list-bin git-annex) git-annex || \
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
git-remote-annex: git-annex
ln -sf git-annex git-remote-annex
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-annex
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-remote-annex
./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-remote-annex .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 tags
|