Implement CPack for Debian/RPM#2590
Conversation
|
@Rot127 While I will need help with the Mac stuff, I can try to poke around how capstone made RPM packages before, but your feedback would be helpful to have! I did poke around and find this, it seems the RPM packaging standard is a lot more of a mess than I thought as it seems anyone can package as they see fit. https://rpmfind.net/linux/rpm2html/search.php?query=libcapstone-devel I do want to ask, if the goal is to automate placing Debian packages in APT, this would require creating both a libcapstone package with the shared objects only and another debian with the static library/headers. I could use cmake twice and leverage CPack to make two packages. To avoid the headers being made twice, would I need to delete these lines of code? https://github.com/capstone-engine/capstone/blob/next/CMakeLists.txt#L799-L801 |
|
Sorry for the late answer. I will review this one after new year. But to answer your questions meanwhile:
Yes, this would be nice to have. Though, I can't put any priority on it. And before v6 Beta, it is not necessary. I think for v6 Gold it is though.
I have no idea. They were made before my time here. You have to contact the package maintainers and/or follow the docs. |
419750b to
12879d4
Compare
|
I poked around a bit more about making the RPM the best I can, so a few things I'll likely need help on,
|
Rot127
left a comment
There was a problem hiding this comment.
Nice! Thanks a lot for getting started with it.
Some general notes:
- Let's exclude OSX for now, please. It gets too much otherwise and they can be part of another PR.
- The
packages/rpm/capstone.specfile shouldn't be necessary. I think it can be removed. CPack should generate it. - Once we have tested the package build locally, we can add the process to the release workflow.
Regarding #2590 (comment)
This looks a little hacky. Let's not worry about the bindings for now. Because they need some refactoring before (see: #2291).
And maybe there are way better ways to create such packages. In the case of the Python bindings, they are already uploaded to pypi.
|
@Rot127 Just updated the CPack file per your suggestions (Note both Debian and RPM package content looks identical now), three questions remain:
https://github.com/AndrewQuijano/capstone/releases/tag/6.0.2-Alpha3 |
d2bb8b5 to
c77d6ff
Compare
I just ran a
Not yet. I waited for you to add the workflow job, so I don't have to set up to much. Will do review this one again tomorrow.
Yeah, sure. Less duplicates are always better.
This would be awesome! @kabeor Do you know if we could get the release before lunar new year? |
0e85387 to
e31a1e9
Compare
|
@Rot127 Just updated the PR, and just curious would you look into how to update labeler to v5? Also, figure I should ask, you don't mind I use your ISSUE_TEMPLATE folder and labeler stuff for any other open-source work right? |
Rot127
left a comment
There was a problem hiding this comment.
Looks good!
But the build fails for me: https://github.com/Rot127/capstone/actions/runs/12734529842/job/35492198289
...
Enabling CAPSTONE_WASM_SUPPORT
Enabling CAPSTONE_BPF_SUPPORT
Enabling CAPSTONE_RISCV_SUPPORT
Enabling CAPSTONE_SH_SUPPORT
Enabling CAPSTONE_TRICORE_SUPPORT
Enabling CAPSTONE_ALPHA_SUPPORT
Enabling CAPSTONE_HPPA_SUPPORT
Enabling CAPSTONE_LOONGARCH_SUPPORT
Enabling CAPSTONE_XTENSA_SUPPORT
CMake Error at /usr/local/share/cmake-3.31/Modules/WriteBasicConfigVersionFile.cmake:43 (message):
No VERSION specified for WRITE_BASIC_CONFIG_VERSION_FILE()
Call Stack (most recent call first):
/usr/local/share/cmake-3.31/Modules/CMakePackageConfigHelpers.cmake:402 (write_basic_config_version_file)
CMakeLists.txt:897 (write_basic_package_version_file)
-- Configuring incomplete, errors occurred!
It isn't a priority currently for me. Too much other stuff to do unfortunately. If you want to work on it feel free to do so! If you are faster then @kabeor reviewing, we can replace my downgrading PR with yours.
Not at all. It is open-source in the end :D |
39bcf36 to
cc1aaa1
Compare
|
Debian works fine. The package name for |
|
@Rot127 just updated CPack, hopefully this should fix the issue |
Rot127
left a comment
There was a problem hiding this comment.
Very nice! Thanks a lot!
|
@kabeor Please merge and create a 5.0.4 on the v5 Branch |
Done. |
|
@kabeor Thank you for the new release! I'm wondering, would it be possible to re-release 5.0.4? It seems the code to dynamically update the version got deleted here. The released packages are missing the version in the file name (I aimed to follow standard RPM/Debian package practices), since the code to dynamically pick up the version from the tag got deleted. https://github.com/capstone-engine/capstone/releases/tag/5.0.4 Also, could you please merge #2590? I should note, this PR also has the same technique to dynamically update the version of Capstone based on input from tag name. This should save time from having to manually bump the version number for every release, which seemed to be ok with @Rot127 I see based on the v5 release, I think a better solution is to use a version.h.in file, with some modifications from CMake, we can dynamically get this version data, automating this work on every release. Should this just be another PR? |
|
Two things 1- I did a bit more digging around for pkgconfig.mk, it is used by Makefile and Python, I propose having CMake be able to dynamically overwrite pkgconfig.mk with the version data if it is provided. I'm not sure where I'd write the updated version of pkgconfig for use? I'd also be curious what the values in 2- I can add a version.h file to be created and updated dynamically in |
Just pinged him. Was an accident while resolving conflicts. Thanks for pointing it out!
Good idea. At least on the next branch we should have it. Regarding the whole pkgconfig changes: |
|
@AndrewQuijano Please review #2606 |
|
Ah, also. Please rebase this one on the latest next. The labeler is fixed again. |
|
@Rot127 Rebased complete! @kabeor Thanks for v5.0.5 release! Will be updating PANDA to be using the new Debian package shortly panda-re/panda#1562 |
capstone can be built as sub-project through cmake's fetch_content mechanism. In this case, `CMAKE_SOURCE_DIR` refers to the parent project (that has nothing to do with capstone), while `PROJECT_SOURCE_DIR` refers to the root of the capstone source tree. Recently introduced changes to enable CPack (capstone-engine#2590) are using the wrong variable and are hence breaking builds that use capstone through fetch_content. Use the correct variable to fix this issue.
* cmake: Use PROJECT_SOURCE_DIR instead of CMAKE_SOURCE_DIR capstone can be built as sub-project through cmake's fetch_content mechanism. In this case, `CMAKE_SOURCE_DIR` refers to the parent project (that has nothing to do with capstone), while `PROJECT_SOURCE_DIR` refers to the root of the capstone source tree. Recently introduced changes to enable CPack (#2590) are using the wrong variable and are hence breaking builds that use capstone through fetch_content. Use the correct variable to fix this issue. * cmake: Only include cpack in top-level builds Do not include cpack in builds where capstone is used through fetch_content.
* Fix wrong version requirement of tricore instructions: (#2620) crc32.b crc32b.w crc32l.w crcn popcnt.w shuffle Remove invalid instruction: BISR_rc_v161 Learn up misconfigure of nor and not * Switch to ubuntu-24.04-arm runner image (#2625) * Build Tarball before DEB/RPM package. (#2627) Because it was run after the RPM/DEB package build it contained the 'build' directory with all its files. Which made it way too big. * Add aliases mapping for MIPS & test for id, alias_id (#2635) * Add checks for MIPS details on cstest_py (#2640) * Give the user some guidance where to add missing enumeration values. (#2639) * - Added missing files for sdist archive (#2624) * cmake: Fix building capstone as sub-project (#2629) * cmake: Use PROJECT_SOURCE_DIR instead of CMAKE_SOURCE_DIR capstone can be built as sub-project through cmake's fetch_content mechanism. In this case, `CMAKE_SOURCE_DIR` refers to the parent project (that has nothing to do with capstone), while `PROJECT_SOURCE_DIR` refers to the root of the capstone source tree. Recently introduced changes to enable CPack (#2590) are using the wrong variable and are hence breaking builds that use capstone through fetch_content. Use the correct variable to fix this issue. * cmake: Only include cpack in top-level builds Do not include cpack in builds where capstone is used through fetch_content. * Update operand type enums of all arch modules to the one in `capstone.h` (#2633) * Set all operand types to the main CS_OP_ types from capstone.h. * Add test cases from issue. * Enhance shift value and types of shift instructions. (#2638) * Enhance shift value and types of shift instructions. Shifts via registers now save the register id in cs_arch64_op.shift.value and set the shift type accordingly. * Sort table * Fix build for compilers requiring explicit static for inline functions.. (#2645) * Tms32c64x Little Endian (#2648) * Add little endian support for TMS320c64x. This requires now to initialize TMS320c64x with the CS_MODE_BIG_ENDIAN flag. * Fix typo * Add Call group to svc, smc and hvc. (#2651) * Decode BH field in print_insn_detail_ppc (#2662) --------- Co-authored-by: Changqing Jing <changqing.jing@bmw.com> Co-authored-by: @Antelox <anteloxrce@gmail.com> Co-authored-by: Giovanni <561184+wargio@users.noreply.github.com> Co-authored-by: Philipp Wagner <mail@philipp-wagner.com> Co-authored-by: Tim Haines <thaines.astro@gmail.com>
* cmake: Use PROJECT_SOURCE_DIR instead of CMAKE_SOURCE_DIR capstone can be built as sub-project through cmake's fetch_content mechanism. In this case, `CMAKE_SOURCE_DIR` refers to the parent project (that has nothing to do with capstone), while `PROJECT_SOURCE_DIR` refers to the root of the capstone source tree. Recently introduced changes to enable CPack (#2590) are using the wrong variable and are hence breaking builds that use capstone through fetch_content. Use the correct variable to fix this issue. * cmake: Only include cpack in top-level builds Do not include cpack in builds where capstone is used through fetch_content.
* cmake: Use PROJECT_SOURCE_DIR instead of CMAKE_SOURCE_DIR capstone can be built as sub-project through cmake's fetch_content mechanism. In this case, `CMAKE_SOURCE_DIR` refers to the parent project (that has nothing to do with capstone), while `PROJECT_SOURCE_DIR` refers to the root of the capstone source tree. Recently introduced changes to enable CPack (#2590) are using the wrong variable and are hence breaking builds that use capstone through fetch_content. Use the correct variable to fix this issue. * cmake: Only include cpack in top-level builds Do not include cpack in builds where capstone is used through fetch_content.


Your checklist for this pull request
Detailed description
I created a CPackConfig.txt that can create both Debian and RPM packages. The Debian package matches what we have now. I can look further about making a proper RPM package.
Debian Screenshots



This is identical to #2579
RPM


Here is the generated spec file
libcapstone-dev.spec.txt
I do want to get help with macOS package creation and testing using CPack
I updated how to do this in the Building.md file
...
Test plan
We can probably use something like check_capstone.sh? Although for now, we can merge it as another way to create the Debian Package? My hope is, from here, work can be done to get a Mac OSX package built. I can help with RPM, the work is done, but any last necessary touches I can take care of it.
...
Closing issues
...