summaryrefslogtreecommitdiff
path: root/Makefile
blob: 577b1c13e8d1b0f1a40cccf3638457e1dcb309db (plain)
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