# pynest/CMakeLists.txt
#
# This file is part of NEST.
#
# Copyright (C) 2004 The NEST Initiative
#
# NEST is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# NEST is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with NEST. If not, see .
if ( HAVE_PYTHON )
if ( CYTHON_FOUND )
include( UseCython )
set_source_files_properties(
pynestkernel.pyx
PROPERTIES CYTHON_IS_CXX TRUE )
cython_add_module( pynestkernel pynestkernel.pyx )
else ()
# require the source pynest/pynestkernel.cxx precompiled
set( pynestkernel_generated_file "NOTFOUND" )
if ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/pynestkernel.cxx )
set( pynestkernel_generated_file pynestkernel.cxx )
elseif ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/pynestkernel.cpp )
set( pynestkernel_generated_file pynestkernel.cpp )
endif ()
if ( pynestkernel_generated_file STREQUAL "NOTFOUND" )
message( FATAL_ERROR "You have configured NEST to build the Python bindings PyNEST, but "
"either there is no Cython version found on your system or you decided to "
"not have NEST cythonize the bindings. Either install Cython (>=0.19.2) or cythonize the "
"PyNEST bindings yourself on a system with a suitable version of Cython (>=0.19.2):\n"
" cd /pynest\n"
" cythonize pynestkernel.pyx\n"
"And copy the file `pynestkernel.cpp` into ${CMAKE_CURRENT_SOURCE_DIR}/pynest ." )
endif ()
python_add_module( pynestkernel ${pynestkernel_generated_file} pynestkernel.pxd )
if ( APPLE )
set_target_properties( pynestkernel PROPERTIES LINK_FLAGS "-undefined dynamic_lookup" )
else ()
set_target_properties( pynestkernel PROPERTIES LINK_FLAGS "-Wl,--no-as-needed")
target_link_libraries( pynestkernel ${PYTHON_LIBRARIES} )
endif ()
endif ()
target_link_libraries( pynestkernel
nest_lib nestutil nestkernel random sli_lib
${SLI_MODULES} ${EXTERNAL_MODULE_LIBRARIES}
)
target_include_directories( pynestkernel PRIVATE
${PROJECT_BINARY_DIR}/libnestutil
${PROJECT_SOURCE_DIR}/libnestutil
${PROJECT_SOURCE_DIR}/nest
${PROJECT_SOURCE_DIR}/nestkernel
${PROJECT_SOURCE_DIR}/librandom
${PROJECT_SOURCE_DIR}/sli
${SLI_MODULE_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
)
target_compile_definitions( pynestkernel PRIVATE
-D_IS_PYNEST
)
install( CODE "execute_process(
COMMAND ${PYTHON} setup.py build --build-base=${CMAKE_CURRENT_BINARY_DIR}/build
install --prefix=${CMAKE_INSTALL_PREFIX}
--install-lib=${CMAKE_INSTALL_PREFIX}/${PYEXECDIR}
--install-scripts=${CMAKE_INSTALL_FULL_BINDIR}
--install-data=${CMAKE_INSTALL_FULL_DATADIR}
WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")"
)
install( TARGETS pynestkernel DESTINATION ${PYEXECDIR}/nest/ )
install( FILES ${PROJECT_BINARY_DIR}/pynest/do_tests.py
DESTINATION ${CMAKE_INSTALL_DATADIR}/extras
)
install( DIRECTORY examples/
DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples/pynest
)
find_program( NOSETESTS nosetests )
if ( NOT NOSETESTS STREQUAL "NOSETESTS-NOTFOUND" )
add_test( NAME PyNEST
COMMAND ${NOSETESTS} -v --with-xunit
--xunit-file=${PROJECT_BINARY_DIR}/reports/pynest_tests.xml
${CMAKE_INSTALL_PREFIX}/${PYEXECDIR}/nest/tests
)
endif ()
endif ()