summaryrefslogtreecommitdiff
path: root/doc/source/f2py/code
diff options
context:
space:
mode:
authorHenry Schreiner <HenrySchreinerIII@gmail.com>2021-11-22 11:56:13 -0500
committerHenry Schreiner <HenrySchreinerIII@gmail.com>2021-11-22 11:56:13 -0500
commitb880c466bedd94cadb84c6c8e60f008494b78127 (patch)
tree507552a9195ce171530d5f93c98d66792b230c0d /doc/source/f2py/code
parent28a5c34260bbf2d187549c2bed5148b51593ddd2 (diff)
downloadnumpy-b880c466bedd94cadb84c6c8e60f008494b78127.tar.gz
DOC: nicer CMake example
This updates the CMake example with several improvements. * The modern CLI usage (3.14+) is used for configurting and building (plain CMake and scikit-build examples) * Removed CXX variable setting (not a CXX project) * Ensured Python 3.7+ is discoverd, and also avoid requiring Development.Embed (component not present in some places like manylinux) * Nicer include directory listing * Drop unused varaible * Use FindPython's integrated module support * Avoid directory-level settings, use only target level settings instead (as noted in the orignal comment - also this was originally directory scope, not project scope)
Diffstat (limited to 'doc/source/f2py/code')
-rw-r--r--doc/source/f2py/code/CMakeLists.txt49
1 files changed, 17 insertions, 32 deletions
diff --git a/doc/source/f2py/code/CMakeLists.txt b/doc/source/f2py/code/CMakeLists.txt
index 62ff193bb..fd6001e9e 100644
--- a/doc/source/f2py/code/CMakeLists.txt
+++ b/doc/source/f2py/code/CMakeLists.txt
@@ -1,12 +1,10 @@
-### setup project ###
-cmake_minimum_required(VERSION 3.17.3) # 3.17 > for Python3_SOABI
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
+cmake_minimum_required(VERSION 3.18) # Needed to avoid requiring embedded Python libs too
project(fibby
VERSION 1.0
DESCRIPTION "FIB module"
LANGUAGES C Fortran
- )
+)
# Safety net
if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
@@ -16,9 +14,9 @@ if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
)
endif()
-# Grab Python
-find_package(Python3 3.9 REQUIRED
- COMPONENTS Interpreter Development NumPy)
+# Grab Python, 3.7 or newer
+find_package(Python3 3.7 REQUIRED
+ COMPONENTS Interpreter Development.Module NumPy)
# Grab the variables from a local Python installation
# F2PY headers
@@ -29,29 +27,22 @@ execute_process(
OUTPUT_STRIP_TRAILING_WHITESPACE
)
-# Project scope; consider using target_include_directories instead
-include_directories(
- BEFORE
- ${Python3_INCLUDE_DIRS}
- ${Python3_NumPy_INCLUDE_DIRS}
- ${F2PY_INCLUDE_DIR}
- )
-
-message(STATUS ${Python3_INCLUDE_DIRS})
-message(STATUS ${F2PY_INCLUDE_DIR})
-message(STATUS ${Python3_NumPy_INCLUDE_DIRS})
+# Print out the discovered paths
+include(CMakePrintHelpers)
+cmake_print_variables(Python3_INCLUDE_DIRS)
+cmake_print_variables(F2PY_INCLUDE_DIR)
+cmake_print_variables(Python3_NumPy_INCLUDE_DIRS)
-# Vars
+# Common variables
set(f2py_module_name "fibby")
set(fortran_src_file "${CMAKE_SOURCE_DIR}/fib1.f")
set(f2py_module_c "${f2py_module_name}module.c")
-set(generated_module_file "${f2py_module_name}${Python3_SOABI}")
# Generate sources
add_custom_target(
genpyf
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${f2py_module_c}"
- )
+)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${f2py_module_c}"
COMMAND ${Python3_EXECUTABLE} -m "numpy.f2py"
@@ -59,22 +50,16 @@ add_custom_command(
-m "fibby"
--lower # Important
DEPENDS fib1.f # Fortran source
- )
+)
# Set up target
-add_library(${CMAKE_PROJECT_NAME} SHARED
+python3_add_LIBRARY(${CMAKE_PROJECT_NAME} MODULE WITH_SOABI
"${CMAKE_CURRENT_BINARY_DIR}/${f2py_module_c}" # Generated
"${F2PY_INCLUDE_DIR}/fortranobject.c" # From NumPy
"${fortran_src_file}" # Fortran source(s)
- )
+)
# Depend on sources
+target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Python3::NumPy)
add_dependencies(${CMAKE_PROJECT_NAME} genpyf)
-
-set_target_properties(
- ${CMAKE_PROJECT_NAME}
- PROPERTIES
- PREFIX ""
- OUTPUT_NAME "${CMAKE_PROJECT_NAME}"
- LINKER_LANGUAGE C
- )
+target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE "${F2PY_INCLUDE_DIR}") \ No newline at end of file