CMake/Swig updates for python wrapper
authorRichard Shaw <hobbes1069@gmail.com>
Mon, 18 Feb 2019 18:42:30 +0000 (19:42 +0100)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Mon, 18 Feb 2019 19:04:11 +0000 (20:04 +0100)
libftdi was FTBFS[1] in Fedora Rawhide after a GCC 9.0.X mass rebuild but
the problem turned out to be behavior changes[2] in CMake with regards to
SWIG[3].

The UseSWIG module in cmake 3.13+ will now use standard target names and not
generate the SWIG_MODULE_<target>_REAL_NAME variable.

Replace the deprecated swig_add_module with swig_add_library.

[Refinements from Intra2net:
- Use swig_add_library for cmake 3.8+ only
- Add cmake version guard for the new CMP0078 policy
- Use "NOT CMAKE_VERSION VERSION_LESS" construct to
  support cmake versions below 3.7.0]

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1675275
[2] https://cmake.org/cmake/help/latest/policy/CMP0078.html?highlight=cmp0078
[3] https://cmake.org/cmake/help/latest/module/UseSWIG.html

python/CMakeLists.txt

index 376dae6..494f6ff 100644 (file)
@@ -1,3 +1,9 @@
+# swig_add_library behavior changed in cmake 3.13 and SWIG_MODULE_<target>_REAL_NAME
+# is no longer set by default so set policy to the old behavior.
+if(NOT CMAKE_VERSION VERSION_LESS 3.13.0)
+  cmake_policy(SET CMP0078 OLD)
+endif ()
+
 # workaround for cmake bug #0013449
 if ( NOT DEFINED CMAKE_FIND_ROOT_PATH OR NOT CMAKE_VERSION VERSION_LESS 3.0.0 )
   find_package ( SWIG REQUIRED )
@@ -19,7 +25,11 @@ link_directories ( ${CMAKE_CURRENT_BINARY_DIR}/../src )
 if ( DOCUMENTATION )
   set(CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND})
 endif()
-swig_add_module ( ftdi1 python ftdi1.i )
+if(NOT CMAKE_VERSION VERSION_LESS 3.8.0)
+  swig_add_library ( ftdi1 LANGUAGE python SOURCES ftdi1.i )
+else ()
+  swig_add_module ( ftdi1 python ftdi1.i )
+endif()
 swig_link_libraries ( ftdi1 ftdi1 )
 
 if ( LINK_PYTHON_LIBRARY )