]>
Commit | Line | Data |
---|---|---|
1 | -include dracut-version.sh | |
2 | ||
3 | DRACUT_MAIN_VERSION := $(shell env GIT_CEILING_DIRECTORIES=$(CURDIR)/.. git describe --abbrev=0 --tags --always 2>/dev/null || :) | |
4 | ifeq ($(DRACUT_MAIN_VERSION),) | |
5 | DRACUT_MAIN_VERSION = $(DRACUT_VERSION) | |
6 | endif | |
7 | DRACUT_FULL_VERSION := $(shell env GIT_CEILING_DIRECTORIES=$(CURDIR)/.. git describe --tags --always 2>/dev/null || :) | |
8 | ifeq ($(DRACUT_FULL_VERSION),) | |
9 | DRACUT_FULL_VERSION = $(DRACUT_VERSION) | |
10 | endif | |
11 | ||
12 | HAVE_SHELLCHECK ?= $(shell command -v shellcheck >/dev/null 2>&1 && echo yes) | |
13 | HAVE_SHFMT ?= $(shell command -v shfmt >/dev/null 2>&1 && echo yes) | |
14 | HAVE_RPMBUILD ?= $(shell command -v rpmbuild >/dev/null 2>&1 && echo yes) | |
15 | ||
16 | -include Makefile.inc | |
17 | ||
18 | KVERSION ?= $(shell uname -r) | |
19 | ||
20 | prefix ?= /usr | |
21 | libdir ?= ${prefix}/lib | |
22 | datadir ?= ${prefix}/share | |
23 | pkglibdir ?= ${libdir}/dracut | |
24 | sysconfdir ?= ${prefix}/etc | |
25 | bindir ?= ${prefix}/bin | |
26 | mandir ?= ${prefix}/share/man | |
27 | CFLAGS ?= -O2 -g -Wall -std=gnu99 -D_FILE_OFFSET_BITS=64 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 | |
28 | bashcompletiondir ?= ${datadir}/bash-completion/completions | |
29 | pkgconfigdatadir ?= $(datadir)/pkgconfig | |
30 | ||
31 | man1pages = man/lsinitrd.1 | |
32 | ||
33 | man5pages = man/dracut.conf.5 | |
34 | ||
35 | man7pages = man/dracut.cmdline.7 \ | |
36 | man/dracut.bootup.7 \ | |
37 | man/dracut.modules.7 | |
38 | ||
39 | man8pages = man/dracut.8 \ | |
40 | man/dracut-catimages.8 \ | |
41 | modules.d/98dracut-systemd/dracut-cmdline.service.8 \ | |
42 | modules.d/98dracut-systemd/dracut-initqueue.service.8 \ | |
43 | modules.d/98dracut-systemd/dracut-mount.service.8 \ | |
44 | modules.d/98dracut-systemd/dracut-shutdown.service.8 \ | |
45 | modules.d/98dracut-systemd/dracut-pre-mount.service.8 \ | |
46 | modules.d/98dracut-systemd/dracut-pre-pivot.service.8 \ | |
47 | modules.d/98dracut-systemd/dracut-pre-trigger.service.8 \ | |
48 | modules.d/98dracut-systemd/dracut-pre-udev.service.8 | |
49 | ||
50 | manpages = $(man1pages) $(man5pages) $(man7pages) $(man8pages) | |
51 | ||
52 | .PHONY: install clean archive rpm srpm testimage test all check AUTHORS CONTRIBUTORS doc dracut-version.sh | |
53 | ||
54 | all: dracut-version.sh dracut.pc dracut-install src/skipcpio/skipcpio dracut-util | |
55 | ||
56 | %.o : %.c | |
57 | $(CC) -c $(CFLAGS) $(CPPFLAGS) $(KMOD_CFLAGS) $< -o $@ | |
58 | ||
59 | DRACUT_INSTALL_OBJECTS = \ | |
60 | src/install/dracut-install.o \ | |
61 | src/install/hashmap.o\ | |
62 | src/install/log.o \ | |
63 | src/install/strv.o \ | |
64 | src/install/util.o | |
65 | ||
66 | # deps generated with gcc -MM | |
67 | src/install/dracut-install.o: src/install/dracut-install.c src/install/log.h src/install/macro.h \ | |
68 | src/install/hashmap.h src/install/util.h | |
69 | src/install/hashmap.o: src/install/hashmap.c src/install/util.h src/install/macro.h src/install/log.h \ | |
70 | src/install/hashmap.h | |
71 | src/install/log.o: src/install/log.c src/install/log.h src/install/macro.h src/install/util.h | |
72 | src/install/util.o: src/install/util.c src/install/util.h src/install/macro.h src/install/log.h | |
73 | src/install/strv.o: src/install/strv.c src/install/strv.h src/install/util.h src/install/macro.h src/install/log.h | |
74 | ||
75 | src/install/dracut-install: $(DRACUT_INSTALL_OBJECTS) | |
76 | $(CC) $(LDFLAGS) -o $@ $(DRACUT_INSTALL_OBJECTS) $(LDLIBS) $(FTS_LIBS) $(KMOD_LIBS) | |
77 | ||
78 | logtee: src/logtee/logtee.c | |
79 | $(CC) $(LDFLAGS) -o $@ $< | |
80 | ||
81 | dracut-install: src/install/dracut-install | |
82 | ln -fs $< $@ | |
83 | ||
84 | SKIPCPIO_OBJECTS = src/skipcpio/skipcpio.o | |
85 | skipcpio/skipcpio.o: src/skipcpio/skipcpio.c | |
86 | skipcpio/skipcpio: $(SKIPCPIO_OBJECTS) | |
87 | ||
88 | UTIL_OBJECTS = src/util/util.o | |
89 | util/util.o: src/util/util.c | |
90 | util/util: $(UTIL_OBJECTS) | |
91 | ||
92 | dracut-util: src/util/util | |
93 | cp -a $< $@ | |
94 | ||
95 | .PHONY: indent-c | |
96 | indent-c: | |
97 | astyle -n --quiet --options=.astylerc $(wildcard *.[ch] */*.[ch] src/*/*.[ch]) | |
98 | ||
99 | .PHONY: indent | |
100 | indent: indent-c | |
101 | ifeq ($(HAVE_SHFMT),yes) | |
102 | shfmt -w -s . | |
103 | endif | |
104 | ||
105 | src/dracut-cpio/target/release/dracut-cpio: src/dracut-cpio/src/main.rs | |
106 | cargo --offline build --release --manifest-path src/dracut-cpio/Cargo.toml | |
107 | ||
108 | dracut-cpio: src/dracut-cpio/target/release/dracut-cpio | |
109 | ln -fs $< $@ | |
110 | ||
111 | ifeq ($(enable_dracut_cpio),yes) | |
112 | all: dracut-cpio | |
113 | endif | |
114 | ||
115 | doc: $(manpages) dracut.html | |
116 | ||
117 | ifneq ($(enable_documentation),no) | |
118 | all: doc | |
119 | endif | |
120 | ||
121 | %: %.xml | |
122 | @rm -f -- "$@" | |
123 | xsltproc -o "$@" -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< | |
124 | ||
125 | %.xml: %.asc | |
126 | @rm -f -- "$@" | |
127 | asciidoc -a "version=$(DRACUT_FULL_VERSION)" -d manpage -b docbook -o "$@" $< | |
128 | ||
129 | dracut.8: man/dracut.8.asc \ | |
130 | man/dracut.usage.asc | |
131 | ||
132 | dracut.html: man/dracut.asc $(manpages) docs/dracut.css man/dracut.usage.asc | |
133 | @rm -f -- dracut.xml | |
134 | asciidoc -a "mainversion=$(DRACUT_MAIN_VERSION)" \ | |
135 | -a "version=$(DRACUT_FULL_VERSION)" \ | |
136 | -a numbered \ | |
137 | -d book -b docbook -o dracut.xml man/dracut.asc | |
138 | @rm -f -- dracut.html | |
139 | xsltproc -o dracut.html --xinclude -nonet \ | |
140 | --stringparam custom.css.source docs/dracut.css \ | |
141 | --stringparam generate.css.header 1 \ | |
142 | http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl dracut.xml | |
143 | @rm -f -- dracut.xml | |
144 | ||
145 | dracut.pc: Makefile.inc Makefile | |
146 | @echo "Name: dracut" > dracut.pc | |
147 | @echo "Description: dracut" >> dracut.pc | |
148 | @echo "Version: $(DRACUT_FULL_VERSION)" >> dracut.pc | |
149 | @echo "dracutdir=$(pkglibdir)" >> dracut.pc | |
150 | @echo "dracutmodulesdir=$(pkglibdir)/modules.d" >> dracut.pc | |
151 | @echo "dracutconfdir=$(pkglibdir)/dracut.conf.d" >> dracut.pc | |
152 | ||
153 | install: all | |
154 | mkdir -p $(DESTDIR)$(pkglibdir) | |
155 | mkdir -p $(DESTDIR)$(bindir) | |
156 | mkdir -p $(DESTDIR)$(sysconfdir) | |
157 | mkdir -p $(DESTDIR)$(pkglibdir)/modules.d | |
158 | mkdir -p $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man7 $(DESTDIR)$(mandir)/man8 | |
159 | install -m 0755 dracut.sh $(DESTDIR)$(bindir)/dracut | |
160 | install -m 0755 dracut-catimages.sh $(DESTDIR)$(bindir)/dracut-catimages | |
161 | install -m 0755 lsinitrd.sh $(DESTDIR)$(bindir)/lsinitrd | |
162 | install -m 0644 dracut.conf $(DESTDIR)$(sysconfdir)/dracut.conf | |
163 | mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d | |
164 | mkdir -p $(DESTDIR)$(pkglibdir)/dracut.conf.d | |
165 | install -m 0755 dracut-init.sh $(DESTDIR)$(pkglibdir)/dracut-init.sh | |
166 | install -m 0755 dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions.sh | |
167 | install -m 0755 dracut-version.sh $(DESTDIR)$(pkglibdir)/dracut-version.sh | |
168 | ln -fs dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions | |
169 | install -m 0755 dracut-logger.sh $(DESTDIR)$(pkglibdir)/dracut-logger.sh | |
170 | install -m 0755 dracut-initramfs-restore.sh $(DESTDIR)$(pkglibdir)/dracut-initramfs-restore | |
171 | cp -arx modules.d $(DESTDIR)$(pkglibdir) | |
172 | ifneq ($(enable_documentation),no) | |
173 | for i in $(man1pages); do install -m 0644 $$i $(DESTDIR)$(mandir)/man1/$${i##*/}; done | |
174 | for i in $(man5pages); do install -m 0644 $$i $(DESTDIR)$(mandir)/man5/$${i##*/}; done | |
175 | for i in $(man7pages); do install -m 0644 $$i $(DESTDIR)$(mandir)/man7/$${i##*/}; done | |
176 | for i in $(man8pages); do install -m 0644 $$i $(DESTDIR)$(mandir)/man8/$${i##*/}; done | |
177 | ln -fs dracut.cmdline.7 $(DESTDIR)$(mandir)/man7/dracut.kernel.7 | |
178 | endif | |
179 | if [ -n "$(systemdsystemunitdir)" ]; then \ | |
180 | mkdir -p $(DESTDIR)$(systemdsystemunitdir); \ | |
181 | ln -srf $(DESTDIR)$(pkglibdir)/modules.d/98dracut-systemd/dracut-shutdown-onfailure.service $(DESTDIR)$(systemdsystemunitdir)/dracut-shutdown-onfailure.service; \ | |
182 | ln -srf $(DESTDIR)$(pkglibdir)/modules.d/98dracut-systemd/dracut-shutdown.service $(DESTDIR)$(systemdsystemunitdir)/dracut-shutdown.service; \ | |
183 | mkdir -p $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants; \ | |
184 | ln -s ../dracut-shutdown.service \ | |
185 | $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants/dracut-shutdown.service; \ | |
186 | mkdir -p $(DESTDIR)$(systemdsystemunitdir)/initrd.target.wants; \ | |
187 | for i in \ | |
188 | dracut-cmdline.service \ | |
189 | dracut-initqueue.service \ | |
190 | dracut-mount.service \ | |
191 | dracut-pre-mount.service \ | |
192 | dracut-pre-pivot.service \ | |
193 | dracut-pre-trigger.service \ | |
194 | dracut-pre-udev.service \ | |
195 | ; do \ | |
196 | ln -srf $(DESTDIR)$(pkglibdir)/modules.d/98dracut-systemd/$$i $(DESTDIR)$(systemdsystemunitdir); \ | |
197 | ln -s ../$$i \ | |
198 | $(DESTDIR)$(systemdsystemunitdir)/initrd.target.wants/$$i; \ | |
199 | done \ | |
200 | fi | |
201 | if [ -f src/install/dracut-install ]; then \ | |
202 | install -m 0755 src/install/dracut-install $(DESTDIR)$(pkglibdir)/dracut-install; \ | |
203 | fi | |
204 | if [ -f src/skipcpio/skipcpio ]; then \ | |
205 | install -m 0755 src/skipcpio/skipcpio $(DESTDIR)$(pkglibdir)/skipcpio; \ | |
206 | fi | |
207 | if [ -f dracut-util ]; then \ | |
208 | install -m 0755 dracut-util $(DESTDIR)$(pkglibdir)/dracut-util; \ | |
209 | fi | |
210 | ifeq ($(enable_dracut_cpio),yes) | |
211 | install -m 0755 dracut-cpio $(DESTDIR)$(pkglibdir)/dracut-cpio | |
212 | endif | |
213 | mkdir -p $(DESTDIR)${prefix}/lib/kernel/install.d | |
214 | install -m 0755 install.d/50-dracut.install $(DESTDIR)${prefix}/lib/kernel/install.d/50-dracut.install | |
215 | install -m 0755 install.d/51-dracut-rescue.install $(DESTDIR)${prefix}/lib/kernel/install.d/51-dracut-rescue.install | |
216 | mkdir -p $(DESTDIR)${bashcompletiondir} | |
217 | install -m 0644 shell-completion/bash/dracut $(DESTDIR)${bashcompletiondir}/dracut | |
218 | install -m 0644 shell-completion/bash/lsinitrd $(DESTDIR)${bashcompletiondir}/lsinitrd | |
219 | mkdir -p $(DESTDIR)${pkgconfigdatadir} | |
220 | install -m 0644 dracut.pc $(DESTDIR)${pkgconfigdatadir}/dracut.pc | |
221 | ||
222 | dracut-version.sh: | |
223 | @rm -f dracut-version.sh | |
224 | @printf "#!/bin/sh\n# shellcheck disable=SC2034\nDRACUT_VERSION=%s\n" "$(DRACUT_FULL_VERSION)" > dracut-version.sh | |
225 | ||
226 | clean: | |
227 | $(RM) *~ | |
228 | $(RM) */*~ | |
229 | $(RM) */*/*~ | |
230 | $(RM) $(manpages:%=%.xml) dracut.xml | |
231 | $(RM) test-*.img | |
232 | $(RM) dracut-*.rpm dracut-*.tar.bz2 dracut-*.tar.xz | |
233 | $(RM) dracut-version.sh | |
234 | $(RM) dracut-install src/install/dracut-install $(DRACUT_INSTALL_OBJECTS) | |
235 | $(RM) skipcpio/skipcpio $(SKIPCPIO_OBJECTS) | |
236 | $(RM) dracut-util util/util $(UTIL_OBJECTS) | |
237 | $(RM) $(manpages) dracut.html | |
238 | $(RM) dracut.pc | |
239 | $(RM) dracut-cpio src/dracut-cpio/target/release/dracut-cpio* | |
240 | $(MAKE) -C test clean | |
241 | ||
242 | dist: dracut-$(DRACUT_MAIN_VERSION).tar.xz | |
243 | ||
244 | dracut-$(DRACUT_MAIN_VERSION).tar.xz: doc syncheck | |
245 | @echo "DRACUT_VERSION=$(DRACUT_MAIN_VERSION)" > dracut-version.sh | |
246 | git archive --format=tar $(DRACUT_MAIN_VERSION) --prefix=dracut-$(DRACUT_MAIN_VERSION)/ > dracut-$(DRACUT_MAIN_VERSION).tar | |
247 | mkdir -p dracut-$(DRACUT_MAIN_VERSION) | |
248 | for i in $(manpages) dracut.html dracut-version.sh; do [ "$${i%/*}" != "$$i" ] && mkdir -p "dracut-$(DRACUT_MAIN_VERSION)/$${i%/*}"; cp "$$i" "dracut-$(DRACUT_MAIN_VERSION)/$$i"; done | |
249 | tar --owner=root --group=root -rf dracut-$(DRACUT_MAIN_VERSION).tar $$(find dracut-$(DRACUT_MAIN_VERSION) -type f) | |
250 | rm -fr -- dracut-$(DRACUT_MAIN_VERSION).tar.xz dracut-$(DRACUT_MAIN_VERSION) | |
251 | xz -9 dracut-$(DRACUT_MAIN_VERSION).tar | |
252 | rm -f -- dracut-$(DRACUT_MAIN_VERSION).tar | |
253 | ||
254 | syncheck: | |
255 | @ret=0;for i in dracut-initramfs-restore.sh modules.d/*/*.sh; do \ | |
256 | [ "$${i##*/}" = "module-setup.sh" ] && continue; \ | |
257 | read line < "$$i"; [ "$${line#*bash*}" != "$$line" ] && continue; \ | |
258 | [ $$V ] && echo "posix syntax check: $$i"; bash --posix -n "$$i" ; ret=$$(($$ret+$$?)); \ | |
259 | [ $$V ] && echo "checking for [[: $$i"; if grep -Fq '[[ ' "$$i" ; then ret=$$(($$ret+1)); echo "$$i contains [["; fi; \ | |
260 | [ $$V ] && echo "checking for echo -n: $$i"; if grep -Fq 'echo -n ' "$$i" ; then ret=$$(($$ret+1)); echo "$$i contains echo -n"; fi \ | |
261 | done;exit $$ret | |
262 | @ret=0;for i in *.sh modules.d/*/*.sh modules.d/*/module-setup.sh; do \ | |
263 | [ $$V ] && echo "bash syntax check: $$i"; bash -n "$$i" ; ret=$$(($$ret+$$?)); \ | |
264 | done;exit $$ret | |
265 | ifeq ($(HAVE_SHELLCHECK),yes) | |
266 | ifeq ($(HAVE_SHFMT),yes) | |
267 | shellcheck $$(shfmt -f .) | |
268 | else | |
269 | find . -name '*.sh' -print0 | xargs -0 shellcheck | |
270 | endif | |
271 | endif | |
272 | ||
273 | check: all syncheck rpm | |
274 | @[ "$$EUID" == "0" ] || { echo "'check' must be run as root! Please use 'sudo'."; exit 1; } | |
275 | @$(MAKE) -C test check | |
276 | ||
277 | testimage: all | |
278 | ./dracut.sh -N -l -a debug -f test-$(KVERSION).img $(KVERSION) | |
279 | @echo wrote test-$(KVERSION).img | |
280 | ||
281 | debugtestimage: all | |
282 | ./dracut.sh --debug -l -a debug -f test-$(KVERSION).img $(KVERSION) | |
283 | @echo wrote test-$(KVERSION).img | |
284 | ||
285 | testimages: all | |
286 | ./dracut.sh -l -a debug --kernel-only -f test-kernel-$(KVERSION).img $(KVERSION) | |
287 | @echo wrote test-$(KVERSION).img | |
288 | ./dracut.sh -l -a debug --no-kernel -f test-dracut.img $(KVERSION) | |
289 | @echo wrote test-dracut.img | |
290 | ||
291 | debughostimage: all | |
292 | ./dracut.sh --debug -H -l -f test-$(KVERSION).img $(KVERSION) | |
293 | @echo wrote test-$(KVERSION).img | |
294 | ||
295 | hostimage: all | |
296 | ./dracut.sh -H -l -f test-$(KVERSION).img $(KVERSION) | |
297 | @echo wrote test-$(KVERSION).img | |
298 | ||
299 | efi: all | |
300 | ./dracut.sh --uefi -H -l -f linux-$(KVERSION).efi $(KVERSION) | |
301 | @echo wrote linux-$(KVERSION).efi | |
302 | ||
303 | AUTHORS: | |
304 | git shortlog --numbered --summary -e |while read a rest || [ -n "$$rest" ]; do echo $$rest;done > AUTHORS | |
305 | ||
306 | CONTRIBUTORS: | |
307 | @git shortlog $(DRACUT_MAIN_VERSION).. --numbered --summary -e |while read a rest || [ -n "$$rest" ]; do echo "- $$rest";done | |
308 | ||
309 | dracut.html.sign: dracut-$(DRACUT_MAIN_VERSION).tar.xz dracut.html | |
310 | gpg-sign-all dracut-$(DRACUT_MAIN_VERSION).tar.xz dracut.html | |
311 | ||
312 | upload: dracut.html.sign | |
313 | kup put dracut-$(DRACUT_MAIN_VERSION).tar.xz dracut-$(DRACUT_MAIN_VERSION).tar.sign /pub/linux/utils/boot/dracut/ | |
314 | kup put dracut.html dracut.html.sign /pub/linux/utils/boot/dracut/ |