Makefile 4.87 KB
Newer Older
Albert Gräf's avatar
Albert Gräf committed
1 2 3 4 5 6

# Toplevel Makefile for Purr Data. Please note that at present this is just a
# thin wrapper around l2ork_addons/tar_em_up.sh, the traditional Pd-l2ork
# build script.

# The Pd-l2ork build system is very arcane and intricate. Its main purpose is
Albert Gräf's avatar
Albert Gräf committed
7 8 9 10 11 12
# putting together a staging area with a complete Pd-l2ork installation and
# then building installers for the supported platforms from that, pulling
# together a bunch of separate packages, each with their own build system.
# Compiling sources is just one of the tasks that the builder does. Therefore
# you'll notice that, unlike with other less complicated source packages,
# `make` will rebuild lots of things even if you just finished another build.
Albert Gräf's avatar
Albert Gräf committed
13 14 15 16 17 18 19 20 21 22 23 24

# The available build targets are:

# all: produce a native installer for the host platform (equivalent to
# `tar_em_up.sh -Tk`); note that in order to force a complete rebuild (like
# what `tar_em_up.sh -T` does), you'll have to run `make clean` first

# incremental: like `all`, but does an "incremental build" (equivalent to
# `tar_em_up.sh -tk`), bypassing Gem which takes an eternity to compile; please
# check the tar_em_up.sh script for details

# checkout: convenience target to check out all submodules in preparation for
Albert Gräf's avatar
Albert Gräf committed
25
# a subsequent build (the `all`, `incremental` and `dist` targets also do this
Albert Gräf's avatar
Albert Gräf committed
26 27 28 29 30 31 32 33
# automatically when needed)

# clean: does something similar to what `tar_em_up.sh` does in order to start
# from a clean slate, so that a subsequent build starts from scratch again

# realclean: put the sources into pristine state again (WARNING: this will get
# rid of any uncommitted source changes, too); use this as a last resort to
# get the sources into a compilable state again after things have gone awry
Albert Gräf's avatar
Albert Gräf committed
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

# dist: create a self-contained distribution tarball of the source

# NOTES:

# The realclean and dist targets use git commands and thus only work in a
# working copy of the git repo, not in the static tarball snapshots produced
# by the dist target.

# On Linux systems running `make` will try to produce a Debian package. On
# Linux distributions like Arch which are no Debian derivatives, the Debian
# packaging tools are not available. In this case, `make` will stop right
# before creating the actual package and leave the ready-made staged
# installation tree under `packages/linux_make/build` from where it can be
# copied or packaged up in any desired way.
Albert Gräf's avatar
Albert Gräf committed
49

50 51
.PHONY: all incremental checkout clean realclean dist

Albert Gräf's avatar
Albert Gräf committed
52 53 54 55 56 57 58 59 60 61
all:
	cd l2ork_addons && ./tar_em_up.sh -Tk

incremental:
	cd l2ork_addons && ./tar_em_up.sh -tk

checkout:
	git submodule update --init

clean:
Albert Gräf's avatar
Albert Gräf committed
62
	test "$(shell uname -s)" = "Darwin" && make -C packages/darwin_app clean || true
Albert Gräf's avatar
Albert Gräf committed
63 64 65 66 67 68 69 70
	cd pd/src && aclocal && autoconf && make clean || true
	cd externals/miXed && make clean || true
	cd Gem/src/ && test -f Makefile && make distclean || true
	cd Gem/src/ && rm -rf ./.libs && rm -rf ./*/.libs
	cd Gem/ && test -f Makefile && make distclean || true
	cd Gem/ && rm -f gemglutwindow.pd_linux Gem.pd_linux

realclean:
71
# This requires a working copy of the git repo.
Albert Gräf's avatar
Albert Gräf committed
72
	@test -d .git || (echo "Not a git repository, bailing out." && false)
73 74
	git submodule deinit --all -f
	git checkout .
75
	git clean -dffx
76 77 78 79 80 81

# Build a self-contained distribution tarball (snapshot). This is pretty much
# the same as in debuild/Makefile and must be run in a working copy of the git
# repo.

# The Debian version gets derived from the date and serial number of the last
Albert Gräf's avatar
Albert Gräf committed
82
# commit.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
debversion = $(shell grep PD_L2ORK_VERSION pd/src/m_pd.h | sed 's|^.define *PD_L2ORK_VERSION *"\(.*\)".*|\1|')+git$(shell test -d .git && git rev-list --count HEAD)+$(shell test -d .git && git rev-parse --short HEAD)
# Source tarball and folder.
debsrc = purr-data_$(debversion).orig.tar.gz
debdist = purr-data-$(debversion)

# Submodules (Gem, etc.).
submodules = $(sort $(shell test -d .git && (git config --file .gitmodules --get-regexp path | awk '{ print $$2 }')))

dist: $(debsrc)

# Determine the build version which needs git to be computed, so we can't do
# it in a stand-alone build from a tarball.
PD_BUILD_VERSION := $(shell test -d .git && (git log -1 --format=%cd --date=short | sed -e 's/-//g'))-rev.$(shell test -d .git && git rev-parse --short HEAD)

$(debsrc):
Albert Gräf's avatar
Albert Gräf committed
98
	@test -d .git || (echo "Not a git repository, bailing out." && false)
99 100 101 102 103 104 105 106 107 108 109 110 111
	rm -rf $(debdist)
# Make sure that the submodules are initialized.
	git submodule update --init
# Grab the main source.
	git archive --format=tar.gz --prefix=$(debdist)/ HEAD | tar xfz -
# Grab the submodules.
	for x in $(submodules); do (cd $(debdist) && rm -rf $$x && git -C ../$$x archive --format=tar.gz --prefix=$$x/ HEAD | tar xfz -); done
# Pre-generate and put s_stuff.h into the tarball (see above; the build
# version is generated using git which can't be done outside the git repo).
	sed 's|^\(#define PD_BUILD_VERSION "\).*"|\1$(PD_BUILD_VERSION)"|' pd/src/s_stuff.h.in > $(debdist)/pd/src/s_stuff.h
# Create the source tarball.
	tar cfz $(debsrc) $(debdist)
	rm -rf $(debdist)