v0.14.0
ModulesList.cmake
Go to the documentation of this file.
1 #
2 
3 # Load precompiled headers to the speed-up compilation process.
4 include(cmake/PrecompileHeaders.cmake)
5 
6 # Get user module commit id and pass to cpp for logging
7 include(${MoFEM_INSTALL_DIR}/include/cmake/GetGitRevisionSimple.cmake)
8 
9 # If the basic UMs are already loaded target to um library. Otherwise, build a
10 # basic user modules library.
11 if(EXTERNAL_MODULES_BUILD)
12 
13  find_package(
14  UM REQUIRED HINTS ${MOFEM_DIR} ${PROJECT_BINARY_DIR} $ENV{MOFEM_DIR})
15 
16 
17  #FIXME: check if users_modules_targets.cmake, and include only if it does
18 
19  if(UM_INSTALL_PREFIX)
20  include(
21  ${UM_INSTALL_PREFIX}/lib/basic_finite_elements/users_modules_targets.cmake)
22  else(UM_INSTALL_PREFIX)
23  include(
24  ${MoFEM_INSTALL_DIR}/lib/basic_finite_elements/users_modules_targets.cmake)
25  endif(UM_INSTALL_PREFIX)
26 
27 else(EXTERNAL_MODULES_BUILD)
28 
29  get_git_hash(${PROJECT_SOURCE_DIR} GIT_UM_SHA1)
30  get_git_tag(${PROJECT_SOURCE_DIR} "v${UM_FALLBACK_VERSION}" GIT_VERSION)
31  get_git_version(
32  ${GIT_VERSION} UM_VERSION_MAJOR UM_VERSION_MINOR UM_VERSION_BUILD)
33 
34  # Find modules in a users modules source directory. If file
35  # InstalledAddModule.cmake is found in the directory, it is recognised that
36  # directory is module and name of directory become module name.
37  file(
38  GLOB_RECURSE INSTLLED_MODULES
39  FOLLOW_SYMLINKS
40  ${PROJECT_SOURCE_DIR}/?*/InstalledAddModule.cmake)
41  # Compile tools
42  add_subdirectory(${PROJECT_SOURCE_DIR}/tools)
43 endif(EXTERNAL_MODULES_BUILD)
44 
45 message(STATUS "MoFEM version ${MoFEM_VERSION}")
46 set(UM_VERSON
47  ${UM_VERSION_MAJOR}.${UM_VERSION_MINOR}.${UM_VERSION_BUILD}
48  CACHE STRING "UM version" FORCE)
49 message(STATUS "User Module commit id: " ${GIT_UM_SHA1})
50 message(STATUS "UM GIT_TAG ${GIT_VERSION}")
51 message(STATUS "UM Version v${UM_VERSON}")
52 
53 add_definitions(-DUM_VERSION_MAJOR="${UM_VERSION_MAJOR}")
54 add_definitions(-DUM_VERSION_MINOR="${UM_VERSION_MINOR}")
55 add_definitions(-DUM_VERSION_BUILD="${UM_VERSION_BUILD}")
56 add_definitions(-DGIT_UM_SHA1_NAME="${GIT_UM_SHA1}")
57 
58 include(cmake/CheckMoFEMVersion.cmake)
59 
60 # Find modules in an external directory. If file InstalledAddModule.cmake if
61 # found in the directory, it is recognised that director is module and name of
62 # directory become module name.
63 if(EXTERNAL_MODULE_SOURCE_DIRS)
64  foreach(LOOP_DIR ${EXTERNAL_MODULE_SOURCE_DIRS})
65  message(STATUS "Search module directory: " ${LOOP_DIR})
66  file(
67  GLOB_RECURSE EXTERNAL_INSTLLED_MODULES
68  FOLLOW_SYMLINKS
69  ${LOOP_DIR}/*InstalledAddModule.cmake)
70  message(STATUS "Found: " ${EXTERNAL_INSTLLED_MODULES})
71  set(INSTLLED_MODULES ${INSTLLED_MODULES} ${EXTERNAL_INSTLLED_MODULES})
72  endforeach(LOOP_DIR)
73 endif(EXTERNAL_MODULE_SOURCE_DIRS)
74 
75 # Install modules && git pull for all users modules
76 add_custom_target(
77  update_users_modules
78  COMMENT "Update all modules ..." VERBATIM)
79 add_custom_target(
80  checkout_develop
81  COMMENT "Checkout develop branch ..." VERBATIM)
82 add_custom_target(
83  checkout_master
84  COMMENT "Checkout master branch ..." VERBATIM)
85 
86 # Recognise that module is installed
87 foreach(LOOP_MODULE ${INSTLLED_MODULES})
88  string(REGEX REPLACE
89  "/+InstalledAddModule.cmake" ""
90  MODULE_DIRECTORY ${LOOP_MODULE})
91  string(REGEX REPLACE
92  ".*/+" ""
93  MODULE_NAME ${MODULE_DIRECTORY})
94  string(REGEX REPLACE "-" "_" MODULE_NAME ${MODULE_NAME})
95  string(TOUPPER ${MODULE_NAME} MODULE_NAME)
96  message(STATUS "Add definitions to the compiler command -DWITH_MODULE_${MODULE_NAME}")
97  add_definitions(-DWITH_MODULE_${MODULE_NAME})
98 endforeach(LOOP_MODULE)
99 
100 # Add custom tags for all modules
101 foreach(LOOP_MODULE ${INSTLLED_MODULES})
102  # message(STATUS "${LOOP_MODULE}")
103  string(REGEX REPLACE
104  "/+InstalledAddModule.cmake" ""
105  MODULE_DIRECTORY ${LOOP_MODULE})
106  message(STATUS "Add module ... ${MODULE_DIRECTORY}")
107  string(REGEX REPLACE
108  ".*/+" ""
109  MODULE_NAME ${MODULE_DIRECTORY}
110  )
111  if(
112  NOT ${MODULE_NAME} MATCHES "basic_finite_elements"
113  AND
114  NOT ${MODULE_NAME} MATCHES "tutorials")
115  #message(STATUS "Add custom targets for ${MODULE_NAME}")
116  add_custom_target(
117  update_${MODULE_NAME}
118  COMMAND ${GIT_EXECUTABLE} pull
119  WORKING_DIRECTORY ${MODULE_DIRECTORY}
120  COMMENT "Update module ... ${MODULE_NAME}" VERBATIM)
121  add_dependencies(update_users_modules update_${MODULE_NAME})
122  add_custom_target(
123  checkout_develop_${MODULE_NAME}
124  COMMAND ${GIT_EXECUTABLE} checkout develop
125  WORKING_DIRECTORY ${MODULE_DIRECTORY}
126  COMMENT "Checkout develop baranch for module ${MODULE_NAME}" VERBATIM)
127  add_dependencies(checkout_develop checkout_develop_${MODULE_NAME})
128  add_custom_target(
129  checkout_master_${MODULE_NAME}
130  COMMAND ${GIT_EXECUTABLE} checkout master
131  WORKING_DIRECTORY ${MODULE_DIRECTORY}
132  COMMENT "Checkout master baranch for module ${MODULE_NAME}" VERBATIM)
133  add_dependencies(checkout_master checkout_master_${MODULE_NAME})
134  endif(
135  NOT ${MODULE_NAME} MATCHES "basic_finite_elements"
136  AND
137  NOT ${MODULE_NAME} MATCHES "tutorials")
138  # include module
139  include(${LOOP_MODULE})
140 endforeach(LOOP_MODULE)
141 
142 if(NOT EXTERNAL_MODULES_BUILD)
143 
144  # Generate config files
145  configure_file(
146  ${PROJECT_SOURCE_DIR}/UMConfig-version.cmake.in
147  ${PROJECT_BINARY_DIR}/UMConfig-version.cmake)
148  configure_file(
149  ${PROJECT_SOURCE_DIR}/UMConfig.cmake.in
150  ${PROJECT_BINARY_DIR}/UMConfig.cmake)
151  # Install project files
152  install(
153  FILES ${PROJECT_BINARY_DIR}/UMConfig.cmake
154  DESTINATION ${CMAKE_INSTALL_PREFIX})
155  install(
156  FILES ${PROJECT_BINARY_DIR}/UMConfig-version.cmake
157  DESTINATION ${CMAKE_INSTALL_PREFIX})
158 
159 endif(NOT EXTERNAL_MODULES_BUILD)