Skip to content

Commit 60ed38e

Browse files
authored
Testing fixups (#78)
* lint * build-option * don't use pip * syntax * need cython * package_data test * include_package_data * no package_data * exclude static libs * CMAKE_INSTALL_DIR * remove cmake_process * PROJECT_NAME * package_data * try CMAKE_INSTALL_LIBDIR * target install * CMAKE_INSTALL_LIBDIR * LIBDIR * target install * CMAKE_INSTALL_DIR * extension location * PROJECT_NAME * CMAKE_INSTALL_DIR * targets * target churn * target churnin * another swing * lint * churnin * chern * NO_POLICY_SCOPE * de-macro * lint * install to PACKAGE_NAME * DESTINATION churn * target churn * target churns * targets for scikit build * reorganize to match scikit-build expected layout * gtest
1 parent b036ecd commit 60ed38e

File tree

5 files changed

+327
-148
lines changed

5 files changed

+327
-148
lines changed

.github/workflows/build.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,25 @@ jobs:
4040
- name: Dependencies
4141
shell: bash -l {0}
4242
run: |
43-
conda install --yes --quiet -c conda-forge scikit-build numpy python=${{ matrix.python-version }} compilers ninja pdal pytest conda-build -y
43+
conda install --yes --quiet -c conda-forge scikit-build numpy python=${{ matrix.python-version }} compilers cython ninja pdal pytest conda-build -y
4444
4545
- name: Install
4646
shell: bash -l {0}
4747
run: |
48-
pip install . --install-option="-DWITH_TESTS=ON"
48+
python setup.py install -- -G "Ninja" -DWITH_TESTS=ON
49+
4950
pdal --drivers
5051
52+
53+
# pip install . --build-option="-DWITH_TESTS=ON"
54+
5155
- name: Test
5256
shell: bash -l {0}
5357
run: |
5458
pip install -e .
5559
SKPATH=$(python -c "import skbuild; print (skbuild.constants.SKBUILD_DIR())")/cmake-build
5660
export PDAL_DRIVER_PATH=$SKPATH
61+
ls $SKPATH
5762
$SKPATH/pdal_filters_python_test
5863
$SKPATH/pdal_io_numpy_test
5964
py.test

CMakeLists.txt

Lines changed: 315 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,315 @@
1+
cmake_minimum_required(VERSION 3.11.0)
2+
project(PDAL)
3+
4+
# macros for creating targets
5+
#include(${PROJECT_SOURCE_DIR}/macros.cmake NO_POLICY_SCOPE)
6+
7+
set(CMAKE_CXX_STANDARD 11)
8+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
9+
set(CMAKE_CXX_EXTENSIONS OFF)
10+
option(WITH_TESTS "Enable tests" OFF)
11+
set(CMAKE_BUILD_TYPE "Release")
12+
13+
14+
# Python-finding settings
15+
set(Python3_FIND_STRATEGY "LOCATION")
16+
set(Python3_FIND_REGISTRY "LAST")
17+
set(Python3_FIND_FRAMEWORK "LAST")
18+
find_package(Python3 COMPONENTS Interpreter Development NumPy REQUIRED)
19+
20+
# find PDAL. Require 2.1+
21+
find_package(PDAL 2.1 REQUIRED)
22+
23+
if(SKBUILD)
24+
find_package(PythonExtensions REQUIRED)
25+
find_package(Cython REQUIRED)
26+
message(STATUS "The project is built using scikit-build")
27+
endif()
28+
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+
)
35+
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()
54+
55+
add_subdirectory(pdal)
56+
#set(EXTENSION_SRC
57+
# ./pdal/PyArray.cpp
58+
# ./pdal/PyArray.hpp
59+
# ./pdal/PyDimension.hpp
60+
# ./pdal/PyPipeline.cpp
61+
# ./pdal/PyPipeline.hpp)
62+
#
63+
#set(extension "libpdalpython")
64+
#add_cython_target(${extension} "./pdal/libpdalpython.pyx" CXX PY3)
65+
#
66+
#add_library(${extension} MODULE ${EXTENSION_SRC} libpdalpython)
67+
#target_include_directories( ${extension}
68+
# PRIVATE
69+
# .
70+
# ${PDAL_INCLUDE_DIRS}
71+
# ${Python3_INCLUDE_DIRS}
72+
# ${Python3_NumPy_INCLUDE_DIRS})
73+
#
74+
#target_link_libraries(${extension} ${PDAL_LIBRARIES})
75+
#python_extension_module(${extension})
76+
#
77+
#install(TARGETS ${extension} LIBRARY DESTINATION "${PROJECT_NAME}/pdal")
78+
79+
80+
# Taken and adapted from PDAL's cmake macros.cmake
81+
82+
function(pdal_python_target_compile_settings target)
83+
set_property(TARGET ${target} PROPERTY CXX_STANDARD 11)
84+
set_property(TARGET ${target} PROPERTY CXX_STANDARD_REQUIRED TRUE)
85+
target_compile_definitions(${target} PRIVATE
86+
-DWIN32_LEAN_AND_MEAN)
87+
if (MSVC)
88+
# check for MSVC 8+
89+
if (NOT (MSVC_VERSION VERSION_LESS 1400))
90+
target_compile_definitions(${target} PRIVATE
91+
-D_CRT_SECURE_NO_DEPRECATE
92+
-D_CRT_SECURE_NO_WARNINGS
93+
-D_CRT_NONSTDC_NO_WARNING
94+
-D_SCL_SECURE_NO_WARNINGS
95+
)
96+
target_compile_options(${target} PRIVATE
97+
# Yes, we don't understand GCC pragmas
98+
/wd4068
99+
# Nitro makes use of Exception Specifications, which results in
100+
# numerous warnings when compiling in MSVC. We will ignore
101+
# them for now.
102+
/wd4290
103+
/wd4800
104+
# Windows warns about integer narrowing like crazy and it's
105+
# annoying. In most cases the programmer knows what they're
106+
# doing. A good static analysis tool would be better than
107+
# turning this warning off.
108+
/wd4267
109+
# Annoying warning about function hiding with virtual
110+
# inheritance.
111+
/wd4250
112+
# some templates don't return
113+
# /wd4716
114+
# unwind semantics
115+
# /wd4530
116+
# Standard C++-type exception handling.
117+
/EHsc
118+
)
119+
endif()
120+
121+
endif()
122+
endfunction()
123+
124+
125+
###############################################################################
126+
# Add a plugin target.
127+
# _name The plugin name.
128+
# ARGN :
129+
# FILES the source files for the plugin
130+
# LINK_WITH link plugin with libraries
131+
# INCLUDES header directories
132+
#
133+
# The "generate_dimension_hpp" ensures that Dimension.hpp is built before
134+
# attempting to build anything else in the "library".
135+
#
136+
# NOTE: _name is the name of a variable that will hold the plugin name
137+
# when the macro completes
138+
macro(PDAL_PYTHON_ADD_PLUGIN _name _type _shortname)
139+
set(options)
140+
set(oneValueArgs)
141+
set(multiValueArgs FILES LINK_WITH INCLUDES SYSTEM_INCLUDES COMPILE_OPTIONS)
142+
cmake_parse_arguments(PDAL_PYTHON_ADD_PLUGIN "${options}" "${oneValueArgs}"
143+
"${multiValueArgs}" ${ARGN})
144+
if(WIN32)
145+
set(WINSOCK_LIBRARY ws2_32)
146+
set(${_name} "libpdal_plugin_${_type}_${_shortname}")
147+
else()
148+
set(${_name} "pdal_plugin_${_type}_${_shortname}")
149+
endif()
150+
151+
152+
add_library(${${_name}} SHARED ${PDAL_PYTHON_ADD_PLUGIN_FILES})
153+
pdal_python_target_compile_settings(${${_name}})
154+
target_include_directories(${${_name}} PRIVATE
155+
${PROJECT_BINARY_DIR}/include
156+
${PDAL_INCLUDE_DIR}
157+
${PDAL_PYTHON_ADD_PLUGIN_INCLUDES}
158+
)
159+
target_link_options(${${_name}} BEFORE PRIVATE ${PDAL_PYTHON_ADD_PLUGIN_COMPILE_OPTIONS})
160+
target_compile_definitions(${${_name}} PRIVATE
161+
PDAL_PYTHON_LIBRARY="${PYTHON_LIBRARY}" PDAL_DLL_EXPORT)
162+
target_compile_definitions(${${_name}} PRIVATE PDAL_DLL_EXPORT)
163+
if (PDAL_PYTHON_ADD_PLUGIN_SYSTEM_INCLUDES)
164+
target_include_directories(${${_name}} SYSTEM PRIVATE
165+
${PDAL_PYTHON_ADD_PLUGIN_SYSTEM_INCLUDES})
166+
endif()
167+
target_link_libraries(${${_name}}
168+
PRIVATE
169+
${PDAL_PYTHON_ADD_PLUGIN_LINK_WITH}
170+
${WINSOCK_LIBRARY}
171+
)
172+
173+
message(STATUS "PROJECT_NAME: ${PROJECT_NAME}")
174+
install(TARGETS ${${_name}}
175+
LIBRARY DESTINATION "pdal"
176+
)
177+
if (APPLE)
178+
set_target_properties(${${_name}} PROPERTIES
179+
INSTALL_NAME_DIR "@rpath")
180+
endif()
181+
endmacro(PDAL_PYTHON_ADD_PLUGIN)
182+
183+
184+
macro(PDAL_PYTHON_ADD_TEST _name)
185+
set(options)
186+
set(oneValueArgs)
187+
set(multiValueArgs FILES LINK_WITH INCLUDES SYSTEM_INCLUDES)
188+
cmake_parse_arguments(PDAL_PYTHON_ADD_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
189+
if (WIN32)
190+
set(WINSOCK_LIBRARY ws2_32)
191+
endif()
192+
add_executable(${_name} ${PDAL_PYTHON_ADD_TEST_FILES})
193+
194+
pdal_python_target_compile_settings(${_name})
195+
target_include_directories(${_name} PRIVATE
196+
${PDAL_PYTHON_ADD_TEST_INCLUDES})
197+
if (PDAL_PYTHON_ADD_TEST_SYSTEM_INCLUDES)
198+
target_include_directories(${_name} SYSTEM PRIVATE
199+
${PDAL_PYTHON_ADD_TEST_SYSTEM_INCLUDES})
200+
endif()
201+
set_property(TARGET ${_name} PROPERTY FOLDER "Tests")
202+
target_link_libraries(${_name}
203+
PRIVATE
204+
${PDAL_PYTHON_ADD_TEST_LINK_WITH}
205+
gtest
206+
${WINSOCK_LIBRARY}
207+
)
208+
target_compile_definitions(${_name} PRIVATE
209+
PDAL_PYTHON_LIBRARY="${PYTHON_LIBRARY}")
210+
add_test(NAME ${_name}
211+
COMMAND
212+
"${PROJECT_BINARY_DIR}/bin/${_name}"
213+
WORKING_DIRECTORY
214+
"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/..")
215+
# Ensure plugins are loaded from build dir
216+
# https://github.com/PDAL/PDAL/issues/840
217+
# if (WIN32)
218+
# set_property(TEST ${_name} PROPERTY ENVIRONMENT
219+
# "PDAL_DRIVER_PATH=${PROJECT_BINARY_DIR}/bin")
220+
# else()
221+
# set_property(TEST ${_name} PROPERTY ENVIRONMENT
222+
# "PDAL_DRIVER_PATH=${PROJECT_BINARY_DIR}/lib")
223+
# endif()
224+
endmacro(PDAL_PYTHON_ADD_TEST)
225+
226+
227+
PDAL_PYTHON_ADD_PLUGIN(numpy_reader reader numpy
228+
FILES
229+
./pdal/io/NumpyReader.cpp
230+
./pdal/io/NumpyReader.hpp
231+
./pdal/plang/Invocation.cpp
232+
./pdal/plang/Environment.cpp
233+
./pdal/plang/Redirector.cpp
234+
./pdal/plang/Script.cpp
235+
LINK_WITH
236+
${PDAL_LIBRARIES}
237+
${Python3_LIBRARIES}
238+
${CMAKE_DL_LIBS}
239+
SYSTEM_INCLUDES
240+
${PDAL_INCLUDE_DIRS}
241+
${Python3_INCLUDE_DIRS}
242+
${Python3_NumPy_INCLUDE_DIRS}
243+
COMPILE_OPTIONS
244+
${PYTHON_LINK_LIBRARY}
245+
)
246+
247+
PDAL_PYTHON_ADD_PLUGIN(python_filter filter python
248+
FILES
249+
./pdal/filters/PythonFilter.cpp
250+
./pdal/filters/PythonFilter.hpp
251+
./pdal/plang/Invocation.cpp
252+
./pdal/plang/Environment.cpp
253+
./pdal/plang/Redirector.cpp
254+
./pdal/plang/Script.cpp
255+
LINK_WITH
256+
${PDAL_LIBRARIES}
257+
${Python3_LIBRARIES}
258+
${CMAKE_DL_LIBS}
259+
SYSTEM_INCLUDES
260+
${PDAL_INCLUDE_DIRS}
261+
${Python3_INCLUDE_DIRS}
262+
${Python3_NumPy_INCLUDE_DIRS}
263+
COMPILE_OPTIONS
264+
${PYTHON_LINK_LIBRARY}
265+
)
266+
267+
268+
if (WITH_TESTS)
269+
enable_testing()
270+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
271+
add_subdirectory(pdal/test/gtest)
272+
enable_testing()
273+
include_directories(pdal/test/gtest/include .. ${CMAKE_CURRENT_BINARY_DIR})
274+
275+
276+
277+
278+
PDAL_PYTHON_ADD_TEST(pdal_io_numpy_test
279+
FILES
280+
./pdal/test/NumpyReaderTest.cpp
281+
./pdal/test/Support.cpp
282+
./pdal/plang/Invocation.cpp
283+
./pdal/plang/Environment.cpp
284+
./pdal/plang/Redirector.cpp
285+
./pdal/plang/Script.cpp
286+
LINK_WITH
287+
${numpy_reader}
288+
${Python3_LIBRARIES}
289+
${PDAL_LIBRARIES}
290+
${CMAKE_DL_LIBS}
291+
SYSTEM_INCLUDES
292+
${PDAL_INCLUDE_DIRS}
293+
${Python3_INCLUDE_DIRS}
294+
${Python3_NumPy_INCLUDE_DIRS}
295+
)
296+
297+
PDAL_PYTHON_ADD_TEST(pdal_filters_python_test
298+
FILES
299+
./pdal/test/PythonFilterTest.cpp
300+
./pdal/test/Support.cpp
301+
./pdal/plang/Invocation.cpp
302+
./pdal/plang/Environment.cpp
303+
./pdal/plang/Redirector.cpp
304+
./pdal/plang/Script.cpp
305+
LINK_WITH
306+
${python_filter}
307+
${Python3_LIBRARIES}
308+
${PDAL_LIBRARIES}
309+
${CMAKE_DL_LIBS}
310+
SYSTEM_INCLUDES
311+
${PDAL_INCLUDE_DIRS}
312+
${Python3_INCLUDE_DIRS}
313+
${Python3_NumPy_INCLUDE_DIRS}
314+
)
315+
endif (WITH_TESTS)

0 commit comments

Comments
 (0)