Skip to content
Snippets Groups Projects
Commit 3a203878 authored by Markus Blatt's avatar Markus Blatt
Browse files

- List the cmake modules explicitly (file(GLOB will not detect changes

  after configure)
- Make CMake module installation path configurable
- Detect CMAKE_MODULE_PATH automatically
  + First call find_package(dune-common) to query its CMAKE_MODULE_PATH
  + Then setup the module path
  + After each find_package of dune module update the CMAK_MODULE_PATH
  + each module exports ist own <package-name>_MODULE_PATH in the
  + package configuration files
- Adapted dunecontrol and duneproject accordingly.

[[Imported from SVN: r6996]]
parent 9034f00e
No related branches found
No related tags found
No related merge requests found
......@@ -3,10 +3,10 @@ project("dune-common" C CXX)
# general stuff
cmake_minimum_required(VERSION 2.8)
message("CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}|")
# make sure our own modules are found
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules")
message("CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}")
# set the script dir for the macros.
set(DUNE_COMMON_SCRIPT_DIR "${CMAKE_SOURCE_DIR}/cmake/scripts")
......
......@@ -405,13 +405,6 @@ run_default_configure () {
else
PARAMS="$PARAMS \"--with-$name=$path\""
fi
if test -d "$path/cmake/modules/"; then
CMAKE_MODULE_PATH="$CMAKE_MODULE_PATH;$path/cmake/modules/"
fi
if test -d "$path/share/cmake/modules/"; then
CMAKE_MODULE_PATH="$CMAKE_MODULE_PATH;$path/share/cmake/modules/"
fi
echo name="$name"
if test "x$USE_CMAKE" = "xyes"; then
if test -d "$path/$BUILDDIR"; then
CMAKE_PARAMS="$CMAKE_PARAMS \"-D""$name""_DIR=$path/$BUILDDIR\""
......@@ -425,10 +418,6 @@ run_default_configure () {
fi
done
CMAKE_MODULE_PATH=`echo $CMAKE_MODULE_PATH| sed "s/^;//"`
echo "CMAKE_MODULE_PATH=$CMAKE_MODULE_PATH"
echo "CMAKE_PARAMS=$CMAKE_PARAMS"
if test "x$HAVE_duneweb" == "xyes"; then
PARAMS="$PARAMS \"--with-duneweb=$PATH_duneweb\""
fi
......
......@@ -465,11 +465,13 @@ M_DELIM
################## CMakeLists.txt ##################
echo " - $PROJECT/CMakeLists.txt"
cat> "$PROJECT/CMakeLists.txt" << M_DELIM
cmake_minimum_required(VERSION 2.8.9)
cmake_minimum_required(VERSION 2.8)
project($PROJECT CXX)
# for this to work you will have to modify the CMAKE_MODULE_PATH
set(CMAKE_MODULE_PATH \${CMAKE_MODULE_PATH} "\${CMAKE_SOURCE_DIR}/cmake/modules")
#find dune-common and set the module path
find_package(dune-common)
list(APPEND CMAKE_MODULE_PATH ${dune-common_MODULE_PATH}
"${CMAKE_SOURCE_DIR}/cmake/modules")
#include the dune macros
include(DuneMacros)
......@@ -865,7 +867,10 @@ set(@DUNE_MOD_NAME@_CXX_FLAGS_DEBUG "@CMAKE_CXX_FLAGS_DEBUG@")
set(@DUNE_MOD_NAME@_CXX_FLAGS_MINSIZEREL "@CMAKE_CXX_FLAGS_MINSIZEREL@")
set(@DUNE_MOD_NAME@_CXX_FLAGS_RELEASE "@CMAKE_CXX_FLAGS_RELEASE@")
set(@DUNE_MOD_NAME@_CXX_FLAGS_RELWITHDEBINFO "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@")
set(@DUNE_MOD_NAME@_LIBRARIES "")
set(@DUNE_MOD_NAME@_LIBRARIES "") # list exported libraries here
set(@DUNE_MOD_NAME@_DEPENDS "@DUNE_DEPENDS@")
set(@DUNE_MOD_NAME@_SUGGESTS "@DUNE_SUGGESTS@")
endif(NOT @DUNE_MOD_NAME@_FOUND)
endif(NOT @DUNE_MOD_NAME@_FOUND)
EOF
......@@ -890,6 +895,10 @@ set(@DUNE_MOD_NAME@_CXX_FLAGS_DEBUG "@CMAKE_CXX_FLAGS_DEBUG@")
set(@DUNE_MOD_NAME@_CXX_FLAGS_MINSIZEREL "@CMAKE_CXX_FLAGS_MINSIZEREL@")
set(@DUNE_MOD_NAME@_CXX_FLAGS_RELEASE "@CMAKE_CXX_FLAGS_RELEASE@")
set(@DUNE_MOD_NAME@_CXX_FLAGS_RELWITHDEBINFO "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@")
set(@DUNE_MOD_NAME@_MODULE_PATH "@DUNE_INSTALL_MODULEDIR@")
set(@DUNE_MOD_NAME@_LIBRARIES "") # list libraries
set(@DUNE_MOD_NAME@_DEPENDS "@DUNE_DEPENDS@")
set(@DUNE_MOD_NAME@_SUGGESTS "@DUNE_SUGGESTS@")
endif(NOT @DUNE_MOD_NAME@_FOUND)
EOF
......
file(GLOB modules *.cmake)
install(FILES ${modules} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/modules)
set(modules DuneBoost.cmake
DuneCommonMacros.cmake
DuneDoc.cmake
DuneDoxygen.cmake
DuneMacros.cmake
DuneMPI.cmake
DunePkgConfig.cmake
DuneStreams.cmake
DuneTestMacros.cmake
DuneTests.cmake
FindBoostFusion.cmake
FindCXX11Features.cmake
FindGMP.cmake
FindInkscape.cmake
FindMETIS.cmake
FindParMETIS.cmake
FindSharedPtr.cmake
LanguageSupport.cmake
UseLATEX.cmake)
install(FILES ${modules} DESTINATION ${DUNE_INSTALL_MODULEDIR})
......@@ -198,6 +198,9 @@ macro(dune_process_dependency_leafs modules versions is_required next_level_deps
foreach(i RANGE 0 ${length})
list(GET mmodules ${i} _mod)
find_package(${_mod} ${REQUIRED})
if(${_mod}_MODULE_PATH)
list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
endif(${_mod}_MODULE_PATH)
set(${_mod}_SEARCHED ON)
if(NOT "${is_required}" STREQUAL "")
set(${_mod}_REQUIRED ON)
......@@ -261,10 +264,16 @@ macro(dune_create_dependency_tree)
set(global_suggests ${SUGGESTS_MODULE})
foreach(_mod ${DEPENDS_MODULE})
find_package(${_mod} REQUIRED)
if(${_mod}_MODULE_PATH)
list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
endif(${_mod}_MODULE_PATH)
set(${_mod}_REQUIRED ON)
endforeach(_mod ${DEPENDS_MODULE})
foreach(_mod ${SUGGESTS_MODULE})
find_package(${_mod})
if(${_mod}_MODULE_PATH)
list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
endif(${_mod}_MODULE_PATH)
set(${_mod}_REQUIRED ON)
endforeach(_mod ${SUGGESTS_MODULE})
dune_create_dependency_leafs("${DEPENDS_MODULE}" "${DEPENDS_VERSIONS}"
......@@ -275,6 +284,7 @@ macro(dune_create_dependency_tree)
# reverse ALL_DEPENDENCIES
list(REVERSE ALL_DEPENDENCIES)
list(REMOVE_DUPLICATES ALL_DEPENDENCIES)
list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
endmacro(dune_create_dependency_tree _immediates)
# Converts a module name given by _dune_module into a string _macro_name
......@@ -461,6 +471,15 @@ macro(dune_project)
message(STATUS "There are no tests for module ${DUNE_MOD_NAME}.")
endif(_mod_cmake)
include(GNUInstallDirs)
# Set variable where the cmake modules will be installed.
# Thus the user can override it and for example install
# directly into the CMake installation. This has to be an
# absolute path. Default: ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/cmake/modules
if(NOT DEFINED DUNE_INSTALL_MODULEDIR)
set(DUNE_INSTALL_MODULEDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/cmake/modules
CACHE PATH
"Installation directory for CMake modules. Be careful when overriding this as the modules might not be found any more. Might be set to ${CMAKE_ROOT}/Modules or better \${CMAKE_ROOT}/Modules to make the modules available to all CMake runs. This has to be an absolute path. Default: \${CMAKE_INSTALL_PREFIX}/\${CMAKE_INSTALL_DATAROOTDIR}/cmake/modules")
endif()
endmacro(dune_project MODULE_DIR)
# create a new config.h file and overwrite the existing one
......
......@@ -17,7 +17,8 @@ set(@DUNE_MOD_NAME@_CXX_FLAGS_RELWITHDEBINFO "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@")
set(@DUNE_MOD_NAME@_LIBRARIES "dunecommon")
set(@DUNE_MOD_NAME@_SCRIPT_DIR "${_prefix}/share/cmake/scripts")
set(@DUNE_MOD_NAME@_SCRIPT_SOURCE_DIR "${_prefix}/share/cmake/scripts")
set(DOXYSTYLE_FILE "${_prefix}/share/dune-common/doc/doxygen/Doxystyle")
set(DOXYSTYLE_FILE "${_prefix}/share/doc/dune-common/doxygen/Doxystyle")
set(@DUNE_MOD_NAME@_DEPENDS "@DUNE_DEPENDS@")
set(@DUNE_MOD_NAME@_SUGGESTS "@DUNE_SUGGESTS@")
set(@DUNE_MOD_NAME@_MODULE_PATH "@DUNE_INSTALL_MODULEDIR@")
endif(NOT @DUNE_MOD_NAME@_FOUND)
\ No newline at end of file
......@@ -15,4 +15,5 @@ set(@DUNE_MOD_NAME@_SCRIPT_DIR "@CMAKE_SOURCE_DIR@/cmake/scripts")
set(DOXYSTYLE_FILE "@CMAKE_SOURCE_DIR@/doc/doxygen/Doxystyle")
set(@DUNE_MOD_NAME@_DEPENDS "@DUNE_DEPENDS@")
set(@DUNE_MOD_NAME@_SUGGESTS "@DUNE_SUGGESTS@")
set(@DUNE_MOD_NAME@_MODULE_PATH "@CMAKE_SOURCE_DIR@/cmake/modules")
endif(NOT @DUNE_MOD_NAME@_FOUND)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment