[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