]> git.proxmox.com Git - systemd.git/blob - Makefile
udevadm: remove old man page links and compat links for debugging tools
[systemd.git] / Makefile
1 #
2 # Copyright (C) 2003-2004 Greg Kroah-Hartman <greg@kroah.com>
3 # Copyright (C) 2004-2006 Kay Sievers <kay.sievers@vrfy.org>
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
16 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 #
18
19 VERSION = 119
20
21 # set this to make use of syslog
22 USE_LOG = true
23
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)
27 DEBUG = false
28
29 # compile with gcc's code coverage option
30 USE_GCOV = false
31
32 # include Security-Enhanced Linux support
33 USE_SELINUX = false
34
35 # set this to create statically linked binaries
36 USE_STATIC = false
37
38 # to build any of the extras programs pass:
39 # make EXTRAS="extras/<extra1> extras/<extra2>"
40 EXTRAS =
41
42 # make the build silent
43 V =
44
45 PROGRAMS = \
46 udevd \
47 udevadm \
48 test-udev
49
50 HEADERS = \
51 udev.h \
52 udevd.h \
53 udev_rules.h \
54 logging.h \
55 udev_sysdeps.h \
56 udev_selinux.h \
57 list.h
58
59 UDEV_OBJS = \
60 udev_device.o \
61 udev_config.o \
62 udev_node.o \
63 udev_db.o \
64 udev_sysfs.o \
65 udev_rules.o \
66 udev_rules_parse.o \
67 udev_utils.o \
68 udev_utils_string.o \
69 udev_utils_file.o \
70 udevmonitor.o \
71 udevinfo.o \
72 udevcontrol.o \
73 udevtrigger.o \
74 udevsettle.o \
75 udevtest.o \
76 udev_sysdeps.o
77 LIBUDEV = libudev.a
78
79 MAN_PAGES = \
80 udev.7 \
81 udevd.8 \
82 udevadm.8
83
84 GEN_HEADERS = \
85 udev_version.h
86
87 prefix ?=
88 etcdir = ${prefix}/etc
89 sbindir = ${prefix}/sbin
90 usrbindir = ${prefix}/usr/bin
91 libudevdir = ${prefix}/lib/udev
92 mandir = ${prefix}/usr/share/man
93 configdir = ${etcdir}/udev
94 udevdir = /dev
95 DESTDIR =
96
97 INSTALL = install -c
98 INSTALL_PROGRAM = ${INSTALL}
99 INSTALL_DATA = ${INSTALL} -m 644
100 INSTALL_SCRIPT = ${INSTALL}
101 PWD = $(shell pwd)
102
103 CROSS_COMPILE ?=
104 CC = $(CROSS_COMPILE)gcc
105 LD = $(CROSS_COMPILE)gcc
106 AR = $(CROSS_COMPILE)ar
107 RANLIB = $(CROSS_COMPILE)ranlib
108
109 CFLAGS += -g -Wall -pipe -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
110 WARNINGS = -Wstrict-prototypes -Wsign-compare -Wshadow \
111 -Wchar-subscripts -Wmissing-declarations -Wnested-externs \
112 -Wpointer-arith -Wcast-align -Wsign-compare -Wmissing-prototypes
113 CFLAGS += $(WARNINGS)
114
115 LDFLAGS += -Wl,-warn-common,--as-needed
116
117 OPTFLAGS = -Os
118 CFLAGS += $(OPTFLAGS)
119
120 ifeq ($(strip $(USE_LOG)),true)
121 CFLAGS += -DUSE_LOG
122 endif
123
124 # if DEBUG is enabled, then we do not strip
125 ifeq ($(strip $(DEBUG)),true)
126 CFLAGS += -DDEBUG
127 endif
128
129 ifeq ($(strip $(USE_GCOV)),true)
130 CFLAGS += -fprofile-arcs -ftest-coverage
131 LDFLAGS += -fprofile-arcs
132 endif
133
134 ifeq ($(strip $(USE_SELINUX)),true)
135 UDEV_OBJS += udev_selinux.o
136 LIB_OBJS += -lselinux -lsepol
137 CFLAGS += -DUSE_SELINUX
138 endif
139
140 ifeq ($(strip $(USE_STATIC)),true)
141 CFLAGS += -DUSE_STATIC
142 LDFLAGS += -static
143 endif
144
145 ifeq ($(strip $(V)),)
146 E = @echo
147 Q = @
148 else
149 E = @\#
150 Q =
151 endif
152 export E Q
153
154 all: $(PROGRAMS) $(MAN_PAGES)
155 $(Q) extras="$(EXTRAS)"; for target in $$extras; do \
156 $(MAKE) CC="$(CC)" \
157 CFLAGS="$(CFLAGS)" \
158 LD="$(LD)" \
159 LDFLAGS="$(LDFLAGS)" \
160 AR="$(AR)" \
161 RANLIB="$(RANLIB)" \
162 LIB_OBJS="$(LIB_OBJS)" \
163 LIBUDEV="$(PWD)/$(LIBUDEV)" \
164 -C $$target $@ || exit 1; \
165 done;
166 .PHONY: all
167 .DEFAULT: all
168
169 # clear implicit rules
170 .SUFFIXES:
171
172 # build the objects
173 %.o: %.c $(HEADERS) $(GEN_HEADERS)
174 $(E) " CC " $@
175 $(Q) $(CC) -c $(CFLAGS) $< -o $@
176
177 # "Static Pattern Rule" to build all programs
178 $(PROGRAMS): %: $(HEADERS) $(GEN_HEADERS) $(LIBUDEV) %.o
179 $(E) " LD " $@
180 $(Q) $(LD) $(LDFLAGS) $@.o -o $@ $(LIBUDEV) $(LIB_OBJS)
181
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) $@
188
189 udev_version.h:
190 $(E) " GENHDR " $@
191 $(Q) echo "/* Generated by make. */" > $@
192 $(Q) echo \#define UDEV_VERSION \"$(VERSION)\" >> $@
193 $(Q) echo \#define UDEV_ROOT \"$(udevdir)\" >> $@
194 $(Q) echo \#define UDEV_CONFIG_FILE \"$(configdir)/udev.conf\" >> $@
195 $(Q) echo \#define UDEV_RULES_DIR \"$(configdir)/rules.d\" >> $@
196
197 # man pages
198 %.8 %.7: %.xml
199 $(E) " XMLTO " $@
200 $(Q) xmlto man $?
201 .PRECIOUS: %.8
202
203 clean:
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
216 $(Q) - rm -f udev-git-HEAD.patch
217 @ extras="$(EXTRAS)"; for target in $$extras; do \
218 $(MAKE) -C $$target $@ || exit 1; \
219 done;
220 .PHONY: clean
221
222 install-config:
223 $(INSTALL) -d $(DESTDIR)$(configdir)/rules.d
224 @ if [ ! -r $(DESTDIR)$(configdir)/udev.conf ]; then \
225 $(INSTALL_DATA) etc/udev/udev.conf $(DESTDIR)$(configdir); \
226 fi
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; \
230 fi \
231 done
232 @ extras="$(EXTRAS)"; for target in $$extras; do \
233 $(MAKE) -C $$target $@ || exit 1; \
234 done;
235 .PHONY: install-config
236
237 install-man:
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
243 @extras="$(EXTRAS)"; for target in $$extras; do \
244 $(MAKE) -C $$target $@ || exit 1; \
245 done;
246 .PHONY: install-man
247
248 uninstall-man:
249 - rm -f $(DESTDIR)$(mandir)/man7/udev.7
250 - rm -f $(DESTDIR)$(mandir)/man8/udevadm.8
251 - rm -f $(DESTDIR)$(mandir)/man8/udevd.8
252 @ extras="$(EXTRAS)"; for target in $$extras; do \
253 $(MAKE) -C $$target $@ || exit 1; \
254 done;
255 .PHONY: uninstall-man
256
257 install-bin:
258 $(INSTALL) -d $(DESTDIR)$(sbindir)
259 $(INSTALL_PROGRAM) udevd $(DESTDIR)$(sbindir)/udevd
260 $(INSTALL_PROGRAM) udevadm $(DESTDIR)$(sbindir)/udevadm
261 ln -f -s udevadm $(DESTDIR)$(sbindir)/udevtrigger
262 ln -f -s udevadm $(DESTDIR)$(sbindir)/udevsettle
263 ln -f -s udevadm $(DESTDIR)$(sbindir)/udevcontrol
264 $(INSTALL) -d $(DESTDIR)$(usrbindir)
265 ln -f -s $(sbindir)/udevadm $(DESTDIR)$(usrbindir)/udevinfo
266 @extras="$(EXTRAS)"; for target in $$extras; do \
267 $(MAKE) -C $$target $@ || exit 1; \
268 done;
269 ifndef DESTDIR
270 - killall udevd
271 - rm -rf /dev/.udev
272 - $(sbindir)/udevd --daemon
273 endif
274 .PHONY: install-bin
275
276 uninstall-bin:
277 - rm -f $(DESTDIR)$(sbindir)/udevd
278 - rm -f $(DESTDIR)$(sbindir)/udevadm
279 - rm -f $(DESTDIR)$(sbindir)/udevtrigger
280 - rm -f $(DESTDIR)$(sbindir)/udevsettle
281 - rm -f $(DESTDIR)$(sbindir)/udevcontrol
282 - rm -f $(DESTDIR)$(usrbindir)/udevinfo
283 ifndef DESTDIR
284 - killall udevd
285 - rm -rf /dev/.udev
286 endif
287 @extras="$(EXTRAS)"; for target in $$extras; do \
288 $(MAKE) -C $$target $@ || exit 1; \
289 done;
290 .PHONY: uninstall-bin
291
292 install: all install-bin install-config install-man
293 .PHONY: install
294
295 uninstall: uninstall-bin uninstall-man
296 .PHONY: uninstall
297
298 test tests: all
299 @ cd test && ./udev-test.pl
300 .PHONY: test tests
301
302 buildtest:
303 test/simple-build-check.sh
304 .PHONY: buildtest
305
306 ChangeLog:
307 head -1 $@ | grep -q "to v$(shell echo $$(($(VERSION) - 1)))"
308 @ mv $@ $@.tmp
309 @ echo "Summary of changes from v$(shell echo $$(($(VERSION) - 1))) to v$(VERSION)" >> $@
310 @ echo "============================================" >> $@
311 @ echo >> $@
312 @ git log --pretty=short $(shell echo $$(($(VERSION) - 1)))..HEAD | git shortlog >> $@
313 @ echo >> $@
314 @ cat $@
315 @ cat $@.tmp >> $@
316 @ rm $@.tmp
317 head -1 $@ | grep -q "to v$(VERSION)"
318 .PHONY: ChangeLog
319 .PRECIOUS: ChangeLog
320
321 release:
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
332
333 dist:
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
338 patch:
339 git diff $(shell echo $$(($(VERSION) - 1))) HEAD > udev-git-HEAD.patch
340 .PHONY: patch
341
342 gcov-all:
343 $(MAKE) clean all USE_GCOV=true
344 @ echo
345 @ echo "binaries built with gcov support."
346 @ echo "run the tests and analyze with 'make udev_gcov.txt'"
347 .PHONY: gcov-all
348
349 # see docs/README-gcov_for_udev
350 udev_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"