Browse Source

FindDevIL: add imported targets and tests

Fixes: #21900
Alex 4 years ago
parent
commit
73b27f6ae8

+ 4 - 0
Help/release/dev/FindDevIL-imported-targets.rst

@@ -0,0 +1,4 @@
+FindDevIL
+---------
+
+* The :module:`FindDevIL` module now provides imported targets.

+ 57 - 0
Modules/FindDevIL.cmake

@@ -10,6 +10,25 @@ FindDevIL
 This module locates the developer's image library.
 http://openil.sourceforge.net/
 
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.21
+
+This module defines the :prop_tgt:`IMPORTED` targets:
+
+``DevIL::IL``
+ Defined if the system has DevIL.
+
+``DevIL::ILU``
+ Defined if the system has DevIL Utilities.
+
+``DevIL::ILUT``
+ Defined if the system has DevIL Utility Toolkit.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
 This module sets:
 
 ``IL_LIBRARIES``
@@ -37,6 +56,11 @@ This module sets:
   even if they are not needed. In most systems, if one
   library is found all the others are as well. That's the
   way the DevIL developers release it.
+
+``DevIL_ILUT_FOUND``
+  .. versionadded:: 3.21
+
+  This is set to TRUE if the ILUT library is found.
 #]=======================================================================]
 
 # TODO: Add version support.
@@ -80,3 +104,36 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(DevIL DEFAULT_MSG
                                   IL_INCLUDE_DIR)
 # provide legacy variable for compatibility
 set(IL_FOUND ${DevIL_FOUND})
+
+# create imported targets ONLY if we found DevIL.
+if(DevIL_FOUND)
+  # Report the ILUT found if ILUT_LIBRARIES contains valid path.
+  if (ILUT_LIBRARIES)
+    set(DevIL_ILUT_FOUND TRUE)
+  else()
+    set(DevIL_ILUT_FOUND FALSE)
+  endif()
+
+  if(NOT TARGET DevIL::IL)
+    add_library(DevIL::IL UNKNOWN IMPORTED)
+    set_target_properties(DevIL::IL PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${IL_INCLUDE_DIR}"
+      IMPORTED_LOCATION "${IL_LIBRARIES}")
+  endif()
+
+  # DevIL Utilities target
+  if(NOT TARGET DevIL::ILU)
+    add_library(DevIL::ILU UNKNOWN IMPORTED)
+    set_target_properties(DevIL::ILU PROPERTIES
+      IMPORTED_LOCATION "${ILU_LIBRARIES}")
+    target_link_libraries(DevIL::ILU INTERFACE DevIL::IL)
+  endif()
+
+  # ILUT (if found)
+  if(NOT TARGET DevIL::ILUT AND DevIL_ILUT_FOUND)
+    add_library(DevIL::ILUT UNKNOWN IMPORTED)
+    set_target_properties(DevIL::ILUT PROPERTIES
+      IMPORTED_LOCATION "${ILUT_LIBRARIES}")
+    target_link_libraries(DevIL::ILUT INTERFACE DevIL::ILU)
+  endif()
+endif()

+ 1 - 0
Tests/CMakeLists.txt

@@ -1424,6 +1424,7 @@ if(BUILD_TESTING)
             CURL
             Cups
             Doxygen
+            DevIL
             EnvModules
             EXPAT
             Fontconfig

+ 10 - 0
Tests/FindDevIL/CMakeLists.txt

@@ -0,0 +1,10 @@
+add_test(NAME FindDevIL.Test COMMAND
+  ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
+  --build-and-test
+  "${CMake_SOURCE_DIR}/Tests/FindDevIL/Test"
+  "${CMake_BINARY_DIR}/Tests/FindDevIL/Test"
+  ${build_generator_args}
+  --build-project TestFindDevIL
+  --build-options ${build_options}
+  --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
+  )

+ 29 - 0
Tests/FindDevIL/Test/CMakeLists.txt

@@ -0,0 +1,29 @@
+cmake_minimum_required(VERSION 3.1)
+project(TestFindDevIL C)
+include(CTest)
+
+find_package(DevIL)
+
+#FIXME: check version too.
+# add_definitions(
+#  -DCMAKE_EXPECTED_SDL_VERSION_MAJOR=${SDL_VERSION_MAJOR}
+#  -DCMAKE_EXPECTED_SDL_VERSION_MINOR=${SDL_VERSION_MINOR}
+#  -DCMAKE_EXPECTED_SDL_VERSION_PATCH=${SDL_VERSION_PATCH})
+
+add_executable(test_devil_var main.c)
+target_include_directories(test_devil_var PRIVATE ${IL_INCLUDE_DIRS})
+target_link_libraries(test_devil_var PRIVATE ${IL_LIBRARIES})
+add_test(NAME test_devil_var COMMAND test_devil_var)
+
+add_executable(test_devil_il_tgt main.c)
+target_link_libraries(test_devil_il_tgt DevIL::IL)
+add_test(NAME test_devil_il_tgt COMMAND test_devil_il_tgt)
+
+add_executable(test_devil_ilu_tgt main_ilu.c)
+target_link_libraries(test_devil_ilu_tgt DevIL::ILU)
+
+add_executable(test_devil_ilu_var main_ilu.c)
+target_include_directories(test_devil_ilu_var PRIVATE ${IL_INCLUDE_DIRS} ${ILU_INCLUDE_DIRS})
+target_link_libraries(test_devil_ilu_var ${IL_LIBRARIES} ${ILU_LIBRARIES})
+
+#FIXME: Check DevIL::ILUT target

+ 10 - 0
Tests/FindDevIL/Test/main.c

@@ -0,0 +1,10 @@
+#include <IL/il.h>
+
+int main()
+{
+  // Test 1 requires to link to the library.
+  ilInit();
+
+  ilShutDown();
+  return 0;
+}

+ 8 - 0
Tests/FindDevIL/Test/main_ilu.c

@@ -0,0 +1,8 @@
+#include <IL/ilu.h>
+
+int main()
+{
+  // IL Utilities requires only initialization.
+  // Unlike main DevIL there are no shutdown function.
+  iluInit();
+}