Add cmake macro autoheaderchecks().
authorRalf Habacker <ralf.habacker@freenet.de>
Thu, 5 Mar 2015 08:01:31 +0000 (09:01 +0100)
committerRalf Habacker <ralf.habacker@freenet.de>
Thu, 5 Mar 2015 12:52:57 +0000 (13:52 +0100)
This macro prints out any include file defined as HAVE_..._H in the config
header template and not in the related cmake configure checks file.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=85418
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
cmake/CMakeLists.txt
cmake/modules/MacrosAutotools.cmake

index 607d9b1..8c006d0 100644 (file)
@@ -17,6 +17,7 @@ endif(COMMAND cmake_policy)
 include(MacrosAutotools)
 autoinit(../configure.ac)
 autoversion(dbus)
+autoheaderchecks(../config.h.in ConfigureChecks.cmake)
 # used by file version info
 set (DBUS_PATCH_VERSION "0")
 
index a218db9..fac94a1 100644 (file)
@@ -116,6 +116,34 @@ macro(autodefine name)
     endforeach()
 endmacro()
 
+macro(autoheaderchecks config_h_in configure_checks_file)
+    file(READ ${configure_checks_file} configure_checks_file_raw)
+    file(READ ${config_h_in} _config_h_raw)
+    STRING(REGEX REPLACE ";" "\\\\;" _config_h "${_config_h_raw}")
+    STRING(REGEX REPLACE "\n" ";" _config_h "${_config_h}")
+    foreach(line ${_config_h})
+        #message(STATUS ${line})
+        if(line MATCHES ".*HAVE_.*_H.*")
+            string (REGEX REPLACE ".*HAVE_(.*)_H.*" "\\1" key ${line})
+            if(key MATCHES ".*_.*")
+                string(REGEX MATCH "^[A-Z0-9]+" dir ${key})
+                string(REGEX MATCH "[A-Z0-9]+$" file ${key})
+                string(TOLOWER ${dir} dirname)
+                string(TOLOWER ${file} filename)
+                set(check "check_include_file(${dirname}/${filename}.h     HAVE_${key}_H)")
+            else()
+                set(file ${key})
+                string(TOLOWER ${file} filename)
+                set(check "check_include_file(${filename}.h     HAVE_${key}_H)")
+            endif()
+            set(full_key "HAVE_${key}_H")
+            if(NOT configure_checks_file_raw MATCHES ".*${full_key}.*")
+                message("${check}")
+            endif()
+        endif()
+    endforeach()
+endmacro(autoheaderchecks)
+
 #
 # parses config.h template and create cmake equivalent 
 # not implemented yet