diff --git a/CMakeLists.txt b/CMakeLists.txt index 11de71c..0735b48 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,3 +75,22 @@ target_link_libraries(salmanoff add_all_daps_dependencies() install(TARGETS salmanoff DESTINATION bin) + +# Install device configuration files (preprocessed .daps files) +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/devices/ + DESTINATION share/salmanoff/devices + FILES_MATCHING PATTERN "*.daps" +) + +# Install documentation +install(FILES README.md DESTINATION share/doc/salmanoff) +install(FILES LICENSE DESTINATION share/doc/salmanoff) + +# Install example configurations if they exist +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/examples") + install(DIRECTORY examples/ DESTINATION share/salmanoff/examples) +endif() + +# Include CPack configuration +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPackConfig.cmake) +include(CPack) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e3a62a9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2024 Salmanoff Project. All rights reserved. + +PROPRIETARY SOFTWARE LICENSE + +This software and associated documentation files (the "Software") are +proprietary and confidential. The Software is owned exclusively by the +Salmanoff Project and is protected by copyright laws and international +treaty provisions. + +NO LICENSE GRANTED. No person or entity is granted any rights or +permissions to use, copy, modify, merge, publish, distribute, sublicense, +sell, or otherwise transfer the Software or any portion thereof without +explicit written permission from the Salmanoff Project. + +UNAUTHORIZED USE PROHIBITED. Any unauthorized use, reproduction, or +distribution of the Software is strictly prohibited and may result in +severe civil and criminal penalties. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/PACKAGING.md b/PACKAGING.md new file mode 100644 index 0000000..60efa8e --- /dev/null +++ b/PACKAGING.md @@ -0,0 +1,84 @@ +# Package Generation + +This project supports generating both Debian (.deb) and RPM (.rpm) packages +using CPack. + +## Manual Package Generation + +### Prerequisites + +- CMake 3.16 or later +- Make or Ninja build system +- For RPM packages: `rpmbuild` utility + +### Build Process + +1. **Create build directory:** + ```bash + mkdir -p build-package + cd build-package + ``` + +2. **Configure with CMake:** + ```bash + cmake .. -DCMAKE_BUILD_TYPE=Release + ``` + +3. **Build the project:** + ```bash + make -j$(nproc) + ``` + +4. **Generate packages:** + ```bash + cpack -G DEB # Generate Debian package + cpack -G RPM # Generate RPM package (requires rpmbuild) + ``` + +### Requirements for RPM Generation + +To generate RPM packages, you need `rpmbuild` installed: + +- **Ubuntu/Debian**: `sudo apt-get install rpm` +- **CentOS/RHEL**: `sudo yum install rpm-build` +- **Fedora**: `sudo dnf install rpm-build` + +### Package Contents + +The generated packages include: + +- **Main executable**: `/usr/bin/salmanoff` +- **Shared libraries**: `/usr/lib/lib*.so` +- **Device configurations**: `/usr/share/salmanoff/devices/` (preprocessed + .daps files) +- **Documentation**: `/usr/share/doc/salmanoff/` + +### Installing Packages + +**Debian/Ubuntu:** +```bash +sudo dpkg -i salmanoff-0.00.004-x86_64.deb +``` + +**CentOS/RHEL/Fedora:** +```bash +sudo rpm -i salmanoff-0.00.004-x86_64.rpm +``` + +### Package Configuration + +Package metadata and configuration is defined in +`cmake/CPackConfig.cmake`. This includes: + +- Package name, version, and description +- Dependencies and recommendations +- License information +- File naming conventions + +### Troubleshooting + +- **RPM generation fails**: Ensure `rpmbuild` is installed +- **Missing dependencies**: Check that all build dependencies are + installed +- **Permission errors**: Ensure you have write permissions in the build + directory diff --git a/README.md b/README.md index 73eebbe..cd3f748 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,5 @@ This project, Salmanoff (pronounced: Sal-man-off), is an ROS rewrite of the Hari * Leonard Peik`OFF`. Would you like to know what this project is and does? Well, it's a secret! But you can find out by reading the code. Or you could just ask me. Or you could wait until I release it. But that's no fun. + +For package generation instructions, see [PACKAGING.md](PACKAGING.md). diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake new file mode 100644 index 0000000..eeb17a0 --- /dev/null +++ b/cmake/CPackConfig.cmake @@ -0,0 +1,51 @@ +# CPack configuration for package generation +# This file contains all CPack settings for generating deb and rpm packages + +# Set package metadata using project variables +set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") +set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "Salmanoff - A sensor management and control system") +set(CPACK_PACKAGE_VENDOR "Salmanoff Project") +set(CPACK_PACKAGE_CONTACT "maintainer@salmanoff.org") + +# Set package description +set(CPACK_PACKAGE_DESCRIPTION + "Salmanoff is a comprehensive sensor management and control system that\n" + "provides unified interfaces for various sensor devices including LiDAR\n" + "systems. It features modular architecture with support for multiple\n" + "device types, asynchronous processing, and real-time data handling." +) + +# License information +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") +set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") + +# Enable deb and rpm generators +set(CPACK_GENERATOR "DEB;RPM") + +# DEB package specific settings +set(CPACK_DEBIAN_PACKAGE_MAINTAINER + "Salmanoff Project ") +set(CPACK_DEBIAN_PACKAGE_SECTION "science") +set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +set(CPACK_DEBIAN_PACKAGE_DEPENDS + "libboost-system1.74.0 | libboost-system1.73.0 | libboost-system1.72.0, " + "libc6, libstdc++6") +set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "libxcb1, libx11-6") +set(CPACK_DEBIAN_PACKAGE_SUGGESTS "livox-sdk") + +# RPM package specific settings +set(CPACK_RPM_PACKAGE_LICENSE "Proprietary") +set(CPACK_RPM_PACKAGE_GROUP "Applications/Engineering") +set(CPACK_RPM_PACKAGE_URL "https://github.com/salmanoff/salmanoff") +set(CPACK_RPM_PACKAGE_REQUIRES "boost-system >= 1.72.0, glibc, libstdc++") +set(CPACK_RPM_PACKAGE_SUGGESTS "xcb, libX11, livox-sdk") + +# Package file naming using project variables +set(CPACK_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_SYSTEM_PROCESSOR}") + +# Set compression +set(CPACK_DEB_COMPONENT_INSTALL ON) +set(CPACK_RPM_COMPONENT_INSTALL ON)