Browse Source

Merge topic 'FindGTK2_RunTwice'

4bc2c16b FindGTK2: Add unit test to check variables when run twice
9702b3ee FindGTK2: Fix GTK2_LIBRARIES and GTK2_TARGETS when called twice
Brad King 9 years ago
parent
commit
09cad30904

+ 40 - 42
Modules/FindGTK2.cmake

@@ -529,52 +529,54 @@ function(_GTK2_ADD_TARGET _var)
 
     cmake_parse_arguments(_${_var} "" "" "GTK2_DEPENDS;GTK2_OPTIONAL_DEPENDS;OPTIONAL_INCLUDES" ${ARGN})
 
-    if(GTK2_${_var}_FOUND AND NOT TARGET GTK2::${_basename})
-        # Do not create the target if dependencies are missing
-        foreach(_dep ${_${_var}_GTK2_DEPENDS})
-            if(NOT TARGET GTK2::${_dep})
-                return()
-            endif()
-        endforeach()
+    if(GTK2_${_var}_FOUND)
+        if(NOT TARGET GTK2::${_basename})
+            # Do not create the target if dependencies are missing
+            foreach(_dep ${_${_var}_GTK2_DEPENDS})
+                if(NOT TARGET GTK2::${_dep})
+                    return()
+                endif()
+            endforeach()
 
-        add_library(GTK2::${_basename} UNKNOWN IMPORTED)
+            add_library(GTK2::${_basename} UNKNOWN IMPORTED)
 
-        set(GTK2_TARGETS ${GTK2_TARGETS} GTK2::${_basename})
-        set(GTK2_TARGETS ${GTK2_TARGETS} PARENT_SCOPE)
+            if(GTK2_${_var}_LIBRARY_RELEASE)
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+                set_property(TARGET GTK2::${_basename}        PROPERTY IMPORTED_LOCATION_RELEASE "${GTK2_${_var}_LIBRARY_RELEASE}" )
+            endif()
 
-        if(GTK2_${_var}_LIBRARY_RELEASE)
-            set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-            set_property(TARGET GTK2::${_basename}        PROPERTY IMPORTED_LOCATION_RELEASE "${GTK2_${_var}_LIBRARY_RELEASE}" )
-        endif()
+            if(GTK2_${_var}_LIBRARY_DEBUG)
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+                set_property(TARGET GTK2::${_basename}        PROPERTY IMPORTED_LOCATION_DEBUG "${GTK2_${_var}_LIBRARY_DEBUG}" )
+            endif()
 
-        if(GTK2_${_var}_LIBRARY_DEBUG)
-            set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-            set_property(TARGET GTK2::${_basename}        PROPERTY IMPORTED_LOCATION_DEBUG "${GTK2_${_var}_LIBRARY_DEBUG}" )
-        endif()
+            if(GTK2_${_var}_INCLUDE_DIR)
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}_INCLUDE_DIR}")
+            endif()
 
-        if(GTK2_${_var}_INCLUDE_DIR)
-            set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}_INCLUDE_DIR}")
-        endif()
+            if(GTK2_${_var}CONFIG_INCLUDE_DIR AND NOT "x${GTK2_${_var}CONFIG_INCLUDE_DIR}" STREQUAL "x${GTK2_${_var}_INCLUDE_DIR}")
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}CONFIG_INCLUDE_DIR}")
+            endif()
 
-        if(GTK2_${_var}CONFIG_INCLUDE_DIR AND NOT "x${GTK2_${_var}CONFIG_INCLUDE_DIR}" STREQUAL "x${GTK2_${_var}_INCLUDE_DIR}")
-            set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}CONFIG_INCLUDE_DIR}")
-        endif()
+            if(GTK2_DEFINITIONS)
+                set_property(TARGET GTK2::${_basename} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${GTK2_DEFINITIONS}")
+            endif()
 
-        if(GTK2_DEFINITIONS)
-            set_property(TARGET GTK2::${_basename} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${GTK2_DEFINITIONS}")
-        endif()
+            if(_${_var}_GTK2_DEPENDS)
+                _GTK2_ADD_TARGET_DEPENDS(${_var} ${_${_var}_GTK2_DEPENDS} ${_${_var}_GTK2_OPTIONAL_DEPENDS})
+            endif()
 
-        if(_${_var}_GTK2_DEPENDS)
-            _GTK2_ADD_TARGET_DEPENDS(${_var} ${_${_var}_GTK2_DEPENDS} ${_${_var}_GTK2_OPTIONAL_DEPENDS})
+            if(_${_var}_OPTIONAL_INCLUDES)
+                foreach(_D ${_${_var}_OPTIONAL_INCLUDES})
+                    if(_D)
+                        _GTK2_ADD_TARGET_INCLUDE_DIRS(${_var} ${_D})
+                    endif()
+                endforeach()
+            endif()
         endif()
 
-        if(_${_var}_OPTIONAL_INCLUDES)
-            foreach(_D ${_${_var}_OPTIONAL_INCLUDES})
-                if(_D)
-                    _GTK2_ADD_TARGET_INCLUDE_DIRS(${_var} ${_D})
-                endif()
-            endforeach()
-        endif()
+        set(GTK2_TARGETS ${GTK2_TARGETS} GTK2::${_basename})
+        set(GTK2_TARGETS ${GTK2_TARGETS} PARENT_SCOPE)
 
         if(GTK2_USE_IMPORTED_TARGETS)
             set(GTK2_${_var}_LIBRARY GTK2::${_basename} PARENT_SCOPE)
@@ -735,9 +737,7 @@ foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
             if(APPLE)
                 _GTK2_FIND_LIBRARY    (GDK gdk-quartz false true)
             endif()
-            if(NOT GTK2_GDK_FOUND)
-                _GTK2_FIND_LIBRARY    (GDK gdk-x11 false true)
-            endif()
+            _GTK2_FIND_LIBRARY    (GDK gdk-x11 false true)
         else()
             _GTK2_FIND_LIBRARY    (GDK gdk-win32 false true)
         endif()
@@ -749,9 +749,7 @@ foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
             if(APPLE)
                 _GTK2_FIND_LIBRARY    (GTK gtk-quartz false true)
             endif()
-            if(NOT GTK2_GTK_FOUND)
-                _GTK2_FIND_LIBRARY    (GTK gtk-x11 false true)
-            endif()
+            _GTK2_FIND_LIBRARY    (GTK gtk-x11 false true)
         else()
             _GTK2_FIND_LIBRARY    (GTK gtk-win32 false true)
         endif()

+ 5 - 0
Tests/RunCMake/CMakeLists.txt

@@ -255,6 +255,11 @@ if(PKG_CONFIG_FOUND)
   add_RunCMake_test(FindPkgConfig)
 endif()
 
+find_package(GTK2 QUIET)
+if (GTK2_FOUND)
+  add_RunCMake_test(FindGTK2)
+endif()
+
 if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
   add_RunCMake_test(include_external_msproject)
   if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([789]|10)" AND NOT CMAKE_VS_DEVENV_COMMAND)

+ 3 - 0
Tests/RunCMake/FindGTK2/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.5)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)

+ 21 - 0
Tests/RunCMake/FindGTK2/FindGTK2RunTwice.cmake

@@ -0,0 +1,21 @@
+cmake_minimum_required(VERSION 3.7)
+project(testFindGTK2 C)
+
+# First call
+find_package(GTK2 REQUIRED)
+
+# Backup variables
+set(GTK2_LIBRARIES_BAK ${GTK2_LIBRARIES})
+set(GTK2_TARGETS_BAK ${GTK2_TARGETS})
+
+# Second call
+find_package(GTK2 REQUIRED)
+
+# Check variables
+if(NOT "${GTK2_LIBRARIES_BAK}" STREQUAL "${GTK2_LIBRARIES}")
+  message(SEND_ERROR "GTK2_LIBRARIES is different:\nbefore: ${GTK2_LIBRARIES_BAK}\nafter:  ${GTK2_LIBRARIES}")
+endif()
+
+if(NOT "${GTK2_TARGETS_BAK}" STREQUAL "${GTK2_TARGETS}")
+  message(SEND_ERROR "GTK2_TARGETS is different:\nbefore: ${GTK2_TARGETS_BAK}\nafter:  ${GTK2_TARGETS}")
+endif()

+ 3 - 0
Tests/RunCMake/FindGTK2/RunCMakeTest.cmake

@@ -0,0 +1,3 @@
+include(RunCMake)
+
+run_cmake(FindGTK2RunTwice)