The dev-java/jssc ebuild in portage does not compile and install the necessary libjssc.so file. I have an updated ebuild that builds the library installs it in the proper lib directory and patches jssc to be able to find it. jssc by default bundles the .so file in the .jar uses 100 lines of code to: 1) determine the os it is running on 2) select one of the 3 bundled dynamic libraries (windows, linux, and macos) 3) if that library is not compatible with your system you are sol. 4) unzip the library to a temporary directory 5) construct a full path the extracted library 6) dynamically load it. This is done every time the a java program uses jssc. All so they can say the .jar file is all you need. I went with a much more gentoo approach and compiled and installed the library to /usr/${libdir} (respecting CFLAGS, running default QA checks and stripping) and replaced the 100 lines with: System.loadLibrary("libjssc") files attached in my arduino-overlay: https://github.com/maurerpe/arduino-overlay
Created attachment 428564 [details] Updated ebuild
Created attachment 428566 [details, diff] jssc-2.8.0-library-load.patch
--------------------------------------------------------- With portage version no libjssc.so in /usr/lib or in jssc.jar # emerge -1a dev-java/jssc::gentoo # equery files dev-java/jssc * Searching for jssc in dev-java ... * Contents of dev-java/jssc-2.8.0: /usr /usr/share /usr/share/jssc /usr/share/jssc/lib /usr/share/jssc/lib/jssc.jar /usr/share/jssc/package.env # unzip -l /usr/share/jssc/lib/jssc.jar Archive: /usr/share/jssc/lib/jssc.jar Length Date Time Name --------- ---------- ----- ---- 0 03-19-2016 01:28 META-INF/ 68 03-19-2016 01:28 META-INF/MANIFEST.MF 0 03-19-2016 01:28 jssc/ 4171 03-19-2016 01:28 jssc/SerialPortList.class 1754 03-19-2016 01:28 jssc/SerialPortException.class 1576 03-19-2016 01:28 jssc/SerialPortEvent.class 12901 03-19-2016 01:28 jssc/SerialPort.class 956 03-19-2016 01:28 jssc/SerialPortTimeoutException.class 1323 03-19-2016 01:28 jssc/SerialPort$EventThread.class 5636 03-19-2016 01:28 jssc/SerialNativeInterface.class 2852 03-19-2016 01:28 jssc/SerialPort$LinuxEventThread.class 188 03-19-2016 01:28 jssc/SerialPort$1.class 182 03-19-2016 01:28 jssc/SerialPortEventListener.class 1935 03-19-2016 01:28 jssc/SerialPortList$1.class --------- ------- 33542 14 files --------------------------------------------------------------- With my updated build, libjssc.so is in /usr/lib # emerge -1a dev-java/jssc::arduino-overlay # equery files dev-java/jssc * Searching for jssc in dev-java ... * Contents of dev-java/jssc-2.8.0: /usr /usr/lib64 /usr/lib64/libjssc.so -> libjssc.so.2.8.0 /usr/lib64/libjssc.so.2.8.0 /usr/share /usr/share/jssc /usr/share/jssc/lib /usr/share/jssc/lib/jssc.jar /usr/share/jssc/package.env # unzip -l /usr/share/jssc/lib/jssc.jar Archive: /usr/share/jssc/lib/jssc.jar Length Date Time Name --------- ---------- ----- ---- 0 03-17-2016 23:33 META-INF/ 68 03-17-2016 23:33 META-INF/MANIFEST.MF 3499 03-17-2016 23:33 jssc/SerialNativeInterface.class 188 03-17-2016 23:33 jssc/SerialPort$1.class 12901 03-17-2016 23:33 jssc/SerialPort.class 1576 03-17-2016 23:33 jssc/SerialPortEvent.class 182 03-17-2016 23:33 jssc/SerialPortEventListener.class 1323 03-17-2016 23:33 jssc/SerialPort$EventThread.class 1754 03-17-2016 23:33 jssc/SerialPortException.class 2852 03-17-2016 23:33 jssc/SerialPort$LinuxEventThread.class 1935 03-17-2016 23:33 jssc/SerialPortList$1.class 4171 03-17-2016 23:33 jssc/SerialPortList.class 956 03-17-2016 23:33 jssc/SerialPortTimeoutException.class --------- ------- 31405 13 files
Good catch. Thanks for filing this report. I've reworked your ebuild a tiny bit. Will upload it shortly for review.
Created attachment 428580 [details] jssc-2.8.0-r1.ebuild This is my attempt.
Here's what gets generated by the ebuild after execution: monsieurp@epsilon ~/gentoo/dev-java/jssc $ find /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/ -type f /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/lib64/libjssc.so.2.8.0 /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/constant-values.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/serialized-form.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/overview-tree.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/index.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/allclasses-noframe.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/stylesheet.css /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/script.js /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/help-doc.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/index-all.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/allclasses-frame.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/deprecated-list.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/SerialPortTimeoutException.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/SerialPortException.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/SerialPortEvent.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/package-summary.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/package-frame.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/package-tree.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/SerialPortEventListener.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/SerialPort.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/SerialPortList.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/jssc/SerialNativeInterface.html /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/doc/jssc-2.8.0-r1/html/api/package-list /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/jssc/package.env /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/jssc/lib/jssc.jar /var/tmp/portage/dev-java/jssc-2.8.0-r1/image/usr/share/jssc/sources/jssc-src.zip
(In reply to Patrice Clement from comment #5) > Created attachment 428580 [details] > jssc-2.8.0-r1.ebuild > > This is my attempt. java-pkg_doso *.so Though looking at the java-utils-2.eclass, not sure if it should be doins or dolib doins "${lib}" || die "failed to install ${lib}"
Patrice's ebuild is much cleaner than mine and I can confirm that it compiles installs, works, and fixes this issue. # equery files dev-java/jssc * Searching for jssc in dev-java ... * Contents of dev-java/jssc-2.8.0-r1: /usr /usr/lib64 /usr/lib64/libjssc.so -> libjssc.so.2.8.0 /usr/lib64/libjssc.so.2.8.0 /usr/share /usr/share/jssc /usr/share/jssc/lib /usr/share/jssc/lib/jssc.jar /usr/share/jssc/package.env # unzip -l /usr/share/jssc/lib/jssc.jar Archive: /usr/share/jssc/lib/jssc.jar Length Date Time Name --------- ---------- ----- ---- 0 03-19-2016 17:36 META-INF/ 68 03-19-2016 17:36 META-INF/MANIFEST.MF 0 03-19-2016 17:36 jssc/ 4171 03-19-2016 17:36 jssc/SerialPortList.class 1754 03-19-2016 17:36 jssc/SerialPortException.class 1576 03-19-2016 17:36 jssc/SerialPortEvent.class 12901 03-19-2016 17:36 jssc/SerialPort.class 956 03-19-2016 17:36 jssc/SerialPortTimeoutException.class 1323 03-19-2016 17:36 jssc/SerialPort$EventThread.class 3499 03-19-2016 17:36 jssc/SerialNativeInterface.class 2852 03-19-2016 17:36 jssc/SerialPort$LinuxEventThread.class 188 03-19-2016 17:36 jssc/SerialPort$1.class 182 03-19-2016 17:36 jssc/SerialPortEventListener.class 1935 03-19-2016 17:36 jssc/SerialPortList$1.class --------- ------- 31405 14 files
Perfect. Thanks. Will commit it shortly.
commit b9d7d11ecc603f1c52825ab0b0f83985966febdf (HEAD -> master) Author: Patrice Clement <monsieurp@gentoo.org> AuthorDate: Sat Mar 19 21:35:20 2016 +0000 Commit: Patrice Clement <monsieurp@gentoo.org> CommitDate: Sat Mar 19 21:35:20 2016 +0000 dev-java/jssc: Rewrite ebuild to properly compile missing .so. Gentoo-Bug: https://bugs.gentoo.org/577756 Package-Manager: portage-2.2.26 dev-java/jssc/Manifest | 1 + dev-java/jssc/files/jssc-2.8.0-library-load.patch | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dev-java/jssc/jssc-2.8.0-r1.ebuild | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 179 insertions(+) create mode 100644 dev-java/jssc/files/jssc-2.8.0-library-load.patch create mode 100644 dev-java/jssc/jssc-2.8.0-r1.ebuild
The library is now installed, but it is not registered with java-pkg_regso. Because if this, the directory it is in (/usr/lib64) does not get added to java.library.path, and so the library can't be found at runtime.