From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-libs/keystone/files/, dev-libs/keystone/
Date: Mon, 14 Jul 2025 09:18:45 +0000 (UTC) [thread overview]
Message-ID: <1752484627.ad4249e5cec98b45e858a17e3e6071d1126350ec.sam@gentoo> (raw)
commit: ad4249e5cec98b45e858a17e3e6071d1126350ec
Author: Mario Haustein <mario.haustein <AT> hrz <DOT> tu-chemnitz <DOT> de>
AuthorDate: Sun Jul 13 09:27:55 2025 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Jul 14 09:17:07 2025 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ad4249e5
dev-libs/keystone: build with modern C and CMake
Closes: https://bugs.gentoo.org/952088
Closes: https://bugs.gentoo.org/924770
Signed-off-by: Mario Haustein <mario.haustein <AT> hrz.tu-chemnitz.de>
Part-of: https://github.com/gentoo/gentoo/pull/42985
Closes: https://github.com/gentoo/gentoo/pull/42985
Signed-off-by: Sam James <sam <AT> gentoo.org>
.../keystone/files/keystone-0.9.2-modern-c.patch | 319 +++++++++++++++++++++
dev-libs/keystone/keystone-0.9.2-r4.ebuild | 104 +++++++
2 files changed, 423 insertions(+)
diff --git a/dev-libs/keystone/files/keystone-0.9.2-modern-c.patch b/dev-libs/keystone/files/keystone-0.9.2-modern-c.patch
new file mode 100644
index 000000000000..a3a55532cf12
--- /dev/null
+++ b/dev-libs/keystone/files/keystone-0.9.2-modern-c.patch
@@ -0,0 +1,319 @@
+From 41197bc85d6b95de3345f5a09d321469c2bba58e Mon Sep 17 00:00:00 2001
+From: Jordan Moore <lockbox@struct.foo>
+Date: Mon, 2 Jun 2025 16:36:27 -0400
+Subject: [PATCH 1/5] fix: cstdint explicitly included when used
+
+* fixes error in gcc15 where this header is no longer
+ implicitly included
+---
+ llvm/include/llvm/ADT/STLExtras.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
+index 3346de93..a2adf853 100644
+--- a/llvm/include/llvm/ADT/STLExtras.h
++++ b/llvm/include/llvm/ADT/STLExtras.h
+@@ -21,6 +21,7 @@
+ #include <algorithm> // for std::all_of
+ #include <cassert>
+ #include <cstddef> // for std::size_t
++#include <cstdint>
+ #include <cstdlib> // for qsort
+ #include <functional>
+ #include <iterator>
+
+From f3f792cc05080a4bcc3c2886c0c7cee9294c4a05 Mon Sep 17 00:00:00 2001
+From: Jordan Moore <lockbox@struct.foo>
+Date: Mon, 2 Jun 2025 16:58:31 -0400
+Subject: [PATCH 2/5] fix: build with modern cmake
+
+---
+ CMakeLists.txt | 19 +------------------
+ kstool/CMakeLists.txt | 2 +-
+ llvm/CMakeLists.txt | 15 +--------------
+ 3 files changed, 3 insertions(+), 33 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 938d4983..9ce08362 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ # Keystone Assembler Engine (www.keystone-engine.org)
+ # By Nguyen Anh Quynh, 2016
+
+-cmake_minimum_required(VERSION 2.8.7)
++cmake_minimum_required(VERSION 3.10.0)
+ project(keystone)
+
+ set(KEYSTONE_VERSION_MAJOR 0)
+@@ -15,23 +15,6 @@ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE "Debug")
+ endif()
+
+-if (POLICY CMP0022)
+- cmake_policy(SET CMP0022 NEW) # automatic when 2.8.12 is required
+-endif()
+-
+-if (POLICY CMP0051)
+- # CMake 3.1 and higher include generator expressions of the form
+- # $<TARGETLIB:obj> in the SOURCES property. These need to be
+- # stripped everywhere that access the SOURCES property, so we just
+- # defer to the OLD behavior of not including generator expressions
+- # in the output for now.
+- cmake_policy(SET CMP0051 OLD)
+-endif()
+-
+-if (POLICY CMP0063)
+- set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) # automatic when 3.3.2 is required
+-endif()
+-
+ if (CMAKE_VERSION VERSION_LESS 3.1.20141117)
+ set(cmake_3_2_USES_TERMINAL)
+ else()
+diff --git a/kstool/CMakeLists.txt b/kstool/CMakeLists.txt
+index d28da481..25113821 100644
+--- a/kstool/CMakeLists.txt
++++ b/kstool/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ # Kstool for Keystone assembler engine.
+ # By Nguyen Anh Quynh, 2016
+
+-cmake_minimum_required(VERSION 2.8)
++cmake_minimum_required(VERSION 3.10.0)
+
+ project(kstool)
+
+diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
+index d926b082..518613a5 100644
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -1,6 +1,6 @@
+ # See docs/CMake.html for instructions about how to build LLVM with CMake.
+
+-cmake_minimum_required(VERSION 2.8.7)
++cmake_minimum_required(VERSION 3.10.0)
+
+ set(LLVM_INSTALL_TOOLCHAIN_ONLY ON)
+
+@@ -9,19 +9,6 @@ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE "Debug")
+ endif()
+
+-if(POLICY CMP0022)
+- cmake_policy(SET CMP0022 NEW) # automatic when 2.8.12 is required
+-endif()
+-
+-if (POLICY CMP0051)
+- # CMake 3.1 and higher include generator expressions of the form
+- # $<TARGETLIB:obj> in the SOURCES property. These need to be
+- # stripped everywhere that access the SOURCES property, so we just
+- # defer to the OLD behavior of not including generator expressions
+- # in the output for now.
+- cmake_policy(SET CMP0051 OLD)
+-endif()
+-
+ if(CMAKE_VERSION VERSION_LESS 3.1.20141117)
+ set(cmake_3_2_USES_TERMINAL)
+ else()
+
+From 4e2fcaa8fad81fc6016bd4d7d245d04719195381 Mon Sep 17 00:00:00 2001
+From: Jordan Moore <lockbox@struct.foo>
+Date: Mon, 2 Jun 2025 17:49:30 -0400
+Subject: [PATCH 3/5] fix: bindings: rust: moderize and format
+
+---
+ bindings/rust/Cargo.toml | 1 +
+ bindings/rust/keystone-sys/Cargo.toml | 1 +
+ bindings/rust/keystone-sys/build.rs | 2 +-
+ bindings/rust/keystone-sys/src/lib.rs | 14 ++------------
+ bindings/rust/src/lib.rs | 2 +-
+ 5 files changed, 6 insertions(+), 14 deletions(-)
+
+diff --git a/bindings/rust/Cargo.toml b/bindings/rust/Cargo.toml
+index 3342e5a1..013a6e9d 100644
+--- a/bindings/rust/Cargo.toml
++++ b/bindings/rust/Cargo.toml
+@@ -1,6 +1,7 @@
+ [package]
+ name = "keystone"
+ version = "0.9.2"
++edition = "2018"
+ authors = [
+ "Remco Verhoef <remco.verhoef@dutchcoders.io>",
+ "Tasuku SUENAGA a.k.a. gunyarakun <tasuku-s-github@titech.ac>"
+diff --git a/bindings/rust/keystone-sys/Cargo.toml b/bindings/rust/keystone-sys/Cargo.toml
+index a836c305..7b88aff6 100644
+--- a/bindings/rust/keystone-sys/Cargo.toml
++++ b/bindings/rust/keystone-sys/Cargo.toml
+@@ -1,6 +1,7 @@
+ [package]
+ name = "keystone-sys"
+ version = "0.9.2"
++edition = "2018"
+ authors = [
+ "Remco Verhoef <remco.verhoef@dutchcoders.io>",
+ "Tasuku SUENAGA a.k.a. gunyarakun <tasuku-s-github@titech.ac>"
+diff --git a/bindings/rust/keystone-sys/build.rs b/bindings/rust/keystone-sys/build.rs
+index 9670fcb3..a92a41f2 100644
+--- a/bindings/rust/keystone-sys/build.rs
++++ b/bindings/rust/keystone-sys/build.rs
+@@ -17,7 +17,7 @@ fn build_with_cmake() {
+ // This only happens when using the crate via a `git` reference as the
+ // published version already embeds keystone's source.
+ let pwd = std::env::current_dir().unwrap();
+- let keystone_dir = pwd.ancestors().skip(3).next().unwrap();
++ let keystone_dir = pwd.ancestors().nth(3).unwrap();
+ symlink(keystone_dir, "keystone").expect("failed to symlink keystone");
+ }
+
+diff --git a/bindings/rust/keystone-sys/src/lib.rs b/bindings/rust/keystone-sys/src/lib.rs
+index 6eb282a6..8bd5eefd 100644
+--- a/bindings/rust/keystone-sys/src/lib.rs
++++ b/bindings/rust/keystone-sys/src/lib.rs
+@@ -10,19 +10,9 @@ extern crate libc;
+
+ pub mod keystone_const;
+
++use ::libc::{c_char, c_int, c_uchar, c_uint, size_t};
++use ::std::{ffi::CStr, fmt, ptr};
+ use keystone_const::{Arch, Error, Mode, OptionType, OptionValue};
+-use ::std::{
+- ffi::CStr,
+- fmt,
+- ptr,
+-};
+-use ::libc::{
+- c_char,
+- c_uchar,
+- c_int,
+- c_uint,
+- size_t,
+-};
+
+ /// Opaque type representing the Keystone engine
+ #[repr(C)]
+diff --git a/bindings/rust/src/lib.rs b/bindings/rust/src/lib.rs
+index dd5bd042..dc8cd5e0 100644
+--- a/bindings/rust/src/lib.rs
++++ b/bindings/rust/src/lib.rs
+@@ -90,7 +90,7 @@ impl Keystone {
+ let err = unsafe { ffi::ks_open(arch, mode, &mut handle) };
+ if err == Error::OK {
+ Ok(Keystone {
+- handle: handle.expect("Got NULL engine from ks_open()")
++ handle: handle.expect("Got NULL engine from ks_open()"),
+ })
+ } else {
+ Err(err)
+
+From bf3b00fba5a32bba3b3f7fb1d54e374338614a96 Mon Sep 17 00:00:00 2001
+From: Jordan Moore <lockbox@struct.foo>
+Date: Mon, 2 Jun 2025 17:50:07 -0400
+Subject: [PATCH 4/5] fix: only attempt to publish bindings on master
+
+---
+ .github/workflows/python-publish.yml | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml
+index 6f5e8554..cb0d2d5c 100644
+--- a/.github/workflows/python-publish.yml
++++ b/.github/workflows/python-publish.yml
+@@ -1,6 +1,9 @@
+ name: PyPI 📦 Distribution
+
+-on: [push]
++on:
++ push:
++ branches:
++ - master
+
+ jobs:
+ build:
+
+From 667cce956ce9c3b2ec7eb30d23198deb9596b427 Mon Sep 17 00:00:00 2001
+From: Jordan Moore <lockbox@struct.foo>
+Date: Mon, 2 Jun 2025 17:50:50 -0400
+Subject: [PATCH 5/5] feat: basic CI
+
+---
+ .github/workflows/cmake-build.yml | 31 +++++++++++++++++++++++++++++++
+ .github/workflows/rust-build.yml | 31 +++++++++++++++++++++++++++++++
+ 2 files changed, 62 insertions(+)
+ create mode 100644 .github/workflows/cmake-build.yml
+ create mode 100644 .github/workflows/rust-build.yml
+
+diff --git a/.github/workflows/cmake-build.yml b/.github/workflows/cmake-build.yml
+new file mode 100644
+index 00000000..4de36eab
+--- /dev/null
++++ b/.github/workflows/cmake-build.yml
+@@ -0,0 +1,31 @@
++# Builds the codebase with cmake
++
++name: CMake CI
++on:
++ pull_request:
++ push:
++ branches:
++ - master
++
++jobs:
++ linux-build:
++ name: Linux
++ runs-on: ubuntu-24.04
++ steps:
++ - name: Checkout source code
++ uses: actions/checkout@v4
++ - name: Install prerequisites
++ shell: bash
++ run: |
++ sudo apt-get -y update
++ sudo apt-get install -y \
++ cmake \
++ gcc
++ - name: Configure
++ shell: bash
++ run: |
++ cmake -B build
++ - name: Bulid
++ shell: bash
++ run: |
++ cmake --build build
+diff --git a/.github/workflows/rust-build.yml b/.github/workflows/rust-build.yml
+new file mode 100644
+index 00000000..7f7c8e01
+--- /dev/null
++++ b/.github/workflows/rust-build.yml
+@@ -0,0 +1,31 @@
++# Builds the codebase with cmake on ubuntu, windows and macos.
++#
++name: Rust CI
++on:
++ pull_request:
++ push:
++ branches:
++ - master
++
++jobs:
++ linux-test:
++ name: Linux
++ runs-on: ubuntu-24.04
++ steps:
++ - uses: actions/checkout@v4
++ - uses: dtolnay/rust-toolchain@stable
++
++ - name: Install prerequisites
++ shell: bash
++ run: |
++ sudo apt-get -y update
++ sudo apt-get install -y \
++ cmake \
++ libclang-dev \
++ pkg-config \
++ gcc
++ - name: Build and test rust
++ shell: bash
++ run: |
++ cd bindings/rust
++ cargo test
diff --git a/dev-libs/keystone/keystone-0.9.2-r4.ebuild b/dev-libs/keystone/keystone-0.9.2-r4.ebuild
new file mode 100644
index 000000000000..efe4c95c6452
--- /dev/null
+++ b/dev-libs/keystone/keystone-0.9.2-r4.ebuild
@@ -0,0 +1,104 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_OPTIONAL=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..13} )
+
+inherit cmake distutils-r1 flag-o-matic
+
+DESCRIPTION="assembly/assembler framework + bindings"
+HOMEPAGE="https://www.keystone-engine.org/"
+
+if [[ ${PV} == 9999* ]]; then
+ EGIT_REPO_URI="https://github.com/keystone-engine/keystone.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/keystone-engine/keystone/archive/${PV/_rc/-rc}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86"
+fi
+S="${WORKDIR}"/${P/_rc/-rc}
+
+LICENSE="GPL-2"
+SLOT="0"
+
+# Keep in sync with llvm/CMakeLists.txt
+KEYSTONE_TARGETS="AArch64 ARM Hexagon Mips PowerPC Sparc SystemZ X86"
+
+IUSE="python"
+
+RDEPEND="
+ python? ( ${PYTHON_DEPS} )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ python?
+ (
+ ${DISTUTILS_DEPS}
+ ${PYTHON_DEPS}
+ )
+"
+
+RESTRICT=test # only regression tests
+
+REQUIRED_USE="
+ python? ( ${PYTHON_REQUIRED_USE} )
+"
+
+PATCHES=(
+ "${FILESDIR}/${P}-strict-prototypes.patch"
+ "${FILESDIR}/${PN}-0.9.2-modern-c.patch"
+)
+
+# Upstream doesn't flag patch releases (bug 858395)
+QA_PKGCONFIG_VERSION="$(ver_cut 1-2)"
+
+wrap_python() {
+ if use python; then
+ pushd bindings/python >/dev/null || die
+ distutils-r1_${1} "$@"
+ popd >/dev/null || die
+ fi
+}
+
+pkg_setup() {
+ python_setup
+}
+
+src_prepare() {
+ sed -i '/NOT uppercase_CMAKE_BUILD_TYPE MATCHES/ s/DEBUG/GENTOO|DEBUG/' \
+ llvm/CMakeLists.txt || die
+ cmake_src_prepare
+ wrap_python ${FUNCNAME}
+}
+
+src_configure() {
+ # ODR violations in bundled LLVM (bug #924866)
+ filter-lto
+
+ local libdir="$(get_libdir)"
+ local mycmakeargs=(
+ -DCMAKE_CONFIGURATION_TYPES="Gentoo"
+ -DLLVM_LIBDIR_SUFFIX=${libdir#lib}
+ -DBUILD_SHARED_LIBS=ON
+ -DLLVM_TARGETS_TO_BUILD="${KEYSTONE_TARGETS// /;}"
+ -DLLVM_HOST_TRIPLE="${CHOST}"
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ )
+
+ cmake_src_configure
+ wrap_python ${FUNCNAME}
+}
+
+src_compile() {
+ cmake_src_compile
+ wrap_python ${FUNCNAME}
+}
+
+src_install() {
+ cmake_src_install
+ wrap_python ${FUNCNAME}
+}
next reply other threads:[~2025-07-14 9:18 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-14 9:18 Sam James [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-08-06 11:10 [gentoo-commits] repo/gentoo:master commit in: dev-libs/keystone/files/, dev-libs/keystone/ Sam James
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1752484627.ad4249e5cec98b45e858a17e3e6071d1126350ec.sam@gentoo \
--to=sam@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox