Skip to content

Commit f82b52a

Browse files
committed
Create debian and rpm package on releases
1 parent e160cbc commit f82b52a

14 files changed

+106
-420
lines changed

.github/workflows/build_release.yml

+16-14
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,31 @@ jobs:
1515
with:
1616
submodules: true
1717

18-
- name: Make setup.sh and check_capstone.sh are executable
18+
- name: Configure CMake and build the project
1919
run: |
20-
chmod +x ./packages/deb/setup.sh
21-
chmod +x ./packages/deb/check_capstone.sh
22-
23-
- name: Build Debian Package
24-
working-directory: ./packages/deb
25-
run: ./setup.sh ${{ github.event.release.tag_name }}
26-
27-
- name: Run sanity checks on the Debian package
28-
working-directory: ./packages/deb
20+
cmake -B build \
21+
-DPROJECT_VERSION=${{ github.event.release.tag_name }} \
22+
-DCMAKE_BUILD_TYPE=Release \
23+
-DCAPSTONE_BUILD_SHARED_LIBS=1 \
24+
-DCMAKE_INSTALL_PREFIX=/usr
25+
cmake --build build
26+
27+
- name: Package DEB and RPM package
2928
run: |
30-
./check_capstone.sh ./libcapstone-dev_${{ github.event.release.tag_name }}_amd64.deb
31-
29+
cd build
30+
cpack -G DEB
31+
cpack -G RPM
32+
3233
- name: Upload debian package to release
3334
uses: softprops/action-gh-release@v2
3435
env:
3536
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3637
with:
3738
tag_name: ${{ github.event.release.tag_name }}
3839
files: |
39-
./packages/deb/*.deb
40-
40+
./build/*.deb
41+
./build/*.rpm
42+
4143
- name: Create archive
4244
id: archive
4345
run: |

BUILDING.md

+10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ cmake --build build
1212
cmake --install build --prefix "<install-prefix>"
1313
```
1414

15+
To create rpm, debian and OSX packages, run the following
16+
```bash
17+
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCAPSTONE_BUILD_SHARED_LIBS=1 -DCMAKE_INSTALL_PREFIX=/usr
18+
cmake --build build
19+
cd build
20+
cpack -G DEB
21+
cpack -G RPM
22+
cpack -G DragNDrop
23+
```
24+
1525
**Windows**
1626

1727
```bash

CMakeLists.txt

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ endif()
2727
# Extract the major, minor, and patch versions
2828
string(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" PROJECT_VERSION_BASE ${PROJECT_VERSION})
2929

30+
# Use PROJECT_VERSION directly for CPack
31+
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
32+
3033
# Set the project version without the pre-release identifier
3134
project(capstone VERSION ${PROJECT_VERSION_BASE})
3235

@@ -959,3 +962,7 @@ if(CAPSTONE_BUILD_CSTEST)
959962
set(TESTS_UNIT_DIR ${PROJECT_SOURCE_DIR}/tests/unit)
960963
add_subdirectory(${TESTS_UNIT_DIR})
961964
endif()
965+
966+
# Include CPack
967+
set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_SOURCE_DIR}/CPackConfig.cmake")
968+
include(CPackConfig.txt)

CPackConfig.cmake

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Used to dynamically set the package file name based on the generator
2+
foreach(generator ${CPACK_GENERATOR})
3+
if("${generator}" STREQUAL "DEB")
4+
set(CPACK_PACKAGE_FILE_NAME ${CPACK_DEBIAN_PACKAGE_FILE_NAME})
5+
elseif("${generator}" STREQUAL "RPM")
6+
set(CPACK_PACKAGE_FILE_NAME ${CPACK_RPM_PACKAGE_FILE_NAME})
7+
elseif("${generator}" STREQUAL "DragNDrop")
8+
set(CPACK_PACKAGE_FILE_NAME ${CPACK_DMG_PACKAGE_FILE_NAME})
9+
else()
10+
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-unknown")
11+
endif()
12+
message(STATUS "Generating package for ${generator} with file name ${CPACK_PACKAGE_FILE_NAME}")
13+
endforeach()

CPackConfig.txt

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Copyright © 2024 Andrew Quijano <[email protected]>
2+
# SPDX-License-Identifier: MIT
3+
4+
# Set general CPack values
5+
set(CPACK_PACKAGE_NAME "capstone")
6+
set(CPACK_PACKAGE_VENDOR "Rot127")
7+
set(CPACK_PACKAGE_CONTACT "Rot127 <[email protected]>")
8+
set(CPACK_PACKAGE_DESCRIPTION "Capstone is a lightweight multi-platform, multi-architecture disassembly framework. These are the development headers and libraries.\n Features:\n - Support hardware architectures: AArch64, ARM, Alpha, BPF, EVM, HPPA, LongArch, M680X, M68K, MOS65XX, Mips, PowerPC, RISCV, SH, Sparc, SystemZ, TMS320C64x, TriCore, WASM, x86, XCore, Xtensa.\n - Clean/simple/lightweight/intuitive architecture-neutral API.\n - Provide details on disassembled instructions (called \\\"decomposer\\\" by some others).\n - Provide some semantics of the disassembled instruction, such as list of implicit registers read & written.\n - Thread-safe by design.\n - Special support for embedding into firmware or OS kernel.\n - Distributed under the open source BSD license.")
9+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Lightweight multi-architecture disassembly framework - devel files")
10+
set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.capstone-engine.org/")
11+
set(CPACK_STRIP_FILES false)
12+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSES/LICENSE.TXT")
13+
14+
# Set Debian-specific package variables
15+
set(CPACK_DEBIAN_PACKAGE_NAME "libcapstone-dev")
16+
set(CPACK_DEBIAN_PACKAGE_SOURCE "capstone")
17+
set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}")
18+
set(CPACK_DEBIAN_PACKAGE_ORIGINAL_MAINTAINER "Debian Security Tools <[email protected]>")
19+
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.2.5)")
20+
set(CPACK_DEBIAN_PACKAGE_SECTION "libdevel")
21+
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
22+
set(CPACK_DEBIAN_PACKAGE_MULTIARCH "same")
23+
24+
# Determine architecture for Debian package
25+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
26+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
27+
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
28+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "i386")
29+
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm")
30+
if(CMAKE_SIZE_OF_VOID_P EQUAL 4)
31+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf")
32+
else()
33+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64")
34+
endif()
35+
else()
36+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
37+
endif()
38+
39+
# Include additional file to run 'ldconfig' after install
40+
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/packages/deb/triggers")
41+
42+
# RPM package settings
43+
set(CPACK_RPM_PACKAGE_NAME "capstone-devel")
44+
set(CPACK_RPM_PACKAGE_VERSION "${PROJECT_VERSION}")
45+
set(CPACK_RPM_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
46+
set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries")
47+
set(CPACK_RPM_PACKAGE_REQUIRES "libc6 >= 2.2.5")
48+
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_SOURCE_DIR}/packages/rpm/postinstall.sh")
49+
set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_SOURCE_DIR}/packages/rpm/postinstall.sh")
50+
set(CPACK_RPM_CHANGELOG_FILE "${CMAKE_SOURCE_DIR}/ChangeLog")
51+
set(CPACK_RPM_PACKAGE_LICENSE "BSD3, LLVM")
52+
set(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}")
53+
54+
# Set package file name based on the generator
55+
set(CPACK_DEBIAN_PACKAGE_FILE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
56+
set(CPACK_RPM_PACKAGE_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.${CMAKE_SYSTEM_PROCESSOR}")
57+
set(CPACK_DMG_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
58+
59+
include(CPack)

LICENSES/LICENSE_DEB_PACKAGE.txt

-11
This file was deleted.

packages/deb/.gitignore

-2
This file was deleted.

packages/deb/Dockerfile

-68
This file was deleted.

packages/deb/README.md

-26
This file was deleted.

packages/deb/check_capstone.sh

-50
This file was deleted.

packages/deb/control

-25
This file was deleted.

0 commit comments

Comments
 (0)