-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathMakefile.parallel
More file actions
515 lines (464 loc) · 18.3 KB
/
Makefile.parallel
File metadata and controls
515 lines (464 loc) · 18.3 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
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
SHELL = /bin/bash
# You can select a subset of the packages by overriding this
# variale, e.g. make PACKAGES='nagios rrdtool' pack
PACKAGES =
PACKAGES += freetds
PACKAGES += perl-modules
PACKAGES += go-1.4
PACKAGES += go-1.19
PACKAGES += go-1.21
PACKAGES += go-1.22
PACKAGES += go-1.23
PACKAGES += go-1.25
PACKAGES += go-1.26
PACKAGES += upx
PACKAGES += node
PACKAGES += node-modules
PACKAGES += influxdb
PACKAGES += nagflux
PACKAGES += python-modules
PACKAGES += apache-omd
PACKAGES += check_multi
PACKAGES += dokuwiki
PACKAGES += example
PACKAGES += jmx4perl
PACKAGES += mysql-omd
PACKAGES += icinga2
PACKAGES += naemon
PACKAGES += naemon-livestatus
PACKAGES += naemon-plugins
PACKAGES += logos
PACKAGES += nrpe
PACKAGES += nsca
PACKAGES += omd
PACKAGES += monitoring-plugins
PACKAGES += check_plugins
PACKAGES += pnp4nagios
PACKAGES += pnp4nagios4
PACKAGES += rrdtool
PACKAGES += thruk
PACKAGES += thruk-plugins
PACKAGES += thruk-consol-theme
PACKAGES += grafana
PACKAGES += grafana-loki
PACKAGES += histou
PACKAGES += maintenance
PACKAGES += gearmand
PACKAGES += mod-gearman
PACKAGES += mod-gearman-worker-go
PACKAGES += patch
PACKAGES += nail
PACKAGES += notifications-tt
PACKAGES += ansible
PACKAGES += coshsh
PACKAGES += lmd
PACKAGES += prometheus
PACKAGES += prometheus_snmp_exporter
PACKAGES += prometheus_node_exporter
PACKAGES += prometheus_alertmanager
PACKAGES += prometheus_blackbox_exporter
PACKAGES += prometheus_pushgateway
PACKAGES += promxy
PACKAGES += telegraf
PACKAGES += snmptrapd
PACKAGES += downtime-api
PACKAGES += dacretain
PACKAGES += grafana-pnp-datasource
PACKAGES += grafana-thruk-datasource
PACKAGES += victoriametrics
PACKAGES += xinetd
PACKAGES += shellinabox
PACKAGE_DEPS =
PACKAGE_DEPS += perl-modules:freetds
PACKAGE_DEPS += go-1.19:go-1.4
PACKAGE_DEPS += go-1.21:go-1.19
PACKAGE_DEPS += go-1.22:go-1.21
PACKAGE_DEPS += go-1.23:go-1.21
PACKAGE_DEPS += go-1.25:go-1.23
PACKAGE_DEPS += go-1.26:go-1.25
PACKAGE_DEPS += node:upx
PACKAGE_DEPS += node-modules:node
PACKAGE_DEPS += influxdb:go-1.26
PACKAGE_DEPS += influxdb:upx
PACKAGE_DEPS += nagflux:go-1.26
PACKAGE_DEPS += python-modules:freetds
PACKAGE_DEPS += apache-omd:go-1.26
PACKAGE_DEPS += icinga2:monitoring-plugins
PACKAGE_DEPS += naemon-livestatus:naemon
PACKAGE_DEPS += naemon-plugins:naemon
PACKAGE_DEPS += monitoring-plugins:perl-modules
PACKAGE_DEPS += check_plugins:perl-modules
PACKAGE_DEPS += check_plugins:python-modules
PACKAGE_DEPS += check_plugins:go-1.26
PACKAGE_DEPS += pnp4nagios:rrdtool
PACKAGE_DEPS += pnp4nagios4:naemon
PACKAGE_DEPS += pnp4nagios4:pnp4nagios
PACKAGE_DEPS += thruk-consol-theme:thruk
PACKAGE_DEPS += thruk-consol-theme:node
PACKAGE_DEPS += grafana:go-1.26
PACKAGE_DEPS += grafana:upx
PACKAGE_DEPS += grafana-loki:go-1.26
PACKAGE_DEPS += grafana-loki:upx
PACKAGE_DEPS += mod-gearman:naemon
PACKAGE_DEPS += mod-gearman:gearmand
PACKAGE_DEPS += mod-gearman-worker-go:go-1.26
PACKAGE_DEPS += ansible:python-modules
PACKAGE_DEPS += coshsh:python-modules
PACKAGE_DEPS += lmd:go-1.26
PACKAGE_DEPS += prometheus:go-1.26
PACKAGE_DEPS += prometheus:upx
PACKAGE_DEPS += prometheus_snmp_exporter:go-1.26
PACKAGE_DEPS += prometheus_snmp_exporter:upx
PACKAGE_DEPS += prometheus_node_exporter:go-1.26
PACKAGE_DEPS += prometheus_node_exporter:upx
PACKAGE_DEPS += prometheus_alertmanager:go-1.26
PACKAGE_DEPS += prometheus_alertmanager:upx
PACKAGE_DEPS += prometheus_blackbox_exporter:go-1.26
PACKAGE_DEPS += prometheus_blackbox_exporter:upx
PACKAGE_DEPS += prometheus_pushgateway:go-1.26
PACKAGE_DEPS += prometheus_pushgateway:upx
PACKAGE_DEPS += victoriametrics:go-1.26
PACKAGE_DEPS += victoriametrics:upx
include Makefile.omd
# This file may override the list of packages
-include .config
# Export MAKE_JOBS to child processes (rpmbuild, debuild, sub-makes)
# This enables parallelism control via: MAKE_JOBS=16 make rpm
export MAKE_JOBS
# Filter PACKAGE_DEPS to remove dependencies on skipped packages
# This prevents build errors when a package depends on a skipped package
ifdef SKIP_PACKAGES
PACKAGE_DEPS := $(shell \
for dep in $(PACKAGE_DEPS); do \
skip=0; \
goal=$$(echo "$$dep" | cut -d: -f1); \
prereqs=$$(echo "$$dep" | cut -d: -f2- | tr ' ' '\n'); \
for prereq in $$prereqs; do \
for s in $(SKIP_PACKAGES); do \
if [ "$$s" = "$$prereq" ]; then \
skip=1; \
break 2; \
fi; \
done; \
done; \
if [ $$skip -eq 0 ]; then \
echo "$$dep"; \
fi; \
done)
endif
DESTDIR ?=$(shell pwd)/destdir
RPM_TOPDIR=$(shell pwd)/rpm.topdir
SOURCE_NAME=omd-$(OMD_VERSION)
SOURCE_TGZ=$(SOURCE_NAME).tar.gz
BIN_TGZ=$(SOURCE_NAME)-bin.tar.gz
NEWSERIAL=$$(($(OMD_SERIAL) + 1))
APACHE_NAME=$(APACHE_INIT_NAME)
ifdef BUILD_CACHE
DEFAULT_BUILD=build-cached
else ifdef MAKE_JOBS
DEFAULT_BUILD=build-parallel
else
DEFAULT_BUILD=build
endif
.PHONY: install-global Changelog release_notes_blog.md build build-parallel build-parallel-internal help omd
# Default target - serial unless MAKE_JOBS is set
.DEFAULT_GOAL := $(DEFAULT_BUILD)
# Convenience target - builds using DEFAULT_BUILD setting
# Only define when MAKE_JOBS is not set to avoid circular dependency:
# build-parallel → build-parallel-internal → omd (package) → omd (target) → build-parallel
ifndef MAKE_JOBS
omd: $(DEFAULT_BUILD)
endif
help:
@echo "OMD Build System - Parallel Build Support"
@echo ""
@echo "Common targets:"
@echo " make - Build all packages (serial, default)"
@echo " make pack - Install packages to destdir"
@echo " make rpm - Build RPM package"
@echo " make deb - Build DEB package"
@echo " make clean - Clean build artifacts"
@echo ""
@echo "Controlling parallelism:"
@echo ""
@echo " MAKE_JOBS - Shared job pool parallelism control:"
@echo " MAKE_JOBS=16 make - Build with 16 jobs (shared across all packages)"
@echo " MAKE_JOBS=16 make rpm - Build RPM with 16 jobs"
@echo " MAKE_JOBS=16 make deb - Build DEB with 16 jobs"
@echo " MAKE_JOBS=1 make - Serial build (no parallelism)"
@echo " make - Serial build (default)"
@echo ""
@echo " How it works:"
@echo " - All packages share a global job pool managed by Make's job server"
@echo " - Automatically balances load across packages based on available work"
@echo " - More efficient than fixed per-package CPU allocation"
@echo ""
@echo "Examples on 16-core machine:"
@echo " MAKE_JOBS=16 make → Use all 16 cores optimally"
@echo " MAKE_JOBS=8 make rpm → Build RPM using 8 cores"
@echo " make → Serial build (safe but slow)"
@echo ""
@echo "Package dependencies are defined in PACKAGE_DEPS"
@echo "Individual packages: make <package-name>"
build-parallel:
@. ./track-functions.sh; track_root_start "omd" "build-parallel"
TOTAL_CPUS=$$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 4); \
echo "Building with $${MAKE_JOBS} total jobs (shared pool across all packages)"; \
$(MAKE) -j$${MAKE_JOBS} build-parallel-internal; \
STATUS=$$?; \
HOST=$$(uname -n); \
. ./track-functions.sh; track_root_end "omd" "build-parallel" $$STATUS \
"$(DISTRO_CODE)" "$(OMD_VERSION)" "$${MAKE_JOBS}" "$$TOTAL_CPUS" "$$HOST"
build-cached:
@set -e ; cd packages ; for p in $(PACKAGES) ; do \
NOW=$$(date +%s); \
OMD_ROOT="$(OMD_ROOT)" OMD_VERSION="$(OMD_VERSION)" BUILD_CACHE="$(BUILD_CACHE)" ../build/build_cached "$(MAKE)" "$$p" "$(DISTRO_NAME)/$(DISTRO_VERSION)/$(shell uname -m)"; \
echo "build-cached: $$p (took $$(( $$(date +%s) - NOW ))s)"; \
done
build:
@set -e ; cd packages ; for p in $(PACKAGES) ; do \
$(MAKE) -C $$p build ; \
done
speed:
@set -e ; cd packages ; for p in $(PACKAGES) ; do \
( NOW=$$(date +%s) ; \
$(MAKE) -C $$p build > ../$$p.log 2>&1 \
&& echo "$$p(ok - $$(( $$(date +%s) - NOW ))s)" \
|| echo "$$p(ERROR - $$(( $$(date +%s) - NOW ))s)" ) & \
done ; wait ; echo "FINISHED."
pack:
rm -rf $(DESTDIR)
mkdir -p $(DESTDIR)$(OMD_PHYSICAL_BASE)
A="$(OMD_PHYSICAL_BASE)" ; ln -s $${A:1} $(DESTDIR)/omd
@set -e; MB1=0 ; cd packages ; for p in $(PACKAGES) ; do \
NOW=$$(date +%s); \
$(MAKE) -C $$p DESTDIR=$(DESTDIR) install ; \
for hook in $$(cd $$p ; ls *.hook 2>/dev/null) ; do \
mkdir -p $(DESTDIR)$(OMD_ROOT)/lib/omd/hooks ; \
install -m 755 $$p/$$hook $(DESTDIR)$(OMD_ROOT)/lib/omd/hooks/$${hook%.hook} ; \
done ; \
MB2=$$(du -sm $(DESTDIR) | awk '{ print $$1 }'); \
echo "pack: $$p (took $$(( $$(date +%s) - NOW ))s) disk usage: $$(( MB2 - MB1 ))MB"; \
MB1=$$MB2; \
done
sed -i -e 's|###APACHE_MODULE_DIR###|$(APACHE_MODULE_DIR)|g' $(DESTDIR)$(OMD_ROOT)/lib/omd/hooks/*
sed -i -e 's|###APACHE_INCLUDEOPT###|$(APACHE_INCLUDEOPT)|g' $(DESTDIR)$(OMD_ROOT)/lib/omd/hooks/*
# Repair packages that install with silly modes (such as Nagios)
chmod -R o+Xr $(DESTDIR)$(OMD_ROOT)
$(MAKE) install-global
# Install skeleton files (subdirs skel/ in packages' directories)
mkdir -p $(DESTDIR)$(OMD_ROOT)/skel
@set -e ; cd packages ; for p in $(PACKAGES) ; do \
if [ -d "$$p/skel" ] ; then \
tar cf - -C $$p/skel --exclude="*~" --exclude=".gitignore" . | tar xvf - -C $(DESTDIR)$(OMD_ROOT)/skel ; \
fi ;\
$(MAKE) DESTDIR=$(DESTDIR) SKEL=$(DESTDIR)$(OMD_ROOT)/skel -C $$p skel ;\
done
# Create permissions file for skel
mkdir -p $(DESTDIR)$(OMD_ROOT)/share/omd
@set -e ; cd packages ; for p in $(PACKAGES) ; do \
if [ -e $$p/skel.permissions ] ; then \
echo "# $$p" ; \
cat $$p/skel.permissions ; \
fi ; \
done > $(DESTDIR)$(OMD_ROOT)/share/omd/skel.permissions
# Make sure, all permissions in skel are set to 0755, 0644
./build/check_skel_permissions $(DESTDIR)$(OMD_ROOT)/skel $(DESTDIR)$(OMD_ROOT)/share/omd/skel.permissions*
@failed=$$(find $(DESTDIR)$(OMD_ROOT)/lib64 2>/dev/null) ; \
if [ -n "$$failed" ] ; then \
echo "ERROR: Invalid lib installpath. Library files must be installed in prefix/lib" ; \
echo "$$failed" ; \
fi
# Fix packages which did not add ###ROOT###
find $(DESTDIR)$(OMD_ROOT)/skel -type f -exec sed -e 's+$(OMD_ROOT)+###ROOT###+g' -i "{}" \;
# Remove site-specific directories that went under /omd/version
rm -rf $(DESTDIR)/{var,tmp,etc,local,man}
rm -rf $(DESTDIR)$(OMD_ROOT)/{var,tmp,etc,local,man}
# bail out if some patches did not apply
@rejected=$$(find $(DESTDIR)$(OMD_ROOT)/skel -type f -name \*.rej) ; \
if [ -n "$$rejected" ] ; then \
echo "Found patch reject files, bailing out:" ; \
echo "$$rejected" ; \
exit 1; \
fi
find $(DESTDIR)$(OMD_ROOT)/ -type f -name \*.pyc -delete
find $(DESTDIR)$(OMD_ROOT)/ -type d -name __pycache__ -print0 | xargs -0 -n 500 rm -rf
-find \
$(DESTDIR)$(OMD_ROOT)/bin/ \
$(DESTDIR)$(OMD_ROOT)/lib/ \
-type f \
\( \
-not -name "*.dbg" \
-not -name "waitmax" \
-not -name "agent_modbus" \
-not -path "*/.local-chromium/*" \
\) \
-print0 \
| xargs -0 -n 500 strip 2>&1 \
| grep -ivP 'File format not recognized|Unable to recognise the format|File truncated|has no sections'
# Pack the whole stuff into a tarball
tar czf $(BIN_TGZ) --owner=root --group=root -C $(DESTDIR) .
clean:
rm -rf $(DESTDIR)
@set -e ; cd packages ; for p in $(PACKAGES) ; do \
$(MAKE) -C $$p clean ; \
done
# Create installations files that do not lie beyond /omd/versions/$(OMD_VERSION)
# and files not owned by a specific package.
install-global:
# Create link to default version
ln -s $(OMD_VERSION) $(DESTDIR)$(OMD_BASE)/versions/default
# Create global symbolic links. Those links are share between
# all installed versions and refer to the default version.
mkdir -p $(DESTDIR)/usr/bin
ln -sfn /omd/versions/default/bin/omd $(DESTDIR)/usr/bin/omd
mkdir -p $(DESTDIR)/usr/share/man/man8
ln -sfn /omd/versions/default/share/man/man8/omd.8.gz $(DESTDIR)/usr/share/man/man8/omd.8.gz
mkdir -p $(DESTDIR)/etc/init.d
ln -sfn /omd/versions/default/share/omd/omd.init $(DESTDIR)/etc/init.d/omd
mkdir -p $(DESTDIR)/usr/lib/systemd/system/
ln -sfn /omd/versions/default/share/omd/omd.service $(DESTDIR)/usr/lib/systemd/system/omd.service
mkdir -p $(DESTDIR)$(APACHE_CONF_DIR)
ln -sfn /omd/versions/default/share/omd/apache.conf $(DESTDIR)$(APACHE_CONF_DIR)/zzz_omd.conf
# Base directories below /omd
mkdir -p $(DESTDIR)$(OMD_BASE)/sites
mkdir -p $(DESTDIR)$(OMD_BASE)/apache
# Information about distribution and OMD
mkdir -p $(DESTDIR)$(OMD_ROOT)/share/omd
install -m 644 distros/Makefile.$(DISTRO_NAME)_$(DISTRO_VERSION) $(DESTDIR)$(OMD_ROOT)/share/omd/distro.info
echo -e "OMD_VERSION = $(OMD_VERSION)\nOMD_PHYSICAL_BASE = $(OMD_PHYSICAL_BASE)" > $(DESTDIR)$(OMD_ROOT)/share/omd/omd.info
# README files and license information
mkdir -p $(DESTDIR)$(OMD_ROOT)/share/doc
install -m 644 README.md $(DESTDIR)$(OMD_ROOT)/share/doc/README
install -m 644 Changelog $(DESTDIR)$(OMD_ROOT)/share/doc/CHANGELOG
install -m 644 COPYING TEAM $(DESTDIR)$(OMD_ROOT)/share/doc
# Create source tarball. This currently only works in a checked out GIT
# repository.
$(SOURCE_TGZ) dist:
git -c tar.umask=0022 archive --prefix=$(SOURCE_NAME)/ --format=tar.gz --output=$(SOURCE_TGZ) HEAD
# Build RPM from source code.
# When called from a git repository this uses 'make dist' and thus 'git archive'
# to create the source rpm.
#
# Parallelism Control:
# make rpm - Serial build (default)
# MAKE_JOBS=16 make rpm - Use 16 jobs (shared pool)
# MAKE_JOBS=1 make rpm - Explicit serial build
#
# MAKE_JOBS is exported and automatically available in omd.spec %build section
# IMPORTANT: Do NOT use 'make -j N rpm' - it won't work correctly. Use MAKE_JOBS instead.
rpm: omd.spec
test -f $(SOURCE_TGZ) || ( test -d .git && $(MAKE) $(SOURCE_TGZ) || $(MAKE) $(SOURCE_TGZ) )
mkdir -p $(RPM_TOPDIR)/{SOURCES,BUILD,RPMS,SRPMS,SPECS}
cp $(SOURCE_TGZ) $(RPM_TOPDIR)/SOURCES
# NO_BRP_STALE_LINK_ERROR ignores errors when symlinking from skel to
# share,lib,bin because the link has a invalid target until the site is created
# Unset MAKEFLAGS to prevent outer make's -j from interfering with rpmbuild
# MAKE_JOBS environment variable is used by the %build section in omd.spec
@unset MAKEFLAGS; \
NO_BRP_STALE_LINK_ERROR="yes" \
rpmbuild -bb \
--define "_topdir $(RPM_TOPDIR)" \
--buildroot=$$(pwd)/rpm.buildroot \
omd.spec
mv -v $(RPM_TOPDIR)/RPMS/*/*.rpm .
rm -rf $(RPM_TOPDIR) rpm.buildroot
# Build DEB from prebuild binary. This currently needs 'make dist' and thus only
# works within a GIT repository.
deb-environment:
@if test -z "$(DEBFULLNAME)" || test -z "$(DEBEMAIL)"; then \
echo "please read 'man dch' and set DEBFULLNAME and DEBEMAIL" ;\
exit 1; \
fi
# create a debian/changelog to build the package
deb-changelog: deb-environment
# this is a hack!
rm -f debian/changelog
dch --create --package omd-$(OMD_VERSION) \
--newversion $(OMD_PATCH_LEVEL).$(DISTRO_CODE) "`cat debian/changelog.tmpl`"
dch --release "releasing ...."
deb: deb-changelog
sed -e 's/###OMD_VERSION###/$(OMD_VERSION)/' \
-e 's/###BUILD_PACKAGES###/$(BUILD_PACKAGES)/' \
-e 's/###OS_PACKAGES###/$(OS_PACKAGES)/' \
-e '/Depends:/s/\> /, /g' \
-e '/Depends:/s/@/ /g' \
`pwd`/debian/control.in > `pwd`/debian/control
# used when putting debug binaries in separate file
#echo "/opt/omd/versions/$(OMD_VERSION)/bin/*.dbg" > `pwd`/debian/omd-$(OMD_VERSION)-debug.install
#echo "/opt/omd/versions/$(OMD_VERSION)/lib/*.dbg" > `pwd`/debian/omd-$(OMD_VERSION)-debug.install
#echo "/opt/omd/versions/$(OMD_VERSION)/lib/mod_gearman/*.dbg" > `pwd`/debian/omd-$(OMD_VERSION)-debug.install
#echo "/opt/omd/versions/$(OMD_VERSION)/lib/naemon/*.dbg" > `pwd`/debian/omd-$(OMD_VERSION)-debug.install
fakeroot debian/rules clean
@unset MAKEFLAGS; \
debuild --no-lintian -i\.git -I\.git \
-iomd-bin-$(OMD_VERSION).tar.gz \
-Iomd-bin-$(OMD_VERSION).tar.gz \
-i.gitignore -I.gitignore \
-uc -us -rfakeroot -b
version:
@if [ -z "$(VERSION)" ] ; then \
newversion=$$(dialog --stdout --inputbox "New Version:" 0 0 "$(OMD_VERSION)") ; \
else \
newversion=$(VERSION) ; \
fi ; \
if [ -n "$$newversion" ] && [ "$$newversion" != "$(OMD_VERSION)" ]; then \
sed -ri 's/^(OMD_VERSION[[:space:]]*= *).*/\1'"$$newversion/" Makefile.omd ; \
sed -ri 's/^(OMD_SERIAL[[:space:]]*= *).*/\1'"$(NEWSERIAL)/" Makefile.omd ; \
sed -ri 's/^(OMD_PATCH_LEVEL[[:space:]]*= *).*/\1'"1/" Makefile.omd ; \
sed -ri 's/^(OMD_VERSION[[:space:]]*= *).*/\1"'"$$newversion"'"/' packages/omd/omd ; \
sed -ri 's/Version:.*/Version: '$$newversion'/' packages/omd/index.html ; \
fi ;
changelog: Changelog
Changelog:
./t/changelog.pl --write
release_notes_blog: release_notes_blog.md
release_notes_blog.md:
./t/changelog.pl -r --tag=$(shell git describe --tags --abbrev=0) > release_notes_blog.md
@echo "release_notes_blog.md written"
test:
t/test_all.sh
timedtest:
for file in $$(ls -1 t/*.t); do \
printf "%-60s" $$file; \
output=$$(/usr/bin/time -f %e ./t/test_all.sh $$file 2>&1); \
if [ $$? != 0 ]; then \
printf "% 8s \n" "FAILED"; \
else \
time=$$(echo "$$output" | tail -n1); \
printf "% 8ss\n" $$time; \
fi; \
done
omd.spec: omd.spec.in Makefile.omd Makefile
sed -e 's/^Requires:.*/Requires: $(OS_PACKAGES)/' \
-e 's/%{version}/$(OMD_VERSION)/g' \
-e 's/^Version:.*/Version: $(DISTRO_CODE)/' \
-e 's/^Release:.*/Release: $(OMD_PATCH_LEVEL)/' \
-e 's#@APACHE_CONFDIR@#$(APACHE_CONF_DIR)#g' \
-e 's#@APACHE_NAME@#$(APACHE_NAME)#g' \
-e 's#@APACHE_INCLUDEOPT@#$(APACHE_INCLUDEOPT)#g' \
omd.spec.in > omd.spec
# create a target which will build the packages/$1
define create-target
$(1):
@. ./track-functions.sh; track_start "omd" "$(1)"
+$(MAKE) -C packages/$$(notdir $(1)) build; \
STATUS=$$$$?; \
. ./track-functions.sh; track_end "omd" "$(1)" $$$$STATUS; \
exit $$$$STATUS
endef
# a function, which creates a dependency from a "goal:prerequisite" string
define add-dependency
$(eval $(word 1,$(subst :, ,$1)): $(strip $(wordlist 2,999,$(subst :, ,$1))))
endef
# a function, which calls add-dependency for all of PACKAGE_DEPS
define define-deps
$(foreach dep,$(PACKAGE_DEPS), \
$(eval $(call add-dependency,$(dep))))
endef
# create a target for every element in PACKAGES
$(foreach pkg,$(PACKAGES),$(eval $(call create-target,$(pkg))))
# apply the dependencies
$(call define-deps)
# Internal target to avoid infinite recursion - defined after package targets
build-parallel-internal: $(PACKAGES)