]> git.ipfire.org Git - thirdparty/systemd.git/blame - Makefile
release 121
[thirdparty/systemd.git] / Makefile
CommitLineData
f0083e3d 1#
56f914e6 2# Copyright (C) 2003-2004 Greg Kroah-Hartman <greg@kroah.com>
c1979c82 3# Copyright (C) 2004-2006 Kay Sievers <kay.sievers@vrfy.org>
f0083e3d
GKH
4#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; version 2 of the License.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12# General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
27b77df4 16# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
f0083e3d
GKH
17#
18
8325c84d 19VERSION = 121
0e47c219
KS
20
21# set this to make use of syslog
05230184 22USE_LOG = true
54988802 23
0e47c219
KS
24# compile-in development debug messages
25# (export UDEV_LOG="debug" or set udev_log="debug" in udev.conf
26# to print the debug messages to syslog)
29b82deb 27DEBUG = false
f0083e3d 28
a8b38f1c 29# compile with gcc's code coverage option
a8b38f1c
KS
30USE_GCOV = false
31
0e47c219 32# include Security-Enhanced Linux support
9825617b 33USE_SELINUX = false
f0083e3d 34
0e47c219 35# set this to create statically linked binaries
6c18b1fb
KS
36USE_STATIC = false
37
0e47c219
KS
38# to build any of the extras programs pass:
39# make EXTRAS="extras/<extra1> extras/<extra2>"
638b983b 40EXTRAS =
6c18b1fb 41
c1979c82 42# make the build silent
1ef98545 43V =
6c18b1fb 44
0e47c219 45PROGRAMS = \
0e47c219 46 udevd \
225cb03b 47 udevadm \
225cb03b 48 test-udev
0e47c219
KS
49
50HEADERS = \
51 udev.h \
b5adfb4f 52 udevd.h \
0e47c219 53 udev_rules.h \
0e47c219 54 logging.h \
dbd16d26 55 udev_sysdeps.h \
0e47c219
KS
56 udev_selinux.h \
57 list.h
58
59UDEV_OBJS = \
0e47c219
KS
60 udev_device.o \
61 udev_config.o \
a4d5ca64 62 udev_node.o \
0e47c219 63 udev_db.o \
1aa1e248 64 udev_sysfs.o \
0e47c219
KS
65 udev_rules.o \
66 udev_rules_parse.o \
67 udev_utils.o \
68 udev_utils_string.o \
69 udev_utils_file.o \
225cb03b
KS
70 udevmonitor.o \
71 udevinfo.o \
72 udevcontrol.o \
73 udevtrigger.o \
74 udevsettle.o \
75 udevtest.o \
dbd16d26 76 udev_sysdeps.o
0e47c219
KS
77LIBUDEV = libudev.a
78
79MAN_PAGES = \
2c769419 80 udev.7 \
0e47c219 81 udevd.8 \
225cb03b 82 udevadm.8
0e47c219 83
0e47c219
KS
84GEN_HEADERS = \
85 udev_version.h
977083c2 86
56f914e6 87prefix ?=
9f53b06a 88etcdir = ${prefix}/etc
d7363ee1
KS
89sbindir = ${prefix}/sbin
90usrbindir = ${prefix}/usr/bin
d7363ee1 91libudevdir = ${prefix}/lib/udev
9f53b06a 92mandir = ${prefix}/usr/share/man
aef6bb13 93configdir = ${etcdir}/udev
0e47c219 94udevdir = /dev
0e47c219 95DESTDIR =
9f53b06a 96
86f4ea06 97INSTALL = install -c
9f53b06a 98INSTALL_PROGRAM = ${INSTALL}
d8a57e7c 99INSTALL_DATA = ${INSTALL} -m 644
86f4ea06 100INSTALL_SCRIPT = ${INSTALL}
89067448
GKH
101PWD = $(shell pwd)
102
56f914e6 103CROSS_COMPILE ?=
4942c78c
KS
104CC = $(CROSS_COMPILE)gcc
105LD = $(CROSS_COMPILE)gcc
106AR = $(CROSS_COMPILE)ar
107RANLIB = $(CROSS_COMPILE)ranlib
f0083e3d 108
702e0231 109CFLAGS += -g -Wall -pipe -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
f032e0ed
KS
110WARNINGS = -Wstrict-prototypes -Wsign-compare -Wshadow \
111 -Wchar-subscripts -Wmissing-declarations -Wnested-externs \
112 -Wpointer-arith -Wcast-align -Wsign-compare -Wmissing-prototypes
f032e0ed 113CFLAGS += $(WARNINGS)
12901d99 114
76bd9d31 115LDFLAGS += -Wl,-warn-common,--as-needed
638b983b 116
c756114f 117OPTFLAGS = -Os
f032e0ed 118CFLAGS += $(OPTFLAGS)
1196e46c 119
05230184 120ifeq ($(strip $(USE_LOG)),true)
6c18b1fb 121 CFLAGS += -DUSE_LOG
54988802
KS
122endif
123
f032e0ed 124# if DEBUG is enabled, then we do not strip
f0083e3d 125ifeq ($(strip $(DEBUG)),true)
638b983b 126 CFLAGS += -DDEBUG
f0083e3d
GKH
127endif
128
a8b38f1c
KS
129ifeq ($(strip $(USE_GCOV)),true)
130 CFLAGS += -fprofile-arcs -ftest-coverage
638b983b 131 LDFLAGS += -fprofile-arcs
a8b38f1c
KS
132endif
133
9825617b 134ifeq ($(strip $(USE_SELINUX)),true)
045b1f0f 135 UDEV_OBJS += udev_selinux.o
586e1a37 136 LIB_OBJS += -lselinux -lsepol
045b1f0f 137 CFLAGS += -DUSE_SELINUX
9825617b
HH
138endif
139
6c18b1fb
KS
140ifeq ($(strip $(USE_STATIC)),true)
141 CFLAGS += -DUSE_STATIC
142 LDFLAGS += -static
143endif
144
1ef98545
KS
145ifeq ($(strip $(V)),)
146 E = @echo
147 Q = @
045b1f0f 148else
1ef98545
KS
149 E = @\#
150 Q =
045b1f0f 151endif
1ef98545 152export E Q
eadb1bbc 153
a8349b33 154all: $(PROGRAMS) $(MAN_PAGES)
1ef98545 155 $(Q) extras="$(EXTRAS)"; for target in $$extras; do \
49fb51c6 156 $(MAKE) CC="$(CC)" \
db28d2ea 157 CFLAGS="$(CFLAGS)" \
977083c2 158 LD="$(LD)" \
db28d2ea 159 LDFLAGS="$(LDFLAGS)" \
1fda06ae
KS
160 AR="$(AR)" \
161 RANLIB="$(RANLIB)" \
db28d2ea 162 LIB_OBJS="$(LIB_OBJS)" \
0e47c219 163 LIBUDEV="$(PWD)/$(LIBUDEV)" \
c699bc48 164 -C $$target $@ || exit 1; \
0e47c219
KS
165 done;
166.PHONY: all
17d3cb12 167.DEFAULT: all
f0083e3d 168
7a526da6
KS
169# clear implicit rules
170.SUFFIXES:
171
172# build the objects
1ef98545
KS
173%.o: %.c $(HEADERS) $(GEN_HEADERS)
174 $(E) " CC " $@
175 $(Q) $(CC) -c $(CFLAGS) $< -o $@
7a526da6
KS
176
177# "Static Pattern Rule" to build all programs
1ef98545
KS
178$(PROGRAMS): %: $(HEADERS) $(GEN_HEADERS) $(LIBUDEV) %.o
179 $(E) " LD " $@
180 $(Q) $(LD) $(LDFLAGS) $@.o -o $@ $(LIBUDEV) $(LIB_OBJS)
0e47c219 181
1ef98545
KS
182$(LIBUDEV): $(HEADERS) $(GEN_HEADERS) $(UDEV_OBJS)
183 $(Q) rm -f $@
184 $(E) " AR " $@
185 $(Q) $(AR) cq $@ $(UDEV_OBJS)
186 $(E) " RANLIB " $@
187 $(Q) $(RANLIB) $@
7c2aae11 188
f0083e3d 189udev_version.h:
1ef98545
KS
190 $(E) " GENHDR " $@
191 $(Q) echo "/* Generated by make. */" > $@
192 $(Q) echo \#define UDEV_VERSION \"$(VERSION)\" >> $@
193 $(Q) echo \#define UDEV_ROOT \"$(udevdir)\" >> $@
c1979c82 194 $(Q) echo \#define UDEV_CONFIG_FILE \"$(configdir)/udev.conf\" >> $@
9dd0c257 195 $(Q) echo \#define UDEV_RULES_DIR \"$(configdir)/rules.d\" >> $@
f0083e3d 196
420a506e 197# man pages
9de98988 198%.8 %.7: %.xml
1ef98545
KS
199 $(E) " XMLTO " $@
200 $(Q) xmlto man $?
0e47c219 201.PRECIOUS: %.8
56a8a624 202
f0083e3d 203clean:
1ef98545
KS
204 $(E) " CLEAN "
205 $(Q) - find . -type f -name '*.orig' -print0 | xargs -0r rm -f
206 $(Q) - find . -type f -name '*.rej' -print0 | xargs -0r rm -f
207 $(Q) - find . -type f -name '*~' -print0 | xargs -0r rm -f
208 $(Q) - find . -type f -name '*.[oas]' -print0 | xargs -0r rm -f
209 $(Q) - find . -type f -name "*.gcno" -print0 | xargs -0r rm -f
210 $(Q) - find . -type f -name "*.gcda" -print0 | xargs -0r rm -f
211 $(Q) - find . -type f -name "*.gcov" -print0 | xargs -0r rm -f
212 $(Q) - rm -f udev_gcov.txt
213 $(Q) - rm -f core $(PROGRAMS) $(GEN_HEADERS)
214 $(Q) - rm -f udev-$(VERSION).tar.gz
215 $(Q) - rm -f udev-$(VERSION).tar.bz2
e2ecb34f 216 $(Q) - rm -f udev-git-HEAD.patch
1ef98545 217 @ extras="$(EXTRAS)"; for target in $$extras; do \
c699bc48 218 $(MAKE) -C $$target $@ || exit 1; \
0e47c219 219 done;
49fb51c6 220.PHONY: clean
2761f9b9 221
d8a57e7c 222install-config:
aef6bb13 223 $(INSTALL) -d $(DESTDIR)$(configdir)/rules.d
1ef98545 224 @ if [ ! -r $(DESTDIR)$(configdir)/udev.conf ]; then \
d8a57e7c 225 $(INSTALL_DATA) etc/udev/udev.conf $(DESTDIR)$(configdir); \
7591c18a 226 fi
554074c9
HH
227 @ for i in etc/udev/rules.d/*.rules; do \
228 if [ ! -r $(DESTDIR)$(configdir)/rules.d/$$(basename $$i) ]; then \
229 $(INSTALL_DATA) $$i $(DESTDIR)$(configdir)/rules.d; \
3df9102b
KS
230 fi \
231 done
1ef98545 232 @ extras="$(EXTRAS)"; for target in $$extras; do \
c699bc48 233 $(MAKE) -C $$target $@ || exit 1; \
1ac216b1 234 done;
0e47c219 235.PHONY: install-config
7591c18a 236
487c1b35 237install-man:
064360cd
RM
238 $(INSTALL) -d $(DESTDIR)$(mandir)/man7
239 $(INSTALL_DATA) udev.7 $(DESTDIR)$(mandir)/man7/udev.7
240 $(INSTALL) -d $(DESTDIR)$(mandir)/man8
241 $(INSTALL_DATA) udevd.8 $(DESTDIR)$(mandir)/man8/udevd.8
242 $(INSTALL_DATA) udevadm.8 $(DESTDIR)$(mandir)/man8/udevadm.8
1ac216b1 243 @extras="$(EXTRAS)"; for target in $$extras; do \
c699bc48 244 $(MAKE) -C $$target $@ || exit 1; \
1ac216b1 245 done;
0e47c219 246.PHONY: install-man
438ac360
GKH
247
248uninstall-man:
2c769419 249 - rm -f $(DESTDIR)$(mandir)/man7/udev.7
225cb03b 250 - rm -f $(DESTDIR)$(mandir)/man8/udevadm.8
49fb51c6 251 - rm -f $(DESTDIR)$(mandir)/man8/udevd.8
1ef98545 252 @ extras="$(EXTRAS)"; for target in $$extras; do \
c699bc48 253 $(MAKE) -C $$target $@ || exit 1; \
1ac216b1 254 done;
0e47c219 255.PHONY: uninstall-man
438ac360 256
17d3cb12 257install-bin:
064360cd
RM
258 $(INSTALL) -d $(DESTDIR)$(sbindir)
259 $(INSTALL_PROGRAM) udevd $(DESTDIR)$(sbindir)/udevd
260 $(INSTALL_PROGRAM) udevadm $(DESTDIR)$(sbindir)/udevadm
225cb03b
KS
261 ln -f -s udevadm $(DESTDIR)$(sbindir)/udevtrigger
262 ln -f -s udevadm $(DESTDIR)$(sbindir)/udevsettle
263 ln -f -s udevadm $(DESTDIR)$(sbindir)/udevcontrol
e18bd73b 264 $(INSTALL) -d $(DESTDIR)$(usrbindir)
225cb03b 265 ln -f -s $(sbindir)/udevadm $(DESTDIR)$(usrbindir)/udevinfo
db28d2ea 266 @extras="$(EXTRAS)"; for target in $$extras; do \
c699bc48 267 $(MAKE) -C $$target $@ || exit 1; \
db28d2ea 268 done;
f070df16 269ifndef DESTDIR
0e47c219 270 - killall udevd
fc55cf68 271 - rm -rf /dev/.udev
0e47c219 272 - $(sbindir)/udevd --daemon
f070df16 273endif
17d3cb12 274.PHONY: install-bin
6785820d 275
17d3cb12 276uninstall-bin:
49fb51c6 277 - rm -f $(DESTDIR)$(sbindir)/udevd
225cb03b 278 - rm -f $(DESTDIR)$(sbindir)/udevadm
0d5be398 279 - rm -f $(DESTDIR)$(sbindir)/udevtrigger
7baada47 280 - rm -f $(DESTDIR)$(sbindir)/udevsettle
49fb51c6 281 - rm -f $(DESTDIR)$(sbindir)/udevcontrol
d8a57e7c 282 - rm -f $(DESTDIR)$(usrbindir)/udevinfo
49fb51c6 283ifndef DESTDIR
0e47c219 284 - killall udevd
fc55cf68 285 - rm -rf /dev/.udev
49fb51c6 286endif
0e47c219 287 @extras="$(EXTRAS)"; for target in $$extras; do \
c699bc48 288 $(MAKE) -C $$target $@ || exit 1; \
0e47c219 289 done;
17d3cb12
KS
290.PHONY: uninstall-bin
291
292install: all install-bin install-config install-man
293.PHONY: install
294
295uninstall: uninstall-bin uninstall-man
296.PHONY: uninstall
0e47c219
KS
297
298test tests: all
e9f65389 299 @ cd test && ./udev-test.pl
0e47c219 300.PHONY: test tests
0de3c3ed 301
17d3cb12 302buildtest:
ed0e3cbd 303 test/simple-build-check.sh
a8b38f1c
KS
304.PHONY: buildtest
305
d847330c
KS
306ChangeLog:
307 head -1 $@ | grep -q "to v$(shell echo $$(($(VERSION) - 1)))"
ed0e3cbd 308 @ mv $@ $@.tmp
adc8e4b9 309 @ echo "Summary of changes from v$(shell echo $$(($(VERSION) - 1))) to v$(VERSION)" >> $@
ed0e3cbd 310 @ echo "============================================" >> $@
731a7d6d 311 @ echo >> $@
adc8e4b9 312 @ git log --pretty=short $(shell echo $$(($(VERSION) - 1)))..HEAD | git shortlog >> $@
ed0e3cbd
KS
313 @ echo >> $@
314 @ cat $@
315 @ cat $@.tmp >> $@
316 @ rm $@.tmp
d847330c
KS
317 head -1 $@ | grep -q "to v$(VERSION)"
318.PHONY: ChangeLog
319.PRECIOUS: ChangeLog
320
321release:
322 $(Q) - rm -f udev-$(VERSION).tar.gz
323 $(Q) - rm -f udev-$(VERSION).tar.bz2
324 head -1 ChangeLog | grep -q "to v$(VERSION)"
325 head -1 RELEASE-NOTES | grep -q "udev $(VERSION)"
326 git commit -a -m "release $(VERSION)"
327 cat .git/refs/heads/master > .git/refs/tags/$(VERSION)
328 @ echo
329 git-archive --format=tar --prefix=udev-$(VERSION)/ HEAD | gzip -9v > udev-$(VERSION).tar.gz
330 git-archive --format=tar --prefix=udev-$(VERSION)/ HEAD | bzip2 -9v > udev-$(VERSION).tar.bz2
331.PHONY: release
ed0e3cbd 332
2ff5082a
RH
333dist:
334 git-archive --format=tar --prefix=udev-$(VERSION)/ HEAD | gzip -9v > udev-$(VERSION).tar.gz
335 git-archive --format=tar --prefix=udev-$(VERSION)/ HEAD | bzip2 -9v > udev-$(VERSION).tar.bz2
336.PHONY: dist
337
e2ecb34f
KS
338patch:
339 git diff $(shell echo $$(($(VERSION) - 1))) HEAD > udev-git-HEAD.patch
340.PHONY: patch
341
a8b38f1c 342gcov-all:
15ff0ba3 343 $(MAKE) clean all USE_GCOV=true
1ef98545
KS
344 @ echo
345 @ echo "binaries built with gcov support."
346 @ echo "run the tests and analyze with 'make udev_gcov.txt'"
a8b38f1c
KS
347.PHONY: gcov-all
348
349# see docs/README-gcov_for_udev
350udev_gcov.txt: $(wildcard *.gcda) $(wildcard *.gcno)
351 for file in `find -maxdepth 1 -name "*.gcno"`; do \
352 name=`basename $$file .gcno`; \
353 echo "################" >> $@; \
354 echo "$$name.c" >> $@; \
355 echo "################" >> $@; \
356 if [ -e "$$name.gcda" ]; then \
357 gcov -l "$$name.c" >> $@ 2>&1; \
358 else \
359 echo "code for $$name.c was never executed" >> $@ 2>&1; \
360 fi; \
361 echo >> $@; \
362 done; \
363 echo "view $@ for the result"