Skip to content

Commit 5b7f7be

Browse files
committed
migrated code from upstream packages
1 parent 121491d commit 5b7f7be

20 files changed

Lines changed: 3446 additions & 0 deletions

.clang-format

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
BasedOnStyle: Google
2+
UseTab: false
3+
IndentWidth: 4
4+
TabWidth: 4
5+
ContinuationIndentWidth: 8
6+
BreakBeforeBraces: Attach
7+
AllowShortIfStatementsOnASingleLine: false
8+
ColumnLimit: 120
9+
AccessModifierOffset: -4
10+
NamespaceIndentation: None
11+
FixNamespaceComments: false
12+
PointerAlignment: Left
13+
SpacesInAngles: false
14+
SpaceAfterTemplateKeyword: false
15+
AlignAfterOpenBracket: DontAlign
16+
AllowShortBlocksOnASingleLine: false
17+
AllowShortCaseLabelsOnASingleLine: false
18+
AllowShortFunctionsOnASingleLine: Empty
19+
AllowAllArgumentsOnNextLine: false
20+
AlwaysBreakBeforeMultilineStrings: false

README.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# cppbox
2+
3+
Collection of general-purpose C++ functions, classes and utilities
4+
5+
## Core Library
6+
7+
### Installation
8+
9+
```bash
10+
git clone git@github.com:willat343/cppbox.git
11+
cd cppbox
12+
cmake -S . -B build -DBUILD_DOCUMENTATION=OFF -DBUILD_TESTS=OFF
13+
cmake --build build
14+
cmake --build . -j
15+
sudo cmake --build build --target install
16+
```
17+
18+
### Uninstallation
19+
20+
```bash
21+
sudo cmake --build build --target uninstall
22+
```
23+
24+
### Include in Downstream Project
25+
26+
In the downstream project's `CMakeLists.txt`:
27+
```cmake
28+
find_package(cppbox REQUIRED)
29+
target_link_libraries(<target> PUBLIC ${cppbox_LIBRARIES})
30+
```
31+
32+
The `cppbox` provides CMake targets in `${cppbox_LIBRARIES}` which contain the properties (include directories, link libraries, compile options, compile flags, link flags, etc.) needed by the downstream project, and hence only `target_link_libraries()` is required.
33+
34+
## Catkin Support
35+
36+
A `package.xml` is supplied to facilitate an isolated installation within a catkin workspace (e.g. for ROS applications).
37+
38+
### Installation
39+
40+
Either:
41+
```bash
42+
ln -s /path/to/cppbox /path/to/catkin_ws/src
43+
```
44+
Or:
45+
```bash
46+
cd /path/to/catkin_ws/src
47+
git clone git@github.com:willat343/cppbox.git
48+
```
49+
50+
Then:
51+
```bash
52+
cd /path/to/catkin_ws
53+
catkin build cppbox
54+
```
55+
56+
### Uninstallation
57+
58+
```bash
59+
cd /path/to/catkin_ws
60+
catkin clean cppbox
61+
```
62+
63+
### Include in Downstream Project
64+
65+
To use the package in a downstream project, one should add to their `package.xml`:
66+
```xml
67+
<depend>cppbox</depend>
68+
```
69+
One can then either use the workspace's isolated installation or use the system installation otherwise.
70+
Importing the dependency is then exactly the same as it would be in a non-catkin package as described above (do NOT rely on the `catkin` variables like `catkin_LIBRARIES` and `catkin_INCLUDE_DIRS`).

cppbox/CMakeLists.txt

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
project(cppbox
3+
VERSION 0.0.1
4+
DESCRIPTION "Collection of general-purpose C++ functions, classes and utilities"
5+
LANGUAGES CXX
6+
)
7+
8+
# CMake Build Type
9+
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
10+
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose build type" FORCE)
11+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo" "MinSizeRel" )
12+
endif()
13+
message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}")
14+
15+
# General Options
16+
option(BUILD_DOCUMENTATION "Build Doxygen Documentation" OFF)
17+
option(BUILD_TESTS "Build Tests" OFF)
18+
19+
# Get information about the CXX Compiler
20+
message(STATUS "Detected ${CMAKE_CXX_COMPILER_ID} CXX compiler version ${CMAKE_CXX_COMPILER_VERSION}")
21+
string(REPLACE "." ";" CMAKE_CXX_COMPILER_VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
22+
list(GET CMAKE_CXX_COMPILER_VERSION_LIST 0 CMAKE_CXX_COMPILER_VERSION_MAJOR)
23+
list(GET CMAKE_CXX_COMPILER_VERSION_LIST 1 CMAKE_CXX_COMPILER_VERSION_MINOR)
24+
25+
# Installation directories
26+
include(GNUInstallDirs)
27+
28+
# Build library
29+
add_library(${PROJECT_NAME} SHARED
30+
src/parse.cpp
31+
)
32+
33+
# Include directories
34+
target_include_directories(${PROJECT_NAME} PUBLIC
35+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
36+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
37+
)
38+
39+
# Properties
40+
set_target_properties(${PROJECT_NAME} PROPERTIES
41+
CXX_STANDARD 20
42+
CXX_STANDARD_REQUIRED ON
43+
)
44+
45+
# Compile Options
46+
if (CMAKE_CXX_COMPILER_VERSION_MAJOR EQUAL 9)
47+
# Add experimental concepts flag
48+
target_compile_options(${PROJECT_NAME} PUBLIC -fconcepts)
49+
endif()
50+
target_compile_options(${PROJECT_NAME} PRIVATE
51+
-Wall -Wextra -Wpedantic
52+
)
53+
54+
# Configure package version and config files
55+
include(CMakePackageConfigHelpers)
56+
write_basic_package_version_file(
57+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
58+
VERSION ${PROJECT_VERSION}
59+
COMPATIBILITY AnyNewerVersion
60+
)
61+
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.cmake.in
62+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
63+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
64+
)
65+
66+
## Install Library
67+
# Configure package version and config files
68+
include(CMakePackageConfigHelpers)
69+
write_basic_package_version_file(
70+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
71+
VERSION ${PROJECT_VERSION}
72+
COMPATIBILITY AnyNewerVersion
73+
)
74+
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.cmake.in
75+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
76+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
77+
)
78+
79+
# Installation
80+
install(
81+
TARGETS ${PROJECT_NAME}
82+
EXPORT ${PROJECT_NAME}
83+
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}"
84+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
85+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
86+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
87+
)
88+
install(
89+
EXPORT ${PROJECT_NAME}
90+
DESTINATION ${PROJECT_NAME}
91+
FILE ${PROJECT_NAME}-export.cmake
92+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
93+
)
94+
install(
95+
FILES
96+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
97+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
98+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
99+
)
100+
install(
101+
DIRECTORY include/${PROJECT_NAME}
102+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
103+
FILES_MATCHING
104+
PATTERN "*.hpp"
105+
PATTERN "*.h"
106+
)
107+
108+
# Uninstallation
109+
if(NOT TARGET uninstall)
110+
configure_file(
111+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
112+
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
113+
@ONLY
114+
)
115+
116+
# Add uninstall target
117+
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
118+
endif()
119+
120+
## Additional Builds
121+
# Build Documentation
122+
if (BUILD_DOCUMENTATION)
123+
find_package(Doxygen REQUIRED)
124+
set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
125+
configure_file(Doxyfile.in ${DOXYGEN_OUT})
126+
add_custom_target(documentation ALL
127+
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
128+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
129+
COMMENT "Generating documentation with doxygen."
130+
VERBATIM
131+
)
132+
endif()
133+
134+
# Build Tests
135+
if (BUILD_TESTS)
136+
add_subdirectory(test)
137+
endif()

0 commit comments

Comments
 (0)