1
0
Fork 0
mirror of https://github.com/Neargye/magic_enum.git synced 2026-01-10 23:44:29 +00:00

add gh workflow for checking of working installed version

microfix

add gh workflow part for pkgconfig

uncomment that should not be commented

move some add_subdirectory to logically correct place
This commit is contained in:
Arniiiii 2024-08-15 05:58:45 +00:00
parent dae6bbf16c
commit cf574c407f
5 changed files with 287 additions and 110 deletions

58
.cmake-format Normal file
View file

@ -0,0 +1,58 @@
format:
tab_size: 2
line_width: 100
dangle_parens: true
parse:
additional_commands:
cpmaddpackage:
pargs:
nargs: '*'
flags: []
spelling: CPMAddPackage
kwargs: &cpmaddpackagekwargs
NAME: 1
FORCE: 1
VERSION: 1
GIT_TAG: 1
DOWNLOAD_ONLY: 1
GITHUB_REPOSITORY: 1
GITLAB_REPOSITORY: 1
GIT_REPOSITORY: 1
SVN_REPOSITORY: 1
SVN_REVISION: 1
SOURCE_DIR: 1
DOWNLOAD_COMMAND: 1
FIND_PACKAGE_ARGUMENTS: 1
NO_CACHE: 1
GIT_SHALLOW: 1
URL: 1
URL_HASH: 1
URL_MD5: 1
DOWNLOAD_NAME: 1
DOWNLOAD_NO_EXTRACT: 1
HTTP_USERNAME: 1
HTTP_PASSWORD: 1
OPTIONS: +
cpmfindpackage:
pargs:
nargs: '*'
flags: []
spelling: CPMFindPackage
kwargs: *cpmaddpackagekwargs
packageproject:
pargs:
nargs: '*'
flags: []
spelling: packageProject
kwargs:
NAME: 1
VERSION: 1
NAMESPACE: 1
INCLUDE_DIR: 1
INCLUDE_DESTINATION: 1
BINARY_DIR: 1
COMPATIBILITY: 1
VERSION_HEADER: 1
DEPENDENCIES: +

View file

@ -0,0 +1,59 @@
name: ubuntu_test_installed_version.yml
on:
push:
branches:
- master
- main
pull_request:
branches:
- master
- main
env:
CTEST_OUTPUT_ON_FAILURE: 1
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: "**/cpm_modules"
key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }}
- name: install library
run: |
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release --log-level=DEBUG -DCMAKE_INSTALL_PREFIX=./install_dir
cmake --install ./build --prefix ./install_dir
rm -rf build
- name: configure with installed version via cmake
run: CMAKE_PREFIX_PATH="./install_dir" cmake -S. -Bbuild2 -DMAGIC_ENUM_OPT_TEST_INSTALLED_VERSION=1 --log-level=DEBUG
- name: build with installed version via cmake
run: cmake --build build2 --config Debug -j4 --verbose
- name: test
run: |
cd build2
ctest --build-config Debug -j4
- name: clear
run: rm -rf build2
- name: configure with installed version via pkgconfig
run: CMAKE_PREFIX_PATH="./install_dir" cmake -S. -Bbuild3 -DMAGIC_ENUM_OPT_TEST_INSTALLED_VERSION_PKGCONFIG=1 -DPKG_CONFIG_USE_CMAKE_PREFIX_PATH=1 --log-level=DEBUG
- name: build with installed version via pkgconfig
run: cmake --build build3 --config Debug -j4 --verbose
- name: test
run: |
cd build3
ctest --build-config Debug -j4

4
.gitignore vendored
View file

@ -1,4 +1,6 @@
build/ build*/
cmake_build*/
install_dir/
.vscode/ .vscode/
.vs/ .vs/

View file

@ -1,9 +1,11 @@
cmake_minimum_required(VERSION 3.14) cmake_minimum_required(VERSION 3.14)
project(magic_enum project(
magic_enum
VERSION "0.9.6" VERSION "0.9.6"
HOMEPAGE_URL "https://github.com/Neargye/magic_enum" HOMEPAGE_URL "https://github.com/Neargye/magic_enum"
DESCRIPTION "A library that provides static reflection for enums, work with any enum type without any macro or boilerplate code." DESCRIPTION
"A library that provides static reflection for enums, work with any enum type without any macro or boilerplate code."
LANGUAGES CXX LANGUAGES CXX
) )
set(CPACK_PACKAGE_VENDOR "Daniil Goncharov") set(CPACK_PACKAGE_VENDOR "Daniil Goncharov")
@ -22,42 +24,58 @@ endif()
option(MAGIC_ENUM_OPT_BUILD_EXAMPLES "Build magic_enum examples" ${IS_TOPLEVEL_PROJECT}) option(MAGIC_ENUM_OPT_BUILD_EXAMPLES "Build magic_enum examples" ${IS_TOPLEVEL_PROJECT})
option(MAGIC_ENUM_OPT_BUILD_TESTS "Build and perform magic_enum tests" ${IS_TOPLEVEL_PROJECT}) option(MAGIC_ENUM_OPT_BUILD_TESTS "Build and perform magic_enum tests" ${IS_TOPLEVEL_PROJECT})
option(MAGIC_ENUM_OPT_INSTALL "Generate and install magic_enum target" ${IS_TOPLEVEL_PROJECT}) option(MAGIC_ENUM_OPT_INSTALL "Generate and install magic_enum target" ${IS_TOPLEVEL_PROJECT})
option(MAGIC_ENUM_OPT_INSTALL_PACKAGE_XML "Include package.xml when installing" ${MAGIC_ENUM_OPT_INSTALL}) option(MAGIC_ENUM_OPT_INSTALL_PACKAGE_XML "Include package.xml when installing"
${MAGIC_ENUM_OPT_INSTALL}
)
option(MAGIC_ENUM_OPT_TEST_INSTALLED_VERSION "When configuring tests, try use
a local magic_enum." NO
)
option(MAGIC_ENUM_OPT_TEST_INSTALLED_VERSION_PKGCONFIG "When configuring tests, try use
a local magic_enum via pkgconfig" NO
)
if(MAGIC_ENUM_OPT_BUILD_EXAMPLES) if(${MAGIC_ENUM_OPT_TEST_INSTALLED_VERSION} OR ${MAGIC_ENUM_OPT_TEST_INSTALLED_VERSION_PKGCONFIG})
add_subdirectory(test)
else()
set(INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/include/magic_enum")
set(EXPORT_NAMESPACE "${PROJECT_NAME}::")
add_library(${PROJECT_NAME} INTERFACE)
add_library(${EXPORT_NAMESPACE}${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_include_directories(
${PROJECT_NAME} INTERFACE $<BUILD_INTERFACE:${INCLUDES}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
if(MAGIC_ENUM_OPT_BUILD_EXAMPLES)
add_subdirectory(example) add_subdirectory(example)
endif() endif()
if(MAGIC_ENUM_OPT_BUILD_TESTS) if(MAGIC_ENUM_OPT_BUILD_TESTS)
enable_testing() enable_testing()
add_subdirectory(test) add_subdirectory(test)
endif() endif()
set(INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/include/magic_enum") if(MAGIC_ENUM_OPT_INSTALL)
set(EXPORT_NAMESPACE "${PROJECT_NAME}::")
add_library(${PROJECT_NAME} INTERFACE)
add_library(${EXPORT_NAMESPACE}${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_include_directories(${PROJECT_NAME}
INTERFACE
$<BUILD_INTERFACE:${INCLUDES}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
if(MAGIC_ENUM_OPT_INSTALL)
list(APPEND CMAKE_MODULE_PATH "${ADDITIONAL_MODULES_DIR}/GenPkgConfig") list(APPEND CMAKE_MODULE_PATH "${ADDITIONAL_MODULES_DIR}/GenPkgConfig")
include(GenPkgConfig) include(GenPkgConfig)
include(CPackComponent) include(CPackComponent)
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
install(TARGETS "${PROJECT_NAME}" install(
TARGETS "${PROJECT_NAME}"
EXPORT ${PROJECT_NAME} EXPORT ${PROJECT_NAME}
INCLUDES INCLUDES
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
# COMPONENT "${SDK_COMPONENT_NAME}" # component is not allowed for includes! Headers are installed separately! Includes only marks the headers for export # COMPONENT "${SDK_COMPONENT_NAME}" # component is not allowed for
# includes!
# Headers are installed separately! Includes only marks the headers for
# export
) )
file(GLOB_RECURSE HEADERS "${INCLUDES}/*.h" "${INCLUDES}/*.hxx" "${INCLUDES}/*.hpp") file(GLOB_RECURSE HEADERS "${INCLUDES}/*.h" "${INCLUDES}/*.hxx" "${INCLUDES}/*.hpp")
string(REPLACE "/${CMAKE_LIBRARY_ARCHITECTURE}" "" CMAKE_INSTALL_LIBDIR_ARCHIND "${CMAKE_INSTALL_LIBDIR}")
foreach(headerFile ${HEADERS}) foreach(headerFile ${HEADERS})
get_filename_component(headerFileParentDir "${headerFile}" DIRECTORY) get_filename_component(headerFileParentDir "${headerFile}" DIRECTORY)
file(RELATIVE_PATH headerFileRelParentDir "${INCLUDES}" "${headerFileParentDir}") file(RELATIVE_PATH headerFileRelParentDir "${INCLUDES}" "${headerFileParentDir}")
@ -88,44 +106,58 @@ if(MAGIC_ENUM_OPT_INSTALL)
set(CMAKE_CONFIG_FILE_BASENAME "${PROJECT_NAME}Config.cmake") set(CMAKE_CONFIG_FILE_BASENAME "${PROJECT_NAME}Config.cmake")
set(CMAKE_EXPORT_FILE_BASENAME "${PROJECT_NAME}Export.cmake") set(CMAKE_EXPORT_FILE_BASENAME "${PROJECT_NAME}Export.cmake")
set(CMAKE_CONFIG_VERSION_FILE_BASENAME "${PROJECT_NAME}ConfigVersion.cmake") set(CMAKE_CONFIG_VERSION_FILE_BASENAME "${PROJECT_NAME}ConfigVersion.cmake")
set(CMAKE_CONFIG_VERSION_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CONFIG_VERSION_FILE_BASENAME}") set(CMAKE_CONFIG_VERSION_FILE_NAME
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CONFIG_VERSION_FILE_BASENAME}"
)
export(TARGETS "${PROJECT_NAME}" export(
TARGETS "${PROJECT_NAME}"
NAMESPACE "${EXPORT_NAMESPACE}" NAMESPACE "${EXPORT_NAMESPACE}"
FILE "${CMAKE_EXPORT_FILE_BASENAME}" FILE "${CMAKE_EXPORT_FILE_BASENAME}"
EXPORT_LINK_INTERFACE_LIBRARIES EXPORT_LINK_INTERFACE_LIBRARIES
) )
install(EXPORT "${PROJECT_NAME}" install(
EXPORT "${PROJECT_NAME}"
FILE "${CMAKE_CONFIG_FILE_BASENAME}" FILE "${CMAKE_CONFIG_FILE_BASENAME}"
NAMESPACE "${EXPORT_NAMESPACE}" NAMESPACE "${EXPORT_NAMESPACE}"
DESTINATION "${CMAKE_INSTALL_LIBDIR_ARCHIND}/cmake/${PROJECT_NAME}" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}"
) )
write_basic_package_version_file( write_basic_package_version_file(
"${CMAKE_CONFIG_VERSION_FILE_NAME}" "${CMAKE_CONFIG_VERSION_FILE_NAME}"
#VERSION "100500.100500.100500" # any version of same bitness suits. CMake cannot compare to infinity, so use a large number we expect to be greater than any future version # VERSION "100500.100500.100500" # any version of same bitness suits. CMake cannot compare to
# infinity, so use a large number we expect to be greater than any future version
VERSION ${_VERSION} VERSION ${_VERSION}
COMPATIBILITY AnyNewerVersion COMPATIBILITY AnyNewerVersion ARCH_INDEPENDENT
ARCH_INDEPENDENT
) )
install(FILES "${CMAKE_CONFIG_VERSION_FILE_NAME}" install(FILES "${CMAKE_CONFIG_VERSION_FILE_NAME}"
DESTINATION "${CMAKE_INSTALL_LIBDIR_ARCHIND}/cmake/${PROJECT_NAME}" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}"
) )
configure_pkg_config_file("${PROJECT_NAME}" configure_pkg_config_file(
NAME "${PROJECT_NAME}" "${PROJECT_NAME}"
VERSION "${PROJECT_VERSION}" NAME
DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}" "${PROJECT_NAME}"
URL "${CPACK_PACKAGE_HOMEPAGE_URL}" VERSION
INSTALL_LIB_DIR "${CMAKE_INSTALL_LIBDIR_ARCHIND}" "${PROJECT_VERSION}"
INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" DESCRIPTION
"${CPACK_PACKAGE_DESCRIPTION}"
URL
"${CPACK_PACKAGE_HOMEPAGE_URL}"
INSTALL_LIB_DIR
"${CMAKE_INSTALL_DATAROOTDIR}"
INSTALL_INCLUDE_DIR
"${CMAKE_INSTALL_INCLUDEDIR}"
) )
if (MAGIC_ENUM_OPT_INSTALL_PACKAGE_XML) if(MAGIC_ENUM_OPT_INSTALL_PACKAGE_XML)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/package.xml install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/package.xml
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}) DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}
)
endif() endif()
include(CPack) include(CPack)
endif()
endif() endif()

View file

@ -1,5 +1,27 @@
include(CheckCXXCompilerFlag) include(CheckCXXCompilerFlag)
if(${MAGIC_ENUM_OPT_TEST_INSTALLED_VERSION})
find_package(magic_enum REQUIRED magic_enum)
endif()
if(${MAGIC_ENUM_OPT_TEST_INSTALLED_VERSION_PKGCONFIG})
find_package(PkgConfig)
pkg_check_modules(magic_enum REQUIRED magic_enum)
message(DEBUG "magic_enum_FOUND : ${magic_enum_FOUND}")
message(DEBUG "magic_enum_LIBRARIES: ${magic_enum_LIBRARIES}")
message(DEBUG "magic_enum_LINK_LIBRARIES: ${magic_enum_LINK_LIBRARIES}")
message(DEBUG "magic_enum_LIBRARY_DIRS: ${magic_enum_LIBRARY_DIRS}")
message(DEBUG "magic_enum_INCLUDE_DIRS: ${magic_enum_INCLUDE_DIRS}")
message(DEBUG "magic_enum_INCLUDE_DIR: ${magic_enum_INCLUDE_DIR}")
message(DEBUG "magic_enum_LDFLAGS: ${magic_enum_LDFLAGS}")
message(DEBUG "magic_enum_LDFLAGS_OTHER: ${magic_enum_LDFLAGS_OTHER}")
message(DEBUG "magic_enum_CFLAGS: ${magic_enum_CFLAGS}")
message(DEBUG "magic_enum_CFLAGS_OTHER: ${magic_enum_CFLAGS_OTHER}")
message(DEBUG "magic_enum_INCLUDEDIR: ${magic_enum_INCLUDEDIR}")
message(DEBUG "magic_enum_LIBDIR: ${magic_enum_LIBDIR}")
message(DEBUG "magic_enum_PREFIX: ${magic_enum_PREFIX}")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
set(OPTIONS /W4 /WX) set(OPTIONS /W4 /WX)
check_cxx_compiler_flag(/permissive HAS_PERMISSIVE_FLAG) check_cxx_compiler_flag(/permissive HAS_PERMISSIVE_FLAG)
@ -22,7 +44,11 @@ function(make_test src target std)
add_executable(${target} ${src}) add_executable(${target} ${src})
target_compile_options(${target} PRIVATE ${OPTIONS}) target_compile_options(${target} PRIVATE ${OPTIONS})
target_include_directories(${target} PRIVATE 3rdparty/Catch2/include) target_include_directories(${target} PRIVATE 3rdparty/Catch2/include)
target_link_libraries(${target} PRIVATE ${CMAKE_PROJECT_NAME}) if(${MAGIC_ENUM_OPT_TEST_INSTALLED_VERSION_PKGCONFIG})
target_include_directories(${target} PRIVATE ${magic_enum_INCLUDE_DIRS})
else()
target_link_libraries(${target} PRIVATE magic_enum::magic_enum)
endif()
set_target_properties(${target} PROPERTIES CXX_EXTENSIONS OFF) set_target_properties(${target} PROPERTIES CXX_EXTENSIONS OFF)
if(std) if(std)
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")