pism

[fork] customized build of PISM, the parallel ice sheet model (tillflux branch)
git clone git://src.adamsgaard.dk/pism # fast
git clone https://src.adamsgaard.dk/pism.git # slow
Log | Files | Refs | README | LICENSE Back to index

CMakeLists.txt (3912B)


      1 if (Pism_BUILD_PYTHON_BINDINGS)
      2   include(${SWIG_USE_FILE})
      3 
      4   include_directories (. ${PETSC4PY_INCLUDES} ${PYTHON_INCLUDE_DIRS} ${Pism_SOURCE_DIR}/src)
      5 
      6   set(PISM_PYTHON_BINDING_LIBRARIES "pism")
      7 
      8   list(APPEND PISM_Python_deps
      9     AgeModel.i
     10     geometry.i
     11     pism_BedDef.i
     12     pism_ColumnSystem.i
     13     pism_DM.i
     14     pism_FlowLaw.i
     15     pism_Hydrology.i
     16     pism_IceGrid.i
     17     pism_IceModelVec.i
     18     pism_File.i
     19     pism_SIA.i
     20     pism_SSA.i
     21     pism_Timeseries.i
     22     pism_VariableMetadata.i
     23     pism_Vars.i
     24     pism_Vec.i
     25     pism_atmosphere.i
     26     pism_energy.i
     27     pism_exception.i
     28     pism_inverse.i
     29     pism_ocean.i
     30     pism_options.i
     31     pism_surface.i
     32     pism_verification.i
     33     pism_frontalmelt.i
     34     pism_calving.i
     35     )
     36 
     37   set_property(SOURCE PISM.i PROPERTY SWIG_FLAGS "-I${CMAKE_BINARY_DIR}" APPEND)
     38 
     39   if(Pism_USE_JANSSON)
     40     set_property(SOURCE PISM.i PROPERTY SWIG_FLAGS "-DPism_USE_JANSSON=1" APPEND)
     41   else()
     42     set_property(SOURCE PISM.i PROPERTY SWIG_FLAGS "-DPism_USE_JANSSON=0" APPEND)
     43   endif()
     44 
     45   set_source_files_properties(PISM.i PROPERTIES
     46     CPLUSPLUS ON
     47     SWIG_MODULE_NAME cpp)
     48 
     49   # has to be set *before* calling SWIG_ADD_MODULE
     50   set(SWIG_MODULE_cpp_EXTRA_DEPS ${PISM_Python_deps})
     51 
     52   if (${CMAKE_VERSION} VERSION_LESS "3.8.0")
     53     SWIG_ADD_MODULE(cpp python PISM.i pism_python.cc)
     54   else()
     55     SWIG_ADD_LIBRARY(cpp
     56       LANGUAGE python
     57       SOURCES PISM.i pism_python.cc)
     58   endif()
     59   SWIG_LINK_LIBRARIES(cpp ${PYTHON_LIBRARIES} ${PISM_PYTHON_BINDING_LIBRARIES})
     60 
     61   # Disable compiler warnings:
     62   SET_SOURCE_FILES_PROPERTIES(${swig_generated_file_fullname}
     63     PROPERTIES COMPILE_FLAGS "-w")
     64 
     65   add_custom_target (clean_swig
     66     COMMAND ${CMAKE_COMMAND} -E touch PISM.i
     67     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
     68     VERBATIM)
     69 
     70   # Disable compiler warnings:
     71   SET_SOURCE_FILES_PROPERTIES(${swig_generated_file_fullname}
     72     PROPERTIES COMPILE_FLAGS "-w")
     73 
     74   # Generate version_info.py to make PETSc's version information available to PISM's
     75   # Python bindings. This is necessary to initialize petsc4py using the correct PETSC_ARCH
     76   # value *before* importing PISM.cpp.
     77   configure_file(version_info.py.in version_info.py ESCAPE_QUOTES)
     78 
     79   # Install Python .py files
     80   install(FILES
     81     $<TARGET_FILE:_cpp>
     82     ${CMAKE_CURRENT_BINARY_DIR}/cpp.py
     83     ${CMAKE_CURRENT_BINARY_DIR}/version_info.py
     84     DESTINATION ${PISM_INSTALL_PYTHON_MODULE_DIR}/PISM
     85     COMPONENT RuntimeLibraries
     86     )
     87 
     88   add_custom_target (install_python_bindings_in_the_build_directory ALL
     89     COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:_cpp> ${CMAKE_BINARY_DIR}/site-packages/PISM
     90     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/cpp.py ${CMAKE_BINARY_DIR}/site-packages/PISM/
     91     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/version_info.py ${CMAKE_BINARY_DIR}/site-packages/PISM/
     92     VERBATIM
     93     DEPENDS ${SWIG_MODULE_cpp_REAL_NAME}  install_site_packages_in_the_build_directory )
     94 
     95   # The Python code snippet below returns 1 if Python can import a PISM
     96   # and if the directory of said PISM matches the place we are about to
     97   # install PISM's Python wrappers. If the return value is not 1, we
     98   # print a message stating how to set your PYTHONPATH.
     99   set (pism_test_py "${PROJECT_BINARY_DIR}/pism_test.py")
    100   file (WRITE "${pism_test_py}" "
    101 from os.path import realpath, join
    102 try:
    103     import PISM
    104 except:
    105     exit(0)
    106 
    107 if realpath(PISM.__file__) == realpath(join('${PISM_INSTALL_PYTHON_MODULE_DIR}', 'PISM', '__init__.pyc')):
    108     exit(1)
    109 ")
    110 
    111   install(CODE "EXEC_PROGRAM( ${PYTHON_EXECUTABLE} ARGS ${pism_test_py} RETURN_VALUE PISM_PYTHON_MATCHES OUTPUT_VARIABLE PYTHON_OUT )
    112 if(NOT PISM_PYTHON_MATCHES)
    113     MESSAGE(\"\n   ATTENTION! To complete installation of Python bindings you need to add\n\n   export PYTHONPATH=${PISM_INSTALL_PYTHON_MODULE_DIR}:\$PYTHONPATH\n\n   to your .bashrc or equivalent. \")
    114 endif()
    115 " )
    116 
    117 endif(Pism_BUILD_PYTHON_BINDINGS)