Skip to content

Commit c028b15

Browse files
committed
start working on tests
1 parent 85e3138 commit c028b15

23 files changed

+2301
-39
lines changed

pdal/CMakeLists.txt

Lines changed: 117 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,56 @@
11
cmake_minimum_required(VERSION 3.11.0)
22
project(pdal)
3+
4+
# macros for creating targets
5+
include(${PROJECT_SOURCE_DIR}/macros.cmake NO_POLICY_SCOPE)
6+
37
set(CMAKE_CXX_STANDARD 11)
48
set(CMAKE_CXX_STANDARD_REQUIRED ON)
59
set(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")
818
find_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

1223
if(SKBUILD)
1324
find_package(PythonExtensions REQUIRED)
1425
find_package(Cython REQUIRED)
1526
message(STATUS "The project is built using scikit-build")
1627
endif()
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

2255
set(EXTENSION_SRC
2356
PyArray.cpp
@@ -40,53 +73,102 @@ target_include_directories( ${extension}
4073
target_link_libraries(${extension} ${PDAL_LIBRARIES})
4174
python_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-
5876
install(TARGETS ${extension} LIBRARY DESTINATION ${PROJECT_NAME})
5977

6078
PDAL_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+
)

pdal/macros.cmake

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ endfunction()
5959
macro(PDAL_PYTHON_ADD_PLUGIN _name _type _shortname)
6060
set(options)
6161
set(oneValueArgs)
62-
set(multiValueArgs FILES LINK_WITH INCLUDES SYSTEM_INCLUDES)
62+
set(multiValueArgs FILES LINK_WITH INCLUDES SYSTEM_INCLUDES COMPILE_OPTIONS)
6363
cmake_parse_arguments(PDAL_PYTHON_ADD_PLUGIN "${options}" "${oneValueArgs}"
6464
"${multiValueArgs}" ${ARGN})
6565
if(WIN32)
@@ -77,6 +77,7 @@ macro(PDAL_PYTHON_ADD_PLUGIN _name _type _shortname)
7777
${PDAL_INCLUDE_DIR}
7878
${PDAL_PYTHON_ADD_PLUGIN_INCLUDES}
7979
)
80+
target_link_options(${${_name}} BEFORE PRIVATE ${PDAL_PYTHON_ADD_PLUGIN_COMPILE_OPTIONS})
8081
target_compile_definitions(${${_name}} PRIVATE
8182
PDAL_PYTHON_LIBRARY="${PYTHON_LIBRARY}" PDAL_DLL_EXPORT)
8283
target_compile_definitions(${${_name}} PRIVATE PDAL_DLL_EXPORT)
@@ -86,8 +87,6 @@ macro(PDAL_PYTHON_ADD_PLUGIN _name _type _shortname)
8687
endif()
8788
target_link_libraries(${${_name}}
8889
PRIVATE
89-
${PDAL_BASE_LIB_NAME}
90-
${PDAL_UTIL_LIB_NAME}
9190
${PDAL_PYTHON_ADD_PLUGIN_LINK_WITH}
9291
${WINSOCK_LIBRARY}
9392
)
@@ -98,4 +97,47 @@ macro(PDAL_PYTHON_ADD_PLUGIN _name _type _shortname)
9897
set_target_properties(${${_name}} PROPERTIES
9998
INSTALL_NAME_DIR "@rpath")
10099
endif()
101-
endmacro(PDAL_PYTHON_ADD_PLUGIN)
100+
endmacro(PDAL_PYTHON_ADD_PLUGIN)
101+
102+
103+
macro(PDAL_PYTHON_ADD_TEST _name)
104+
set(options)
105+
set(oneValueArgs)
106+
set(multiValueArgs FILES LINK_WITH INCLUDES SYSTEM_INCLUDES)
107+
cmake_parse_arguments(PDAL_PYTHON_ADD_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
108+
if (WIN32)
109+
set(WINSOCK_LIBRARY ws2_32)
110+
endif()
111+
add_executable(${_name} ${PDAL_PYTHON_ADD_TEST_FILES})
112+
113+
pdal_python_target_compile_settings(${_name})
114+
target_include_directories(${_name} PRIVATE
115+
${PDAL_PYTHON_ADD_TEST_INCLUDES})
116+
if (PDAL_PYTHON_ADD_TEST_SYSTEM_INCLUDES)
117+
target_include_directories(${_name} SYSTEM PRIVATE
118+
${PDAL_PYTHON_ADD_TEST_SYSTEM_INCLUDES})
119+
endif()
120+
set_property(TARGET ${_name} PROPERTY FOLDER "Tests")
121+
target_link_libraries(${_name}
122+
PRIVATE
123+
${PDAL_PYTHON_ADD_TEST_LINK_WITH}
124+
gtest
125+
${WINSOCK_LIBRARY}
126+
)
127+
target_compile_definitions(${_name} PRIVATE
128+
PDAL_PYTHON_LIBRARY="${PYTHON_LIBRARY}")
129+
add_test(NAME ${_name}
130+
COMMAND
131+
"${PROJECT_BINARY_DIR}/bin/${_name}"
132+
WORKING_DIRECTORY
133+
"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/..")
134+
# Ensure plugins are loaded from build dir
135+
# https://github.com/PDAL/PDAL/issues/840
136+
# if (WIN32)
137+
# set_property(TEST ${_name} PROPERTY ENVIRONMENT
138+
# "PDAL_DRIVER_PATH=${PROJECT_BINARY_DIR}/bin")
139+
# else()
140+
# set_property(TEST ${_name} PROPERTY ENVIRONMENT
141+
# "PDAL_DRIVER_PATH=${PROJECT_BINARY_DIR}/lib")
142+
# endif()
143+
endmacro(PDAL_PYTHON_ADD_TEST)

0 commit comments

Comments
 (0)