# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
-VERSION = 068
+VERSION = 071
# set this to make use of syslog
USE_LOG = true
# to print the debug messages to syslog)
DEBUG = false
+# compile with gcc's code coverage option
+# (use it with DEBUG, works only with glibc)
+USE_GCOV = false
+
# include Security-Enhanced Linux support
USE_SELINUX = false
RANLIB = $(CROSS)ranlib
HOSTCC = gcc
-export CROSS CC AR STRIP RANLIB CFLAGS LDFLAGS LIB_OBJS
-
# code taken from uClibc to determine the current arch
ARCH := ${shell $(CC) -dumpmachine | sed -e s'/-.*//' -e 's/i.86/i386/' -e 's/sparc.*/sparc/' \
-e 's/arm.*/arm/g' -e 's/m68k.*/m68k/' -e 's/powerpc/ppc/g'}
STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment
endif
+ifeq ($(strip $(USE_GCOV)),true)
+ CFLAGS += -fprofile-arcs -ftest-coverage
+ LDFLAGS = -fprofile-arcs
+endif
+
# if our own version of klibc is used, we need to build it
ifeq ($(strip $(USE_KLIBC)),true)
KLIBC_INSTALL = $(PWD)/klibc/.install
ifeq ($(strip $(USE_SELINUX)),true)
UDEV_OBJS += udev_selinux.o
- LIB_OBJS += -lselinux
+ LIB_OBJS += -lselinux -lsepol
CFLAGS += -DUSE_SELINUX
endif
@extras="$(EXTRAS)"; for target in $$extras; do \
echo $$target; \
$(MAKE) prefix=$(prefix) \
+ CC="$(CC)" \
+ CFLAGS="$(CFLAGS)" \
LD="$(LD)" \
+ LDFLAGS="$(LDFLAGS)" \
+ STRIPCMD="$(STRIPCMD)" \
+ LIB_OBJS="$(LIB_OBJS)" \
LIBUDEV="$(PWD)/$(LIBUDEV)" \
LIBSYSFS="$(PWD)/$(LIBSYSFS)" \
KERNEL_DIR="$(KERNEL_DIR)" \
.SUFFIXES:
# build the objects
-%.o: %.c
+%.o: %.c $(GEN_HEADERS)
$(QUIET) $(CC) -c $(CFLAGS) $< -o $@
# "Static Pattern Rule" to build all programs
clean:
- find . \( -not -type d \) -and \( -name '*~' -o -name '*.[oas]' \) -type f -print0 | xargs -0rt rm -f
+ - find -name "*.gcno" -print0 | xargs -0rt rm -f
+ - find -name "*.gcda" -print0 | xargs -0rt rm -f
+ - find -name "*.gcov" -print0 | xargs -0rt rm -f
+ - rm -f udev_gcov.txt
- rm -f core $(PROGRAMS) $(GEN_HEADERS) $(GEN_CONFIGS)
$(MAKE) -C klibc SUBDIRS=klibc clean
@extras="$(EXTRAS)"; for target in $$extras; do \
echo "pick a udev rules file from the etc/udev directory that matches your distribution"; \
echo; \
fi
+ @extras="$(EXTRAS)"; for target in $$extras; do \
+ echo $$target; \
+ $(MAKE) prefix=$(prefix) -C $$target $@; \
+ done;
.PHONY: install-config
install-man:
$(INSTALL_DATA) -D udevsend.8 $(DESTDIR)$(mandir)/man8/udevsend.8
$(INSTALL_DATA) -D udevmonitor.8 $(DESTDIR)$(mandir)/man8/udevmonitor.8
- ln -f -s udevd.8 $(DESTDIR)$(mandir)/man8/udevcontrol.8
+ @extras="$(EXTRAS)"; for target in $$extras; do \
+ echo $$target; \
+ $(MAKE) prefix=$(prefix) -C $$target $@; \
+ done;
.PHONY: install-man
uninstall-man:
- - rm $(mandir)/man8/udev.8
- - rm $(mandir)/man8/udevinfo.8
- - rm $(mandir)/man8/udevtest.8
- - rm $(mandir)/man8/udevstart.8
- - rm $(mandir)/man8/udevd.8
- - rm $(mandir)/man8/udevmonitor.8
- - rm $(mandir)/man8/udevsend.8
- - rm $(mandir)/man8/udevcontrol.8
+ - rm -f $(mandir)/man8/udev.8
+ - rm -f $(mandir)/man8/udevinfo.8
+ - rm -f $(mandir)/man8/udevtest.8
+ - rm -f $(mandir)/man8/udevstart.8
+ - rm -f $(mandir)/man8/udevd.8
+ - rm -f $(mandir)/man8/udevmonitor.8
+ - rm -f $(mandir)/man8/udevsend.8
+ - rm -f $(mandir)/man8/udevcontrol.8
+ @extras="$(EXTRAS)"; for target in $$extras; do \
+ echo $$target; \
+ $(MAKE) prefix=$(prefix) -C $$target $@; \
+ done;
.PHONY: uninstall-man
install-bin:
$(INSTALL_PROGRAM) -D udevinfo $(DESTDIR)$(usrbindir)/udevinfo
$(INSTALL_PROGRAM) -D udevtest $(DESTDIR)$(usrbindir)/udevtest
$(INSTALL_PROGRAM) -D udevstart $(DESTDIR)$(sbindir)/udevstart
+ @extras="$(EXTRAS)"; for target in $$extras; do \
+ echo $$target; \
+ $(MAKE) prefix=$(prefix) -C $$target $@; \
+ done;
ifndef DESTDIR
- killall udevd
- rm -rf $(udevdb)
- $(sbindir)/udevd --daemon
endif
- @extras="$(EXTRAS)"; for target in $$extras; do \
- echo $$target; \
- $(MAKE) prefix=$(prefix) -C $$target $@; \
- done;
.PHONY: install-bin
uninstall-bin:
- - rm $(sbindir)/udev
- - rm $(sbindir)/udevd
- - rm $(sbindir)/udevsend
- - rm $(sbindir)/udevinitsend
- - rm $(sbindir)/udeveventrecoreder
- - rm $(sbindir)/udevcontrol
- - rm $(sbindir)/udevstart
- - rm $(usrsbindir)/udevmonitor
- - rm $(usrbindir)/udevinfo
- - rm $(usrbindir)/udevtest
+ - rm -f $(sbindir)/udev
+ - rm -f $(sbindir)/udevd
+ - rm -f $(sbindir)/udevsend
+ - rm -f $(sbindir)/udevinitsend
+ - rm -f $(sbindir)/udeveventrecoreder
+ - rm -f $(sbindir)/udevcontrol
+ - rm -f $(sbindir)/udevstart
+ - rm -f $(usrsbindir)/udevmonitor
+ - rm -f $(usrbindir)/udevinfo
+ - rm -f $(usrbindir)/udevtest
- rm -rf $(udevdb)
- killall udevd
@extras="$(EXTRAS)"; for target in $$extras; do \
buildtest:
./test/simple-build-check.sh
+.PHONY: buildtest
+
+gcov-all:
+ $(MAKE) clean all DEBUG=true USE_GCOV=true
+ @echo
+ @echo "binaries built with gcov support."
+ @echo "run the tests and analyze with 'make udev_gcov.txt'"
+.PHONY: gcov-all
+
+# see docs/README-gcov_for_udev
+udev_gcov.txt: $(wildcard *.gcda) $(wildcard *.gcno)
+ for file in `find -maxdepth 1 -name "*.gcno"`; do \
+ name=`basename $$file .gcno`; \
+ echo "################" >> $@; \
+ echo "$$name.c" >> $@; \
+ echo "################" >> $@; \
+ if [ -e "$$name.gcda" ]; then \
+ gcov -l "$$name.c" >> $@ 2>&1; \
+ else \
+ echo "code for $$name.c was never executed" >> $@ 2>&1; \
+ fi; \
+ echo >> $@; \
+ done; \
+ echo "view $@ for the result"