python2_and_python3
authorDebian Science Maintainers <debian-science-maintainers@lists.alioth.debian.org>
Wed, 2 Oct 2019 18:23:33 +0000 (19:23 +0100)
committerAlastair McKinstry <mckinstry@debian.org>
Wed, 2 Oct 2019 18:23:33 +0000 (19:23 +0100)
Provide support for both python2 and python3 interfaces

Gbp-Pq: Name python2_and_python3.patch

CMakeLists.txt
lang/CMakeLists.txt
lang/numpy.i
lang/python2/CMakeLists.txt [new file with mode: 0644]
lang/python3/CMakeLists.txt [new file with mode: 0644]

index 52b41b0e98b470b885564054ba4e49bef7ff5c49..c207f220fff8bf7900b4ec800e47274846ad99dd 100644 (file)
@@ -6,6 +6,10 @@ set(mgl_clean_files )
 set(MGL_DEP_LIBS)
 add_definitions(-DMGL_SRC)
 
+# Set these on command-line
+# set(PY3VERSION_DOTTED 3.6)
+# set(PY3VERSION_NODOT  36)
+
 #add_definitions(-DZLIB_WINAPI)
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${MathGL2_SOURCE_DIR}/scripts)
 
index da245d2c6267e0da46b2cb8958bec9a007321543..a84a4ce89fcf7e738ad6f118875b9fafb9b8d022 100644 (file)
@@ -17,52 +17,6 @@ if(NOT SWIG_FOUND)
 endif(NOT SWIG_FOUND)
 INCLUDE(${SWIG_USE_FILE})
 
-if(enable-python)
-       set(Python_ADDITIONAL_VERSIONS 2.7)
-       FIND_PACKAGE(PythonInterp)
-       if(NOT PYTHONINTERP_FOUND)
-               message(SEND_ERROR "Couldn't find python interpreter.")
-       endif(NOT PYTHONINTERP_FOUND)
-       FIND_PACKAGE(PythonLibs)
-       if(NOT PYTHONLIBS_FOUND)
-               message(SEND_ERROR "Couldn't find python development libraries.")
-       endif(NOT PYTHONLIBS_FOUND)
-       execute_process(
-               COMMAND ${PYTHON_EXECUTABLE} -c "import numpy; print numpy.get_include()"
-               OUTPUT_VARIABLE NUMPY_INCLUDE_PATH
-               RESULT_VARIABLE NUMPY_ERR
-               OUTPUT_STRIP_TRAILING_WHITESPACE
-       )
-       if(NOT NUMPY_INCLUDE_PATH)
-               message(SEND_ERROR "Couldn't find numpy.")
-       endif(NOT NUMPY_INCLUDE_PATH)
-
-       include_directories(${PYTHON_INCLUDE_DIR}  ${NUMPY_INCLUDE_PATH})
-       execute_process(
-               COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(prefix='${CMAKE_INSTALL_PREFIX}')"
-               OUTPUT_VARIABLE MGL_PYTHON_SITE_PACKAGES
-               OUTPUT_STRIP_TRAILING_WHITESPACE)
-       set(SWIG_MODULE_mathgl_EXTRA_DEPS numpy.i ${src_imp_dep})
-       if(${CMAKE_VERSION} VERSION_LESS "3.8.0") 
-               SWIG_ADD_MODULE(mathgl python mathgl.i)
-       else(${CMAKE_VERSION} VERSION_LESS "3.8.0")
-               SWIG_ADD_LIBRARY(mathgl LANGUAGE python SOURCES mathgl.i)
-       endif(${CMAKE_VERSION} VERSION_LESS "3.8.0")
-       SWIG_LINK_LIBRARIES(mathgl mgl ${PYTHON_LIBRARIES})
-       set_target_properties(_mathgl PROPERTIES BUILD_WITH_INSTALL_RPATH ON)
-       add_custom_command(OUTPUT mathgl.pyc
-               COMMAND ${PYTHON_EXECUTABLE}
-               ARGS -c \"from py_compile import compile\; compile('mathgl.py') \"
-               WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang
-               DEPENDS _mathgl
-       )
-       add_custom_target(mgl_python_module ALL DEPENDS _mathgl mathgl.pyc)
-
-       install(FILES ${MathGL2_BINARY_DIR}/lang/mathgl.py ${MathGL2_BINARY_DIR}/lang/mathgl.pyc DESTINATION ${MGL_PYTHON_SITE_PACKAGES})
-       install (TARGETS _mathgl LIBRARY DESTINATION ${MGL_PYTHON_SITE_PACKAGES})
-       set(mgl_clean_files ${mgl_clean_files} mathgl.py)
-endif(enable-python)
-
 if(enable-lua)
        INCLUDE(FindLua51)
        if(NOT LUA51_FOUND)
@@ -145,4 +99,8 @@ message(STATUS "${oct_prog} ${oct_host} ${oct_api}")
        endif(enable-octave-install)
        set(mgl_clean_files ${mgl_clean_files} mathgl)
 endif(enable-octave)
+
+add_subdirectory( python2 )
+add_subdirectory( python3 )
+
 set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${mgl_clean_files}")
index 25d1f1a2e2cba54352ff66a822871a491acbf7ae..2a853b6034796c9f9aa05fbf2565140783b3a497 100644 (file)
     if (PyDict_Check(    py_obj)) return "dict"        ;
     if (PyList_Check(    py_obj)) return "list"        ;
     if (PyTuple_Check(   py_obj)) return "tuple"       ;
-    if (PyFile_Check(    py_obj)) return "file"        ;
     if (PyModule_Check(  py_obj)) return "module"      ;
-    if (PyInstance_Check(py_obj)) return "instance"    ;
-
-    return "unknow type";
+    %# if PY_MAJOR_VERSION < 3
+        if (PyFile_Check(    py_obj)) return "file"        ;
+        if (PyInstance_Check(py_obj)) return "instance"    ;
+    %# endif
+    return "unknown type";
   }
 
   /* Given a NumPy typecode, return a string describing the type.
diff --git a/lang/python2/CMakeLists.txt b/lang/python2/CMakeLists.txt
new file mode 100644 (file)
index 0000000..5929c12
--- /dev/null
@@ -0,0 +1,60 @@
+set(src_imp_dep
+../../include/mgl2/type.h
+../../include/mgl2/data.h
+../../include/mgl2/mgl.h
+../mgl.i
+../data.i
+../type.i
+)
+
+set(mgl_clean_files "")
+
+SET_SOURCE_FILES_PROPERTIES(../mathgl.i ../numpy.i PROPERTIES CPLUSPLUS ON)
+
+if(enable-python)
+       set(Python_ADDITIONAL_VERSIONS 2.7)
+       FIND_PACKAGE(PythonInterp)
+       if(NOT PYTHONINTERP_FOUND)
+               message(SEND_ERROR "Couldn't find python interpreter.")
+       endif(NOT PYTHONINTERP_FOUND)
+       FIND_PACKAGE(PythonLibs)
+       if(NOT PYTHONLIBS_FOUND)
+               message(SEND_ERROR "Couldn't find python development libraries.")
+       endif(NOT PYTHONLIBS_FOUND)
+       execute_process(
+               COMMAND ${PYTHON_EXECUTABLE} -c "import numpy; print numpy.get_include()"
+               OUTPUT_VARIABLE NUMPY_INCLUDE_PATH
+               RESULT_VARIABLE NUMPY_ERR
+               OUTPUT_STRIP_TRAILING_WHITESPACE
+       )
+       if(NOT NUMPY_INCLUDE_PATH)
+               message(SEND_ERROR "Couldn't find numpy.")
+       endif(NOT NUMPY_INCLUDE_PATH)
+
+       include_directories(${PYTHON_INCLUDE_DIR}  ${NUMPY_INCLUDE_PATH})
+       execute_process(
+               COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(prefix='${CMAKE_INSTALL_PREFIX}')"
+               OUTPUT_VARIABLE MGL_PYTHON_SITE_PACKAGES
+               OUTPUT_STRIP_TRAILING_WHITESPACE)
+       set(SWIG_MODULE_mathgl_EXTRA_DEPS ../numpy.i ${src_imp_dep})
+       if(${CMAKE_VERSION} VERSION_LESS "3.8.0")
+               SWIG_ADD_MODULE(mathgl python ../mathgl.i)
+       else(${CMAKE_VERSION} VERSION_LESS "3.8.0")
+               SWIG_ADD_LIBRARY(mathgl LANGUAGE python SOURCES ../mathgl.i)
+       endif(${CMAKE_VERSION} VERSION_LESS "3.8.0")
+       SWIG_LINK_LIBRARIES(mathgl mgl ${PYTHON_LIBRARIES})
+       set_target_properties(_mathgl PROPERTIES BUILD_WITH_INSTALL_RPATH ON)
+       add_custom_command(OUTPUT mathgl.pyc
+               COMMAND ${PYTHON_EXECUTABLE}
+               ARGS -c \"from py_compile import compile\; compile('mathgl.py') \"
+               WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang/python2
+               DEPENDS _mathgl
+       )
+       add_custom_target(mgl_python_module ALL DEPENDS _mathgl mathgl.pyc)
+
+       install(FILES ${MathGL2_BINARY_DIR}/lang/python2/mathgl.py ${MathGL2_BINARY_DIR}/lang/python2/mathgl.pyc DESTINATION ${MGL_PYTHON_SITE_PACKAGES})
+       install (TARGETS _mathgl LIBRARY DESTINATION ${MGL_PYTHON_SITE_PACKAGES})
+       set(mgl_clean_files ${mgl_clean_files} mathgl.py)
+endif(enable-python)
+
+set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${mgl_clean_files}")
diff --git a/lang/python3/CMakeLists.txt b/lang/python3/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d6aa2f8
--- /dev/null
@@ -0,0 +1,70 @@
+set(src_imp_dep
+../../include/mgl2/type.h
+../../include/mgl2/data.h
+../../include/mgl2/mgl.h
+../mgl.i
+../data.i
+../type.i
+)
+
+set(mgl_clean_files "")
+
+SET_SOURCE_FILES_PROPERTIES(../mathgl.i ../numpy.i PROPERTIES CPLUSPLUS ON)
+
+if(enable-python)
+       set(Python_ADDITIONAL_VERSIONS ${PY3VERSION_DOTTED})
+       unset(PYTHONINTERP_FOUND)
+       unset(PYTHON_EXECUTABLE CACHE)
+       FIND_PACKAGE(PythonInterp ${PY3VERSION_DOTTED} REQUIRED)
+       if(NOT PYTHONINTERP_FOUND)
+               message(SEND_ERROR "Couldn't find python interpreter.")
+       endif(NOT PYTHONINTERP_FOUND)
+       unset(PYTHONLIBS_FOUND)
+       unset(PYTHON_LIBRARIES CACHE)
+       unset(PYTHON_INCLUDE_PATH CACHE)
+       unset(PYTHON_INCLUDE_DIRS CACHE)
+       unset(PYTHON_DEBUG_LIBRARIES CACHE)
+       unset(PYTHONLIBS_VERSION_STRING CACHE)
+       unset(PYTHON_LIBRARY CACHE)
+       unset(PYTHON_INCLUDE_DIR CACHE)
+       FIND_PACKAGE(PythonLibs ${PY3VERSION_DOTTED} REQUIRED)
+       if(NOT PYTHONLIBS_FOUND)
+               message(SEND_ERROR "Couldn't find python development libraries.")
+       endif(NOT PYTHONLIBS_FOUND)
+       execute_process(
+               COMMAND ${PYTHON_EXECUTABLE} -c "import numpy; print (numpy.get_include())"
+               OUTPUT_VARIABLE NUMPY_INCLUDE_PATH
+               RESULT_VARIABLE NUMPY_ERR
+               OUTPUT_STRIP_TRAILING_WHITESPACE
+       )
+       if(NOT NUMPY_INCLUDE_PATH)
+               message(SEND_ERROR "Couldn't find numpy.")
+       endif(NOT NUMPY_INCLUDE_PATH)
+
+       include_directories(${PYTHON_INCLUDE_DIR}  ${NUMPY_INCLUDE_PATH})
+       execute_process(
+               COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib(prefix='${CMAKE_INSTALL_PREFIX}'))"
+               OUTPUT_VARIABLE MGL_PYTHON_SITE_PACKAGES
+               OUTPUT_STRIP_TRAILING_WHITESPACE)
+       set(SWIG_MODULE_mathglp3_EXTRA_DEPS ../numpy.i ${src_imp_dep})
+       if(${CMAKE_VERSION} VERSION_LESS "3.8.0")
+               SWIG_ADD_MODULE(mathglp3 python ../mathgl.i)
+       else(${CMAKE_VERSION} VERSION_LESS "3.8.0")
+               SWIG_ADD_LIBRARY(mathglp3 LANGUAGE python SOURCES ../mathgl.i)
+       endif(${CMAKE_VERSION} VERSION_LESS "3.8.0")
+       SWIG_LINK_LIBRARIES(mathglp3 mgl ${PYTHON_LIBRARIES})
+       set_target_properties(_mathglp3 PROPERTIES BUILD_WITH_INSTALL_RPATH ON)
+       add_custom_command(OUTPUT mathgl.pyc
+               COMMAND ${PYTHON_EXECUTABLE}
+               ARGS -c \"from py_compile import compile\; compile('mathgl.py') \"
+               WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang/python3
+               DEPENDS _mathglp3
+       )
+       add_custom_target(mglp3_python_module ALL DEPENDS _mathglp3 mathgl.pyc)
+
+       install(FILES ${MathGL2_BINARY_DIR}/lang/python3/mathgl.py ${MathGL2_BINARY_DIR}/lang/python3/__pycache__/mathgl.cpython-${PY3VERSION_NODOT}.pyc DESTINATION ${MGL_PYTHON_SITE_PACKAGES}/__pycache__)
+       install (TARGETS _mathglp3 LIBRARY DESTINATION ${MGL_PYTHON_SITE_PACKAGES})
+       set(mgl_clean_files ${mgl_clean_files} mathgl.py)
+endif(enable-python)
+
+set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${mgl_clean_files}")