-
Notifications
You must be signed in to change notification settings - Fork 128
Expand file tree
/
Copy pathrpm.mk
More file actions
189 lines (161 loc) · 6.27 KB
/
Copy pathrpm.mk
File metadata and controls
189 lines (161 loc) · 6.27 KB
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
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 = $(if $(TAG),$(TAG),$(PACKAGE)-$(RPM_VERSION)$(VERSION_PREREL))
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)")
# Check if BUNDLE_BDBREADERS is enabled.
BUNDLE_BDBREADERS = $(shell ./rpm/is-robdb-used $(BUNDLE_LIBDB))
RPMBUILD_OPTIONS += $(if $(filter 1, $(BUNDLE_BDBREADERS)),--with libbdb_ro,--without libbdb_ro)
# 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 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 src/lib389 && python3 validate_version.py
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 ] && [ ! -f $(JEMALLOC_TARBALL) ]; then \
curl -LO $(JEMALLOC_URL) ; \
fi ; \
if [ ! -f $(LIBDB_TARBALL) ]; 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
cp dist/sources/$(LIBDB_TARBALL) $(RPMBUILD)/SOURCES/
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/
@echo RPMBUILD=$(RPMBUILD)
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/
@echo RPMBUILD=$(RPMBUILD)
rm -rf $(RPMBUILD)
rpm: rpms
patch_rpms: | patch rpms
debug:
@echo BUNDLE_JEMALLOC=$(BUNDLE_JEMALLOC)
@echo BUNDLE_LIBDB=$(BUNDLE_LIBDB)
@echo BUNDLE_BDBREADERS=$(BUNDLE_BDBREADERS)
@echo CLANG_ON=$(CLANG_ON)
@echo ASAN_ON=$(ASAN_ON)
@echo MSAN_ON=$(MSAN_ON)
@echo TSAN_ON=$(TSAN_ON)
@echo UBSAN_ON=$(UBSAN_ON)
@echo COCKPIT_ON=$(COCKPIT_ON)
@echo JEMALLOC_URL=$(JEMALLOC_URL)
@echo LIBDB_URL=$(LIBDB_URL)