11cmake_minimum_required (VERSION 3.11.0)
22project (pdal)
3+
4+ # macros for creating targets
5+ include (${PROJECT_SOURCE_DIR} /macros .cmake NO_POLICY_SCOPE)
6+
37set (CMAKE_CXX_STANDARD 11)
48set (CMAKE_CXX_STANDARD_REQUIRED ON )
59set (CMAKE_CXX_EXTENSIONS OFF )
6- set (CMAKE_BUILD_TYPE "Release " )
10+ set (CMAKE_BUILD_TYPE "Debug " )
711
12+ enable_testing ()
13+
14+ # Python-finding settings
15+ set (Python3_FIND_STRATEGY "LOCATION" )
16+ set (Python3_FIND_REGISTRY "LAST" )
17+ set (Python3_FIND_FRAMEWORK "LAST" )
818find_package (Python3 COMPONENTS Interpreter Development NumPy REQUIRED)
9- find_package (PDAL REQUIRED)
10- find_package (NumPy 1.13 REQUIRED)
19+
20+ # find PDAL. Require 2.1+
21+ find_package (PDAL 2.1 REQUIRED)
1122
1223if (SKBUILD)
1324 find_package (PythonExtensions REQUIRED)
1425 find_package (Cython REQUIRED)
1526 message (STATUS "The project is built using scikit-build" )
1627endif ()
1728
29+ execute_process (
30+ COMMAND
31+ ${Python3_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_config_var('Py_ENABLE_SHARED'))"
32+ OUTPUT_VARIABLE Py_ENABLE_SHARED
33+ OUTPUT_STRIP_TRAILING_WHITESPACE
34+ )
1835
19- # macros for creating targets
20- include (${PROJECT_SOURCE_DIR} /macros .cmake NO_POLICY_SCOPE)
36+ execute_process (
37+ COMMAND
38+ ${Python3_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_config_var('LDSHARED').split(' ', 1)[1])"
39+ OUTPUT_VARIABLE PYTHON_LDSHARED
40+ OUTPUT_STRIP_TRAILING_WHITESPACE
41+ )
42+
43+ if (NOT Py_ENABLE_SHARED)
44+ message (STATUS "Python ${Python3_EXECUTABLE} is statically linked" )
45+ if (APPLE )
46+ # conda gives us -bundle, which isn't valid
47+ message (STATUS "Removing extra -bundle argument from sysconfig.get_config_var('LDSHARED')" )
48+ string (REPLACE "-bundle" "" PYTHON_LDSHARED "${PYTHON_LDSHARED} " )
49+ string (STRIP ${PYTHON_LDSHARED} PYTHON_LDSHARED)
50+ endif ()
51+ # set(Python3_LIBRARIES ${PYTHON_LDSHARED})
52+ message (STATUS "Setting Python3_LIBRARIES to '${Python3_LIBRARIES} ' due to static Python" )
53+ endif ()
2154
2255set (EXTENSION_SRC
2356 PyArray.cpp
@@ -40,53 +73,102 @@ target_include_directories( ${extension}
4073target_link_libraries (${extension} ${PDAL_LIBRARIES} )
4174python_extension_module(${extension} )
4275
43- if (MSVC )
44- set (reader "libpdal_plugin_reader_numpy" )
45- else ()
46- set (reader "pdal_plugin_reader_numpy" )
47- endif ()
48-
49- set (PLANG ./plang/Invocation.cpp
50- ./plang/Environment .cpp
51- ./plang/Redirector.cpp
52- ./plang/Script.cpp)
53- set (READER_SRC
54- ./io/NumpyReader.cpp
55- ./io/NumpyReader.hpp
56- ${PLANG} )
57-
5876install (TARGETS ${extension} LIBRARY DESTINATION ${PROJECT_NAME} )
5977
6078PDAL_PYTHON_ADD_PLUGIN(numpy_reader reader numpy
6179 FILES
62- ./io/NumpyReader.cpp
63- ./io/NumpyReader.hpp
64- ./plang/Invocation.cpp
65- ./plang/Environment .cpp
66- ./plang/Redirector.cpp
67- ./plang/Script.cpp
80+ ./io/NumpyReader.cpp
81+ ./io/NumpyReader.hpp
82+ ./plang/Invocation.cpp
83+ ./plang/Environment .cpp
84+ ./plang/Redirector.cpp
85+ ./plang/Script.cpp
6886 LINK_WITH
6987 ${PDAL_LIBRARIES}
70- ${PYTHON_LIBRARY}
88+ ${Python3_LIBRARIES}
89+ ${CMAKE_DL_LIBS}
7190 SYSTEM_INCLUDES
7291 ${PDAL_INCLUDE_DIRS}
7392 ${Python3_INCLUDE_DIRS}
7493 ${Python3_NumPy_INCLUDE_DIRS}
94+ COMPILE_OPTIONS
95+ ${PYTHON_LINK_LIBRARY}
7596 )
7697
77- PDAL_PYTHON_ADD_PLUGIN(python_filter reader python
98+
99+ # Download and unpack googletest at configure time
100+ configure_file (test /gtest/CMakeLists.txt.in googletest-download/CMakeLists.txt)
101+ execute_process (COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR} " .
102+ RESULT_VARIABLE result
103+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /googletest-download )
104+ if (result)
105+ message (FATAL_ERROR "CMake step for googletest failed: ${result} " )
106+ endif ()
107+ execute_process (COMMAND ${CMAKE_COMMAND} --build .
108+ RESULT_VARIABLE result
109+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /googletest-download )
110+ if (result)
111+ message (FATAL_ERROR "Build step for googletest failed: ${result} " )
112+ endif ()
113+
114+ # Prevent overriding the parent project's compiler/linker
115+ # settings on Windows
116+ set (gtest_force_shared_crt ON CACHE BOOL "" FORCE)
117+
118+ # Add googletest directly to our build. This defines
119+ # the gtest and gtest_main targets.
120+ add_subdirectory (${CMAKE_CURRENT_BINARY_DIR} /googletest-src
121+ ${CMAKE_CURRENT_BINARY_DIR} /googletest-build
122+ EXCLUDE_FROM_ALL )
123+
124+ PDAL_PYTHON_ADD_PLUGIN(python_filter filter python
78125 FILES
79- ./filters/PythonFilter.cpp
80- ./filters/PythonFilter.hpp
81- ./plang/Invocation.cpp
82- ./plang/Environment .cpp
83- ./plang/Redirector.cpp
84- ./plang/Script.cpp
126+ ./filters/PythonFilter.cpp
127+ ./filters/PythonFilter.hpp
128+ ./plang/Invocation.cpp
129+ ./plang/Environment .cpp
130+ ./plang/Redirector.cpp
131+ ./plang/Script.cpp
85132 LINK_WITH
86133 ${PDAL_LIBRARIES}
87- ${PYTHON_LIBRARY}
134+ ${Python3_LIBRARIES}
135+ ${CMAKE_DL_LIBS}
88136 SYSTEM_INCLUDES
89137 ${PDAL_INCLUDE_DIRS}
90138 ${Python3_INCLUDE_DIRS}
91139 ${Python3_NumPy_INCLUDE_DIRS}
140+ COMPILE_OPTIONS
141+ ${PYTHON_LINK_LIBRARY}
92142 )
143+
144+ PDAL_PYTHON_ADD_TEST(pdal_io_numpy_test
145+ FILES
146+ ./test /NumpyReaderTest.cpp
147+ ./test /Support.cpp
148+ LINK_WITH
149+ ${numpy_reader}
150+ ${Python3_LIBRARIES}
151+ ${PDAL_LIBRARIES}
152+ ${CMAKE_DL_LIBS}
153+ SYSTEM_INCLUDES
154+ ${PDAL_INCLUDE_DIRS}
155+ ${Python3_INCLUDE_DIRS}
156+ ${Python3_NumPy_INCLUDE_DIRS}
157+ )
158+
159+ PDAL_PYTHON_ADD_TEST(pdal_filters_python_test
160+ FILES
161+ ./test /PythonFilterTest.cpp
162+ ./test /Support.cpp
163+ ./plang/Invocation.cpp
164+ ./plang/Environment .cpp
165+ LINK_WITH
166+ ${python_filter}
167+ ${Python3_LIBRARIES}
168+ ${PDAL_LIBRARIES}
169+ ${CMAKE_DL_LIBS}
170+ SYSTEM_INCLUDES
171+ ${PDAL_INCLUDE_DIRS}
172+ ${Python3_INCLUDE_DIRS}
173+ ${Python3_NumPy_INCLUDE_DIRS}
174+ )
0 commit comments