chiark / gitweb /
fic gcov use and move it into the Makefile
authorKay Sievers <kay.sievers@suse.de>
Mon, 12 Sep 2005 13:26:33 +0000 (15:26 +0200)
committerKay Sievers <kay.sievers@suse.de>
Mon, 12 Sep 2005 13:26:33 +0000 (15:26 +0200)
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
Makefile
docs/README-gcov_for_udev [moved from README-gcov_for_udev with 70% similarity]
make_gcov.sh [deleted file]
run_gcov.sh [deleted file]

index 773041b02fdea0147df29856ee03a81fe0a1797f..2017e7be3bf627bc3c2a16d60609db372d8fd301 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -27,6 +27,10 @@ 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
 
@@ -186,6 +190,11 @@ else
        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
@@ -291,6 +300,10 @@ ccdv: ccdv.c
 
 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 \
@@ -397,4 +410,28 @@ test tests: all
 
 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"
 
similarity index 70%
rename from README-gcov_for_udev
rename to docs/README-gcov_for_udev
index ca832803a28efe4ba192fb1117cf8af72b82b570..c223dc38e887b80a952a632b230af1ff916a088e 100644 (file)
@@ -2,6 +2,8 @@
 
 Using GCC's code coverage tool, gcov, with udev
 
+Leann Ogasawara <ogasawara@osdl.org>, April 2004
+
 ################################################
 
 For more information on using gcov please see:
@@ -13,14 +15,11 @@ Note that this was developed with udev version 024.
 
 - Make sure you've installed udev and that it is working properly.
   If you are having problems, refer to the README and HOWTO-udev_for_dev
-  documents in udev tarball.  I've also compiled a udev_for_dev
-  toubleshooting document for Red Hat which can be found in:
-
-  docs/rh_udev_for_dev.txt
+  documents in udev tarball.
 
 - execute make_gcov.sh from udev top level directory
 
-    ./make_gcov.sh
+    make gcov-all
 
   This will compile udev with gcov support.  Basically make_gcov.sh will
   run make but override the CFLAGS.  It strips any optimization from
@@ -28,21 +27,9 @@ Note that this was developed with udev version 024.
   also add the -fprofile-arcs and -ftest-coverage options which are the
   necessary flags needed to use gcov.
 
-  make_gcov.sh will assume the same default parameters as the regular
-  make but also accepts the same parameters.  For example if you want
-  to get code coverage analysis for udev with the DEBUG flag turned
-  on, you would just execute:
-
-    ./make_gcov.sh DEBUG=true
-
-  There is one exception, gcov will not work with klibc as it does not
-  compile cleanly with the -fprofile-arcs and -ftest-coverage flags.
-  With this said it is pretty much useless to set the KERNEL_DIR flag
-  when using make_gcov.sh as well.
-
-  Don't be alarmed if you look into your udev directory and see that it
-  has been polluted with a bunch of *.bb, *.bbg, *.da, and *.gcov files.
-  gcov creates and uses these files to extract the code coverage info.
+  If you look into your udev directory and see that it has been polluted with
+  a bunch of *.gcno, *.gcda and *.gcov files. gcov creates and uses these files
+  to extract the code coverage info.
 
 - After running make_gcov.sh you need to install udev again.  So basically,
 
@@ -58,7 +45,7 @@ Note that this was developed with udev version 024.
   level directory.  You need to be root to do this.
 
     su to root
-    ./run_gcov.sh
+    make udev_gcov.txt
 
 - This creates udev_gcov.txt in the udev top level directory which holds all
   the code coverage information. To see an example of the code coverage info
@@ -95,14 +82,9 @@ Note that this was developed with udev version 024.
   was never hit during execution.
 
 - Once you are done with using gcov for udev and want to return to your
-  normal use of udev.  Simply,
-
-    ./make_gcov.sh clean
+  normal use of udev, run a regular 'make clean' on your udev directory.
+  Then just run a regular make and make install and you are back to normal:
 
-  This will clean out all the *.bb, *.bbg, *.da, *.gcov files produced by gcov.
-  It will also run a regular make clean on your udev directory.  Then just run
-  a regular make and make install and you are back to normal:
-
-    make
+    make clean all
     su to root
-    make isntall
+    make install
diff --git a/make_gcov.sh b/make_gcov.sh
deleted file mode 100644 (file)
index e3ceb96..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-#
-# gcov capability for udev
-#
-# Provides code coverage analysis for udev.
-#
-# make_gcov.sh assumes the same same default parameters as make, but also
-# accepts the same parameters as make (see README file in udev/ for
-# parameter info).  There is one exception, klibc can not be used with
-# gcov as it will not compile cleanly.
-#
-# make_gcov.sh then overrides CFLAGS to strip out optimization in order
-# for gcov to get correct code coverage analysis.
-#
-# Leann Ogasawara <ogasawara@osdl.org>, April 2004
-
-# clean up udev dir
-clean_udev () {
-       find -name "*.gcno" -exec rm -f "{}" \;
-       find -name "*.gcda" -exec rm -f "{}" \;
-       find -name "*.gcov" -exec rm -f "{}" \;
-       rm -f udev_gcov.txt
-       make clean
-}
-
-PWD=`pwd`
-GCCINCDIR=`gcc -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp"`
-LIBSYSFS="-I$PWD/libsysfs/sysfs -I$PWD/libsysfs"
-WARNINGS="-Wall -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations"
-GCC="-I$GCCINCDIR"
-USE_LOG="-DUSE_LOG"
-DEBUG="-D_GNU_SOURCE"
-GCOV_FLAGS="-pipe -fprofile-arcs -ftest-coverage"
-
-for i in $*; do
-       pre=`echo $i | sed 's/=.*//g'`
-       post=`echo $i | sed 's/.*=//g'`
-       if [ $pre = "USE_KLIBC" ] && [ $post = "true" ]; then
-               echo "cannot use gcov with klibc, will not compile"
-               exit
-       elif [ $pre = "USE_LOG" ] && [ $post = "false" ]; then
-               USE_LOG=""
-       elif [ $pre = "DEBUG" ] && [ $post = "true" ]; then
-               DEBUG="-g -DDEBUG -D_GNU_SOURCE"
-       elif [ $pre = "clean" ]; then
-               clean_udev
-               exit
-       fi
-done
-
-clean_udev
-
-make $* CFLAGS="$WARNINGS $GCOV_FLAGS $USE_LOG $DEBUG $GCC $LIBSYSFS" LDFLAGS="-Wl,-warn-common -fprofile-arcs"
diff --git a/run_gcov.sh b/run_gcov.sh
deleted file mode 100644 (file)
index ad6a62b..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh
-
-#
-# run gcov on udev
-#
-# Generate code coverage analysis for udev files
-#
-# This requires that you compiled udev with gcov flags i.e.
-# you should have compiled udev with the make_gcov.sh script.
-#
-# Leann Ogasawara <ogasawara@osdl.org>, April 2004
-
-PWD=`pwd`
-
-# check if root else may not have access to *.da files
-# and gcov analysis will fail.
-if [ $(id -u) -ne 0 ]; then
-       echo "please become root before executing run_gcov.sh"
-       exit 1
-fi
-
-echo > udev_gcov.txt
-echo "CODE COVERAGE ANALYSIS FOR UDEV" >> udev_gcov.txt
-echo  >> udev_gcov.txt
-
-for file in `find -maxdepth 1 -name "*.gcno"`; do
-       name=`basename $file .gcno`
-       echo "################" >> udev_gcov.txt
-       echo "$name.c" >> udev_gcov.txt
-       echo "################" >> udev_gcov.txt
-       if [ -e "$name.gcda" ]; then
-               gcov -l "$name.c" >> udev_gcov.txt 2>&1
-       else
-               echo "code for $name.c was never executed" >> udev_gcov.txt 2>&1
-               echo "no code coverage analysis to be done" >> udev_gcov.txt 2>&1
-       fi
-       echo >> udev_gcov.txt
-done
-
-echo "udev gcov analysis done.  View udev_gcov.txt for results."