Skip to content

Commit 5c147ef

Browse files
committed
generate github releases
fix #139
1 parent d8ac598 commit 5c147ef

File tree

3 files changed

+147
-15
lines changed

3 files changed

+147
-15
lines changed

.github/workflows/ci.yml

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ on:
55
branches:
66
- develop
77
- master
8+
- '*'
9+
tags:
10+
- "v*.*.*"
811

912
pull_request:
1013
branches:
@@ -16,12 +19,11 @@ concurrency:
1619

1720
jobs:
1821
build:
19-
name: ${{ matrix.name }}
2022
strategy:
2123
fail-fast: false
2224
matrix:
2325
include:
24-
- { name: "GCC 12 - C++20", os: ubuntu-22.04, cc: gcc-12, cxx: g++-12, cxxstd: '20', install: g++-12 }
26+
- { name: "GCC 12 - C++20", os: ubuntu-22.04, cc: gcc-12, cxx: g++-12, cxxstd: '20', install: g++-12, github_release: true }
2527
- { name: "GCC 11 - C++20", os: ubuntu-22.04, cc: gcc-11, cxx: g++-11, cxxstd: 20, install: g++-11 }
2628

2729
# no <source_location>
@@ -38,24 +40,26 @@ jobs:
3840
# There's no LLVM container for MSVC yet
3941
# - { name: "MSVC 14.3 - C++20", os: windows-2022, cxxstd: '17,20', cmake_args: -G "Visual Studio 17 2022" -A x64, }
4042

41-
43+
name: ${{ matrix.name }}
4244
runs-on: ${{ matrix.os }}
4345
container:
4446
image: cppalliance/droneubuntu2204:llvm-731264b
47+
permissions:
48+
contents: write
4549

4650
steps:
4751
- uses: actions/checkout@v3
4852

49-
# - name: Environment
50-
# run: |
51-
# for dir in /usr/include/llvm /usr/local/include/llvm /usr/local/clang+llvm/include/llvm /usr/include/clang /usr/local/include/clang /usr/local/clang+llvm/include/clang
52-
# do
53-
# if [ -d "$dir" ]; then
54-
# find "$dir" -type f -name "*.h" -print
55-
# else
56-
# echo "$dir directory does not exist."
57-
# fi
58-
# done
53+
# - name: Environment
54+
# run: |
55+
# for dir in /usr/include/llvm /usr/local/include/llvm /usr/local/clang+llvm/include/llvm /usr/include/clang /usr/local/include/clang /usr/local/clang+llvm/include/clang
56+
# do
57+
# if [ -d "$dir" ]; then
58+
# find "$dir" -type f -name "*.h" -print
59+
# else
60+
# echo "$dir directory does not exist."
61+
# fi
62+
# done
5963

6064
- name: Install packages
6165
if: ${{ matrix.install }}
@@ -73,12 +77,25 @@ jobs:
7377
# patches: https://github.com/CppAlliance/buffers.git,https://github.com/CppAlliance/http_proto.git,https://github.com/CppAlliance/http_io.git
7478
# modules: url,../../../BoostServerTech
7579

76-
- name: CMake Run (C++${{ matrix.cxxstd }})
77-
uses: ./.github/actions/cmake_run
80+
- name: CMake Workflow (C++${{ matrix.cxxstd }})
81+
uses: alandefreitas/cpp-actions/cmake_workflow@master
7882
with:
7983
cxxstd: ${{ matrix.cxxstd }}
8084
cxx: ${{ matrix.cxx }}
8185
cc: ${{ matrix.cc }}
86+
install-prefix: .local
8287
extra-args: ${{ format('-D LLVM_ROOT={0} -D Clang_ROOT={0} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON', '/usr/local') }}
8388
# toolchain: ${{ steps.package-install.outputs.vcpkg_toolchain }}
8489

90+
- name: Create packages
91+
working-directory: ./build
92+
run: cpack
93+
94+
- name: Create GitHub Package Release
95+
if: ${{ matrix.github_release && github.event_name == 'push' && (contains(fromJSON('["master", "develop"]'), github.ref_name) || startsWith(github.ref, 'refs/tags/')) }}
96+
uses: softprops/action-gh-release@v1
97+
with:
98+
files: build/MrDox-?.?.?-*.*
99+
tag_name: ${{ github.ref_name || github.ref }}
100+
token: ${{ github.token }}
101+

CMakeLists.txt

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ project(
2424
HOMEPAGE_URL "https://github.com/cppalliance/mrdox"
2525
LANGUAGES CXX C
2626
)
27+
include(CMakePackageConfigHelpers)
28+
include(GNUInstallDirs)
2729

2830
#set(BUILD_SHARED_LIBS OFF CACHE STRING "")
2931
#set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "")
@@ -35,6 +37,8 @@ project(
3537

3638
option(MRDOX_BUILD_TESTS "Build tests" ON)
3739
option(MRDOX_BUILD_SHARED "Link shared" OFF)
40+
option(MRDOX_INSTALL "Configure install target" ON)
41+
option(MRDOX_PACKAGE "Build install package" ON)
3842

3943
if (MRDOX_BUILD_SHARED)
4044
set(MRDOX_LINK_MODE SHARED)
@@ -100,6 +104,7 @@ target_compile_features(mrdox-api PUBLIC cxx_std_20)
100104
target_include_directories(mrdox-api
101105
PUBLIC
102106
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
107+
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
103108
PRIVATE
104109
"${PROJECT_SOURCE_DIR}/source/api/"
105110
)
@@ -186,6 +191,90 @@ target_include_directories(mrdox PRIVATE source/tool)
186191
source_group(TREE ${PROJECT_SOURCE_DIR} PREFIX "" FILES CMakeLists.txt)
187192
source_group(TREE ${PROJECT_SOURCE_DIR}/source/mrdox PREFIX "source" FILES ${TOOL_SOURCES})
188193

194+
#-------------------------------------------------
195+
#
196+
# Install
197+
#
198+
#-------------------------------------------------
199+
if (MRDOX_INSTALL)
200+
# Create and install mrdox-targets.cmake
201+
install(TARGETS mrdox-api mrdox
202+
EXPORT mrdox-targets
203+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
204+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
205+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
206+
)
207+
208+
install(EXPORT mrdox-targets
209+
FILE mrdox-targets.cmake
210+
NAMESPACE mrdox::
211+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mrdox)
212+
213+
# Headers
214+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/mrdox
215+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
216+
FILES_MATCHING PATTERN "*.[hic]pp")
217+
218+
# Set variable where the cmake config is
219+
# https://cliutils.gitlab.io/modern-cmake/chapters/install/installing.html
220+
set(CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/mrdox)
221+
222+
# Create and install mrdox-config-version.cmake
223+
if (CMAKE_PROJECT_VERSION VERSION_LESS 1.0.0)
224+
set(compatibility_mode SameMajorVersion)
225+
else ()
226+
set(compatibility_mode SameMinorVersion)
227+
endif ()
228+
write_basic_package_version_file(
229+
mrdox-config-version.cmake
230+
VERSION ${PACKAGE_VERSION}
231+
COMPATIBILITY ${compatibility_mode})
232+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mrdox-config-version.cmake
233+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mrdox)
234+
235+
# Create and install mrdox-config.cmake
236+
set(INCLUDE_INSTALL_DIR include/)
237+
set(LIB_INSTALL_DIR lib/)
238+
configure_package_config_file(
239+
${CMAKE_CURRENT_SOURCE_DIR}/mrdox-config.cmake.in # input file
240+
${CMAKE_CURRENT_BINARY_DIR}/mrdox-config.cmake # output file
241+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mrdox
242+
PATH_VARS CMAKE_INSTALL_LIBDIR INCLUDE_INSTALL_DIR LIB_INSTALL_DIR)
243+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mrdox-config.cmake
244+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mrdox)
245+
246+
endif ()
247+
248+
249+
#-------------------------------------------------
250+
#
251+
# Packages
252+
#
253+
#-------------------------------------------------
254+
if (MRDOX_INSTALL AND MRDOX_PACKAGE)
255+
# Set the cpack variables
256+
# https://cliutils.gitlab.io/modern-cmake/chapters/install/packaging.html
257+
258+
# The most common cpack variables
259+
set(CPACK_PACKAGE_VENDOR "mrdox")
260+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION})
261+
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
262+
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
263+
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
264+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
265+
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.adoc")
266+
267+
# Set CPACK_SOURCE_IGNORE_FILES with files source packages shouldn't install
268+
# We get these from .gitignore to avoid redundancy
269+
FILE(READ .gitignore GITIGNORE_CONTENTS)
270+
STRING(REGEX REPLACE ";" "\\\\;" GITIGNORE_CONTENTS "${GITIGNORE_CONTENTS}")
271+
STRING(REGEX REPLACE "\n" ";" GITIGNORE_CONTENTS "${GITIGNORE_CONTENTS}")
272+
set(CPACK_SOURCE_IGNORE_FILES ${GITIGNORE_CONTENTS})
273+
274+
# Always include CPack at last
275+
include(CPack)
276+
endif ()
277+
189278
#-------------------------------------------------
190279
#
191280
# Tests

mrdox-config.cmake.in

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
@PACKAGE_INIT@
2+
3+
# How mrdox installation was built
4+
set(MRDOX_BUILT_SHARED "@BUILD_SHARED_LIBS@")
5+
set(MRDOX_BUILT_CXX_COMPILER_ID "@CMAKE_CXX_COMPILER_ID@")
6+
set(MRDOX_BUILT_CXX_COMPILER_VERSION "@CMAKE_CXX_COMPILER_VERSION@")
7+
8+
# Paths
9+
set_and_check(MRDOX_INSTALL_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@")
10+
set_and_check(MRDOX_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
11+
set_and_check(MRDOX_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@")
12+
13+
# Set module paths
14+
include(CMakeFindDependencyMacro)
15+
list(APPEND CMAKE_MODULE_PATH ${MRDOX_CONFIG_INSTALL_DIR})
16+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
17+
list(APPEND CMAKE_MODULE_PATH "${MRDOX_INCLUDE_DIR}")
18+
list(APPEND CMAKE_MODULE_PATH "${MRDOX_INSTALL_DIR}")
19+
20+
# Find dependencies
21+
find_dependency(LLVM)
22+
find_dependency(Clang)
23+
24+
# Create imported targets
25+
include("${CMAKE_CURRENT_LIST_DIR}/mrdox-targets.cmake")
26+
check_required_components(mrdox)

0 commit comments

Comments
 (0)