cmake: Build python2 and python3 modules if possible
authorAndreas Schneider <asn@samba.org>
Mon, 12 Feb 2018 11:01:22 +0000 (12:01 +0100)
committerAndreas Schneider <asn@samba.org>
Tue, 13 Feb 2018 07:56:01 +0000 (08:56 +0100)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
CMakeLists.txt
src/CMakeLists.txt
src/python/CMakeLists.txt
src/python/python2/CMakeLists.txt [new file with mode: 0644]
src/python/python3/CMakeLists.txt [new file with mode: 0644]
tests/CMakeLists.txt
tests/pypamtest_test.py

index f03a1378dde01ece81101b5ab4cd10304dd4bce7..af00610014c8a33fec4412f20aa6a06061b4c8cd 100644 (file)
@@ -46,11 +46,6 @@ macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source buil
 set(CMAKE_THREAD_PREFER_PTHREADS ON)
 find_package(Threads)
 
-find_package(PythonInterp)
-set(Python_ADDITIONAL_VERSIONS 2.6 2.7 3.3 3.4 3.6)
-find_package(PythonLibs)
-find_package(PythonSiteLibs)
-
 # config.h checks
 include(ConfigureChecks.cmake)
 configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
index 76a87d679b88e589da55280a2a47f819785e5ec5..e3a1efd5e91fb8cb8d5c73de6d87493e0fb353f8 100644 (file)
@@ -69,9 +69,7 @@ install(TARGETS pamtest
     ARCHIVE DESTINATION ${LIB_INSTALL_DIR})
 
 add_subdirectory(modules)
-if (PYTHONLIBS_FOUND)
-    add_subdirectory(python)
-endif()
+add_subdirectory(python)
 
 # This needs to be at the end
 set(PAM_WRAPPER_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}pam_wrapper${CMAKE_SHARED_LIBRARY_SUFFIX}" PARENT_SCOPE)
index cbee2a6882d18769dd9cc0412c9c5b20914ca3e4..3394a84f952d018ff0ceb0e334d86a040641da83 100644 (file)
@@ -1,15 +1,4 @@
 project(pypamtest C)
 
-include_directories(${CMAKE_BINARY_DIR})
-include_directories(${pam_wrapper-headers_DIR})
-include_directories(${PYTHON_INCLUDE_DIR})
-
-python_add_module(pypamtest pypamtest.c)
-target_link_libraries(pypamtest pamtest ${PYTHON_LIBRARY})
-
-install(
-    TARGETS
-        pypamtest
-    DESTINATION
-        ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}
-)
+add_subdirectory(python2)
+add_subdirectory(python3)
diff --git a/src/python/python2/CMakeLists.txt b/src/python/python2/CMakeLists.txt
new file mode 100644 (file)
index 0000000..faceec3
--- /dev/null
@@ -0,0 +1,33 @@
+project(python2-pamtest C)
+
+unset(PYTHON_EXECUTABLE CACHE)
+unset(PYTHON_INCLUDE_DIR CACHE)
+unset(PYTHON_LIBRARY CACHE)
+unset(PYTHON_SITELIB CACHE)
+unset(PYTHONLIBS_FOUND CACHE)
+unset(PYTHONLIBS_VERSION_STRING CACHE)
+
+set(Python_ADDITIONAL_VERSIONS 2.7 2.6)
+find_package(PythonLibs)
+find_package(PythonInterp)
+find_package(PythonSiteLibs)
+
+if (PYTHONLIBS_FOUND)
+    set(PYTHON2_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "PYTHON2_EXECUTABLE")
+    set(PYTHON2_INCLUDE_DIR ${PYTHON_INCLUDE_DIR})
+    set(PYTHON2_LIBRARY ${PYTHON_LIBRARY})
+    set(PYTHON2_SITELIB ${PYTHON_SITELIB})
+
+    include_directories(${CMAKE_BINARY_DIR})
+    include_directories(${pam_wrapper-headers_DIR})
+    include_directories(${PYTHON2_INCLUDE_DIR})
+
+    python_add_module(python2-pamtest ${pypamtest_SOURCE_DIR}/pypamtest.c)
+    target_link_libraries(python2-pamtest pamtest ${PYTHON2_LIBRARY})
+    set_target_properties(python2-pamtest PROPERTIES OUTPUT_NAME "pypamtest")
+
+    install(TARGETS
+                python2-pamtest
+            DESTINATION
+                ${CMAKE_INSTALL_PREFIX}/${PYTHON2_SITELIB})
+endif()
diff --git a/src/python/python3/CMakeLists.txt b/src/python/python3/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1e1599b
--- /dev/null
@@ -0,0 +1,33 @@
+project(python3-pamtest C)
+
+unset(PYTHON_EXECUTABLE CACHE)
+unset(PYTHON_INCLUDE_DIR CACHE)
+unset(PYTHON_LIBRARY CACHE)
+unset(PYTHON_SITELIB CACHE)
+unset(PYTHONLIBS_FOUND CACHE)
+unset(PYTHONLIBS_VERSION_STRING CACHE)
+
+set(Python_ADDITIONAL_VERSIONS 3.8 3.7 3.6)
+find_package(PythonLibs)
+find_package(PythonInterp)
+find_package(PythonSiteLibs)
+
+if (PYTHONLIBS_FOUND)
+    set(PYTHON3_LIBRARY ${PYTHON_LIBRARY})
+    set(PYTHON3_INCLUDE_DIR ${PYTHON_INCLUDE_DIR})
+    set(PYTHON3_SITELIB ${PYTHON_SITELIB})
+    set(PYTHON3_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "PYTHON3_EXECUTABLE")
+
+    include_directories(${CMAKE_BINARY_DIR})
+    include_directories(${pam_wrapper-headers_DIR})
+    include_directories(${PYTHON3_INCLUDE_DIR})
+
+    python_add_module(python3-pamtest ${pypamtest_SOURCE_DIR}/pypamtest.c)
+    target_link_libraries(python3-pamtest pamtest ${PYTHON3_LIBRARY})
+    set_target_properties(python3-pamtest PROPERTIES OUTPUT_NAME "pypamtest")
+
+    install(TARGETS
+                python3-pamtest
+            DESTINATION
+                ${CMAKE_INSTALL_PREFIX}/${PYTHON3_SITELIB})
+endif()
index 30f0eb2db9203578d8be76d8d9750ae7e1b6f161..997c15e98c136551472935bc669c5aad15591219 100644 (file)
@@ -47,11 +47,26 @@ set_property(
     PROPERTY
         ENVIRONMENT ${TEST_ENVIRONMENT})
 
-if (PYTHONLIBS_FOUND)
-    add_test(pypamtest_test ${CMAKE_CURRENT_SOURCE_DIR}/pypamtest_test.py)
-    set_property(
-        TEST
-            pypamtest_test
-        PROPERTY
-            ENVIRONMENT ${TEST_ENVIRONMENT})
+if (PYTHON2_EXECUTABLE)
+    add_test(NAME
+                py2pamtest_test
+             COMMAND
+                ${PYTHON2_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/pypamtest_test.py)
+
+    set_property(TEST
+                    py2pamtest_test
+                 PROPERTY
+                    ENVIRONMENT ${TEST_ENVIRONMENT})
+endif()
+
+if (PYTHON3_EXECUTABLE)
+    add_test(NAME
+                py3pamtest_test
+             COMMAND
+                ${PYTHON3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/pypamtest_test.py)
+
+    set_property(TEST
+                    py3pamtest_test
+                 PROPERTY
+                    ENVIRONMENT ${TEST_ENVIRONMENT})
 endif()
index 2c74c0b25c413c326581333c9a77ce0bb5d808d0..32ef65dea9b617e2dfa26651c2508c44c6d803cc 100755 (executable)
@@ -16,7 +16,10 @@ class PyPamTestCase(unittest.TestCase):
 class PyPamTestImport(unittest.TestCase):
     def setUp(self):
         " Make sure we load the in-tree module "
-        self.modpath = os.path.join(os.getcwd(), "../src/python")
+        if sys.hexversion >= 0x3000000:
+            self.modpath = os.path.join(os.getcwd(), "../src/python/python3")
+        else:
+            self.modpath = os.path.join(os.getcwd(), "../src/python/python2")
         self.system_path = sys.path[:]
         sys.path = [ self.modpath ]