[native-platform] fix for rhbz#992323
gil
gil at fedoraproject.org
Fri Oct 18 09:16:34 UTC 2013
commit 86b4cb0075c912b6d8c789cac7f71002aae272f9
Author: gil <puntogil at libero.it>
Date: Fri Oct 18 11:16:21 2013 +0200
fix for rhbz#992323
.gitignore | 1 +
...ve-platform-0.3-rc-2-NativeLibraryLocator.patch | 20 +++++
native-platform-0.3-rc-2-Platform.patch | 38 +++++++++
...e-platform-0.3-rc-2-native-libraries-name.patch | 31 +++++++
native-platform-Makefile | 84 ++++++++++++++++++++
native-platform.spec | 76 ++++++++++--------
sources | 2 +-
7 files changed, 217 insertions(+), 35 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index a2655a4..5801d66 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/native-platform-0.3-rc-2-src-git.tar.xz
+/0.3-rc-2.tar.gz
diff --git a/native-platform-0.3-rc-2-NativeLibraryLocator.patch b/native-platform-0.3-rc-2-NativeLibraryLocator.patch
new file mode 100644
index 0000000..61a3fcb
--- /dev/null
+++ b/native-platform-0.3-rc-2-NativeLibraryLocator.patch
@@ -0,0 +1,20 @@
+--- src/main/java/net/rubygrapefruit/platform/internal/NativeLibraryLocator.java 2013-02-25 23:04:25.000000000 +0100
++++ src/main/java/net/rubygrapefruit/platform/internal/NativeLibraryLocator.java-gil 2013-10-18 09:25:04.732357649 +0200
+@@ -31,6 +31,17 @@
+ }
+
+ public File find(String libraryFileName) throws IOException {
++ String bits = "";
++
++ if (System.getProperty("os.arch").contains("64")) {
++ bits = "64";
++ }
++
++ File usrLibFile = new File("/usr/lib" + bits + "/native-platform/" + libraryFileName);
++ if (usrLibFile.isFile()) {
++ return usrLibFile;
++ }
++
+ if (extractDir != null) {
+ File libFile = new File(extractDir, String.format("%s/%s", NativeLibraryFunctions.VERSION, libraryFileName));
+ File lockFile = new File(libFile.getParentFile(), libFile.getName() + ".lock");
diff --git a/native-platform-0.3-rc-2-Platform.patch b/native-platform-0.3-rc-2-Platform.patch
new file mode 100644
index 0000000..978819d
--- /dev/null
+++ b/native-platform-0.3-rc-2-Platform.patch
@@ -0,0 +1,38 @@
+--- src/main/java/net/rubygrapefruit/platform/internal/Platform.java 2013-10-18 09:34:09.462681852 +0200
++++ src/main/java/net/rubygrapefruit/platform/internal/Platform.java-gil 2013-10-18 09:34:16.372327803 +0200
+@@ -37,12 +37,15 @@
+ platform = new Window64Bit();
+ }
+ } else if (osName.contains("linux")) {
+- if (arch.equals("amd64")) {
++ if (arch.contains("64")) {
+ platform = new Linux64Bit();
+ }
+ else if (arch.equals("i386") || arch.equals("x86")) {
+ platform = new Linux32Bit();
+ }
++ else if (arch.startsWith("arm")) {
++ platform = new LinuxArm();
++ }
+ } else if (osName.contains("os x")) {
+ if (arch.equals("i386") || arch.equals("x86_64") || arch.equals("amd64")) {
+ platform = new OsX();
+@@ -181,6 +184,18 @@
+ @Override
+ public String getLibraryName() {
+ return "libnative-platform.so";
++ }
++
++ @Override
++ String getCursesLibraryName() {
++ return "libnative-platform-curses.so";
++ }
++ }
++
++ private static class LinuxArm extends Linux {
++ @Override
++ public String getLibraryName() {
++ return "libnative-platform.so";
+ }
+
+ @Override
diff --git a/native-platform-0.3-rc-2-native-libraries-name.patch b/native-platform-0.3-rc-2-native-libraries-name.patch
new file mode 100644
index 0000000..7c0af9a
--- /dev/null
+++ b/native-platform-0.3-rc-2-native-libraries-name.patch
@@ -0,0 +1,31 @@
+--- src/main/java/net/rubygrapefruit/platform/internal/Platform.java 2013-02-25 23:04:25.000000000 +0100
++++ src/main/java/net/rubygrapefruit/platform/internal/Platform.java-gil 2013-10-15 20:33:08.530319092 +0200
+@@ -168,24 +168,24 @@
+ private static class Linux32Bit extends Linux {
+ @Override
+ public String getLibraryName() {
+- return "libnative-platform-linux-i386.so";
++ return "libnative-platform.so";
+ }
+
+ @Override
+ String getCursesLibraryName() {
+- return "libnative-platform-curses-linux-i386.so";
++ return "libnative-platform-curses.so";
+ }
+ }
+
+ private static class Linux64Bit extends Linux {
+ @Override
+ public String getLibraryName() {
+- return "libnative-platform-linux-amd64.so";
++ return "libnative-platform.so";
+ }
+
+ @Override
+ String getCursesLibraryName() {
+- return "libnative-platform-curses-linux-amd64.so";
++ return "libnative-platform-curses.so";
+ }
+ }
+
diff --git a/native-platform-Makefile b/native-platform-Makefile
new file mode 100644
index 0000000..ef139cd
--- /dev/null
+++ b/native-platform-Makefile
@@ -0,0 +1,84 @@
+# Description: Use make as buildsystem instead of Gradle to
+# avoid a circular dependencies between gradle and native-platform.
+# This is very minimalistic Makefile so it will only work for
+# Debian use case for now.
+# Author: Damien Raude-Morvan <drazzib at debian.org>
+# Adapted for Fedora by: gil cattaneo <puntogil at libero.it>
+CXX=g++
+STRIP=strip
+# which is the best solution?
+#JOPT_JAR=$(shell build-classpath jopt-simple.jar)
+JOPT_JAR=$(shell locate jopt-simple.jar)
+IDIR=src/main/headers
+SRCDIR=src/main/cpp
+JSRCDIR=src/main/java
+BUILD=build
+IGEN=$(BUILD)/headers
+JCLASSESDIR=$(BUILD)/classes
+JDOCDIR=$(BUILD)/docs/javadoc
+ODIR=$(BUILD)/binaries
+JAR=$(BUILD)/native-platform.jar
+known_os_archs :=
+JAR_ARCH=$(BUILD)/native-platform-linux.jar
+
+JTARGET=1.5
+JSOURCE=1.5
+
+INCLUDE=-I$(IDIR) -I$(IGEN) -I/usr/include -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
+#LDLIBS=-lncurses
+
+_OBJ_STD = generic.o generic_posix.o linux.o osx.o posix.o win.o
+_OBJ_CURSES = generic.o generic_posix.o curses.o
+OBJ_STD = $(patsubst %,$(ODIR)/%,$(_OBJ_STD))
+OBJ_CURSES = $(patsubst %,$(ODIR)/%,$(_OBJ_CURSES))
+_JAVA = $(shell find $(JSRCDIR) -name "*.java" -print)
+
+.PHONY: clean jar javadoc
+
+build: $(ODIR)/libnative-platform.so $(ODIR)/libnative-platform-curses.so jar javadoc arch-jar
+
+$(ODIR)/libnative-platform.so: $(OBJ_STD)
+ $(CXX) -shared -fPIC $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^
+ $(STRIP) $@
+
+$(ODIR)/libnative-platform-curses.so: $(OBJ_CURSES)
+ $(CXX) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -lcurses -shared -fPIC -o $@ $^
+ $(STRIP) $@
+
+$(JCLASSESDIR)/%.class: javafiles-list
+ mkdir -p $(JCLASSESDIR)
+ $(JAVA_HOME)/bin/javac -source $(JTARGET) -target $(JSOURCE) -d $(JCLASSESDIR) -classpath $(JOPT_JAR) @javafiles-list
+
+javafiles-list: $(_JAVA)
+ echo $^ > javafiles-list
+
+javadoc: javafiles-list
+ mkdir -p $(JDOCDIR)
+ $(JAVA_HOME)/bin/javadoc -d $(JDOCDIR) -classpath $(JOPT_JAR) @javafiles-list
+
+jar: $(JCLASSESDIR)/%.class
+ mkdir -p $(JDOCDIR)
+ (cd $(JCLASSESDIR) ; $(JAVA_HOME)/bin/jar cf ../../$(JAR) .)
+
+arch-jar: $(ODIR)/libnative-platform.so $(ODIR)/libnative-platform-curses.so
+ (cd $(ODIR) ; $(JAVA_HOME)/bin/jar cf ../../$(JAR_ARCH) *.so)
+
+$(ODIR)/%.o: $(SRCDIR)/%.cpp $(IGEN)/native.h
+ mkdir -p $(ODIR)
+ $(CXX) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(INCLUDE) -fPIC -c -o $@ $<
+
+$(IGEN)/native.h: $(JCLASSESDIR)/%.class
+ mkdir -p $(IGEN)
+ $(JAVA_HOME)/bin/javah -o $(IGEN)/native.h -classpath $(JCLASSESDIR) \
+ net.rubygrapefruit.platform.internal.jni.NativeLibraryFunctions \
+ net.rubygrapefruit.platform.internal.jni.PosixFileFunctions \
+ net.rubygrapefruit.platform.internal.jni.PosixFileSystemFunctions \
+ net.rubygrapefruit.platform.internal.jni.PosixProcessFunctions \
+ net.rubygrapefruit.platform.internal.jni.PosixTerminalFunctions \
+ net.rubygrapefruit.platform.internal.jni.TerminfoFunctions \
+ net.rubygrapefruit.platform.internal.jni.WindowsConsoleFunctions \
+ net.rubygrapefruit.platform.internal.jni.WindowsHandleFunctions
+
+clean:
+ -rm javafiles-list
+ -rm -Rf $(BUILD)
\ No newline at end of file
diff --git a/native-platform.spec b/native-platform.spec
index aa5d13f..bd53985 100644
--- a/native-platform.spec
+++ b/native-platform.spec
@@ -11,34 +11,29 @@ Name: native-platform
Version: 0.3
Release: 0.3.rc2%{?dist}
Summary: Java bindings for various native APIs
-Group: Development/Libraries
-# contacted the developer for info about license, waiting for an answer...
License: ASL 2.0
URL: https://github.com/adammurdoch/native-platform
# git clone git://github.com/adammurdoch/native-platform native-platform-0.3-rc-2
# (cd native-platform-0.3-rc-2/ && git archive --format=tar --prefix=native-platform-0.3-rc-2/ 0.3-rc-2 | xz > ../native-platform-0.3-rc-2-src-git.tar.xz)
-Source0: %{name}-%{namedversion}-src-git.tar.xz
+Source0: https://github.com/adammurdoch/native-platform/archive/%{namedversion}.tar.gz
Source1: http://repo.gradle.org/gradle/libs-releases-local/net/rubygrapefruit/%{name}/%{namedversion}/%{name}-%{namedversion}.pom
Source2: http://repo.gradle.org/gradle/libs-releases-local/net/rubygrapefruit/%{name}-linux-i386/%{namedversion}/%{name}-linux-i386-%{namedversion}.pom
Source3: http://repo.gradle.org/gradle/libs-releases-local/net/rubygrapefruit/%{name}-linux-amd64/%{namedversion}/%{name}-linux-amd64-%{namedversion}.pom
-Patch0: %{name}-0.3-rc-2-build.patch
-
-BuildRequires: java-devel
+# From Debian
+Source4: %{name}-Makefile
+# Try to load native library first from /usr/lib*/native-platform
+# instead of extractDir or classpath.
+Patch0: %{name}-0.3-rc-2-NativeLibraryLocator.patch
+# Use generate libraries without arch references
+Patch1: %{name}-0.3-rc-2-native-libraries-name.patch
+# Add support for arm and other x64 arches
+Patch2: %{name}-0.3-rc-2-Platform.patch
# build tools and deps
-BuildRequires: antlr-tool
-BuildRequires: apache-commons-cli
-BuildRequires: gradle
-BuildRequires: groovy
-BuildRequires: objectweb-asm
-
+BuildRequires: java-devel
BuildRequires: ncurses-devel
-
-# test deps
-BuildRequires: spock-core
-# test app deps jopt-simple >= 4.2
BuildRequires: jopt-simple
-
+Requires: javapackages-tools
Requires: java
%description
@@ -50,7 +45,6 @@ of these APIs overlap with APIs available
in later Java versions.
%package javadoc
-Group: Documentation
Summary: Javadoc for %{name}
BuildArch: noarch
@@ -62,9 +56,12 @@ This package contains javadoc for %{name}.
find . -name "*.jar" -delete
find . -name "*.class" -delete
-%patch0 -p1
+%patch0 -p0
+%patch1 -p0
+%patch2 -p0
cp -p %{SOURCE1} pom.xml
+cp -p %{SOURCE4} Makefile
%pom_remove_dep net.rubygrapefruit:%{name}-osx-universal pom.xml
%pom_remove_dep net.rubygrapefruit:%{name}-windows-i386 pom.xml
@@ -80,41 +77,47 @@ sed -i 's/\r//' readme.md
%build
-# TODO not able to perform tests without gradle maven plugin,
-# problems to load in cp some groovy classes
-export GRADLE_USER_HOME=$PWD
-mkdir -p gradlehome
-gradle --debug Jar nativeJar javadoc -g $PWD/gradlehome -b $PWD/build.gradle
+CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ;
+CPPFLAGS="${CPPFLAGS:-%optflags}" ; export CPPFLAGS ;
+CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ;
+LDFLAGS="${LDFLAGS:-%__global_ldflags}"; export LDFLAGS;
+make %{?_smp_mflags} JAVA_HOME=%{_jvmdir}/java
%install
mkdir -p %{buildroot}%{_javadir}
-install -m 644 build/libs/%{name}-%{namedversion}.jar %{buildroot}%{_javadir}/%{name}.jar
+install -m 644 build/%{name}.jar %{buildroot}%{_javadir}/%{name}.jar
mkdir -p %{buildroot}%{_mavenpomdir}
install -pm 644 pom.xml %{buildroot}%{_mavenpomdir}/JPP-%{name}.pom
%add_maven_depmap JPP-%{name}.pom %{name}.jar
-# there is something of wrong in rawhide for x64 arch _jnidir point to /usr/lib/java
mkdir -p %{buildroot}%{_jnidir}
+install -pm 644 build/%{name}-linux.jar %{buildroot}%{_jnidir}/
+
%if %{bits} == 64
-install -m 644 build/libs/%{name}-linux-amd64-%{namedversion}.jar %{buildroot}%{_jnidir}/%{name}-linux-amd64.jar
-install -pm 644 %{SOURCE3} %{buildroot}%{_mavenpomdir}/JPP-%{name}-linux-amd64.pom
-%add_maven_depmap JPP-%{name}-linux-amd64.pom %{name}-linux-amd64.jar
+install -pm 644 %{SOURCE3} %{buildroot}%{_mavenpomdir}/JPP-%{name}-linux.pom
+%add_maven_depmap JPP-%{name}-linux.pom %{name}-linux.jar
%else
-install -m 644 build/libs/%{name}-linux-i386-%{namedversion}.jar %{buildroot}%{_jnidir}/%{name}-linux-i386.jar
-install -pm 644 %{SOURCE2} %{buildroot}%{_mavenpomdir}/JPP-%{name}-linux-i386.pom
-%add_maven_depmap JPP-%{name}-linux-i386.pom %{name}-linux-i386.jar
+install -pm 644 %{SOURCE2} %{buildroot}%{_mavenpomdir}/JPP-%{name}-linux.pom
+%add_maven_depmap JPP-%{name}-linux.pom %{name}-linux.jar
%endif
+mkdir -p %{buildroot}%{_libdir}/%{name}
+install -pm 0755 build/binaries/libnative-platform-curses.so %{buildroot}%{_libdir}/%{name}
+install -pm 0755 build/binaries/libnative-platform.so %{buildroot}%{_libdir}/%{name}
+#ln -sf %%{_jnidir}/%%{name}-linux.jar %%{buildroot}%%{_libdir}/%%{name}/%%{name}-linux.jar
+#ln -sf %%{_javadir}/%%{name}.jar %%{buildroot}%%{_libdir}/%%{name}/%%{name}.jar
+
mkdir -p %{buildroot}%{_javadocdir}/%{name}
cp -rp build/docs/javadoc/* %{buildroot}%{_javadocdir}/%{name}
%files
%{_javadir}/%{name}.jar
-%{_jnidir}/%{name}-linux*.jar
+%{_jnidir}/%{name}-linux.jar
+%{_libdir}/%{name}
%{_mavenpomdir}/JPP-%{name}.pom
-%{_mavenpomdir}/JPP-%{name}-linux*.pom
+%{_mavenpomdir}/JPP-%{name}-linux.pom
%{_mavendepmapfragdir}/%{name}
%doc readme.md LICENSE
@@ -123,6 +126,11 @@ cp -rp build/docs/javadoc/* %{buildroot}%{_javadocdir}/%{name}
%doc LICENSE
%changelog
+* Tue Oct 15 2013 gil cattaneo <puntogil at libero.it> 0.3-0.3.rc2
+- fix for rhbz#992323
+- use make as buildsystem to avoid circular dependencies
+- removed arch references from installed native jar
+
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.3-0.3.rc2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
diff --git a/sources b/sources
index 38c6e67..1484975 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-92ff42e235dc861d58b05471986b7e92 native-platform-0.3-rc-2-src-git.tar.xz
+9a8dd12f789b8fe003dda862c2365c39 0.3-rc-2.tar.gz
More information about the scm-commits
mailing list