diff --git a/jffi-1.2.12-no_javah.patch b/jffi-1.2.12-no_javah.patch new file mode 100644 index 0000000..bd896a9 --- /dev/null +++ b/jffi-1.2.12-no_javah.patch @@ -0,0 +1,150 @@ +--- jffi-jffi-1.2.12/build.xml 2016-04-29 23:23:51.000000000 +0200 ++++ jffi-jffi-1.2.12/build.xml 2019-04-03 20:08:43.577425168 +0200 +@@ -151,9 +151,10 @@ + + + ++ + + +- ++ + + + +@@ -282,26 +283,10 @@ + + + +- ++ + + +- +- +- +- +- +- +- +- +- +- ++ + + + +--- jffi-jffi-1.2.12/src/main/java/com/kenai/jffi/ObjectBuffer.java 2016-04-29 23:23:51.000000000 +0200 ++++ jffi-jffi-1.2.12/src/main/java/com/kenai/jffi/ObjectBuffer.java 2019-04-03 20:00:13.598956759 +0200 +@@ -32,55 +32,57 @@ + + package com.kenai.jffi; + ++import java.lang.annotation.Native; ++ + /** + * Holds objects the native code must handle - such as primitive arrays + */ + final class ObjectBuffer { + /** Copy the array contents to native memory before calling the function */ +- public static final int IN = 0x1; ++ @Native public static final int IN = 0x1; + + /** After calling the function, reload the array contents from native memory */ +- public static final int OUT = 0x2; ++ @Native public static final int OUT = 0x2; + + /** Append a NUL byte to the array contents after copying to native memory */ +- public static final int ZERO_TERMINATE = 0x4; ++ @Native public static final int ZERO_TERMINATE = 0x4; + + /** Pin the array memory and pass the JVM memory pointer directly to the function */ +- public static final int PINNED = 0x8; ++ @Native public static final int PINNED = 0x8; + + /** For OUT arrays, clear the temporary native memory area */ +- public static final int CLEAR = 0x10; ++ @Native public static final int CLEAR = 0x10; + + /* + * WARNING: The following flags cannot be altered without recompiling the native code + */ +- static final int INDEX_SHIFT = 16; +- static final int INDEX_MASK = 0x00ff0000; +- static final int TYPE_SHIFT = 24; +- static final int TYPE_MASK = 0xff << TYPE_SHIFT; +- static final int PRIM_MASK = 0x0f << TYPE_SHIFT; +- static final int FLAGS_SHIFT = 0; +- static final int FLAGS_MASK = 0xff; +- +- static final int ARRAY = 0x10 << TYPE_SHIFT; +- static final int BUFFER = 0x20 << TYPE_SHIFT; +- static final int JNI = 0x40 << TYPE_SHIFT; +- +- static final int BYTE = 0x1 << TYPE_SHIFT; +- static final int SHORT = 0x2 << TYPE_SHIFT; +- static final int INT = 0x3 << TYPE_SHIFT; +- static final int LONG = 0x4 << TYPE_SHIFT; +- static final int FLOAT = 0x5 << TYPE_SHIFT; +- static final int DOUBLE = 0x6 << TYPE_SHIFT; +- static final int BOOLEAN = 0x7 << TYPE_SHIFT; +- static final int CHAR = 0x8 << TYPE_SHIFT; ++ @Native static final int INDEX_SHIFT = 16; ++ @Native static final int INDEX_MASK = 0x00ff0000; ++ @Native static final int TYPE_SHIFT = 24; ++ @Native static final int TYPE_MASK = 0xff << TYPE_SHIFT; ++ @Native static final int PRIM_MASK = 0x0f << TYPE_SHIFT; ++ @Native static final int FLAGS_SHIFT = 0; ++ @Native static final int FLAGS_MASK = 0xff; ++ ++ @Native static final int ARRAY = 0x10 << TYPE_SHIFT; ++ @Native static final int BUFFER = 0x20 << TYPE_SHIFT; ++ @Native static final int JNI = 0x40 << TYPE_SHIFT; ++ ++ @Native static final int BYTE = 0x1 << TYPE_SHIFT; ++ @Native static final int SHORT = 0x2 << TYPE_SHIFT; ++ @Native static final int INT = 0x3 << TYPE_SHIFT; ++ @Native static final int LONG = 0x4 << TYPE_SHIFT; ++ @Native static final int FLOAT = 0x5 << TYPE_SHIFT; ++ @Native static final int DOUBLE = 0x6 << TYPE_SHIFT; ++ @Native static final int BOOLEAN = 0x7 << TYPE_SHIFT; ++ @Native static final int CHAR = 0x8 << TYPE_SHIFT; + + /* NOTE: The JNI types can overlap the primitive type, since they are mutually exclusive */ + /** The JNIEnv address */ +- public static final int JNIENV = 0x1 << TYPE_SHIFT; ++ @Native public static final int JNIENV = 0x1 << TYPE_SHIFT; + + /** The jobject handle */ +- public static final int JNIOBJECT = 0x2 << TYPE_SHIFT; ++ @Native public static final int JNIOBJECT = 0x2 << TYPE_SHIFT; + + /** The objects stored in this buffer */ + private Object[] objects; +--- jffi-jffi-1.2.12/version.xml 2016-04-29 23:23:51.000000000 +0200 ++++ jffi-jffi-1.2.12/version.xml 2019-04-03 20:04:11.168106751 +0200 +@@ -8,11 +8,12 @@ + + + package com.kenai.jffi; ++ import java.lang.annotation.Native; + public final class Version { + private Version() {} +- public static final int MAJOR = ${jffi.version.major}; +- public static final int MINOR = ${jffi.version.minor}; +- public static final int MICRO = ${jffi.version.micro}; ++ @Native public static final int MAJOR = ${jffi.version.major}; ++ @Native public static final int MINOR = ${jffi.version.minor}; ++ @Native public static final int MICRO = ${jffi.version.micro}; + } + + + + diff --git a/jffi-1.2.13.tar.gz b/jffi-1.2.13.tar.gz new file mode 100644 index 0000000..b0d0eb0 Binary files /dev/null and b/jffi-1.2.13.tar.gz differ diff --git a/jffi-add-built-jar-to-test-classpath.patch b/jffi-add-built-jar-to-test-classpath.patch new file mode 100644 index 0000000..b8d394f --- /dev/null +++ b/jffi-add-built-jar-to-test-classpath.patch @@ -0,0 +1,13 @@ +--- build.xml.sav 2015-04-30 18:23:37.609686947 +0300 ++++ build.xml 2015-04-30 18:23:50.621619907 +0300 +@@ -219,8 +219,8 @@ + + + +- +- ++ ++ + + + diff --git a/jffi-fix-compilation-flags.patch b/jffi-fix-compilation-flags.patch new file mode 100644 index 0000000..5b1916c --- /dev/null +++ b/jffi-fix-compilation-flags.patch @@ -0,0 +1,43 @@ +--- jni/GNUmakefile.orig 2015-03-02 23:35:21.000000000 +0200 ++++ jni/GNUmakefile 2015-04-30 18:16:46.270806239 +0300 +@@ -66,9 +66,9 @@ OFLAGS = -O2 $(JFLAGS) + # MacOS headers aren't completely warning free, so turn them off + WERROR = -Werror + ifneq ($(OS),darwin) +- WFLAGS += -Wundef $(WERROR) ++ WFLAGS += -Wundef + endif +-WFLAGS += -W -Wall -Wno-unused -Wno-parentheses -Wno-unused-parameter ++WFLAGS += -W -Wall -Wno-parentheses -Wno-unused-parameter + PICFLAGS = -fPIC + SOFLAGS = # Filled in for each OS specifically + FFI_MMAP_EXEC = -DFFI_MMAP_EXEC_WRIT +@@ -76,11 +76,13 @@ FFI_MMAP_EXEC = -DFFI_MMAP_EXEC_WRIT + FFI_CC = $(CCACHE) $(CC) + FFI_LD = $(LD) + FFI_CFLAGS = $(FFI_MMAP_EXEC) $(OFLAGS) +-STRIP ?= strip -S ++STRIP ?= /bin/true ++ ++RPMFLAGS=$(shell rpm --eval %optflags) + + JDK_INCLUDES = -I"$(JDK_HOME)/include" -I"$(JDK_HOME)/include/$(OS)" + IFLAGS = -I"$(BUILD_DIR)" -I"$(BUILD_DIR)"/jni -I$(SRC_DIR) -I"$(JFFI_SRC_DIR)" +-CFLAGS += $(OFLAGS) $(WFLAGS) $(IFLAGS) $(PICFLAGS) $(JDK_INCLUDES) $(LIBFFI_CFLAGS) ++CFLAGS += $(OFLAGS) $(WFLAGS) $(IFLAGS) $(PICFLAGS) $(JDK_INCLUDES) $(LIBFFI_CFLAGS) $(RPMFLAGS) + CFLAGS += -D_REENTRANT -D_LARGEFILE64_SOURCE -D_GNU_SOURCE + + ifeq ($(OS), win64) +--- pom.xml.orig 2017-07-18 13:13:49.051730126 +0100 ++++ pom.xml 2017-07-18 13:27:54.899479303 +0100 +@@ -201,6 +201,10 @@ + + + ++ ++ ++ ++ + + + diff --git a/jffi-fix-dependencies-in-build-xml.patch b/jffi-fix-dependencies-in-build-xml.patch new file mode 100644 index 0000000..2c19791 --- /dev/null +++ b/jffi-fix-dependencies-in-build-xml.patch @@ -0,0 +1,13 @@ +--- build.xml.orig 2015-04-30 18:11:44.075363204 +0300 ++++ build.xml 2015-04-30 18:12:37.964085560 +0300 +@@ -172,8 +172,8 @@ + + + +- +- ++ ++ + + + diff --git a/jffi-fix-system-ffi.patch b/jffi-fix-system-ffi.patch new file mode 100644 index 0000000..f1e7bbc --- /dev/null +++ b/jffi-fix-system-ffi.patch @@ -0,0 +1,21 @@ +--- jni/GNUmakefile 2016-04-29 23:23:51.000000000 +0200 ++++ jni/GNUmakefile 2019-04-03 19:52:03.140582936 +0200 +@@ -279,7 +279,7 @@ + @echo "JFFI_BUILD_DIR=$(JFFI_BUILD_DIR)" + @echo "OBJS=$(OBJS)" + +-$(LIBJFFI): $(OBJS) $(LIBFFI_LIBS) ++$(LIBJFFI): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $(SOFLAGS) $(OBJS) $(LIBFFI_LIBS) $(LIBS) + $(STRIP) $@ + +@@ -291,7 +291,9 @@ + @mkdir -p $(@D) + @$(CC) $(CFLAGS) -o $@ -c $< + ++ifneq ($(USE_SYSTEM_LIBFFI),1) + $(OBJS) : $(LIBFFI_LIBS) ++endif + + ifeq ($(OS), darwin) + build_ffi = \ diff --git a/jffi.spec b/jffi.spec new file mode 100644 index 0000000..186a6e4 --- /dev/null +++ b/jffi.spec @@ -0,0 +1,87 @@ +%global cluster jnr +%global sover 1.2 +Name: jffi +Version: 1.2.13 +Release: 1 +Summary: Java Foreign Function Interface +License: LGPL-3.0-or-later OR Apache-2.0 +URL: http://github.com/jnr/jffi +Source0: https://github.com/%{cluster}/%{name}/archive/%{name}-%{version}.tar.gz +Source3: p2.inf +Patch0: jffi-fix-dependencies-in-build-xml.patch +Patch1: jffi-add-built-jar-to-test-classpath.patch +Patch2: jffi-fix-compilation-flags.patch +Patch3: jffi-1.2.12-no_javah.patch +Patch4: jffi-fix-system-ffi.patch +BuildRequires: ant ant-junit fdupes gcc libffi-devel make maven-local unzip mvn(junit:junit) +BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) +BuildRequires: mvn(org.apache.maven.plugins:maven-antrun-plugin) +BuildRequires: mvn(org.apache.maven.plugins:maven-assembly-plugin) +BuildRequires: mvn(org.sonatype.oss:oss-parent:pom:) +%description +An optimized Java interface to libffi. + +%package native +Summary: The %{name} JAR with native bits +%description native +This package contains %{name} JAR with native bits. + +%package javadoc +Summary: Javadoc for %{name} +BuildArch: noarch +%description javadoc +This package contains the API documentation for %{name}. + +%prep +%setup -q -n %{name}-%{name}-%{version} +%patch0 +%patch1 +%patch2 +%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 1.8}%{!?pkg_vcmp:0} +%patch3 -p1 +%endif +%patch4 +sed -i.cpu -e '/m\$(MODEL)/d' jni/GNUmakefile libtest/GNUmakefile +rm -rf archive/* jni/libffi/ jni/win32/ lib/CopyLibs/ lib/junit* +find ./ -name '*.jar' -exec rm -f '{}' \; +find ./ -name '*.class' -exec rm -f '{}' \; +build-jar-repository -s -p lib/ junit hamcrest/core +%{mvn_package} 'com.github.jnr:jffi::native:' native +%{mvn_file} ':{*}' %{name}/@1 @1 + +%build +ant jar build-native -Duse.system.libffi=1 +cp -p dist/jffi-*-Linux.jar archive/ +%{mvn_build} + +%install +%mvn_install +%fdupes -s %{buildroot}%{_javadocdir} +mkdir -p META-INF/ +cp %{SOURCE3} META-INF/ +jar uf %{buildroot}%{_jnidir}/%{name}/%{name}.jar META-INF/p2.inf +install -dm 755 %{buildroot}%{_libdir}/%{name} +unzip dist/jffi-*-Linux.jar +mv jni/*-Linux %{buildroot}%{_libdir}/%{name}/ +pushd %{buildroot}%{_libdir}/%{name}/* +chmod +x lib%{name}-%{sover}.so +ln -s lib%{name}-%{sover}.so lib%{name}.so +popd + +%check +sed -i 's|-Werror||' libtest/GNUmakefile +ant -Duse.system.libffi=1 test + +%files -f .mfiles +%doc COPYING.GPL COPYING.LESSER LICENSE + +%files native -f .mfiles-native +%{_libdir}/%{name} +%doc COPYING.GPL COPYING.LESSER LICENSE + +%files javadoc -f .mfiles-javadoc +%doc COPYING.GPL COPYING.LESSER LICENSE + +%changelog +* Thu Jul 30 2020 Jeffery.Gao - 1.2.13-1 +- Package init diff --git a/jffi.yaml b/jffi.yaml new file mode 100644 index 0000000..0e5ff29 --- /dev/null +++ b/jffi.yaml @@ -0,0 +1,5 @@ +git_url: https://github.com/jnr/jffi +version_control: github +src_repo: jnr/jffi +tag_prefix: "jffi-" +seperator: "." diff --git a/p2.inf b/p2.inf new file mode 100644 index 0000000..0ec4d44 --- /dev/null +++ b/p2.inf @@ -0,0 +1,4 @@ +requires.1.namespace = org.eclipse.equinox.p2.iu +requires.1.name = com.github.jnr.jffi.native +requires.1.range = [$version$,$version$] +requires.1.filter = (&(osgi.os=linux))