Showing with 160 additions and 0 deletions.
  1. +114 −0 dev-util/capstone/capstone5-5.0~rc3.recipe
  2. +46 −0 dev-util/capstone/patches/capstone5-5.0~rc3.patchset
114 changes: 114 additions & 0 deletions dev-util/capstone/capstone5-5.0~rc3.recipe
@@ -0,0 +1,114 @@
SUMMARY="Lightweight multi-platform, multi-architecture disassembly framework"
DESCRIPTION="* Multi-architectures: Arm, Arm64 (Armv8), Mips, PowerPC, Sparc, \
SystemZ, XCore & X86 (include X86_64) (details).
* Clean/simple/lightweight/intuitive architecture-neutral API.
* Provide details on disassembled instruction (called “decomposer” by some others).
* Provide some semantics of the disassembled instruction, such as list of \
implicit registers read & written.
* Implemented in pure C language, with bindings for Perl, Python, Ruby, C#, \
NodeJS, Java, GO, C++, OCaml, Lua, Rust, Delphi, Free Pascall & Vala available.
* Native support for Windows & *nix (with Mac OSX, iOS, Android, Linux, *BSD & \
Solaris confirmed).
* Thread-safe by design.
* Special support for embedding into firmware or OS kernel.
* High performance & suitable for malware analysis (capable of handling \
various X86 malware tricks)."
HOMEPAGE="http://www.capstone-engine.org"
COPYRIGHT="2013-2020 COSEINC"
LICENSE="BSD (3-clause)"
REVISION="1"
SOURCE_URI="https://github.com/capstone-engine/capstone/archive/refs/tags/${portVersion/\~/-}.tar.gz"
CHECKSUM_SHA256="ec1823481ce8443153485dc6a789f0a2fdc5a4dfce511585c3b045764f53e340"
SOURCE_FILENAME="capstone-${portVersion/\~/-}.tar.gz"
SOURCE_DIR="capstone-${portVersion/\~/-}"
PATCHES="capstone5-$portVersion.patchset"

ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="x86"

commandBinDir=$binDir
commandSuffix=$secondaryArchSuffix
if [ "$targetArchitecture" = x86_gcc2 ]; then
commandSuffix=
commandBinDir=$prefix/bin
fi

libVersion="5.0.0"
libVersionCompat="$libVersion compat >= ${libVersion%%.*}"

PROVIDES="
capstone5$secondaryArchSuffix = $portVersion
lib:libcapstone$secondaryArchSuffix = $libVersionCompat
"
REQUIRES="
haiku$secondaryArchSuffix
"

PROVIDES_tools="
capstone5${secondaryArchSuffix}_tools = $portVersion
cmd:cstool$commandSuffix = $portVersion
"
REQUIRES_tools="
capstone5$secondaryArchSuffix == $portVersion base
haiku$secondaryArchSuffix
"
CONFLICTS_tools="
capstone$secondaryArchSuffix
"

PROVIDES_devel="
capstone5${secondaryArchSuffix}_devel = $portVersion
devel:libcapstone$secondaryArchSuffix = $libVersionCompat
"
REQUIRES_devel="
capstone5$secondaryArchSuffix == $portVersion base
"
CONFLICTS_devel="
capstone${secondaryArchSuffix}_devel
"

BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
"
BUILD_PREREQUIRES="
cmd:cmake
cmd:gcc$secondaryArchSuffix
cmd:make
"

BUILD()
{
cmake -Bbuild -S. $cmakeDirArgs -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_BINDIR=$commandBinDir \
-DBUILD_SHARED_LIBS=ON -L
make -C build $jobArgs
}

INSTALL()
{
make -C build install

prepareInstalledDevelLib libcapstone
fixPkgconfig

# Fix broken include path
if [ -n "$secondaryArchSuffix" ]; then
sed -i 's,\/headers/x86,\/headers/x86/capstone,g' \
$prefix/$relativeDevelopLibDir/pkgconfig/capstone.pc
else
sed -i 's,\/headers,\/headers/capstone,g' \
$prefix/$relativeDevelopLibDir/pkgconfig/capstone.pc
fi

packageEntries tools \
$commandBinDir

packageEntries devel $developDir \
$libDir/cmake
}

TEST()
{
./build/test_basic
./build/test_detail
}
46 changes: 46 additions & 0 deletions dev-util/capstone/patches/capstone5-5.0~rc3.patchset
@@ -0,0 +1,46 @@
From 4be90b6bc051b1138356a0d4d95f95794284b10f Mon Sep 17 00:00:00 2001
From: Calvin Hill <calvin@hakobaito.co.uk>
Date: Sun, 13 Jan 2019 00:39:39 +0000
Subject: Fix build of fuzztests.


diff --git a/suite/fuzz/driverbin.c b/suite/fuzz/driverbin.c
index d5e3a0f..d59aae9 100644
--- a/suite/fuzz/driverbin.c
+++ b/suite/fuzz/driverbin.c
@@ -3,6 +3,7 @@
#include <stdio.h>
#include <dirent.h>
#include <unistd.h>
+#include <sys/stat.h>

#include "platform.h"

@@ -15,6 +16,7 @@ int main(int argc, char** argv)
size_t Size;
DIR *d;
struct dirent *dir;
+ struct stat s;
int r = 0;
int i;

@@ -35,9 +37,16 @@ int main(int argc, char** argv)

while((dir = readdir(d)) != NULL) {
//opens the file, get its size, and reads it into a buffer
+ #ifndef __HAIKU__
if (dir->d_type != DT_REG) {
continue;
}
+ else
+ stat(dir->d_name, &s);
+ if(!S_ISREG(s.st_mode)){
+ continue;
+ }
+ #endif
printf("Running file %s ", dir->d_name);
fflush(stdout);
fp = fopen(dir->d_name, "rb");
--
2.37.3