Salome HOME
Build SIMANIO on windows using Microsoft Visual Studio 2010.
[tools/simanio.git] / CMakeLists.txt
1 # Copyright (C) 2013-2014  CEA/DEN, EDF R&D, OPEN CASCADE
2 #
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # Lesser General Public License for more details.
12 #
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19
20 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR)
21 PROJECT(SimanIO C CXX)
22
23 # Versioning
24 # ===========
25 # Project name, upper case
26 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
27
28 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 1)
29 SET(${PROJECT_NAME_UC}_MINOR_VERSION 0)
30 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
31 SET(${PROJECT_NAME_UC}_VERSION
32   ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
33
34 # Our own set of macros:
35 LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
36 INCLUDE(SimanIOMacros)
37
38 # Win32 specific definitions to avoid problems with std collection and iterators
39 IF(WIN32)
40   ## Windows specific:
41   ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)  # To disable windows warnings for strcpy, fopen, ...
42   ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS)  # To disable windows warnings generated by checked iterators(e.g. std::copy, std::transform, ...)
43  
44 ################################################################################################
45 #
46 # RNV: In the SALOME sometimes operating with STL collections is done in not fully valid way.
47 #      To avoid run-time exception in Debug mode on Windows default values of the _SECURE_SCL,
48 #      _SECURE_SCL_THROWS and _HAS_ITERATOR_DEBUGGING macros were redefined. It solved a problem
49 #      then we used tne Microsoft Visual Studio 2008 to build SALOME on Windows platform.
50 #      But in the Microsoft Visual Studio 2010 these macros affect on the size of STL collection
51 #      classes(in difference from the Microsoft Visual Studio 2008: in this version of MSVS size
52 #      of the STL collection  classes does not depend on these macros).
53 #      All pre-requisite products are built by MSVS 2010 in Debug mode with the default 
54 #      values of the metioned above macros (namely _SECURE_SCL=1, _HAS_ITERATOR_DEBUGGING=1 and
55 #      _SECURE_SCL_THROWS=1). So SALOME modules should be build in the same configuration.
56 #
57 ################################################################################################ 
58 #  # Disable iterator debugging on WINDOWS to avoid runtime error during checking iterators
59 #    # _SECURE_SCL 
60 #    #             If defined as 1, unsafe iterator use causes a runtime error. 
61 #    #             If defined as 0, checked iterators are disabled.
62 #    #             The default value for _SECURE_SCL is 1
63 #    # _SECURE_SCL_THROWS
64 #    #             If defined as 1, an out of range iterator use causes an exception at runtime.
65 #    #             If defined as 0, the program is terminated by calling invalid_parameter. 
66 #    #             The default value for _SECURE_SCL_THROWS is 0
67 #
68 #  ADD_DEFINITIONS(-D_SECURE_SCL=0 -D_SECURE_SCL_THROWS=0)
69 #
70 #    # The symbol _HAS_ITERATOR_DEBUGGING can be used to turn off the iterator debugging feature in a debug build
71 #    #             If defined as 1, iterator debugging is enabled. 
72 #    #             If defined as 0, iterator debugging is disabled.
73 #    #             The default value for _HAS_ITERATOR_DEBUGGING is 1
74 #
75 #  IF(NOT CMAKE_BUILD_TYPE STREQUAL "RELEASE" AND NOT CMAKE_BUILD_TYPE STREQUAL "Release")
76 #    ADD_DEFINITIONS(-D_HAS_ITERATOR_DEBUGGING=0)
77 #  ENDIF(NOT CMAKE_BUILD_TYPE STREQUAL "RELEASE" AND NOT CMAKE_BUILD_TYPE STREQUAL "Release")
78 ################################################################################################ 
79 ENDIF(WIN32)
80
81
82 # User options
83 # ============
84 IF(WIN32 AND NOT CYGWIN)
85   SET(INSTALL_CMAKE_CONFIG_DIR cmake)
86 ELSE()
87   SET(INSTALL_CMAKE_CONFIG_DIR share/cmake/simanio)
88 ENDIF()
89 SET(INSTALL_INCLUDE_DIR include)
90
91 # Prerequisites detection:
92 # ========================
93 FIND_PACKAGE(SimanIOWSO2 REQUIRED)
94
95 # Configure
96 # =========
97 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/src/SimanIO_Version.hxx.in ${CMAKE_CURRENT_BINARY_DIR}/src/SimanIO_Version.hxx @ONLY)
98 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/src/SimanIO_Version.hxx DESTINATION include)
99
100 ADD_SUBDIRECTORY(src)
101 ADD_SUBDIRECTORY(scripts)
102
103 # Export logic
104 # ============
105 INCLUDE(CMakePackageConfigHelpers)
106
107 # Add all targets to the build-tree export set
108 EXPORT(TARGETS SimanIO FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
109
110 # Create the configuration files:
111 #   - in the build tree:
112
113 #      Ensure the variables are always defined for the configure:
114 SET(WSO2_ROOT_DIR "${WSO2_ROOT_DIR}")
115  
116 SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}/include")
117 CONFIGURE_PACKAGE_CONFIG_FILE(misc/${PROJECT_NAME}Config.cmake.in 
118     ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
119     INSTALL_DESTINATION "${INSTALL_CMAKE_CONFIG_DIR}"
120     PATH_VARS CONF_INCLUDE_DIRS INSTALL_CMAKE_CONFIG_DIR CMAKE_INSTALL_PREFIX WSO2_ROOT_DIR)
121
122 #   - in the install tree:
123 #       Get the relative path of the include directory so 
124 #       we can register it in the generated configuration files:
125 SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
126 CONFIGURE_PACKAGE_CONFIG_FILE(misc/${PROJECT_NAME}Config.cmake.in 
127     ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake
128     INSTALL_DESTINATION "${INSTALL_CMAKE_CONFIG_DIR}"
129     PATH_VARS CONF_INCLUDE_DIRS INSTALL_CMAKE_CONFIG_DIR CMAKE_INSTALL_PREFIX WSO2_ROOT_DIR)
130
131 WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
132     VERSION ${${PROJECT_NAME_UC}_VERSION}
133     COMPATIBILITY AnyNewerVersion)
134   
135 # Install the CMake configuration files:
136 INSTALL(FILES
137   "${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake"
138   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
139   DESTINATION "${INSTALL_CMAKE_CONFIG_DIR}")
140
141 # Install the export set for use with the install-tree
142 INSTALL(EXPORT ${PROJECT_NAME}Targets DESTINATION "${INSTALL_CMAKE_CONFIG_DIR}")