@@ -164,38 +164,6 @@ else()
164164 set (DYND_CUDA_01 0)
165165endif ()
166166
167- set (pydynd_SRC
168- dynd/include/conversions.hpp
169- dynd/include/copy_from_numpy_arrfunc.hpp
170- dynd/include/exception_translation.hpp
171- dynd/include/functional.hpp
172- dynd/include/git_version.hpp
173- dynd/include/init.hpp
174- dynd/include/type_functions.hpp
175- dynd/include/utility_functions.hpp
176- dynd/include/visibility.hpp
177- dynd/src/conversions.cpp
178- ${CMAKE_CURRENT_BINARY_DIR } /dynd/src/git_version.cpp
179- dynd/src/git_version.cpp.in
180- )
181-
182- add_library (pydynd SHARED ${pydynd_SRC} )
183- set_property (
184- TARGET pydynd
185- PROPERTY COMPILE_DEFINITIONS PYDYND_EXPORT
186- )
187-
188- if (APPLE )
189- set_target_properties (pydynd PROPERTIES LINK_FLAGS "-undefined dynamic_lookup" )
190- elseif (WIN32 )
191- target_link_libraries (pydynd "${PYTHON_LIBRARIES} " )
192- endif ()
193- if (DYND_INSTALL_LIB)
194- target_link_libraries (pydynd "${LIBDYND_LIBRARIES} " )
195- else ()
196- target_link_libraries (pydynd libdynd )
197- endif ()
198-
199167foreach (pyx_api_file dynd/nd/array.pyx dynd/nd/callable.pyx dynd/ndt/type.pyx)
200168 set_source_files_properties (${pyx_api_file} PROPERTIES CYTHON_API 1)
201169 set_source_files_properties (${pyx_api_file} PROPERTIES CYTHON_PUBLIC 1)
@@ -205,53 +173,68 @@ set_source_files_properties(dynd/config.pyx PROPERTIES CYTHON_API 1)
205173
206174cython_add_module (dynd.nd.array dynd.nd.array_pyx True
207175 # Additional C++ source files:
208- dynd/src/array_as_pep3118.cpp
209- dynd/src/assign.cpp
210176 dynd/include/do_import_array.hpp
211177 dynd/include/numpy_interop.hpp
178+ dynd/src/array_as_pep3118.cpp
212179 dynd/src/array_as_numpy.cpp
213180 dynd/src/array_from_py.cpp
214181 dynd/src/array_from_py_typededuction.cpp
182+ dynd/src/assign.cpp
183+ dynd/src/conversions.cpp
215184 dynd/src/copy_from_numpy_arrfunc.cpp
216185 dynd/src/init.cpp
217186 dynd/src/functional.cpp
218187 dynd/src/numpy_interop.cpp
219188 dynd/src/types/pyobject_type.cpp
220189 )
221- set_property (
222- TARGET dynd.nd.array
223- PROPERTY COMPILE_DEFINITIONS PYDYND_EXPORT
224- )
225190
226- foreach (module dynd.config dynd.ndt.type dynd.ndt.json dynd.nd.callable dynd.nd.functional dynd.nd.registry)
227- cython_add_module (${module} ${module} _pyx True )
228- endforeach (module )
229-
230- foreach (module dynd.config dynd.ndt.type dynd.ndt.json dynd.nd.array dynd.nd.callable dynd.nd.functional dynd.nd.registry)
231- # Make sure libpydynd is on the rpath.
232- # This has no effect on Windows.
233- if (APPLE )
234- set (module_install_rpath "@loader_path" )
235- else ()
236- set (module_install_rpath "$ORIGIN" )
237- endif ()
238- string (REPLACE "." ";" module_directories "${module} " )
239- list (LENGTH module_directories i)
240- while (${i} GREATER 2)
241- set (module_install_rpath "${module_install_rpath} /.." )
242- math (EXPR i "${i} - 1" )
243- endwhile (${i} GREATER 2 )
244- # set(module_install_rpath "/opt/anaconda/envs/_test/lib/python2.7/site-packages/dynd/")
245- set_target_properties (${module} PROPERTIES INSTALL_RPATH ${module_install_rpath} )
191+ cython_add_module (dynd.config dynd.config_pyx True
192+ dynd/include/exception_translation.hpp
193+ dynd/src/conversions.cpp
194+ ${CMAKE_CURRENT_BINARY_DIR } /dynd/src/git_version.cpp
195+ )
246196
247- target_link_libraries (${module} pydynd )
197+ foreach (module dynd.ndt.type dynd.ndt.json dynd.nd.callable dynd.nd.functional dynd.nd.registry)
198+ cython_add_module (${module} ${module} _pyx True dynd/src/conversions.cpp )
248199endforeach (module )
249200
250- add_dependencies (pydynd dynd.nd.array_pyx dynd.nd.callable_pyx dynd.ndt.type_pyx )
251-
252201# Run a postprocess script to work around some Cython bugs
253202# that haven't been fixed in the latest release.
254203postprocess_cython ( postprocess.py dynd.ndt.type_postprocess dynd.ndt.type_pyx dynd.ndt.type )
255204postprocess_cython ( postprocess.py dynd.nd.array_postprocess dynd.nd.array_pyx dynd.nd.array )
256205postprocess_cython ( postprocess.py dynd.nd.callable_postprocess dynd.nd.callable_pyx dynd.nd.callable )
257- add_dependencies (pydynd dynd.ndt.type_postprocess dynd.nd.array_postprocess dynd.nd.callable_postprocess )
206+
207+ foreach (module dynd.config dynd.ndt.type dynd.ndt.json dynd.nd.array dynd.nd.callable dynd.nd.functional dynd.nd.registry)
208+ # Temporarily continue to define PYDYND_EXPORT to avoid inconsistent linkage warnings.
209+ # This should be removed once the macros have been refactored to hide all symbols
210+ # other than module initialization routines.
211+ set_property (
212+ TARGET ${module}
213+ PROPERTY COMPILE_DEFINITIONS PYDYND_EXPORT
214+ )
215+ # Make sure the api headers are all built and postprocessed
216+ # before anything tries to build conversions.cpp
217+ add_dependencies (${module} dynd.nd.array_postprocess dynd.nd.callable_postprocess dynd.ndt.type_postprocess )
218+ if (DYND_INSTALL_LIB)
219+ target_link_libraries (${module} "${LIBDYND_LIBRARIES} " )
220+ else ()
221+ target_link_libraries (${module} libdynd )
222+ if (UNIX )
223+ # Make sure libdynd is on the rpath.
224+ # On Windows, the dll is loaded dynamically via the logic in
225+ # dynd/__init__.py
226+ if (APPLE )
227+ set (module_install_rpath "@loader_path" )
228+ else ()
229+ set (module_install_rpath "$ORIGIN" )
230+ endif ()
231+ string (REPLACE "." ";" module_directories "${module} " )
232+ list (LENGTH module_directories i)
233+ while (${i} GREATER 2)
234+ set (module_install_rpath "${module_install_rpath} /.." )
235+ math (EXPR i "${i} - 1" )
236+ endwhile (${i} GREATER 2 )
237+ set_target_properties (${module} PROPERTIES INSTALL_RPATH ${module_install_rpath} )
238+ endif ()
239+ endif ()
240+ endforeach (module )
0 commit comments