On Tue, 5 Sep 2023 10:17:31 GMT, Andrew John Hughes <and...@openjdk.org> wrote:

>> There is a long standing limitation in the UNIX smartcardio implementation 
>> which means it will only look for the `pcsclite` library in two locations; 
>> `/usr/lib` and `/usr/local/lib`. It also only searches for an unversioned 
>> library.
>> 
>> On systems that separate libraries from development headers in separate 
>> subpackages, the unversioned library is only installed by the `-devel` 
>> package, which rarely happens unless the user wants to write their own 
>> application using the libpcsclite headers or build someone else's code 
>> themselves. An example of this is the [pcsc-lite-libs package on 
>> Fedora](https://koji.fedoraproject.org/koji/rpminfo?rpmID=35258843)
>> 
>> On Debian-based systems, there is also the issue that libraries are now 
>> placed inside a subdirectory using a 
>> [tuple](https://wiki.debian.org/Multiarch/Tuples) consisting of the 
>> instruction set, syscall ABI and libc e.g. `x86_64-linux-gnu`.  So it will 
>> not only fail to find the library when only the versioned library is 
>> installed (e.g. 
>> [libpcsclite1](https://packages.ubuntu.com/kinetic/amd64/libpcsclite1/filelist))
>>  but also when the dev package is also installed (e.g. 
>> [libpcsclite-dev](https://packages.ubuntu.com/kinetic/amd64/libpcsclite-dev/filelist)),
>>  because the file is in e.g. `/usr/lib/x86_64-linux-gnu/libpcsclite.so`
>> 
>> This patch makes both cases work. It prefers versioned libraries, as 
>> potentially a `libpcsclite.so.2` could become available with a different ABI 
>> that the JDK can not work with.  All cases that worked before with just 
>> `libpcsclite.so` will still work, but it should also now pick up the library 
>> on many additional systems.
>> 
>> A much simpler patch (search for the versioned symlink instead of 
>> unversioned) has been [in the Fedora and RHEL packages for nearly a 
>> decade](https://bugzilla.redhat.com/show_bug.cgi?id=910107), and an earlier 
>> version of this patch with Debian support has been used in IcedTea builds 
>> since 2015. It would be nice to finally fix this upstream.
>> 
>> Testing:
>> 
>> Test case:
>> ~~~
>> import java.lang.reflect.Method;
>> 
>> public class TestPlatformPCSC {
>>     public static void main(String[] args)
>>     throws Exception {
>>         Class<?> cls = 
>> Class.forName("sun.security.smartcardio.PlatformPCSC");
>>         Method m = cls.getDeclaredMethod("getLibraryName");
>>         m.setAccessible(true);
>>         System.err.println(m.invoke(null));
>>     }
>> }
>> ~~~
>> 
>> 1. With `libpcsclite.so.1` available:
>> ~~~
>> $ ~/builder/trunk/images/jdk/bin/java --add-opens java.smartc...
>
> Andrew John Hughes has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Drop outdated kfreebsd case and document arch template and arm

No problem. I know you were away for a while.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15409#issuecomment-1786320964

Reply via email to