find_package(PythonConfiguration)
find_package(PythonLibs)
find_package(Numpy)

if (PYTHONLIBS_FOUND AND PYTHON_NUMPY_INCLUDE_PATH)

    set( ENABLE_SWIG_PYTHON "yes"
     CACHE INTERNAL "Enable building of SWIG bindings for Python" )

endif(PYTHONLIBS_FOUND AND PYTHON_NUMPY_INCLUDE_PATH)

if ( ENABLE_SWIG_PYTHON )
  # Ubuntu 12 uses numpy 1.6.1, some of our
  # buffer code cares if we use 1.6 and older numpy
  if( ${PYTHON_NUMPY_VERSION} VERSION_LESS "1.7.0" )
    set ( HAVE_OLD_NUMPY "-DHAVE_OLD_NUMPY" )
  endif( ${PYTHON_NUMPY_VERSION} VERSION_LESS "1.7.0" )

  include(${SWIG_USE_FILE})
  include_directories( BEFORE ${PYTHON_INCLUDE_PATH})
  include_directories( BEFORE ${PYTHON_NUMPY_INCLUDE_PATH})
  include_directories( BEFORE ${PROJECT_BINARY_DIR}/src/client)
  include_directories( BEFORE ${PROJECT_BINARY_DIR}/swig/common/module)
  include_directories( BEFORE ${PROJECT_SOURCE_DIR}/swig/common/module)
  include_directories( BEFORE ${CMAKE_CURRENT_SOURCE_DIR})

  if( NOT PYTHON_MODULE_INSTALL_DIR )
    set( PYTHON_MODULE_INSTALL_DIR ${pythondir_full} CACHE PATH "Installation directory for Python modules" )
  endif( NOT PYTHON_MODULE_INSTALL_DIR )
  if( NOT PYTHON_EXTMODULE_INSTALL_DIR )
    set( PYTHON_EXTMODULE_INSTALL_DIR ${pyexecdir_full} CACHE PATH "Installation directory for Python extension modules" )
  endif( NOT PYTHON_EXTMODULE_INSTALL_DIR )

  set(INTERFACE_FILE "nds_python.i")
  set(CMAKE_SWIG_FLAGS "-shadow" "-importall" "-Wall" "-classic" "-threads" "-O" ${HAVE_OLD_NUMPY})
  set_source_files_properties( ${INTERFACE_FILE}
    PROPERTIES
      SWIG_FLAGS "-includeall"
      CPLUSPLUS on )
  set_source_files_properties( nds2.cc PROPERTIES GENERATED true )

  swig_add_module( nds2 python ${INTERFACE_FILE} )
  swig_link_libraries( nds2 ${PYTHON_LIBRARIES} ndswrapcxx )

  # handle pyc/pyo files, these are done differently in python2/3
  # we make an assumption here that we are using cpython for python3
  if (${PYTHON_VERSION_MAJOR} EQUAL 2)
    set(PYC_DIR "")
    set(PYC_FILE "nds2.pyc")
    set(PYO_FILE "nds2.pyo")
  elseif (${PYTHON_VERSION_MAJOR} EQUAL 3)
    set(PYC_DIR "/__pycache__")
    set(PYC_FILE "__pycache__/nds2.cpython-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.pyc")
    set(PYO_FILE "__pycache__/nds2.cpython-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.opt-1.pyc")
  else (${PYTHON_VERSION_MAJOR} EQUAL 2)
    message(FATAL_ERROR "This version of python is not yet supported for use in builds of the nds2 client")
  endif (${PYTHON_VERSION_MAJOR} EQUAL 2)
  add_custom_command(
    #--------------------------------------------------------------------
    # Compile python standard
    #--------------------------------------------------------------------
    OUTPUT
      ${CMAKE_CURRENT_BINARY_DIR}/${PYC_FILE}
    COMMAND ${PYTHON_EXECUTABLE} -m py_compile "${CMAKE_CURRENT_BINARY_DIR}/nds2.py"
    DEPENDS ${SWIG_MODULE_nds2_REAL_NAME}
    )
  add_custom_command(
    #--------------------------------------------------------------------
    # Compile python with optimization
    #--------------------------------------------------------------------
    OUTPUT
      ${CMAKE_CURRENT_BINARY_DIR}/${PYO_FILE}
    COMMAND ${PYTHON_EXECUTABLE} -O -m py_compile "${CMAKE_CURRENT_BINARY_DIR}/nds2.py"
    DEPENDS ${SWIG_MODULE_nds2_REAL_NAME}
    )
  add_custom_target(
    nds2_python_compile
    ALL
    DEPENDS
      ${CMAKE_CURRENT_BINARY_DIR}/${PYC_FILE}
      ${CMAKE_CURRENT_BINARY_DIR}/${PYO_FILE}
      )
  #======================================================================
  # Configuration file rules
  #======================================================================
  configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/nds2-client-python.cfg.in
    ${CMAKE_CURRENT_BINARY_DIR}/nds2-client-py${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.cfg
    @ONLY )
  #======================================================================
  # Installation Rules
  #======================================================================
  if ( NOT WIN32 )
    get_swig_property( nds2_module_filename MODULE_OUTPUT_NAME nds2)
    cpack_add_component(Python
	    DISPLAY_NAME "Python extensions"
	    DESCRIPTION
	      "Pieces needed to use the nds2 client from Python"
	    GROUP Runtime)
    install(
      FILES ${CMAKE_CURRENT_BINARY_DIR}/nds2-client-py${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.cfg
      DESTINATION "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${PROJECT_NAME}"
      COMPONENT Python
      )

    install(
      TARGETS ${SWIG_MODULE_nds2_REAL_NAME}
      DESTINATION "${PYTHON_EXTMODULE_INSTALL_DIR}"
      COMPONENT Python
      )
    install(
      FILES
        ${CMAKE_CURRENT_BINARY_DIR}/nds2.py
	DESTINATION ${PYTHON_MODULE_INSTALL_DIR}
        COMPONENT Python
    )
    install(
      FILES
	${CMAKE_CURRENT_BINARY_DIR}/${PYC_FILE}
	${CMAKE_CURRENT_BINARY_DIR}/${PYO_FILE}
	DESTINATION ${PYTHON_MODULE_INSTALL_DIR}${PYC_DIR}
        COMPONENT Python
    )
  endif( NOT WIN32 )
endif ( ENABLE_SWIG_PYTHON )
