Skip to content

Commit

Permalink
Merge branch 'master' into debian/latest
Browse files Browse the repository at this point in the history
Signed-off-by: black-desk <me@black-desk.cn>
  • Loading branch information
black-desk committed Feb 1, 2024
2 parents f78e829 + 8f33bdf commit 0bf4b94
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 108 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.23)
project(
ocppi
LANGUAGES CXX
VERSION 0.2.1)
VERSION 0.2.2)

option(OCPPI_BUILD_EXAMPLES "Build examples of ocppi or not"
${PROJECT_IS_TOP_LEVEL})
Expand Down
256 changes: 149 additions & 107 deletions cmake/PFL.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ function(pfl_init)
cmake_parse_arguments(PFL_INIT "" "INSTALL;ENABLE_TESTING;BUILD_EXAMPLES"
"EXTERNALS" ${ARGN})

message(STATUS "PFL: --==Version: v0.2.8==--")
message(STATUS "PFL: --==Version: v0.2.10==--")

set(PFL_ENABLE_TESTING
${PFL_INIT_ENABLE_TESTING}
Expand Down Expand Up @@ -77,27 +77,14 @@ endfunction()
# This function is used to add libraries under the `libs` directory. It just
# takes in a string list contains the directory name under `libs`.
function(pfl_add_libraries)
cmake_parse_arguments(PFL_ADD_LIBRARIES "" "VERSION" "LIBS" ${ARGN})
cmake_parse_arguments(PFL_ADD_LIBRARIES "" "" "LIBS" ${ARGN})

message(
STATUS
"PFL:${PFL_MESSAGE_INDENT} Adding libraries at ${CMAKE_CURRENT_SOURCE_DIR}"
)

set(PFL_MESSAGE_INDENT "${PFL_MESSAGE_INDENT} ")

cmake_path(GET CMAKE_CURRENT_SOURCE_DIR FILENAME TARGET_DIR_NAME)

if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
set(TARGET_DIR_NAME ${PROJECT_NAME})
endif()

string(REPLACE " " "_" TARGET_NAME "${TARGET_DIR_NAME}")
message(STATUS "PFL: Adding libraries at ${CMAKE_CURRENT_SOURCE_DIR}")

if(PFL_PREFIX)
set(PFL_PREFIX "${PFL_PREFIX}::${TARGET_NAME}")
else()
set(PFL_PREFIX "${TARGET_NAME}")
if(NOT "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
message(
FATAL_ERROR
"PFL: pfl_add_libraries can only be called in \$PROJECT_SOURCE_DIR")
endif()

foreach(LIB ${PFL_ADD_LIBRARIES_LIBS})
Expand All @@ -110,30 +97,46 @@ function(pfl_add_libraries)

include(GNUInstallDirs)

if(EXISTS
${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/${TARGET_NAME}-config.cmake.in)
include(CMakePackageConfigHelpers)
# This will be used to replace @PACKAGE_cmakeModulesDir@
set(cmakeModulesDir cmake)

configure_package_config_file(
misc/cmake/${TARGET_NAME}-config.cmake.in
misc/cmake/${TARGET_NAME}-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${TARGET_NAME}
PATH_VARS cmakeModulesDir
NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/misc/cmake/${TARGET_NAME}-config-version.cmake
VERSION ${PFL_ADD_LIBRARIES_VERSION}
COMPATIBILITY SameMajorVersion)
string(TOLOWER "${PROJECT_NAME}" LOWER_PROJECT_NAME)
set(CONFIG_FILE misc/cmake/${LOWER_PROJECT_NAME}-config.cmake)
set(VERSION_FILE misc/cmake/${LOWER_PROJECT_NAME}-config-version.cmake)
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_FILE}.in)
set(CONFIG_FILE misc/cmake/${PROJECT_NAME}Config.cmake)
set(VERSION_FILE misc/cmake/${LOWER_PROJECT_NAME}ConfigVersion.cmake)
endif()

install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/misc/cmake/${TARGET_NAME}-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/misc/cmake/${TARGET_NAME}-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${TARGET_NAME})
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_FILE}.in)
message(STATUS "PFL: tried ")
message(
WARNING
"PFL: tried ${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/${PROJECT_NAME}Config.cmake.in"
)
message(
FATAL_ERROR
"PFL: cmake config file not found."
"${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/${LOWER_PROJECT_NAME}-config.cmake.in"
"${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/${PROJECT_NAME}Config.cmake.in")
endif()

include(CMakePackageConfigHelpers)
# This will be used to replace @PACKAGE_cmakeModulesDir@
set(cmakeModulesDir cmake)

configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_FILE}.in
${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_FILE}
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
PATH_VARS cmakeModulesDir
NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)

write_basic_package_version_file(
${VERSION_FILE}
VERSION ${PFL_ADD_LIBRARIES_VERSION}
COMPATIBILITY SameMajorVersion)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_FILE}
${CMAKE_CURRENT_BINARY_DIR}/${VERSION_FILE}
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
endfunction()

# This function is used to add a library.
Expand Down Expand Up @@ -187,13 +190,20 @@ function(pfl_add_library)
string(REPLACE "::" "__" TARGET_PREFIX "${PFL_PREFIX}")

set(TARGET_NAME "${TARGET_PREFIX}__${TARGET_NAME}")
string(REPLACE "__" "::" TARGET_EXPORT_NAME "${TARGET_NAME}")
string(REPLACE "__" "::" TARGET_ALIAS "${TARGET_NAME}")

if(NOT PFL_ADD_LIBRARY_OUTPUT_NAME)
set(PFL_ADD_LIBRARY_OUTPUT_NAME ${TARGET_NAME})
message(
WARNING
"PFL: OUTPUT_NAME of ${TARGET_ALIAS} not set, using ${PFL_ADD_LIBRARY_OUTPUT_NAME}"
)
endif()

message(
STATUS
"PFL:${PFL_MESSAGE_INDENT} Adding library ${TARGET_NAME} as ${TARGET_EXPORT_NAME} at ${CMAKE_CURRENT_SOURCE_DIR}"
"PFL: Adding library ${PFL_ADD_LIBRARY_OUTPUT_NAME} as ${TARGET_ALIAS} at ${CMAKE_CURRENT_SOURCE_DIR}"
)
set(PFL_MESSAGE_INDENT "${PFL_MESSAGE_INDENT} ")

__pfl_configure_files(INS ${PFL_ADD_LIBRARY_INS} HEADERS
PFL_ADD_LIBRARY_HEADERS SOURCES PFL_ADD_LIBRARY_SOURCES)
Expand All @@ -212,17 +222,15 @@ function(pfl_add_library)
PROPERTIES SOVERSION ${PFL_ADD_LIBRARY_SOVERSION})
endif()

if(NOT "${TARGET_EXPORT_NAME}" STREQUAL "${TARGET_NAME}")
add_library("${TARGET_EXPORT_NAME}" ALIAS "${TARGET_NAME}")
if(NOT "${TARGET_ALIAS}" STREQUAL "${TARGET_NAME}")
add_library("${TARGET_ALIAS}" ALIAS "${TARGET_NAME}")
endif()

set_target_properties("${TARGET_NAME}" PROPERTIES EXPORT_NAME
${TARGET_DIR_NAME})

if(PFL_ADD_LIBRARY_OUTPUT_NAME)
set_target_properties("${TARGET_NAME}"
PROPERTIES OUTPUT_NAME ${PFL_ADD_LIBRARY_OUTPUT_NAME})
endif()
set_target_properties("${TARGET_NAME}"
PROPERTIES OUTPUT_NAME ${PFL_ADD_LIBRARY_OUTPUT_NAME})

target_sources(
${TARGET_NAME}
Expand Down Expand Up @@ -255,41 +263,58 @@ function(pfl_add_library)
if(PFL_INSTALL AND NOT PFL_ADD_LIBRARY_INTERNAL)
include(GNUInstallDirs)

set(EXPORT_NAME ${PFL_ADD_LIBRARY_OUTPUT_NAME})
if(NOT EXPORT_NAME)
set(EXPORT_NAME ${TARGET_NAME})
endif()

install(
TARGETS "${TARGET_NAME}"
EXPORT "${TARGET_NAME}"
EXPORT "${EXPORT_NAME}"
FILE_SET HEADERS)

install(
EXPORT "${TARGET_NAME}"
EXPORT "${EXPORT_NAME}"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
FILE "${TARGET_NAME}.cmake"
FILE "${EXPORT_NAME}.cmake"
NAMESPACE ${PFL_PREFIX}::)

if(EXISTS
${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/${TARGET_NAME}-config.cmake.in)
include(CMakePackageConfigHelpers)
# This will be used to replace @PACKAGE_cmakeModulesDir@
set(cmakeModulesDir cmake)

configure_package_config_file(
misc/cmake/${TARGET_NAME}-config.cmake.in
misc/cmake/${TARGET_NAME}-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${TARGET_NAME}
PATH_VARS cmakeModulesDir
NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/misc/cmake/${TARGET_NAME}-config-version.cmake
VERSION ${PFL_ADD_LIBRARY_VERSION}
COMPATIBILITY SameMajorVersion)

install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/misc/cmake/${TARGET_NAME}-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/misc/cmake/${TARGET_NAME}-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
string(TOLOWER "${EXPORT_NAME}" LOWER_EXPORT_NAME)
set(CONFIG_FILE misc/cmake/${LOWER_EXPORT_NAME}-config.cmake)
set(VERSION_FILE misc/cmake/${LOWER_EXPORT_NAME}-config-version.cmake)
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_FILE}.in)
set(CONFIG_FILE misc/cmake/${EXPORT_NAME}Config.cmake)
set(VERSION_FILE misc/cmake/${LOWER_EXPORT_NAME}ConfigVersion.cmake)
endif()

if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_FILE}.in)
message(
FATAL_ERROR
"PFL: cmake config file not found."
"${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/${LOWER_EXPORT_NAME}-config.cmake.in"
"${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/${EXPORT_NAME}Config.cmake.in"
)
endif()

include(CMakePackageConfigHelpers)
# This will be used to replace @PACKAGE_cmakeModulesDir@
set(cmakeModulesDir cmake)

configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_FILE}.in
${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_FILE}
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
PATH_VARS cmakeModulesDir
NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)

write_basic_package_version_file(
${VERSION_FILE}
VERSION ${PFL_ADD_LIBRARIES_VERSION}
COMPATIBILITY SameMajorVersion)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_FILE}
${CMAKE_CURRENT_BINARY_DIR}/${VERSION_FILE}
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
endif()

if(PFL_PREFIX)
Expand All @@ -298,40 +323,48 @@ function(pfl_add_library)
set(PFL_PREFIX "${TARGET_DIR_NAME}")
endif()

if(PFL_ENABLE_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
message(
STATUS
"PFL:${PFL_MESSAGE_INDENT} Adding tests for library ${TARGET_EXPORT_NAME} at ${CMAKE_CURRENT_SOURCE_DIR}/tests"
)
set(PFL_MESSAGE_INDENT "${PFL_MESSAGE_INDENT} ")
add_subdirectory(tests)
string(SUBSTRING "${PFL_MESSAGE_INDENT}" 2 -1 PFL_MESSAGE_INDENT)
if(PFL_ENABLE_TESTING)
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
message(
WARNING
"PFL: Tests of library ${TARGET_ALIAS} is enabled but directory ${CMAKE_CURRENT_SOURCE_DIR}/tests not found."
)
else()
message(
STATUS
"PFL: Adding tests for library ${TARGET_ALIAS} at ${CMAKE_CURRENT_SOURCE_DIR}/tests"
)
add_subdirectory(tests)
endif()
endif()

if(PFL_ADD_LIBRARY_EXAMPLES
AND PFL_BUILD_EXAMPLES
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/examples")
message(
STATUS
"PFL:${PFL_MESSAGE_INDENT} Adding examples for library ${TARGET_EXPORT_NAME} at ${CMAKE_CURRENT_SOURCE_DIR}/examples"
)
set(PFL_MESSAGE_INDENT "${PFL_MESSAGE_INDENT} ")
foreach(EXAMPLE ${PFL_ADD_LIBRARY_EXAMPLES})
add_subdirectory("examples/${EXAMPLE}")
endforeach()
string(SUBSTRING "${PFL_MESSAGE_INDENT}" 2 -1 PFL_MESSAGE_INDENT)
if(PFL_ADD_LIBRARY_EXAMPLES)
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/examples")
message(
WARNING
"PFL: Examples of library ${TARGET_ALIAS} is enabled but directory ${CMAKE_CURRENT_SOURCE_DIR}/examples not found."
)
else()
if(PFL_BUILD_EXAMPLES)
message(
STATUS
"PFL: Adding examples for library ${TARGET_ALIAS} at ${CMAKE_CURRENT_SOURCE_DIR}/examples"
)
foreach(EXAMPLE ${PFL_ADD_LIBRARY_EXAMPLES})
add_subdirectory("examples/${EXAMPLE}")
endforeach()
endif()
endif()
endif()

if(PFL_ADD_LIBRARY_APPS AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/apps")
message(
STATUS
"PFL:${PFL_MESSAGE_INDENT} Adding apps for library ${TARGET_EXPORT_NAME} at ${CMAKE_CURRENT_SOURCE_DIR}/apps"
"PFL: Adding apps for library ${TARGET_ALIAS} at ${CMAKE_CURRENT_SOURCE_DIR}/apps"
)
set(PFL_MESSAGE_INDENT "${PFL_MESSAGE_INDENT} ")
foreach(APP ${PFL_ADD_LIBRARY_APPS})
add_subdirectory("apps/${APP}")
endforeach()
string(SUBSTRING "${PFL_MESSAGE_INDENT}" 2 -1 PFL_MESSAGE_INDENT)
endif()
endfunction()

Expand Down Expand Up @@ -360,27 +393,36 @@ function(pfl_add_executable)

string(REPLACE "::" "__" TARGET_PREFIX "${PFL_PREFIX}")

if(TARGET_PREFIX)
set(TARGET_NAME "${TARGET_PREFIX}__${TARGET_NAME}")
set(TARGET_NAME "${TARGET_PREFIX}__${TARGET_NAME}")

string(REPLACE "__" "::" TARGET_ALIAS "${TARGET_NAME}")

if(NOT PFL_ADD_EXECUTABLE_OUTPUT_NAME)
set(PFL_ADD_EXECUTABLE_OUTPUT_NAME "${TARGET_NAME}")
message(
WARNING
"PFL: OUTPUT_NAME of ${TARGET_ALIAS} not set, using ${PFL_ADD_EXECUTABLE_OUTPUT_NAME}"
)
endif()

message(
STATUS
"PFL:${PFL_MESSAGE_INDENT} Adding executable ${TARGET_NAME} at ${CMAKE_CURRENT_SOURCE_DIR}"
"PFL: Adding executable ${PFL_ADD_EXECUTABLE_OUTPUT_NAME} as ${TARGET_ALIAS} at ${CMAKE_CURRENT_SOURCE_DIR}"
)
set(PFL_MESSAGE_INDENT "${PFL_MESSAGE_INDENT} ")

__pfl_configure_files(
INS ${PFL_ADD_EXECUTABLE_INS} HEADERS PFL_ADD_EXECUTABLE_HEADERS SOURCES
PFL_ADD_EXECUTABLE_SOURCES)

add_executable("${TARGET_NAME}" ${PFL_ADD_EXECUTABLE_SOURCES})

if(PFL_ADD_EXECUTABLE_OUTPUT_NAME)
set_target_properties(
"${TARGET_NAME}" PROPERTIES OUTPUT_NAME ${PFL_ADD_EXECUTABLE_OUTPUT_NAME})
if(NOT "${TARGET_ALIAS}" STREQUAL "${TARGET_NAME}")
add_executable("${TARGET_ALIAS}" ALIAS "${TARGET_NAME}")
endif()

set_target_properties(
"${TARGET_NAME}" PROPERTIES OUTPUT_NAME ${PFL_ADD_EXECUTABLE_OUTPUT_NAME})

target_sources(
${TARGET_NAME}
PUBLIC FILE_SET
Expand Down

0 comments on commit 0bf4b94

Please sign in to comment.