forked from 389ds/389-ds-base
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rpm.mk
171 lines (146 loc) · 5.62 KB
/
rpm.mk
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
PWD ?= $(shell pwd)
RPMBUILD ?= $(PWD)/rpmbuild
RPM_VERSION ?= $(shell $(PWD)/rpm/rpmverrel.sh version)
RPM_RELEASE := $(shell $(PWD)/rpm/rpmverrel.sh release)
VERSION_PREREL := $(shell $(PWD)/rpm/rpmverrel.sh prerel)
RPM_VERSION_PREREL := $(subst .,-,$(VERSION_PREREL))
PACKAGE = 389-ds-base
RPM_NAME_VERSION = $(PACKAGE)-$(RPM_VERSION)$(RPM_VERSION_PREREL)
NAME_VERSION = $(PACKAGE)-$(RPM_VERSION)$(VERSION_PREREL)
TARBALL = $(NAME_VERSION).tar.bz2
NODE_MODULES_TEST = src/cockpit/389-console/package-lock.json
NODE_MODULES_PATH = src/cockpit/389-console/
CARGO_PATH = src/
GIT_TAG = ${TAG}
BUNDLE_JEMALLOC = 1
RPMBUILD_OPTIONS += $(if $(filter 1, $(BUNDLE_JEMALLOC)),--with bundle_jemalloc,--without bundle_jemalloc)
JEMALLOC_URL ?= $(shell rpmspec $(RPMBUILD_OPTIONS) -P $(RPMBUILD)/SPECS/389-ds-base.spec | awk '/^Source3:/ {print $$2}')
JEMALLOC_TARBALL ?= $(shell basename "$(JEMALLOC_URL)")
BUNDLE_LIBDB ?= 0
RPMBUILD_OPTIONS += $(if $(filter 1, $(BUNDLE_LIBDB)),--with bundle_libdb,--without bundle_libdb)
# LIBDB tarball was generated from
# https://kojipkgs.fedoraproject.org//packages/libdb/5.3.28/59.fc40/src/libdb-5.3.28-59.fc40.src.rpm
# then uploaded in https://fedorapeople.org
LIBDB_URL ?= $(shell rpmspec $(RPMBUILD_OPTIONS) -P $(RPMBUILD)/SPECS/389-ds-base.spec | awk '/^Source4:/ {print $$2}')
LIBDB_TARBALL ?= $(shell basename "$(LIBDB_URL)")
# Some sanitizers are supported only by clang
CLANG_ON = 0
RPMBUILD_OPTIONS += $(if $(filter 1, $(CLANG_ON)),--with clang,--without clang)
# Address Sanitizer
ASAN_ON = 0
RPMBUILD_OPTIONS += $(if $(filter 1, $(ASAN_ON)),--with asan,--without asan)
# Memory Sanitizer (clang only)
MSAN_ON = 0
RPMBUILD_OPTIONS += $(if $(filter 1, $(MSAN_ON)),--with msan --with clang,--without msan)
# Thread Sanitizer
TSAN_ON = 0
RPMBUILD_OPTIONS += $(if $(filter 1, $(TSAN_ON)),--with tsan,--without tsan)
# Undefined Behaviour Sanitizer
UBSAN_ON = 0
RPMBUILD_OPTIONS += $(if $(filter 1, $(UBSAN_ON)),--with ubsan,--without ubsan)
COCKPIT_ON = 1
RPMBUILD_OPTIONS += $(if $(filter 1, $(COCKPIT_ON)),--with cockpit,--without cockpit)
clean:
rm -rf dist
rm -rf rpmbuild
rm -rf vendor
rm -f vendor.tar.gz
update-cargo-dependencies:
cargo update --manifest-path=./src/Cargo.toml
download-cargo-dependencies:
cargo update --manifest-path=./src/Cargo.toml
cargo vendor --manifest-path=./src/Cargo.toml
cargo fetch --manifest-path=./src/Cargo.toml
tar -czf vendor.tar.gz vendor
bundle-rust-npm:
python3 rpm/bundle-rust-npm.py $(CARGO_PATH) $(NODE_MODULES_PATH) $(DS_SPECFILE) --backup-specfile
install-node-modules:
ifeq ($(COCKPIT_ON), 1)
cd src/cockpit/389-console; \
rm -rf node_modules; \
npm ci > /dev/null
ifndef SKIP_AUDIT_CI
cd src/cockpit/389-console; \
npx --yes audit-ci
endif
endif
build-cockpit: install-node-modules
ifeq ($(COCKPIT_ON), 1)
cd src/cockpit/389-console; \
rm -rf cockpit_dist; \
NODE_ENV=production ./build.js; \
cp -r dist cockpit_dist
endif
dist-bz2: install-node-modules download-cargo-dependencies
ifeq ($(COCKPIT_ON), 1)
cd src/cockpit/389-console; \
rm -rf cockpit_dist; \
rm -rf dist; \
NODE_ENV=production ./build.js; \
cp -r dist cockpit_dist; \
touch cockpit_dist/*; \
touch -r package.json package-lock.json
endif
tar cjf $(GIT_TAG).tar.bz2 --transform "s,^,$(GIT_TAG)/," $$(git ls-files) vendor/ src/cockpit/389-console/cockpit_dist/
local-archive: build-cockpit
-mkdir -p dist/$(NAME_VERSION)
rsync -a --exclude=node_modules --exclude=dist --exclude=__pycache__ --exclude=.git --exclude=rpmbuild --exclude=vendor.tar.gz . dist/$(NAME_VERSION)
tarballs: local-archive
-mkdir -p dist/sources
cd dist; tar cfj sources/$(TARBALL) $(NAME_VERSION)
ifeq ($(COCKPIT_ON), 1)
cd src/cockpit/389-console; rm -rf dist
endif
rm -rf dist/$(NAME_VERSION)
cd dist/sources ; \
if [ $(BUNDLE_JEMALLOC) -eq 1 ]; then \
curl -LO $(JEMALLOC_URL) ; \
fi ; \
if [ $(BUNDLE_LIBDB) -eq 1 ]; then \
curl -LO $(LIBDB_URL) ; \
fi
rpmroot:
rm -rf $(RPMBUILD)
mkdir -p $(RPMBUILD)/BUILD
mkdir -p $(RPMBUILD)/RPMS
mkdir -p $(RPMBUILD)/SOURCES
mkdir -p $(RPMBUILD)/SPECS
mkdir -p $(RPMBUILD)/SRPMS
sed -e s/__VERSION__/$(RPM_VERSION)/ -e s/__RELEASE__/$(RPM_RELEASE)/ \
-e s/__VERSION_PREREL__/$(VERSION_PREREL)/ \
rpm/$(PACKAGE).spec.in > $(RPMBUILD)/SPECS/$(PACKAGE).spec
rpmspec:
sed -e s/__VERSION__/$(RPM_VERSION)/ -e s/__RELEASE__/$(RPM_RELEASE)/ \
-e s/__VERSION_PREREL__/$(VERSION_PREREL)/ \
rpm/$(PACKAGE).spec.in > rpm/$(PACKAGE).spec
rpmdistdir:
mkdir -p dist/rpms
srpmdistdir:
mkdir -p dist/srpms
rpmbuildprep:
cp dist/sources/$(TARBALL) $(RPMBUILD)/SOURCES/
cp rpm/$(PACKAGE)-* $(RPMBUILD)/SOURCES/
if [ $(BUNDLE_JEMALLOC) -eq 1 ]; then \
cp dist/sources/$(JEMALLOC_TARBALL) $(RPMBUILD)/SOURCES/ ; \
fi
if [ $(BUNDLE_LIBDB) -eq 1 ]; then \
cp dist/sources/$(LIBDB_TARBALL) $(RPMBUILD)/SOURCES/ ; \
fi
srpms: rpmroot srpmdistdir download-cargo-dependencies tarballs rpmbuildprep
python3 rpm/bundle-rust-npm.py $(CARGO_PATH) $(NODE_MODULES_PATH) $(RPMBUILD)/SPECS/$(PACKAGE).spec -f
rpmbuild --define "_topdir $(RPMBUILD)" -bs $(RPMBUILD)/SPECS/$(PACKAGE).spec $(RPMBUILD_OPTIONS)
cp $(RPMBUILD)/SRPMS/*.src.rpm dist/srpms/
rm -rf $(RPMBUILD)
srpm: srpms
patch: rpmroot
cp rpm/*.patch $(RPMBUILD)/SOURCES/
rpm/add_patches.sh rpm $(RPMBUILD)/SPECS/$(PACKAGE).spec
patch_srpms: | patch srpms
rpms: rpmroot srpmdistdir rpmdistdir tarballs rpmbuildprep
python3 rpm/bundle-rust-npm.py $(CARGO_PATH) $(NODE_MODULES_PATH) $(RPMBUILD)/SPECS/$(PACKAGE).spec -f
rpmbuild --define "_topdir $(RPMBUILD)" -ba $(RPMBUILD)/SPECS/$(PACKAGE).spec $(RPMBUILD_OPTIONS)
cp $(RPMBUILD)/RPMS/*/*.rpm dist/rpms/
cp $(RPMBUILD)/SRPMS/*.src.rpm dist/srpms/
rm -rf $(RPMBUILD)
rpm: rpms
patch_rpms: | patch rpms