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
|
top := $(shell pwd)
export MAVEN_LOCAL_REPO_INSTALL = $(shell cat conf/maven.local.repo.txt)
export MAVEN_LOCAL_REPO_SEARCH = $(top)/build/packages/dest/$(MAVEN_LOCAL_REPO_INSTALL)
export PATH := $(top)/utils:$(PATH)
all: package
packages := $(filter-out _%,$(shell sed "s/[\# ].*//" conf/sources.mk))
include conf/sources.mk
# download #####################################################################
download: PHONY $(foreach package,$(packages),build/download/$(shell utils/spec2file '$($(package))'))
build/download/git/%: .tokens/network
if [ -d '$@' ]; then \
cd '$@' && git fetch --all -p; \
else \
mkdir -p '$(@D)' && git clone --mirror "$$(file2url 'git/$*')" '$@'; \
fi
touch '$@'
build/download/svn/%: .tokens/network
if ! [ -d "$$(file2base 'svn/$*')" ]; then \
rm -rf '$@' && \
mkdir -p build/download/svn && \
svn checkout --depth=empty \
"$$(file2url 'svn/$*')" \
build/download/"$$(file2base 'svn/$*')" && \
cd build/download/"$$(file2base 'svn/$*')"; \
else \
cd build/download/"$$(file2base 'svn/$*')" && \
svn update; \
fi && \
svn update --parents "$$(file2extra 'svn/$*')"
touch '$@'
build/download/tar/%: .tokens/network
mkdir -p '$(@D)'
wget -c -O '$@' "$$(file2url tar/$*)"
touch '$@'
# extract ######################################################################
extract: PHONY $(foreach package,$(packages),build/extract/$(shell utils/spec2file '$($(package))'))
build/extract/git/%:
rm -rf '$@'
mkdir -p '$(@D)'
{ \
git clone build/download/"$$(file2base 'git/$*')" '$@' && \
cd '$@' && git checkout "$$(file2extra 'git/$*')"; \
} || rm -rf '$@'
touch '$@'
$(foreach package,$(packages),$(if $(filter git|%,$($(package))),$(eval \
build/extract/$(shell utils/spec2file '$($(package))'): \
build/download/$(shell utils/file2base "$$(utils/spec2file '$($(package))')") \
)))
build/extract/svn/%: build/download/svn/%
rm -rf '$@'
mkdir -p '$(@D)'
cp -a '$<' '$@'
build/extract/tar/%: build/download/tar/%
rm -rf '$@'
mkdir -p '$(@D)'
cd '$(@D)' && tar xaf '$(top)/$<'
cd '$@' && git init && git add . && git commit -q -m "extracted $$(file2url 'tar/$*')" # XXX
# place ########################################################################
place: PHONY $(addprefix,build/compile/,$(packages))
compile_patch =$(filter $(patsubst patches/%/,%,$(wildcard patches/*/)),$(packages))
compile_direct=$(filter-out $(patsubst patches/%/,%,$(wildcard patches/*/)),$(packages))
$(addprefix build/compile/,$(compile_patch)): build/compile/%:
rm -rf '$@'
mkdir -p '$(@D)'
cp -a '$<' '$@'
cd '$@' && \
for patch in '$(top)/patches/$*'/*; do \
patch -f -Np1 -i $$patch || { rm -rf '$@'; exit 1; }; \
done
$(addprefix build/compile/,$(compile_direct)): build/compile/%:
rm -rf '$@'
mkdir -p '$(@D)'
cp -a '$<' '$@'
$(foreach package,$(packages),$(eval \
build/compile/$(package): \
build/extract/$(shell utils/spec2file '$($(package))') \
))
# package ######################################################################
package: PHONY $(addprefix build/packages/,$(packages))
package_specific=$(filter $(patsubst makefiles/%.mk,%,$(wildcard makefiles/*.mk)),$(packages))
package_generic =$(filter-out $(patsubst makefiles/%.mk,%,$(wildcard makefiles/*.mk)),$(packages))
$(addprefix build/packages/,$(package_specific)): build/packages/%: RECURSIVE build/compile/% makefiles/%.mk
$(MAKE) -C build/compile/$* -f "$(top)/makefiles/$*.mk" install DESTDIR="$(top)/$@"
mkdir -p build/packages/dest && lndir -silent "$(top)/$@" build/packages/dest
$(addprefix build/packages/,$(package_generic)): build/packages/%: RECURSIVE build/compile/% makefiles/mvn-simple.mk
$(MAKE) -C build/compile/$* -f "$(top)/makefiles/mvn-simple.mk" install DESTDIR="$(top)/$@"
mkdir -p build/packages/dest && lndir -silent "$(top)/$@" build/packages/dest
# dependencies #################################################################
build/packages/plexus-containers: \
build/packages/plexus-utils \
build/packages/plexus-classworlds
###############################################################################
clean: PHONY
rm -rf build/compile build/packages
distclean: PHONY
rm -rf .tokens build
.tokens/%:
mkdir -p '$(@D)' && touch '$@'
.PHONY: RECURSIVE PHONY
|