Skip to content

Commit 4bcfb35

Browse files
committed
python: add generation of Python stubs
1 parent 7a94a34 commit 4bcfb35

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

CMakeLists.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ SET(CMAKE_VERBOSE_MAKEFILE True)
2727
# ----------------------------------------------------
2828
OPTION(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF)
2929
OPTION(SUFFIX_SO_VERSION "Suffix library name with its version" OFF)
30+
OPTION(GENERATE_PYTHON_STUBS "Generate the Python stubs associated to the Python library" ON)
3031

3132
IF(DEFINED BUILD_UNIT_TESTS)
3233
MESSAGE(AUTHOR_WARNING "BUILD_UNIT_TESTS is deprecated. Use BUILD_TESTING instead.\
@@ -150,7 +151,7 @@ SET(${PROJECT_NAME}_SOLVERS_SOURCES
150151
SET(${PROJECT_NAME}_DECOMPOSITIONS_SOURCES
151152
src/decompositions/decompositions.cpp
152153
)
153-
154+
154155
SET(${PROJECT_NAME}_SOURCES
155156
${${PROJECT_NAME}_SOLVERS_SOURCES}
156157
${${PROJECT_NAME}_DECOMPOSITIONS_SOURCES}
@@ -175,11 +176,11 @@ SET(${PROJECT_NAME}_SOURCES
175176
)
176177

177178
ADD_LIBRARY(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
178-
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}
179-
SYSTEM PUBLIC
180-
${Boost_INCLUDE_DIRS}
179+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}
180+
SYSTEM PUBLIC
181+
${Boost_INCLUDE_DIRS}
181182
${EIGEN3_INCLUDE_DIR}
182-
${PYTHON_INCLUDE_DIRS}
183+
${PYTHON_INCLUDE_DIRS}
183184
${NUMPY_INCLUDE_DIRS}
184185
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
185186
$<INSTALL_INTERFACE:include>)

python/CMakeLists.txt

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,32 @@
33
#
44

55
# --- LIBRARY --- #
6-
SET(PYWRAP ${PROJECT_NAME}_pywrap)
6+
SET(PYWRAP ${PROJECT_NAME}_pywrap)
77
SET(PYWRAP ${PYWRAP} PARENT_SCOPE)
88

99
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/python/${PROJECT_NAME}")
10+
include(${PROJECT_SOURCE_DIR}/cmake/stubs.cmake)
1011

1112
ADD_CUSTOM_TARGET(python)
1213
SET_TARGET_PROPERTIES(python PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True)
1314

1415
ADD_LIBRARY(${PYWRAP} SHARED main.cpp)
1516
ADD_DEPENDENCIES(python ${PYWRAP})
16-
TARGET_LINK_LIBRARIES(${PYWRAP} PUBLIC ${PROJECT_NAME})
17+
TARGET_LINK_LIBRARIES(${PYWRAP} PUBLIC ${PROJECT_NAME})
1718
# BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS spews conversion warnings from int to long unsigned int.
1819
# Unfortunately, using literals does not work in a macro. As such, this turns them off for the entire wrapper:
1920
IF(NOT WIN32)
2021
TARGET_COMPILE_OPTIONS(${PYWRAP} PRIVATE "-Wno-conversion")
2122
ENDIF()
2223
IF(IS_ABSOLUTE ${PYTHON_SITELIB})
23-
SET(${PYWRAP}_INSTALL_DIR ${PYTHON_SITELIB}/${PROJECT_NAME})
24+
SET(ABSOLUTE_PYTHON_SITELIB ${PYTHON_SITELIB})
2425
ELSE()
25-
SET(${PYWRAP}_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}/${PROJECT_NAME})
26+
SET(ABSOLUTE_PYTHON_SITELIB ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB})
2627
ENDIF()
28+
SET(${PYWRAP}_INSTALL_DIR ${ABSOLUTE_PYTHON_SITELIB}/${PROJECT_NAME})
2729

2830
SET_TARGET_PROPERTIES(${PYWRAP}
29-
PROPERTIES
31+
PROPERTIES
3032
PREFIX ""
3133
SUFFIX ${PYTHON_EXT_SUFFIX}
3234
OUTPUT_NAME "${PROJECT_NAME}"
@@ -39,7 +41,14 @@ ENDIF()
3941

4042
INSTALL(TARGETS ${PYWRAP} DESTINATION ${${PYWRAP}_INSTALL_DIR})
4143

42-
# --- INSTALL SCRIPTS
44+
# --- GENERATE STUBS
45+
IF(GENERATE_PYTHON_STUBS)
46+
LOAD_STUBGEN()
47+
48+
GENERATE_STUBS(${CMAKE_CURRENT_BINARY_DIR} ${PROJECT_NAME} ${ABSOLUTE_PYTHON_SITELIB})
49+
ENDIF(GENERATE_PYTHON_STUBS)
50+
51+
# --- INSTALL SCRIPTS
4352
SET(PYTHON_FILES
4453
__init__.py
4554
)

0 commit comments

Comments
 (0)