From 30ba348bfd448947156e778c5713bef9f49bbcbe Mon Sep 17 00:00:00 2001 From: Jack Andersen Date: Tue, 4 Jun 2019 14:42:17 -1000 Subject: [PATCH] Make codegen target and module functions usable in-tree --- CMakeLists.txt | 123 ++++++++++++++++++++---------------- cmake/Modules/codegen.cmake | 4 +- 2 files changed, 70 insertions(+), 57 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bd293cc..d9f777e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required(VERSION 3.12) include(CMakePackageConfigHelpers) +cmake_policy(SET CMP0077 NEW) project(codegen VERSION 0.1.0) @@ -15,15 +16,15 @@ target_include_directories( codegen INTERFACE # Add source include files to target's interface include directories for projects using add_subdirectory() - $ + $ ) set(setup_command_args "") -list(APPEND setup_command_args - "${Python3_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/setup.py" "sdist" "-d" "${PROJECT_BINARY_DIR}/dist" +list(APPEND setup_command_args + "${Python3_EXECUTABLE}" "${codegen_SOURCE_DIR}/setup.py" "sdist" "-d" "${codegen_BINARY_DIR}/dist" ) set(package_file_name "codegen-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.tar.gz") -set(package_file "${PROJECT_BINARY_DIR}/dist/${package_file_name}") +set(package_file "${codegen_BINARY_DIR}/dist/${package_file_name}") add_custom_target( codegen_sdist @@ -31,77 +32,86 @@ add_custom_target( COMMAND ${setup_command_args} WORKING_DIRECTORY - "${PROJECT_SOURCE_DIR}" + "${codegen_SOURCE_DIR}" ) add_dependencies(codegen codegen_sdist) -# Install the CMake Module -install( - DIRECTORY "${PROJECT_SOURCE_DIR}/cmake" - DESTINATION "share" -) +# +# If we're told to, make install targets +# +option(CODEGEN_GENERATE_INSTALL_TARGETS "Make codegen install targets" ON) -# Install the python package -install( - FILES "${package_file}" - DESTINATION "share/codegen/" -) +if (CODEGEN_GENERATE_INSTALL_TARGETS) -# Install the project headers -install( - DIRECTORY "${PROJECT_SOURCE_DIR}/include/codegen" - DESTINATION include -) + # Install the CMake Module + install( + DIRECTORY "${codegen_SOURCE_DIR}/cmake" + DESTINATION "share" + ) + + # Install the python package + install( + FILES "${package_file}" + DESTINATION "share/codegen/" + ) + + # Install the project headers + install( + DIRECTORY "${codegen_SOURCE_DIR}/include/codegen" + DESTINATION include + ) -set(version_config_file "${PROJECT_BINARY_DIR}/codegenConfigVersion.cmake") -set(config_file "${PROJECT_BINARY_DIR}/codegenConfig.cmake") -set(config_install_dir "lib/cmake/codegen") + set(version_config_file "${codegen_BINARY_DIR}/codegenConfigVersion.cmake") + set(config_file "${codegen_BINARY_DIR}/codegenConfig.cmake") + set(config_install_dir "lib/cmake/codegen") -# Associate target with export -install( - TARGETS codegen - EXPORT codegenTargets - INCLUDES DESTINATION include # Added to INTERFACE_INCLUDE_DIRECTORIES -) + # Associate target with export + install( + TARGETS codegen + EXPORT codegenTargets + INCLUDES DESTINATION include # Added to INTERFACE_INCLUDE_DIRECTORIES + ) -# Install the target config files -install( - EXPORT codegenTargets - NAMESPACE "codegen::" - DESTINATION "${config_install_dir}" -) + # Install the target config files + install( + EXPORT codegenTargets + NAMESPACE "codegen::" + DESTINATION "${config_install_dir}" + ) -# Generate version config file -write_basic_package_version_file( - "${version_config_file}" - COMPATIBILITY SameMajorVersion -) + # Generate version config file + write_basic_package_version_file( + "${version_config_file}" + COMPATIBILITY SameMajorVersion + ) -# Generate config file -configure_package_config_file( - "Config.cmake.in" - "${config_file}" - INSTALL_DESTINATION "lib/cmake/codegen" -) + # Generate config file + configure_package_config_file( + "Config.cmake.in" + "${config_file}" + INSTALL_DESTINATION "lib/cmake/codegen" + ) -# Install the config files -install( - FILES "${config_file}" "${version_config_file}" - DESTINATION ${config_install_dir} -) + # Install the config files + install( + FILES "${config_file}" "${version_config_file}" + DESTINATION ${config_install_dir} + ) + +endif() # # If we're told to, build the python package at configure time -# +# if (CODEGEN_BUILD_PACKAGE_DURING_CONFIGURE) message(STATUS "Building CodeGen Package") execute_process( COMMAND ${setup_command_args} WORKING_DIRECTORY - "${PROJECT_SOURCE_DIR}" + "${codegen_SOURCE_DIR}" RESULT_VARIABLE setup_result ) if (NOT setup_result EQUAL 0) @@ -109,7 +119,10 @@ if (CODEGEN_BUILD_PACKAGE_DURING_CONFIGURE) endif() # Copy the built package to a place we can easily find it from parent projects - file(COPY "${package_file}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") - file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/${package_file_name}" "${CMAKE_CURRENT_BINARY_DIR}/codegen.tar.gz") + file(COPY "${package_file}" DESTINATION "${codegen_BINARY_DIR}") + file(RENAME "${codegen_BINARY_DIR}/${package_file_name}" "${codegen_BINARY_DIR}/codegen.tar.gz") + set(CODEGEN_PACKAGE "${codegen_BINARY_DIR}/codegen.tar.gz" CACHE FILEPATH "") endif() +# Include module functions for the parent project as well +include(cmake/Modules/codegen.cmake) diff --git a/cmake/Modules/codegen.cmake b/cmake/Modules/codegen.cmake index 57c318c..a284a4b 100644 --- a/cmake/Modules/codegen.cmake +++ b/cmake/Modules/codegen.cmake @@ -51,7 +51,7 @@ function(add_codegen_targets endif() endforeach() if ("${CODEGEN_PACKAGE}" STREQUAL "") - set(CODEGEN_PACKAGE "CODEGEN_PACKAGE-NOTFOUND" CACHE FILEPATH) + set(CODEGEN_PACKAGE "CODEGEN_PACKAGE-NOTFOUND" CACHE FILEPATH "") endif() endif() if ("${CODEGEN_PACKAGE}" STREQUAL "CODEGEN_PACKAGE-NOTFOUND") @@ -224,7 +224,7 @@ function(add_codegen_targets foreach(current_output_file ${current_output_files}) list(APPEND all_output_files "${current_output_file}") endforeach() - + add_custom_command( OUTPUT "${current_output_files}" COMMAND