diff --git a/autotests/headers/headers_test.sh b/autotests/headers/headers_test.sh index 9a8fbc5c..fc65a42f 100755 --- a/autotests/headers/headers_test.sh +++ b/autotests/headers/headers_test.sh @@ -1,119 +1,122 @@ #!/bin/sh # # Generates a full project for a HeadersTest app. # This is a compile-time test checking if all the installed headers can be included individually. # # Example for KDb: # % ./headers_test.sh ~/kde/build/kdb ~/kde/src/kdb KDb kdb . # # It is assumed that this script is executed from the current build subdirectory. # Source dir goes to the app/ subdirectory, build dir goes to the app-build subdirectory. # Nothing is cached, both dirs are fully recreated on each run. set -e builddir="$1" current_builddir="`pwd`" shift srcdir="$1" if [ ! -d "$builddir" -o ! -d "$srcdir" -o $# -lt 4 ] ; then echo "Usage: $me ..." exit 1 fi test_app_dir="$current_builddir/app" rm -rf "$test_app_dir" mkdir -p "$test_app_dir" test_app_builddir="$current_builddir/app-build" rm -rf "$test_app_builddir" mkdir -p "$test_app_builddir" me=headers_test.sh current_srcdir="`dirname \"$0\"`" shift link_libs="$1" shift prefix="$1" shift cd "$srcdir" cat < "$test_app_dir/CMakeLists.txt" # Generated by $current_srcdir/$me # prefix: $prefix # link_libs: $link_libs # subdirs: $@ # # WARNING! All changes made in this file will be lost! # # Test if all the installed headers can be included individually. # This is a compile-time test. cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) find_package(ECM 1.8.0 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH "$current_srcdir" "$srcdir/cmake/modules" \${ECM_MODULE_PATH} \${ECM_KDE_MODULE_DIR}) project(HeadersTest) include(HeadersTestInclude NO_POLICY_SCOPE) add_executable( HeadersTest HeadersTest.cpp EOT cat < "$test_app_dir/HeadersTest.cpp" // Generated by $me // WARNING! All changes made in this file will be lost! // Nothing to do here int main(int, char**) { return 0; } EOT -# files to include using , forward headers + some *.h headers -find_files() +manifest=$builddir/install_manifest.txt + +find_headers() { - for subdir in "$@" ; do - find "$builddir/src/$subdir" -maxdepth 1 -type f -printf "%f\n" + for f in $(grep -E "/include/.*/[[:alpha:]]+\.h$" "$manifest") ; do + basename $f done } -for f in `find_files $@ | grep -v "\.h\$" | grep -vE "(\\.|Makefile)" | sort`; do - fname=${f}_HeaderTest.cpp - echo "#include <$f>" > $test_app_dir/$fname - echo " $fname" >> $test_app_dir/CMakeLists.txt -done +find_forwarding_headers() +{ + for f in $(grep -E "/include/.*/[[:alpha:]]+$" "$manifest") ; do + if grep -Eq "^#include \"[[:alpha:]]+\.h\"$" $f ; then + basename $f + fi + done +} -# files to include using , these are .h files -for f in `find_files $@ | grep "\.h\$" | grep -vE "(^ui_.*\.h|sqlparser\.h)" | sort`; do +for f in $(find_forwarding_headers; find_headers | sort); do fname=${f}_HeaderTest.cpp echo "#include <$f>" > $test_app_dir/$fname echo " $fname" >> $test_app_dir/CMakeLists.txt done cat <> "$test_app_dir/CMakeLists.txt" ) target_link_libraries(HeadersTest PUBLIC $link_libs ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) EOT # Finally, build: cd "$test_app_builddir" CXXCOMPILER=`cmake -LA ../../.. | grep CMAKE_CXX_COMPILER || true` if [ -n "$CXXCOMPILER" ] ; then CXXCOMPILER=-D$CXXCOMPILER ; fi CCOMPILER=`cmake -LA ../../.. | grep CMAKE_C_COMPILER || true` if [ -n "$CCOMPILER" ] ; then CCOMPILER=-D$CCOMPILER ; fi echo cmake $CXXCOMPILER $CCOMPILER ../app cmake $CXXCOMPILER $CCOMPILER ../app make