Allowing to override configuration variables for feature checks. Also adding automated test and documentation.
Signed-off-by: Jiri Olsa <jo...@kernel.org> Cc: Arnaldo Carvalho de Melo <a...@redhat.com> Cc: Corey Ashford <cjash...@linux.vnet.ibm.com> Cc: David Ahern <david.ah...@oracle.com> Cc: Ingo Molnar <mi...@kernel.org> Cc: Namhyung Kim <namhy...@kernel.org> Cc: Paul Mackerras <pau...@samba.org> Cc: Peter Zijlstra <pet...@infradead.org> --- tools/build/Documentation/Feature.txt | 93 +++++++++++++++++++++++++++++++ tools/build/Makefile.feature | 4 +- tools/build/tests/features/Makefile | 23 ++++++++ tools/build/tests/features/Makefile.test1 | 16 ++++++ tools/build/tests/run.sh | 4 +- 5 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 tools/build/Documentation/Feature.txt create mode 100644 tools/build/tests/features/Makefile create mode 100644 tools/build/tests/features/Makefile.test1 diff --git a/tools/build/Documentation/Feature.txt b/tools/build/Documentation/Feature.txt new file mode 100644 index 000000000000..0c75419ba803 --- /dev/null +++ b/tools/build/Documentation/Feature.txt @@ -0,0 +1,93 @@ +Feature Framework +================= +The 'feature' framework provides information for makefiles about +installed libraries and interfaces in the system. + +The 'feature' is represented by its name and simple source located +in 'tools/build/feature/test-$(name).c' file. The framework builds +each such source for configured feature and sets $(feature-$(name)) +variable to 0 or 1 if it fails or succeeds to build respectively. + +The current usage example of the feature framework is: + +--- Makefile.test + FEATURE_TESTS := glibc backtrace + FEATURE_DISPLAY := glibc + + srctree := ../../../.. + include $(srctree)/tools/build/Makefile.feature + + ifndef feature-glibc + $(error FAILED feature-glibc variable not defined) + endif + + ifndef feature-backtrace + $(error FAILED feature-backtrace variable not defined) + endif +--- + +User defines list of features to check in FEATURE_TESTS variable: + + FEATURE_TESTS := glibc backtrace + +and list of features she wishes to display in FEATURE_DISPLAY variable: + + FEATURE_DISPLAY := glibc + +then user includes Makefile.feature makefile: + + include $(srctree)/tools/build/Makefile.feature + +following output is displayed on processing of the makefile: + + $ make -f Makefile.test + + Auto-detecting system features: + ... glibc: [ on ] + +Plus following variables are defined indicating the +requested feature status: + + $(feature-glibc) + $(feature-backtrace) + +Following features are currently available for FEATURE_TESTS: + + backtrace + dwarf + fortify-source + sync-compare-and-swap + glibc + gtk2 + gtk2-infobar + libaudit + libbfd + libelf + libelf-getphdrnum + libelf-mmap + libnuma + libperl + libpython + libpython-version + libslang + libunwind + pthread-attr-setaffinity-np + stackprotector-all + timerfd + libdw-dwarf-unwind + libbabeltrace + zlib + +It's also possible to pass options for checks compilation and linking +by using following variables: + + FEATURE_CHECK_CFLAGS-$(name) + FEATURE_CHECK_LDFLAGS-$(name) + +where $(anem) represents feature name from above list. + +For example following settings will provide options for 'libunwind' +feature compilation and linking: + + FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS) + FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature index 3249fad27993..5b712ed7e4c7 100644 --- a/tools/build/Makefile.feature +++ b/tools/build/Makefile.feature @@ -27,7 +27,7 @@ endef # the rule that uses them - an example for that is the 'bionic' # feature check. ] # -FEATURE_TESTS = \ +FEATURE_TESTS ?= \ backtrace \ dwarf \ fortify-source \ @@ -53,7 +53,7 @@ FEATURE_TESTS = \ libbabeltrace \ zlib -FEATURE_DISPLAY = \ +FEATURE_DISPLAY ?= \ dwarf \ glibc \ gtk2 \ diff --git a/tools/build/tests/features/Makefile b/tools/build/tests/features/Makefile new file mode 100644 index 000000000000..31782a1d3758 --- /dev/null +++ b/tools/build/tests/features/Makefile @@ -0,0 +1,23 @@ +all: test1 + +test1: + rm -f FEATURE-DUMP + make -f Makefile.test1 > out + # we should get one line with 'glibc' feature status + features=`cat out | grep '\.\.\.' | wc -l`; \ + if [ "$$features" != "1" ]; then echo FAILED; exit 1; fi + # we should NOT get any feature status line on second run + make -f Makefile.test1 > out + features=`cat out | grep '\.\.\.' | wc -l`; \ + if [ "$$features" == "1" ]; then echo FAILED; exit 1; fi + # we should get both 'glibc' and 'backtrace' status lines now + make -f Makefile.test1 VF=1 > out + features=`cat out | grep '\.\.\.' | wc -l`; \ + if [ "$$features" != "2" ]; then echo FAILED; exit 1; fi + # and fresh start without FEATURE-DUMP, expecting 'glibc' status line + rm -f FEATURE-DUMP + make -f Makefile.test1 > out + features=`cat out | grep '\.\.\.' | wc -l`; \ + if [ "$$features" != "1" ]; then echo FAILED; exit 1; fi + # cleanup + rm -f FEATURE-DUMP out diff --git a/tools/build/tests/features/Makefile.test1 b/tools/build/tests/features/Makefile.test1 new file mode 100644 index 000000000000..101b78f777c1 --- /dev/null +++ b/tools/build/tests/features/Makefile.test1 @@ -0,0 +1,16 @@ + +FEATURE_TESTS := glibc backtrace +FEATURE_DISPLAY := glibc + +srctree := ../../../.. +include $(srctree)/tools/build/Makefile.feature + +ifndef feature-glibc + $(error FAILED feature-glibc variable not defined) +endif + +ifndef feature-backtrace + $(error FAILED feature-backtrace variable not defined) +endif + +all: diff --git a/tools/build/tests/run.sh b/tools/build/tests/run.sh index 5494f8ea7567..bd6dc8ee1830 100755 --- a/tools/build/tests/run.sh +++ b/tools/build/tests/run.sh @@ -39,4 +39,6 @@ echo -n Testing.. test_ex test_ex_suffix -echo OK +cd features && make -s -f Makefile + +if [ $? -eq 0 ]; then echo OK; fi -- 1.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/