Skip to content
Snippets Groups Projects
elxModules.cmake 2.11 KiB
Newer Older
# ---------------------------------------------------------------------
# Private helper macros

macro( _elxmodule_check_name MODULE )
  if( NOT "${_name}" MATCHES "^[a-zA-Z_]*$" )
    message( FATAL_ERROR "Invalid module name: ${MODULE}" )
  endif()

  list( FIND ELASTIX_MODULES "${MODULE}" MODULE_FOUND )
  if( ${MODULE_FOUND} EQUAL -1 )
    message( FATAL_ERROR "Module not found: ${MODULE}")
  endif()
endmacro()

macro( _elxmodule_enable MODULE )
  _elxmodule_check_name( ${MODULE} )

  if( NOT ${MODULE}_ENABLED )
    include( ${${MODULE}_FILE} )

    if( ${MODULE}_INCLUDE_DIRS )
      include_directories( ${${MODULE}_INCLUDE_DIRS} )
    endif()

    if( ${MODULE}_LIBRARIES )
      link_directories( ${${MODULE}_LIBRARY_DIRS} )
      list( APPEND ELASTIX_LIBRARIES ${${MODULE}_LIBRARIES} )
    endif()

    # TODO: Add recursive dependency walk
  endif()
endmacro()

macro( _elxmodule_disable MODULE )
  # TODO
endmacro()

macro( _elxmodules_initialize )
  set( ELASTIX_LIBRARIES )
  set( ELASTIX_MODULES )
  file( GLOB_RECURSE MODULE_FILES RELATIVE "${CMAKE_SOURCE_DIR}"
     "${CMAKE_SOURCE_DIR}/Modules/*/Module*.cmake"
  )

  message( STATUS "Found the following elastix modules:")
  foreach( MODULE_FILE ${MODULE_FILES})
    get_filename_component( MODULE_NAME ${MODULE_FILE} NAME_WE )
    get_filename_component( ${MODULE_NAME}_PATH ${MODULE_FILE} PATH )
    
    message( STATUS "  ${MODULE_NAME}" )
    option( "ELASTIX_USE_${MODULE_NAME}" OFF )
    set( "${MODULE_NAME}_FILE" ${CMAKE_SOURCE_DIR}/${MODULE_FILE} )
    set( "${MODULE_NAME}_ENABLED" OFF )
    set( ${MODULE_NAME}_SOURCE_DIR ${CMAKE_SOURCE_DIR}/${${MODULE_NAME}_PATH} )
    set( ${MODULE_NAME}_BINARY_DIR ${CMAKE_BINARY_DIR}/${${MODULE_NAME}_PATH} )
    set( ${MODULE_NAME}_INCLUDE_DIRS )
    set( ${MODULE_NAME}_LIBRARY_DIRS )
    set( ${MODULE_NAME}_LIBRARIES )
    list(APPEND ELASTIX_MODULES ${MODULE_NAME} )
  endforeach()
endmacro()

_elxmodules_initialize()

# ---------------------------------------------------------------------
# Public interface

macro( elxmodule_enable MODULE )
  _elxmodule_enable( ${MODULE} )
endmacro()