commit:     578daf3796eefa3981d9e97374cf0c529b4c7fcc
Author:     Mario Haustein <mario.haustein <AT> hrz <DOT> tu-chemnitz <DOT> de>
AuthorDate: Sun Oct  8 12:07:29 2023 +0000
Commit:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
CommitDate: Mon Jan  8 13:50:35 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=578daf37

dev-libs/keystone: fix modern C issue

Closes: https://bugs.gentoo.org/879665
Signed-off-by: Mario Haustein <mario.haustein <AT> hrz.tu-chemnitz.de>
Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org>

 .../files/keystone-0.9.2-strict-prototypes.patch   | 156 +++++++++++++++++++++
 dev-libs/keystone/keystone-0.9.2-r3.ebuild         | 100 +++++++++++++
 2 files changed, 256 insertions(+)

diff --git a/dev-libs/keystone/files/keystone-0.9.2-strict-prototypes.patch 
b/dev-libs/keystone/files/keystone-0.9.2-strict-prototypes.patch
new file mode 100644
index 000000000000..6f41ba1841b4
--- /dev/null
+++ b/dev-libs/keystone/files/keystone-0.9.2-strict-prototypes.patch
@@ -0,0 +1,156 @@
+commit 3717a45601835ddce9f0c21c6552aef5b4a6383b
+Upstream: https://github.com/keystone-engine/keystone/pull/563
+Author: Mario Haustein <mario.haust...@hrz.tu-chemnitz.de>
+Date:   Sun Oct 8 13:59:08 2023 +0200
+
+    use full prototypes for functions without parameters
+
+--- a/bindings/ruby/keystone_gem/ext/keystone.c
++++ b/bindings/ruby/keystone_gem/ext/keystone.c
+@@ -27,7 +27,7 @@ VALUE KsClass = Qnil;
+ VALUE KsError = Qnil;
+ 
+ 
+-void Init_keystone() {
++void Init_keystone(void) {
+     rb_require("keystone/keystone_const");
+     KeystoneModule = rb_define_module("Keystone");
+     KsError = rb_define_class_under(KeystoneModule, "KsError", 
rb_eStandardError);
+--- a/llvm/cmake/config-ix.cmake
++++ b/llvm/cmake/config-ix.cmake
+@@ -35,7 +35,7 @@ function(check_type_exists type files variable)
+   add_cxx_include(includes "${files}")
+   CHECK_CXX_SOURCE_COMPILES("
+     ${includes} ${type} typeVar;
+-    int main() {
++    int main(void) {
+         return 0;
+     }
+     " ${variable})
+@@ -83,7 +83,7 @@ check_include_file(histedit.h HAVE_HISTEDIT_H)
+ check_cxx_source_compiles("
+ #include <stddef.h>
+ #include <cxxabi.h>
+-int main() { return 0; }
++int main(void) { return 0; }
+ " HAVE_CXXABI_H)
+ 
+ # library checks
+@@ -414,7 +414,7 @@ if( PURE_WINDOWS )
+     #include <imagehlp.h>
+     extern \"C\" void foo(PENUMLOADED_MODULES_CALLBACK);
+     extern \"C\" void foo(BOOL(CALLBACK*)(PCSTR,ULONG_PTR,ULONG,PVOID));
+-    int main(){return 0;}"
++    int main(void){return 0;}"
+     HAVE_ELMCB_PCSTR)
+   if( HAVE_ELMCB_PCSTR )
+     set(WIN32_ELMCB_PCSTR "PCSTR")
+--- a/llvm/cmake/config.guess
++++ b/llvm/cmake/config.guess
+@@ -539,7 +539,7 @@ EOF
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+ 
+-              main()
++              int main(void)
+                       {
+                       if (!__power_pc())
+                               exit(1);
+@@ -622,7 +622,7 @@ EOF
+               #include <stdlib.h>
+               #include <unistd.h>
+ 
+-              int main ()
++              int main (void)
+               {
+               #if defined(_SC_KERNEL_BITS)
+                   long bits = sysconf(_SC_KERNEL_BITS);
+@@ -684,8 +684,8 @@ EOF
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+-      int
+-      main ()
++
++      int main (void)
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+@@ -1338,7 +1338,7 @@ cat >$dummy.c <<EOF
+ # include <sys/types.h>
+ # include <sys/utsname.h>
+ #endif
+-main ()
++int main (void)
+ {
+ #if defined (sony)
+ #if defined (MIPSEB)
+--- a/llvm/cmake/modules/CheckAtomic.cmake
++++ b/llvm/cmake/modules/CheckAtomic.cmake
+@@ -11,7 +11,7 @@ function(check_working_cxx_atomics varname)
+   CHECK_CXX_SOURCE_COMPILES("
+ #include <atomic>
+ std::atomic<int> x;
+-int main() {
++int main(void) {
+   return x;
+ }
+ " ${varname})
+@@ -46,7 +46,7 @@ CHECK_CXX_SOURCE_COMPILES("
+ #include <Intrin.h> /* Workaround for PR19898. */
+ #include <windows.h>
+ #endif
+-int main() {
++int main(void) {
+ #ifdef _MSC_VER
+         volatile LONG val = 1;
+         MemoryBarrier();
+--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
++++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
+@@ -37,7 +37,7 @@ if(NOT LLVM_FORCE_USE_OLD_TOOLCHAIN)
+       check_cxx_source_compiles("
+ #include <atomic>
+ std::atomic<float> x(0.0f);
+-int main() { return (float)x; }"
++int main(void) { return (float)x; }"
+         LLVM_NO_OLD_LIBSTDCXX)
+       if(NOT LLVM_NO_OLD_LIBSTDCXX)
+         message(FATAL_ERROR "Host Clang must be able to find libstdc++4.7 or 
newer!")
+@@ -457,7 +457,7 @@ elseif( LLVM_COMPILER_IS_GCC_COMPATIBLE )
+       set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11 
-Werror=non-virtual-dtor")
+       CHECK_CXX_SOURCE_COMPILES("class base {public: virtual void 
anchor();protected: ~base();};
+                                  class derived final : public base { public: 
~derived();};
+-                                 int main() { return 0; }"
++                                 int main(void) { return 0; }"
+                                 CXX_WONT_WARN_ON_FINAL_NONVIRTUALDTOR)
+       set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
+       append_if(CXX_WONT_WARN_ON_FINAL_NONVIRTUALDTOR
+@@ -471,7 +471,7 @@ elseif( LLVM_COMPILER_IS_GCC_COMPATIBLE )
+     # line is also a // comment.
+     set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
+     set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror -Wcomment")
+-    CHECK_C_SOURCE_COMPILES("// \\\\\\n//\\nint main() {return 0;}"
++    CHECK_C_SOURCE_COMPILES("// \\\\\\n//\\nint main(void) {return 0;}"
+                             C_WCOMMENT_ALLOWS_LINE_WRAP)
+     set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
+     if (NOT C_WCOMMENT_ALLOWS_LINE_WRAP)
+@@ -508,7 +508,7 @@ elseif( LLVM_COMPILER_IS_GCC_COMPATIBLE )
+                                #include <cassert>
+                                #define NDEBUG
+                                #include <cassert>
+-                               int main() { assert(this code is not 
compiled); }"
++                               int main(void) { assert(this code is not 
compiled); }"
+                                CXX_SUPPORTS_MODULES)
+     set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
+     if (CXX_SUPPORTS_MODULES)
+--- a/samples/sample.c
++++ b/samples/sample.c
+@@ -61,7 +61,7 @@ static bool sym_resolver(const char *symbol, uint64_t *value)
+ }
+ 
+ // test symbol resolver to handle missing symbols
+-static int test_sym_resolver()
++static int test_sym_resolver(void)
+ {
+     ks_engine *ks;
+     ks_err err;

diff --git a/dev-libs/keystone/keystone-0.9.2-r3.ebuild 
b/dev-libs/keystone/keystone-0.9.2-r3.ebuild
new file mode 100644
index 000000000000..70454b0a3b8e
--- /dev/null
+++ b/dev-libs/keystone/keystone-0.9.2-r3.ebuild
@@ -0,0 +1,100 @@
+# Copyright 1999-2023 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..12} )
+
+inherit cmake distutils-r1
+
+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"
+)
+
+# 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() {
+       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}
+}

Reply via email to