From c57d99a21c082b002b83ac4785fea183ba5c9df2 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Mon, 14 Jul 2014 16:26:10 +0200 Subject: [PATCH] Add CalamaresAddModuleSubdirectory, a CMake function for modules that do not require building through a CMakeLists.txt. --- CMakeLists.txt | 3 ++- CalamaresAddModuleSubdirectory.cmake | 36 ++++++++++++++++++++++++++++ CalamaresUse.cmake.in | 1 + src/modules/CMakeLists.txt | 8 +++---- 4 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 CalamaresAddModuleSubdirectory.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 027323364..9027b23c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,8 +74,9 @@ configure_file( # Early configure these files as we need them later on configure_file( CalamaresUse.cmake.in "${PROJECT_BINARY_DIR}/CalamaresUse.cmake" @ONLY ) -file( COPY CalamaresAddPlugin.cmake DESTINATION "${PROJECT_BINARY_DIR}" ) file( COPY CalamaresAddLibrary.cmake DESTINATION "${PROJECT_BINARY_DIR}" ) +file( COPY CalamaresAddModuleSubdirectory.cmake DESTINATION "${PROJECT_BINARY_DIR}" ) +file( COPY CalamaresAddPlugin.cmake DESTINATION "${PROJECT_BINARY_DIR}" ) set( CALAMARES_LIBRARIES calamareslib ) diff --git a/CalamaresAddModuleSubdirectory.cmake b/CalamaresAddModuleSubdirectory.cmake new file mode 100644 index 000000000..f94ef0851 --- /dev/null +++ b/CalamaresAddModuleSubdirectory.cmake @@ -0,0 +1,36 @@ +include( CMakeColors ) + +function( calamares_add_module_subdirectory ) + set( SUBDIRECTORY ${ARGV0} ) + + # If this subdirectory has a CMakeLists.txt, we add_subdirectory it... + if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/CMakeLists.txt" ) + add_subdirectory( ${SUBDIRECTORY} ) + # ...otherwise, we look for a module.conf. + elseif( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/module.conf" ) + set( MODULES_DIR ${CMAKE_INSTALL_LIBDIR}/calamares/modules ) + set( MODULE_DESTINATION ${MODULES_DIR}/${SUBDIRECTORY} ) + + # We glob all the files inside the subdirectory, and we make sure they are + # synced with the bindir structure and installed. + file( GLOB MODULE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY} "${SUBDIRECTORY}/*" ) + foreach( MODULE_FILE ${MODULE_FILES} ) + if( NOT IS_DIRECTORY( ${MODULE_FILE} ) ) + configure_file( ${SUBDIRECTORY}/${MODULE_FILE} ${SUBDIRECTORY}/${MODULE_FILE} COPYONLY ) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${MODULE_FILE} + DESTINATION ${MODULE_DESTINATION} ) + endif() + endforeach() + + message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} module: ${BoldRed}${SUBDIRECTORY}${ColorReset}" ) + if( NOT CMAKE_BUILD_TYPE STREQUAL "Release" ) + message( " ${Green}TYPE:${ColorReset} jobmodule" ) +# message( " ${Green}FILES:${ColorReset} ${MODULE_FILES}" ) + message( " ${Green}MODULE_DESTINATION:${ColorReset} ${MODULE_DESTINATION}" ) + message( "" ) + endif() + else() + message( "-- ${BoldYellow}Warning:${ColorReset} tried to add module subdirectory ${BoldRed}${SUBDIRECTORY}${ColorReset} which has no CMakeLists.txt or module.conf." ) + message( "" ) + endif() +endfunction() diff --git a/CalamaresUse.cmake.in b/CalamaresUse.cmake.in index b534b4707..d31b7d41c 100644 --- a/CalamaresUse.cmake.in +++ b/CalamaresUse.cmake.in @@ -7,4 +7,5 @@ if(NOT CALAMARES_CMAKE_DIR) endif() include( "${CALAMARES_CMAKE_DIR}/CalamaresAddLibrary.cmake" ) +include( "${CALAMARES_CMAKE_DIR}/CalamaresAddModuleSubdirectory.cmake" ) include( "${CALAMARES_CMAKE_DIR}/CalamaresAddPlugin.cmake" ) diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt index f418511f2..8d6f239d7 100644 --- a/src/modules/CMakeLists.txt +++ b/src/modules/CMakeLists.txt @@ -1,6 +1,6 @@ -file(GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*") -foreach(SUBDIRECTORY ${SUBDIRECTORIES}) - if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/CMakeLists.txt") - add_subdirectory(${SUBDIRECTORY}) +file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) +foreach( SUBDIRECTORY ${SUBDIRECTORIES} ) + if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" ) + calamares_add_module_subdirectory( ${SUBDIRECTORY} ) endif() endforeach()