Skip to content

Commit fe3c474

Browse files
authored
Merge pull request #48 from amock/better-cmake
Cleaned up CMake
2 parents 379696f + 29c1809 commit fe3c474

File tree

16 files changed

+373
-279
lines changed

16 files changed

+373
-279
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
name: build-and-attach-release-assets
2+
3+
on:
4+
release:
5+
types: [published] # when you publish a GitHub release
6+
workflow_dispatch: {} # manual "Run workflow" button
7+
8+
permissions:
9+
contents: write # needed to upload assets to releases
10+
11+
jobs:
12+
build-and-upload:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
# 1) Decide which tag to build
17+
- name: Resolve tag to build
18+
id: get_tag
19+
uses: actions/github-script@v7
20+
with:
21+
script: |
22+
const eventName = context.eventName;
23+
let tag;
24+
25+
if (eventName === 'release') {
26+
// tag of the release that triggered this workflow
27+
tag = context.payload.release.tag_name;
28+
} else if (eventName === 'workflow_dispatch') {
29+
// latest published release in the repo
30+
const latest = await github.rest.repos.getLatestRelease({
31+
owner: context.repo.owner,
32+
repo: context.repo.repo,
33+
});
34+
tag = latest.data.tag_name;
35+
} else {
36+
core.setFailed(`Unsupported event: ${eventName}`);
37+
return;
38+
}
39+
40+
core.info(`Using tag: ${tag}`);
41+
core.setOutput('tag_name', tag);
42+
43+
# 2) Checkout the code for that tag
44+
- name: Checkout
45+
uses: actions/checkout@v4
46+
with:
47+
fetch-depth: 0
48+
ref: ${{ steps.get_tag.outputs.tag_name }}
49+
50+
# 3) Install build tools (CMake + Make)
51+
- name: Install build tools
52+
run: |
53+
sudo apt-get update
54+
sudo apt-get install -y build-essential cmake
55+
56+
# 4) Install dependencies
57+
- name: Install dependencies
58+
run: >
59+
sudo apt update && sudo apt install -y libboost-all-dev build-essential cmake cmake-curses-gui libflann-dev libgsl-dev libeigen3-dev libopenmpi-dev openmpi-bin opencl-c-headers ocl-icd-opencl-dev freeglut3-dev libhdf5-dev liblz4-dev libopencv-dev libyaml-cpp-dev libcgal-dev libgdal-dev
60+
61+
# 5) Configure
62+
- name: Configure CMake
63+
run: |
64+
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
65+
66+
# 6) Build
67+
- name: Build
68+
run: cmake --build build --config Release
69+
70+
# 7) Package via CPack (tar.gz)
71+
- name: Package (CPack tar.gz)
72+
run: |
73+
cmake --build build --target package
74+
mkdir -p dist
75+
cp build/*.tar.gz dist/ || true
76+
cp build/*.deb dist/ || true
77+
78+
# 8) Upload to the corresponding GitHub Release
79+
- name: Attach assets to release
80+
uses: softprops/action-gh-release@v2
81+
with:
82+
tag_name: ${{ steps.get_tag.outputs.tag_name }}
83+
files: |
84+
dist/*.tar.gz
85+
dist/*.deb
86+
overwrite_files: true
87+
env:
88+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

CHANGELOG.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
Changelog for package lvr2
33
^^^^^^^^^^^^^^^^^^^^^^^^^^
44

5+
25.2.0 (2025-11-22)
6+
--------------------
7+
* CMake cleanup
8+
59
25.1.0 (2025-01-01)
610
--------------------
711
* mirror internal state of lvr to github

CMakeLists.txt

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.16)
2-
project(lvr2 VERSION 25.1.0)
2+
project(lvr2 VERSION 25.2.0)
33

44
# OPTIONS
55
option(BUILD_EXAMPLES "Build the examples" OFF)
@@ -41,6 +41,21 @@ if(APPLE)
4141
set(CMAKE_MACOSX_RPATH ON)
4242
endif()
4343

44+
#############################
45+
# List of policies that where we need to force the old behavior
46+
# -> This is also a list of TODOs. So ultimately this list should be empty
47+
###
48+
49+
# exec_programm should not be called anymore (uninstall script)
50+
if(POLICY CMP0153)
51+
cmake_policy(SET CMP0153 OLD)
52+
endif()
53+
54+
# FindCUDA is obsolete
55+
if(POLICY CMP0146)
56+
cmake_policy(SET CMP0146 OLD)
57+
endif()
58+
4459
#------------------------------------------------------------------------------
4560
# Searching for Embree: needs to be placed above "set(CMAKE_MODULE_PATH)".
4661
#------------------------------------------------------------------------------
@@ -165,8 +180,8 @@ message(STATUS "Found GSL")
165180
# Searching for Eigen3
166181
#------------------------------------------------------------------------------
167182
find_package(Eigen3 REQUIRED)
168-
include_directories(${EIGEN3_INCLUDE_DIR})
169-
message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
183+
# include_directories(${EIGEN3_INCLUDE_DIR})
184+
# message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
170185

171186
#------------------------------------------------------------------------------
172187
# Searching for Boost
@@ -267,7 +282,7 @@ if(RDB_FOUND)
267282
list(APPEND LVR2_DEFINITIONS -DLVR2_USE_RDB)
268283

269284
install(TARGETS rdbcpp
270-
EXPORT lvr2Targets
285+
EXPORT lvr2-targets
271286
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
272287
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
273288
)
@@ -615,6 +630,7 @@ set(LVR2_LIB_DEPENDENCIES
615630
${YAML_CPP_LIBRARIES}
616631
${OpenMP_CXX_LIBRARIES}
617632
${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES}
633+
Eigen3::Eigen
618634
lvr2rply
619635
lvr2rply_static
620636
lvr2las
@@ -637,6 +653,7 @@ set(LVR2_LIB_DEPENDENCIES
637653
${YAML_CPP_LIBRARIES}
638654
${OpenMP_CXX_LIBRARIES}
639655
${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES}
656+
Eigen3::Eigen
640657
m
641658
${RDB_LIBRARIES}
642659
)
@@ -794,24 +811,29 @@ endif(BUILD_VIEWER)
794811
include(CMakePackageConfigHelpers)
795812
set(SYSCONFIG_INSTALL_DIR etc/lvr2/)
796813

797-
install(EXPORT lvr2Targets
798-
FILE lvr2Targets.cmake
814+
install(EXPORT lvr2-targets
815+
FILE lvr2-targets.cmake
799816
NAMESPACE lvr2::
800817
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lvr2)
801818

802-
configure_package_config_file(LVR2Config.cmake.in
803-
${CMAKE_CURRENT_BINARY_DIR}/LVR2Config.cmake
804-
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lvr2
805-
PATH_VARS CMAKE_INSTALL_INCLUDEDIR SYSCONFIG_INSTALL_DIR)
806819

807820
write_basic_package_version_file(
808-
${CMAKE_CURRENT_BINARY_DIR}/LVR2ConfigVersion.cmake
821+
${CMAKE_CURRENT_BINARY_DIR}/lvr2-config-version.cmake
822+
VERSION ${lvr2_VERSION}
809823
COMPATIBILITY SameMajorVersion
810824
)
811825

812-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LVR2Config.cmake
813-
${CMAKE_CURRENT_BINARY_DIR}/LVR2ConfigVersion.cmake
814-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lvr2 )
826+
configure_package_config_file(CMakeModules/lvr2-config.cmake.in
827+
${CMAKE_CURRENT_BINARY_DIR}/lvr2-config.cmake
828+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lvr2
829+
)
830+
831+
install(
832+
FILES
833+
${CMAKE_CURRENT_BINARY_DIR}/lvr2-config.cmake
834+
${CMAKE_CURRENT_BINARY_DIR}/lvr2-config-version.cmake
835+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lvr2
836+
)
815837

816838
# install package.xml for ROS
817839
install(FILES package.xml DESTINATION share/lvr2)
@@ -827,7 +849,7 @@ install(FILES
827849
# Installation of HighFive headers
828850
# need to do it like this sind add_subdirectory to "ext/HighFive" crashs
829851
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ext/HighFive/include/
830-
DESTINATION "include"
852+
DESTINATION include
831853
PATTERN "*.in" EXCLUDE)
832854

833855

@@ -868,3 +890,6 @@ if( DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND )
868890
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
869891
COMMENT "Generating API documentation with Doxygen" VERBATIM )
870892
endif( DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND )
893+
894+
# CPack / packaging configuration
895+
include(CMakeModules/lvr2-packaging.cmake)

CMakeModules/lvr2-config.cmake.in

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# -----------------------------------------------------------------
2+
# lvr's cmake configuration
3+
#
4+
# provided options:
5+
# - LVR2_USE_STATIC_LIBS(=OFF) to link the static libraries of lvr
6+
#
7+
# provided interface variables:
8+
# - LVR2_INCLUDE_DIRS
9+
# - LVR2_DEFINITIONS
10+
# - LVR2_LIBRARIES
11+
#
12+
# Do not forget to add_defintions(${LVR2_DEFINITIONS}) as they
13+
# describe the build configuration of liblvr.
14+
#
15+
# -----------------------------------------------------------------
16+
@PACKAGE_INIT@
17+
include(${CMAKE_CURRENT_LIST_DIR}/lvr2-config-version.cmake)
18+
include(${CMAKE_CURRENT_LIST_DIR}/lvr2-targets.cmake)
19+
20+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Modules")
21+
22+
# The following block exists only for backwards compatibility
23+
# and marked as obsolete via the migration guide 25.1.0 -> 25.2.0
24+
25+
#########################
26+
## OBSOLETE START
27+
28+
set(LVR2_INCLUDE_DIRS @LVR2_INSTALL_INCLUDE_DIRS@)
29+
set(LVR2_DEFINITIONS @LVR2_DEFINITIONS@)
30+
31+
option(LVR2_USE_STATIC_LIBS OFF)
32+
if(LVR2_USE_STATIC_LIBS)
33+
set(LVR2_LIBRARY lvr2::lvr2_static)
34+
set(LVR2_LIBRARIES ${LVR2_LIBRARY})
35+
else()
36+
set(LVR2_LIBRARY lvr2::lvr2)
37+
set(LVR2_LIBRARIES ${LVR2_LIBRARY})
38+
endif()
39+
40+
## OBSOLETE END
41+
#########################
42+
43+
include(CMakeFindDependencyMacro)
44+
45+
find_dependency(TBB)
46+
find_dependency(MPI)
47+
find_dependency(TIFF)
48+
find_dependency(GDAL)
49+
find_dependency(OpenCV)
50+
51+
find_dependency(FLANN)
52+
find_dependency(LZ4)
53+
find_dependency(GSL)
54+
find_dependency(Eigen3)
55+
find_dependency(yaml-cpp)
56+
# find_dependency(Boost)
57+
find_package(Boost COMPONENTS @Boost_COMPONENTS@ REQUIRED QUIET)
58+
# find_dependency(HDF5)
59+
find_package(HDF5 REQUIRED COMPONENTS C CXX HL)
60+
# find_dependency(OpenGL)
61+
find_package(OpenGL COMPONENTS OpenGL)
62+
find_dependency(GLUT)
63+
64+
#####################
65+
## OPTIONAL DEPS ##
66+
#####################
67+
if(@RDB_FOUND@)
68+
find_dependency(RDB)
69+
endif(@RDB_FOUND@)
70+
71+
# VTK
72+
if(@VTK_FOUND@)
73+
find_dependency(VTK)
74+
endif()
75+
76+
# pcl
77+
if(@PCL_FOUND@)
78+
find_dependency(PCL)
79+
endif()
80+
81+
# cgal
82+
if(@CGAL_FOUND@)
83+
find_dependency(CGAL)
84+
endif()
85+
86+
# libfreenect
87+
if(@LIBFREENECT_FOUND@)
88+
find_package(PkgConfig REQUIRED)
89+
pkg_check_modules(LIBFREENECT REQUIRED libfreenect)
90+
list(APPEND LVR2_INCLUDE_DIRS ${LIBFREENECT_INCLUDE_DIRS})
91+
endif()
92+
93+
# Embree
94+
if(@embree_FOUND@)
95+
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ON)
96+
find_package(embree 4.0 REQUIRED)
97+
endif()
98+
99+
set(lvr2_FOUND TRUE)

CMakeModules/lvr2-packaging.cmake

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
############
2+
# AUTO PACKAGING USING CPACK
3+
############
4+
5+
# Only enable packaging when lvr2 is the top-level project
6+
if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
7+
return()
8+
endif()
9+
10+
# Detect architecture
11+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
12+
set(ARCH "x86_64")
13+
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64")
14+
set(ARCH "aarch64")
15+
else()
16+
set(ARCH "${CMAKE_SYSTEM_PROCESSOR}")
17+
endif()
18+
19+
# Detect OS
20+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
21+
set(OS_NAME "linux")
22+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
23+
set(OS_NAME "macos")
24+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
25+
set(OS_NAME "windows")
26+
else()
27+
set(OS_NAME "${CMAKE_SYSTEM_NAME}")
28+
endif()
29+
30+
# Package name: lvr2-version-arch-os
31+
set(CPACK_PACKAGE_FILE_NAME
32+
"lvr2-${PROJECT_VERSION}-${ARCH}-${OS_NAME}"
33+
)
34+
35+
# Generators
36+
set(CPACK_GENERATOR "TGZ;DEB")
37+
38+
# Debian metadata
39+
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "jubraun@uos.de")
40+
41+
# Let dpkg-shlibdeps detect shared-lib deps automatically
42+
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
43+
44+
set(_LVR2_DEPS
45+
libboost-all-dev
46+
libflann-dev
47+
libgsl-dev
48+
libeigen3-dev
49+
libopenmpi-dev
50+
openmpi-bin
51+
ocl-icd-opencl-dev
52+
freeglut3-dev
53+
libhdf5-dev
54+
liblz4-dev
55+
libopencv-dev
56+
libyaml-cpp-dev
57+
libcgal-dev
58+
libgdal-dev
59+
)
60+
61+
# Convert list → comma-separated string
62+
string(REPLACE ";" ", " _LVR2_DEPS_STR "${_LVR2_DEPS}")
63+
64+
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${_LVR2_DEPS_STR}")
65+
66+
include(CPack)

0 commit comments

Comments
 (0)