diff --git a/CMakeLists.txt b/CMakeLists.txt index c5a3e96f42343649c90a9bd5889ca4b03d978616..d9251974b8dd47987cf7101639f8be8d8093e561 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,46 +1,66 @@ cmake_minimum_required( VERSION 2.8 ) +# Explicitly add INCREMENTAL linking option to command lines. +# http://www.cmake.org/pipermail/cmake/2010-February/035174.html +set( MSVC_INCREMENTAL_DEFAULT ON ) + +# --------------------------------------------------------------------- +project( Elastix ) + # Include SuperElastix CMake scripts -list( APPEND CMAKE_MODULE_PATH - "${CMAKE_CURRENT_SOURCE_DIR}/CMake" +list( APPEND CMAKE_MODULE_PATH + "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ) -if( CMAKE_HOST_WIN32 ) +if( ${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC" ) include( elxWinConfig.cmake ) endif() -#--------------------------------------------------------------------- -project( Elastix ) - -#--------------------------------------------------------------------- +# --------------------------------------------------------------------- # ITK find_package( ITK REQUIRED ) -set( ITK_NO_IO_FACTORY_REGISTER_MANAGER 1 ) include( ${ITK_USE_FILE} ) include( "${CMAKE_CURRENT_SOURCE_DIR}/CMake/elxITKRequiredModules.cmake" ) -#--------------------------------------------------------------------- +# --------------------------------------------------------------------- # Build Elastix -#--------------------------------------------------------------------- -# Testing +set( ELASTIX_COMMON_INCLUDE_DIRECTORIES + ${CMAKE_SOURCE_DIR}/Modules/Core/Common/include +) -# Build tests by default -option( ELASTIX_BUILD_TESTING "Enable building tests." ON ) +set( ELASTIX_CORE_INCLUDE_DIRECTORIES + ${CMAKE_SOURCE_DIR}/Modules/Core/Blueprints/include +) + +set( ELASTIX_INCLUDE_DIRECTORIES + ${ELASTIX_COMMON_INCLUDE_DIRECTORIES} + ${ELASTIX_CORE_INCLUDE_DIRECTORIES} +) + +include_directories( ${ELASTIX_INCLUDE_DIRECTORIES} ) +add_subdirectory( Modules ) -# ExternalData module requires newer CMake versions +# --------------------------------------------------------------------- +# Testing + +# Testing requires CMake version 2.8.11 to download test data if( CMAKE_VERSION VERSION_LESS 2.8.11 ) - set( ELASTIX_BUILD_TESTING OFF FORCE ) - message( STATUS "ELASTIX_BUILD_TESTING was set to OFF because CMake version is less than 2.8.11") + set( ELASTIX_BUILD_TESTING_DEFAULT OFF ) + message( STATUS "ELASTIX_BUILD_TESTING is set to OFF by default because CMake version is less than 2.8.11" ) +else() + set( ELASTIX BUILD_TESTING_DEFAULT ON ) endif() +option( ELASTIX_BUILD_TESTING "Enable building tests." ${ELASTIX_BUILD_TESTING_DEFAULT} ) + if( ELASTIX_BUILD_TESTING ) enable_testing() add_subdirectory( Testing ) endif() -#--------------------------------------------------------------------- +# --------------------------------------------------------------------- # Build Documentation mark_as_advanced( ELASTIX_BUILD_DOXYGEN ) diff --git a/Modules/CMakeLists.txt b/Modules/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..ed8ac28d118442a7668ad4b7d36363991a040500 --- /dev/null +++ b/Modules/CMakeLists.txt @@ -0,0 +1,3 @@ +add_subdirectory( + Core +) \ No newline at end of file diff --git a/Modules/Core/CMakeLists.txt b/Modules/Core/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..dac4f7215cdf262d7f6c95cbbf835032a65bd4ce --- /dev/null +++ b/Modules/Core/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory( + Common + Blueprints +) \ No newline at end of file diff --git a/Modules/Core/Common/CMakeLists.txt b/Modules/Core/Common/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..fc2d9b4b5d0a3c36a784b891478afd95cc7c4302 --- /dev/null +++ b/Modules/Core/Common/CMakeLists.txt @@ -0,0 +1 @@ +include_directories( include ) \ No newline at end of file diff --git a/Modules/Core/Common/include/elxMacro.h b/Modules/Core/Common/include/elxMacro.h new file mode 100644 index 0000000000000000000000000000000000000000..d176d1a5dce073af5baa7421e4e35628bbfc9504 --- /dev/null +++ b/Modules/Core/Common/include/elxMacro.h @@ -0,0 +1,15 @@ +#ifndef __elxMacro_h +#define __elxMacro_h + +/** + * Register class with the object factory and provide + * associated RTTI (Run-Time Type Information) + */ +#define elxNewMacro( className, superClassName ) \ + typedef className Self; \ + typedef itk::SmartPointer< Self > Pointer; \ + typedef itk::SmartPointer< const Self > ConstPointer; \ + itkNewMacro( Self ); \ + itkTypeMacro( Self, superClassName ); \ + +#endif // __elxMacro_h \ No newline at end of file diff --git a/Testing/Unit/elxDataDirectories.h.in b/Testing/Unit/elxDataDirectories.h.in index 835845d15b56febeb9f8d8ca19b81b8a344555b3..2081964057c33d7647da456782aff3e956135efd 100644 --- a/Testing/Unit/elxDataDirectories.h.in +++ b/Testing/Unit/elxDataDirectories.h.in @@ -1,5 +1,5 @@ -#ifndef __elxTestDataDirectories_h -#define __elxTestDataDirectories_h +#ifndef __elxDataDirectories_h +#define __elxDataDirectories_h #define ELASTIX_UNITTEST_INPUT_DATA_DIR "@ELASTIX_UNITTEST_INPUT_DATA_DIR@" #define ELASTIX_UNITTEST_OUTPUT_DATA_DIR "@ELASTIX_UNITTEST_OUTPUT_DATA_DIR@" diff --git a/Testing/Unit/elxDataManager.cxx b/Testing/Unit/elxDataManager.cxx index e9aa4e4afd6f58cc26420fdd947bfbc29817cae9..d8da329264412ee10f1c8b8e3763cd34efe82877 100644 --- a/Testing/Unit/elxDataManager.cxx +++ b/Testing/Unit/elxDataManager.cxx @@ -5,25 +5,25 @@ std::string DataManager -::GetInput( const std::string filename ) const +::GetInputFullPath( const std::string filename ) const { - const std::string path = this->GetInputDirectory() + this->GetPathSeparator() + filename; + const std::string path = this->GetInputDirectory() + this->GetFolderSeparator() + filename; return path; } std::string DataManager -::GetOutput( const std::string filename ) const +::GetOutputFullPath( const std::string filename ) const { - const std::string path = this->GetOutputDirectory() + this->GetPathSeparator() + filename; + const std::string path = this->GetOutputDirectory() + this->GetFolderSeparator() + filename; return path; } std::string DataManager -::GetBaseline( const std::string filename ) const +::GetBaselineFullPath( const std::string filename ) const { - const std::string path = this->GetBaselineDirectory() + this->GetPathSeparator() + filename; + const std::string path = this->GetBaselineDirectory() + this->GetFolderSeparator() + filename; return path; } diff --git a/Testing/Unit/elxDataManager.h b/Testing/Unit/elxDataManager.h index 61d4dcade79545c7c85210f663d9ca07390e3f5c..fb826d0414c3d31c9be56b4e65011c2fe20fb3fe 100644 --- a/Testing/Unit/elxDataManager.h +++ b/Testing/Unit/elxDataManager.h @@ -3,15 +3,17 @@ #include <string> -#include "itkMacro.h" -#include "itkProcessObject.h" - +#include "elxMacro.h" +#include "itkObjectFactory.h" +#include "itkLightObject.h" #include "elxDataDirectories.h" -class DataManager +class DataManager : public itk::LightObject { public: + elxNewMacro( DataManager, itk::LightObject ); + DataManager() { this->m_InputDirectory = ELASTIX_UNITTEST_INPUT_DATA_DIR; @@ -20,12 +22,21 @@ public: } std::string GetInputDirectory( void ) const { return this->m_InputDirectory; }; - std::string GetOutputDirectory( void ) const { return this->m_InputDirectory; }; - std::string GetBaselineDirectory( void ) const { return this->m_InputDirectory; }; + std::string GetOutputDirectory( void ) const { return this->m_OutputDirectory; }; + std::string GetBaselineDirectory( void ) const { return this->m_BaselineDirectory; }; - std::string GetInput( const std::string filename ) const; - std::string GetOutput( const std::string filename ) const; - std::string GetBaseline( const std::string filename ) const; + std::string GetInputFullPath( const std::string filename ) const; + std::string GetOutputFullPath( const std::string filename ) const; + std::string GetBaselineFullPath( const std::string filename ) const; + + std::string GetFolderSeparator() const + { +#ifdef WIN32 + return "\\"; +#else + return "/"; +#endif + } std::string GetPathSeparator () const {