Skip to content

Commit f320581

Browse files
committed
update project to use different library types
1 parent 681a8f2 commit f320581

34 files changed

+253
-202
lines changed

.github/actions/cmake-build/action.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ inputs:
44
args:
55
description: "Other arguments"
66
required: false
7-
default: ""
7+
default: -D_7BIT_DI_BUILD_TESTS:BOOL=true -D_7BIT_DI_BUILD_EXAMPLES:BOOL=true
88
build-type:
99
description: "Build type"
1010
required: false
@@ -13,10 +13,10 @@ inputs:
1313
description: "Toolchain file"
1414
required: false
1515
default: conan_toolchain.cmake
16-
shared-lib:
17-
description: "Shared lib"
16+
library-type:
17+
description: "Library type"
1818
required: false
19-
default: "OFF"
19+
default: Static
2020
build-dir:
2121
description: "Build directory"
2222
required: true
@@ -26,10 +26,10 @@ runs:
2626
steps:
2727
- name: Configure CMake
2828
working-directory: ${{ inputs.build-dir }}
29-
run: cmake .. -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} -DSEVEN_BIT_DI_BUILD_SHARED:STRING="${{ inputs.shared-lib }}" -DCMAKE_TOOLCHAIN_FILE:STRING="${{ inputs.toolchain }}" -DSEVEN_BIT_DI_BUILD_TESTS:BOOL=true -DSEVEN_BIT_DI_BUILD_EXAMPLES:BOOL=true ${{ inputs.args }}
29+
run: cmake .. -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} -D_7BIT_DI_LIBRARY_TYPE=${{ inputs.library-type }} -DCMAKE_TOOLCHAIN_FILE:STRING="${{ inputs.toolchain }}" ${{ inputs.args }}
3030
shell: pwsh
3131

3232
- name: Build
3333
working-directory: ${{ inputs.build-dir }}
3434
run: cmake --build . --config ${{ inputs.build-type }}
35-
shell: pwsh
35+
shell: pwsh

.github/workflows/DevCI.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
strategy:
1818
fail-fast: false
1919
matrix:
20-
shared-lib: ["ON", "OFF"]
20+
libraryType: [HeaderOnly, Static, Shared]
2121
os: [ubuntu-22.04, macos-12, windows-2022]
2222

2323
runs-on: ${{matrix.os}}
@@ -35,7 +35,7 @@ jobs:
3535
with:
3636
build-dir: ${{ env.BUILD_DIR }}
3737
build-type: ${{ env.BUILD_TYPE }}
38-
shared-lib: ${{ matrix.shared-lib }}
38+
library-type: ${{ matrix.libraryType }}
3939

4040
- name: Test
4141
working-directory: ${{ env.BUILD_DIR }}

CMakeLists.txt

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
cmake_minimum_required(VERSION 3.15.0)
22

3-
set(SEVEN_BIT_DI_PROJECT_NAME 7bitDI)
3+
set(_7BIT_DI_VERSION_MAJOR 1)
4+
set(_7BIT_DI_VERSION_MINOR 0)
5+
set(_7BIT_DI_VERSION_PATCH 0)
46

5-
set(SEVEN_BIT_DI_VERSION_MAJOR 1)
6-
set(SEVEN_BIT_DI_VERSION_MINOR 0)
7-
set(SEVEN_BIT_DI_VERSION_PATCH 0)
7+
set(_7BIT_DI_VERSION ${_7BIT_DI_VERSION_MAJOR}.${_7BIT_DI_VERSION_MINOR}.${_7BIT_DI_VERSION_PATCH})
88

9-
set(SEVEN_BIT_DI_VERSION ${SEVEN_BIT_DI_VERSION_MAJOR}.${SEVEN_BIT_DI_VERSION_MINOR}.${SEVEN_BIT_DI_VERSION_PATCH})
9+
project(7bitDI LANGUAGES CXX VERSION ${_7BIT_DI_VERSION})
1010

11-
project(${SEVEN_BIT_DI_PROJECT_NAME} VERSION ${SEVEN_BIT_DI_VERSION})
12-
13-
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/Cmake)
11+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Cmake")
1412

1513
include_directories(Include)
1614
include(Setup)
@@ -20,33 +18,46 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
2018

2119
add_subdirectory(Source)
2220

23-
if(SEVEN_BIT_DI_BUILD_DOCS)
21+
if(_7BIT_DI_BUILD_DOCS)
2422
add_subdirectory(Docs)
2523
endif()
2624

27-
if(SEVEN_BIT_DI_BUILD_TESTS OR SEVEN_BIT_DI_BUILD_TESTS_HO)
25+
if(_7BIT_DI_BUILD_TESTS)
2826
include(GoogleTest)
29-
include(CPack)
3027
enable_testing()
3128

3229
add_subdirectory(Tests)
3330
endif()
3431

35-
if(SEVEN_BIT_DI_BUILD_EXAMPLES OR SEVEN_BIT_DI_BUILD_EXAMPLE_HO)
32+
if(_7BIT_DI_BUILD_EXAMPLES)
3633
add_subdirectory(Examples)
3734
endif()
3835

39-
install(DIRECTORY ${SEVEN_BIT_DI_HEADERS_DIR}/ DESTINATION include)
36+
if(_7BIT_DI_INSTALL)
37+
install(DIRECTORY ${_7BIT_DI_HEADERS_DIR}/ DESTINATION include)
38+
39+
export(
40+
TARGETS 7BitDI
41+
NAMESPACE 7BitDI::
42+
FILE ${CONFIG_TARGETS_FILE})
43+
44+
install(
45+
EXPORT 7BitDI
46+
DESTINATION ${EXPORT_DEST_DIR}
47+
NAMESPACE 7BitDI::
48+
FILE ${CONFIG_TARGETS_FILE})
4049

41-
export(
42-
TARGETS 7BitDI
43-
NAMESPACE 7BitDI::
44-
FILE ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_TARGETS_FILE})
45-
install(EXPORT 7BitDI DESTINATION ${EXPORT_DEST_DIR} NAMESPACE 7BitDI:: FILE ${CONFIG_TARGETS_FILE})
50+
include(CMakePackageConfigHelpers)
4651

47-
include(CMakePackageConfigHelpers)
48-
configure_package_config_file(${PROJECT_CONFIG_IN} ${PROJECT_CONFIG_OUT}
49-
INSTALL_DESTINATION ${EXPORT_DEST_DIR})
52+
configure_package_config_file(${PROJECT_CONFIG_IN} ${PROJECT_CONFIG_OUT}
53+
INSTALL_DESTINATION ${EXPORT_DEST_DIR})
5054

51-
write_basic_package_version_file(${VERSIONS_CONFIG_FILE} COMPATIBILITY SameMajorVersion)
52-
install(FILES ${PROJECT_CONFIG_OUT} ${VERSIONS_CONFIG_FILE} DESTINATION ${EXPORT_DEST_DIR})
55+
write_basic_package_version_file(${VERSIONS_CONFIG_FILE} COMPATIBILITY SameMajorVersion)
56+
install(FILES ${PROJECT_CONFIG_OUT} ${VERSIONS_CONFIG_FILE} DESTINATION ${EXPORT_DEST_DIR})
57+
58+
include(7bitDIGeneratePkgConfig)
59+
60+
export(PACKAGE 7bitDI)
61+
62+
include(CPack)
63+
endif()

Cmake/7bitDI.pc.in

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
exec_prefix=${prefix}
3+
includedir=@PKG_CONFIG_INCLUDEDIR@
4+
libdir=@PKG_CONFIG_LIBDIR@
5+
6+
Name: lib@PROJECT_NAME@
7+
Description: Fast C++ logging library.
8+
URL: https://github.com/7bitcoder/@PROJECT_NAME@
9+
Version: @_7BIT_DI_VERSION@
10+
CFlags: -I${includedir} @PKG_CONFIG_DEFINES@
11+
Libs: -L${libdir} -lspdlog -pthread
12+
Requires: @PKG_CONFIG_REQUIRES@

Cmake/7bitDIConfig.cmake.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
include("${CMAKE_CURRENT_LIST_DIR}/${config_targets_file}")
44

5-
check_required_components(spdlog)
5+
check_required_components(7bitDI)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
configure_file("cmake/7bitDI.pc.in" "7bitDI.pc" @ONLY)
2+
3+
install(FILES "${PROJECT_BINARY_DIR}/7bitDI.pc" DESTINATION "lib/pkgconfig")

Cmake/Setup.cmake

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,61 +14,80 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
1414
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/lib)
1515
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/lib)
1616

17-
set(CPACK_PROJECT_NAME ${SEVEN_BIT_DI_PROJECT_NAME})
18-
set(CPACK_PROJECT_VERSION ${SEVEN_BIT_DI_VERSION})
17+
set(CPACK_PROJECT_NAME ${CMAKE_PROJECT_NAME})
18+
set(CPACK_PROJECT_VERSION ${_7BIT_DI_VERSION})
19+
set(CPACK_PACKAGE_VENDOR "github.com/7bitcoder/7bitDI")
20+
set(CPACK_PACKAGE_CONTACT "https://${CPACK_PACKAGE_VENDOR}")
21+
set(CPACK_PACKAGE_VERSION_MAJOR ${_7BIT_DI_VERSION_MAJOR})
22+
set(CPACK_PACKAGE_VERSION_MINOR ${_7BIT_DI_VERSION_MINOR})
23+
set(CPACK_PACKAGE_VERSION_PATCH ${_7BIT_DI_VERSION_PATCH})
24+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "7bitInjector is a simple C++ dependency injection library")
25+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
26+
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
27+
set(CPACK_SOURCE_GENERATOR "TGZ;ZIP")
1928

2029
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/publish)
2130

2231
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_RPATH}:\$ORIGIN/../bin:\$ORIGIN)
2332

24-
set(SEVEN_BIT_DI_HEADERS_DIR "${CMAKE_SOURCE_DIR}/Include")
33+
set(_7BIT_DI_HEADERS_DIR "${CMAKE_SOURCE_DIR}/Include")
2534

26-
file(GLOB SEVEN_BIT_DI_TOP_HEADERS "${SEVEN_BIT_DI_HEADERS_DIR}/SevenBit/DI/*.hpp")
27-
file(GLOB SEVEN_BIT_DI_DETAILS_HEADERS "${SEVEN_BIT_DI_HEADERS_DIR}/SevenBit/DI/Details/*.hpp")
28-
file(GLOB SEVEN_BIT_DI_IMPL_HEADERS "${SEVEN_BIT_DI_HEADERS_DIR}/SevenBit/DI/Impl/*.hpp")
29-
set(SEVEN_BIT_DI_ALL_HEADERS ${SEVEN_BIT_DI_TOP_HEADERS} ${SEVEN_BIT_DI_DETAILS_HEADERS} ${SEVEN_BIT_DI_IMPL_HEADERS})
35+
file(GLOB _7BIT_DI_TOP_HEADERS "${_7BIT_DI_HEADERS_DIR}/SevenBit/DI/*.hpp")
36+
file(GLOB _7BIT_DI_DETAILS_HEADERS "${_7BIT_DI_HEADERS_DIR}/SevenBit/DI/Details/*.hpp")
37+
file(GLOB _7BIT_DI_IMPL_HEADERS "${_7BIT_DI_HEADERS_DIR}/SevenBit/DI/Impl/*.hpp")
38+
set(_7BIT_DI_ALL_HEADERS ${_7BIT_DI_TOP_HEADERS} ${_7BIT_DI_DETAILS_HEADERS} ${_7BIT_DI_IMPL_HEADERS})
3039

31-
source_group("Header Files\\SevenBit" FILES ${SEVEN_BIT_DI_TOP_HEADERS})
32-
source_group("Header Files\\SevenBit\\Details" FILES ${SEVEN_BIT_DI_DETAILS_HEADERS})
33-
source_group("Header Files\\SevenBit\\Details\\Impl" FILES ${SEVEN_BIT_DI_IMPL_HEADERS})
40+
source_group("Header Files\\SevenBit" FILES ${_7BIT_DI_TOP_HEADERS})
41+
source_group("Header Files\\SevenBit\\Details" FILES ${_7BIT_DI_DETAILS_HEADERS})
42+
source_group("Header Files\\SevenBit\\Details\\Impl" FILES ${_7BIT_DI_IMPL_HEADERS})
3443

35-
# build shared option
36-
option(SEVEN_BIT_DI_BUILD_SHARED "Build shared library" OFF)
44+
option(_7BIT_DI_LIBRARY_TYPE "Library build type: Shared;Static;HeaderOnly" "Static")
3745

38-
# build position independent code
39-
option(SEVEN_BIT_DI_BUILD_PIC "Build position independent code (-fPIC)" OFF)
46+
option(_7BIT_DI_LIBRARY_TYPE_VALUES "List of possible BUILD_LIBRARY_Type values" "Shared;Static;HeaderOnly")
4047

41-
# example options
42-
option(SEVEN_BIT_DI_BUILD_EXAMPLES "Build example" OFF)
43-
option(SEVEN_BIT_DI_BUILD_EXAMPLES_HO "Build header only example" OFF)
48+
set_property(CACHE _7BIT_DI_LIBRARY_TYPE PROPERTY STRINGS ${_7BIT_DI_LIBRARY_TYPE_VALUES})
4449

45-
# testing options
46-
option(SEVEN_BIT_DI_BUILD_TESTS "Build tests" OFF)
47-
option(SEVEN_BIT_DI_BUILD_TESTS_HO "Build tests using the header only version" OFF)
50+
option(_7BIT_DI_BUILD_SHARED "Build shared library" OFF)
4851

49-
# build documentation option (requires sphinx and doxygen installed)
50-
option(SEVEN_BIT_DI_BUILD_DOCS "Turn on to build documentation" OFF)
52+
option(_7BIT_DI_BUILD_PIC "Build position independent code (-fPIC)" OFF)
5153

52-
if(SEVEN_BIT_DI_BUILD_PIC)
54+
option(_7BIT_DI_BUILD_EXAMPLES "Build example" OFF)
55+
56+
option(_7BIT_DI_BUILD_TESTS "Build tests" OFF)
57+
58+
option(_7BIT_DI_BUILD_DOCS "Turn on to build documentation (requires sphinx and doxygen installed)" OFF)
59+
60+
option(_7BIT_DI_INSTALL "Installs 7bitDI" OFF)
61+
62+
if(_7BIT_DI_BUILD_PIC)
5363
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
5464
endif()
5565

66+
if(_7BIT_DI_LIBRARY_TYPE STREQUAL "Shared")
67+
set(_7BIT_DI_BUILD_LIBRARY_TYPE "Shared")
68+
set(_7BIT_DI_SHARED_LIB true)
69+
elseif(_7BIT_DI_LIBRARY_TYPE STREQUAL "HeaderOnly")
70+
set(_7BIT_DI_BUILD_LIBRARY_TYPE "HeaderOnly")
71+
set(_7BIT_DI_HEADER_ONLY_LIB true)
72+
else()
73+
set(_7BIT_DI_BUILD_LIBRARY_TYPE "Static")
74+
set(_7BIT_DI_STATIC_LIB true)
75+
endif()
76+
5677
set(PROJECT_CONFIG_IN ${CMAKE_SOURCE_DIR}/Cmake/7bitDIConfig.cmake.in)
5778
set(PROJECT_CONFIG_OUT ${CMAKE_BINARY_DIR}/7bitDIConfig.cmake)
5879
set(CONFIG_TARGETS_FILE 7bitDIConfigTargets.cmake)
5980
set(VERSIONS_CONFIG_FILE ${CMAKE_BINARY_DIR}/7bitDIConfigVersion.cmake)
60-
set(EXPORT_DEST_DIR cmake/7bitDI)
81+
set(EXPORT_DEST_DIR lib/cmake/7bitDI)
6182

62-
configure_file(${CMAKE_SOURCE_DIR}/Include/SevenBit/DI/Version.hpp.input ${CMAKE_SOURCE_DIR}/Include/SevenBit/DI/Version.hpp)
83+
configure_file(${CMAKE_SOURCE_DIR}/Include/SevenBit/DI/CmakeDef.hpp.input ${CMAKE_SOURCE_DIR}/Include/SevenBit/DI/CmakeDef.hpp)
6384

6485
set(INFOS
65-
"${SEVEN_BIT_DI_PROJECT_NAME} version: ${SEVEN_BIT_DI_VERSION}"
66-
"${SEVEN_BIT_DI_PROJECT_NAME} build as shared library ${SEVEN_BIT_DI_BUILD_SHARED} "
86+
"${CMAKE_PROJECT_NAME} version: ${_7BIT_DI_VERSION}"
87+
"${CMAKE_PROJECT_NAME} build as ${_7BIT_DI_BUILD_LIBRARY_TYPE} library"
6788
"=================================================="
68-
"Build tests: ${SEVEN_BIT_DI_BUILD_TESTS}"
69-
"Build tests header only: ${SEVEN_BIT_DI_BUILD_TESTS_HO}"
70-
"Build examples: ${SEVEN_BIT_DI_BUILD_EXAMPLES}"
71-
"Build examples header only: ${SEVEN_BIT_DI_BUILD_EXAMPLES_HO}"
72-
"Build documentation: ${SEVEN_BIT_DI_BUILD_DOCS}"
89+
"Build tests: ${_7BIT_DI_BUILD_TESTS}"
90+
"Build examples: ${_7BIT_DI_BUILD_EXAMPLES}"
91+
"Build documentation: ${_7BIT_DI_BUILD_DOCS}"
7392
)
7493
printInfo("${INFOS}" = 50 7 0)

Docs/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ add_custom_target(GenerateDoc
2929
${SHPHINX_RST_FILES}
3030
)
3131

32-
include(GNUInstallDirs)
33-
34-
install(DIRECTORY ${SPHINX_BUILD}
35-
DESTINATION doc)
32+
if(_7BIT_DI_INSTALL)
33+
install(DIRECTORY ${SPHINX_BUILD}
34+
DESTINATION doc)
35+
endif()

Docs/conf.in.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ def createIfNotExists(path):
1010
os.makedirs(path)
1111

1212

13-
project = "@SEVEN_BIT_DI_PROJECT_NAME@"
13+
project = "@CMAKE_PROJECT_NAME@"
1414
copyright = "2023, 7BitCoder Sylwester Dawida"
1515
author = "Sylwester Dawida"
16-
version = "@SEVEN_BIT_DI_VERSION@"
16+
version = "@_7BIT_DI_VERSION@"
1717

1818
extensions = [
1919
"sphinx.ext.autodoc",

Docs/getting-started.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Installation
4141
4242
#. Building library as Static/Shared
4343
Download source code from the most recent release,
44-
build the project using CMake_, set CMake cache var "SEVEN_BIT_DI_BUILD_SHARED" to build Shared library,
44+
build the project using CMake_, set CMake cache var "_7BIT_DI_BUILD_SHARED" to build Shared library,
4545
run install command
4646

4747
.. code-block:: sh

0 commit comments

Comments
 (0)