From 3ad4f2e38b89b0146279daec762c952667a14844 Mon Sep 17 00:00:00 2001 From: Elio Maldonado Date: Mon, 30 Jul 2018 16:43:32 -0700 Subject: [PATCH 3/3] Changes to generate JNI header files the new way and test script changes Changed build_java.pl use javac with the '-h @jni_header_dir' flag to generate the needed headers. Process the source files that match what we used when javah was available. Some have removed from the list as there was no matching .c for the .java file. From org/mozilla/jss/crypto/Algorithm.c and org/mozilla/jss/util/jssutil.c removed #include "_jni/org_mozilla_jss_crypto_Algorithm" since that header is no longer generated Modified all.pl to work with openjdk 11, the ' -d64' is gone and the {JAVA_HOME}/jre/bin/java patch replaced with $ENV{JAVA_HOME}/bin/java. For Fedora 'export JAVA_HOME=/etc/alternatives/java_sdk_11' is the recommended way of setting JAVA_HOME. It builds and all test pass. Tested on Fedora Rawhide for f29. --- build_java.pl | 127 +++++++++++++++++------------ org/mozilla/jss/crypto/Algorithm.c | 1 - org/mozilla/jss/tests/all.pl | 6 +- org/mozilla/jss/util/jssutil.c | 1 - 4 files changed, 74 insertions(+), 61 deletions(-) diff --git a/build_java.pl b/build_java.pl index 8baaf829..0a61cc9c 100644 --- a/build_java.pl +++ b/build_java.pl @@ -13,52 +13,58 @@ org/mozilla/jss/pkix/cert/X509Certificate\.java samples/ ); -@javah_classes = qw( -org.mozilla.jss.DatabaseCloser -org.mozilla.jss.CryptoManager -org.mozilla.jss.crypto.Algorithm -org.mozilla.jss.crypto.EncryptionAlgorithm -org.mozilla.jss.crypto.PQGParams -org.mozilla.jss.crypto.SecretDecoderRing -org.mozilla.jss.asn1.ASN1Util -org.mozilla.jss.pkcs11.CertProxy -org.mozilla.jss.pkcs11.CipherContextProxy -org.mozilla.jss.pkcs11.PK11Module -org.mozilla.jss.pkcs11.ModuleProxy -org.mozilla.jss.pkcs11.PK11Cert -org.mozilla.jss.pkcs11.PK11Cipher -org.mozilla.jss.pkcs11.PK11KeyWrapper -org.mozilla.jss.pkcs11.PK11MessageDigest -org.mozilla.jss.pkcs11.PK11PrivKey -org.mozilla.jss.pkcs11.PK11PubKey -org.mozilla.jss.pkcs11.PK11SymKey -org.mozilla.jss.pkcs11.PK11KeyPairGenerator -org.mozilla.jss.pkcs11.PK11SymmetricKeyDeriver -org.mozilla.jss.pkcs11.PK11KeyGenerator -org.mozilla.jss.pkcs11.PK11Token -org.mozilla.jss.pkcs11.PrivateKeyProxy -org.mozilla.jss.pkcs11.PublicKeyProxy -org.mozilla.jss.pkcs11.SymKeyProxy -org.mozilla.jss.pkcs11.KeyProxy -org.mozilla.jss.pkcs11.PK11Token -org.mozilla.jss.pkcs11.TokenProxy -org.mozilla.jss.pkcs11.PK11Signature -org.mozilla.jss.pkcs11.PK11Store -org.mozilla.jss.pkcs11.PK11KeyPairGenerator -org.mozilla.jss.pkcs11.SigContextProxy -org.mozilla.jss.pkcs11.PK11RSAPublicKey -org.mozilla.jss.pkcs11.PK11DSAPublicKey -org.mozilla.jss.pkcs11.PK11ECPublicKey -org.mozilla.jss.pkcs11.PK11SecureRandom -org.mozilla.jss.provider.java.security.JSSKeyStoreSpi -org.mozilla.jss.SecretDecoderRing.KeyManager -org.mozilla.jss.ssl.SSLSocket -org.mozilla.jss.ssl.SSLServerSocket -org.mozilla.jss.ssl.SocketBase -org.mozilla.jss.util.Debug -org.mozilla.jss.util.Password +# source list equivalent to the old @javah_classes +@wanted_sources = qw( +org/mozilla/jss/DatabaseCloser.java +org/mozilla/jss/CryptoManager.java +org/mozilla/jss/crypto/EncryptionAlgorithm.java +org/mozilla/jss/crypto/PQGParams.java +org/mozilla/jss/crypto/SecretDecoderRing.java +org/mozilla/jss/asn1/ASN1Util.java +org/mozilla/jss/pkcs11/CipherContextProxy.java +org/mozilla/jss/pkcs11/PK11Module.java +org/mozilla/jss/pkcs11/ModuleProxy.java +org/mozilla/jss/pkcs11/PK11Cert.java +org/mozilla/jss/pkcs11/PK11Cipher.java +org/mozilla/jss/pkcs11/PK11KeyWrapper.java +org/mozilla/jss/pkcs11/PK11MessageDigest.java +org/mozilla/jss/pkcs11/PK11PrivKey.java +org/mozilla/jss/pkcs11/PK11PubKey.java +org/mozilla/jss/pkcs11/PK11SymKey.java +org/mozilla/jss/pkcs11/PK11KeyPairGenerator.java +org/mozilla/jss/pkcs11/PK11SymmetricKeyDeriver.java +org/mozilla/jss/pkcs11/PK11KeyGenerator.java +org/mozilla/jss/pkcs11/PK11Token.java +org/mozilla/jss/pkcs11/PK11Token.java +org/mozilla/jss/pkcs11/TokenProxy.java +org/mozilla/jss/pkcs11/PK11Signature.java +org/mozilla/jss/pkcs11/PK11Store.java +org/mozilla/jss/pkcs11/PK11KeyPairGenerator.java +org/mozilla/jss/pkcs11/PK11RSAPublicKey.java +org/mozilla/jss/pkcs11/PK11DSAPublicKey.java +org/mozilla/jss/pkcs11/PK11ECPublicKey.java +org/mozilla/jss/pkcs11/PK11SecureRandom.java +org/mozilla/jss/provider/java/security/JSSKeyStoreSpi.java +org/mozilla/jss/SecretDecoderRing/KeyManager.java +org/mozilla/jss/ssl/SSLSocket.java +org/mozilla/jss/ssl/SSLServerSocket.java +org/mozilla/jss/ssl/SocketBase.java +org/mozilla/jss/util/Debug.java +org/mozilla/jss/util/Password.java ); +# Removed the followinh from the list: +# error: file not found: org/mozilla/jss/crypto.Algorithm.java +# error: file not found: org/mozilla/jss/pkcs11/CertProxy.java +# error: file not found: org/mozilla/jss/pkcs11/PrivateKeyProxy.java +# error: file not found: org/mozilla/jss/pkcs11/PublicKeyProxy.java +# error: file not found: org/mozilla/jss/pkcs11/SymKeyProxy.java +# error: file not found: org/mozilla/jss/pkcs11/SigContextProxy.java +# +# Additinally Password has no native methos +# no .c file and grep native on it comes empty +# org/mozilla/jss/util/Password.java + @packages = qw( org.mozilla.jss org.mozilla.jss.asn1 @@ -161,9 +167,9 @@ sub setup_vars { $jni_header_dir = "$dist_dir/private/jss/_jni"; if( $ENV{DEBIAN_BUILD} ) { - $jarFiles = "/usr/share/java/slf4j-api.jar:/usr/share/java/commons-codec.jar"; + $jarFiles = "/usr/share/java/slf4j-api.jar:/usr/share/java/commons-codec.jar:/usr/share/java/libjaxb-api-java.jar"; } else { - $jarFiles = "/usr/share/java/slf4j/slf4j-api.jar:/usr/share/java/commons-codec.jar"; + $jarFiles = "/usr/share/java/slf4j/slf4j-api.jar:/usr/share/java/commons-codec.jar:/usr/share/java/jaxb-api.jar"; } $classpath = "-classpath $jarFiles:/usr/share/java/commons-lang.jar"; if( $jce_jar ) { @@ -176,6 +182,11 @@ sub setup_vars { $javac_deprecation_flag = ""; } + if( $ENV{ADD_MODULES} ) { + $add_modules_flags = "--add-modules java.se.ee jdk.crypto.cryptoki/sun.security.pkcs11.wrapper jdk.crypto.cryptoki java.xml.bind"; + } else { + $add_modules_flags = ""; + } # retrieve present working directory $jss_dir = `pwd`; $jss_dir =~ chomp $jss_dir; @@ -335,23 +346,31 @@ MyLabel } my @source_list = keys(%source_list); + # + # the sources that need jni headers generated + # + my $jni_source_list = printList; + # # build the java sources # if( scalar(@source_list) > 0 ) { ensure_dir_exists($class_dir); - print_do("$javac $javac_opt_flag $javac_deprecation_flag -sourcepath . -d $class_dir " . + ensure_dir_exists($jni_header_dir); + print_do("$javac $javac_opt_flag $add_modules_flag $javac_deprecation_flag -sourcepath . -d $class_dir " . "$classpath " . join(" ",@source_list)); + + # + # create the JNI header files + # by compiling the ones we want with "-h $jni_header_dir" flag + # + ensure_dir_exists($jni_header_dir); + print_do("$javac $javac_opt_flag $javac_deprecation_flag -sourcepath . -d $class_dir -h $jni_header_dir " . + "$classpath " . join(" ", @wanted_sources) ); + print_do("sh -c 'cd $dist_dir/classes && $jar cvmf $dist_dir/MANIFEST.MF $dist_dir/xpclass.jar *'"); print "Exit status was " . ($?>>8) . "\n"; } - - # - # create the JNI header files - # - ensure_dir_exists($jni_header_dir); - print_do("$javah -classpath $class_dir -d $jni_header_dir " . - (join " ", @javah_classes) ); } sub print_do { diff --git a/org/mozilla/jss/crypto/Algorithm.c b/org/mozilla/jss/crypto/Algorithm.c index d32bcad4..f051779e 100644 --- a/org/mozilla/jss/crypto/Algorithm.c +++ b/org/mozilla/jss/crypto/Algorithm.c @@ -13,7 +13,6 @@ #include -#include "_jni/org_mozilla_jss_crypto_Algorithm.h" #include "Algorithm.h" static PRStatus diff --git a/org/mozilla/jss/tests/all.pl b/org/mozilla/jss/tests/all.pl index b22a6b98..0381cda9 100644 --- a/org/mozilla/jss/tests/all.pl +++ b/org/mozilla/jss/tests/all.pl @@ -195,7 +195,7 @@ sub setup_vars { if ($osname =~ /Darwin/) { $java = "$ENV{JAVA_HOME}/bin/java"; } else { - $java = "$ENV{JAVA_HOME}/jre/bin/java$exe_suffix"; + $java = "$ENV{JAVA_HOME}/bin/java$exe_suffix"; } # @@ -221,10 +221,6 @@ sub setup_vars { (-f $java) or die "'$java' does not exist\n"; $java = $java . $ENV{NATIVE_FLAG}; - if ($ENV{USE_64} && !$java_64bit) { - $java = $java . " -d64"; - } - #MAC OS X have the -Djava.library.path for the JSS JNI library if ($osname =~ /Darwin/) { $java = $java . " -Djava.library.path=$jss_lib_dir"; diff --git a/org/mozilla/jss/util/jssutil.c b/org/mozilla/jss/util/jssutil.c index 0d19a845..5ccfc63a 100644 --- a/org/mozilla/jss/util/jssutil.c +++ b/org/mozilla/jss/util/jssutil.c @@ -12,7 +12,6 @@ #include "jss_exceptions.h" #include "java_ids.h" -#include "_jni/org_mozilla_jss_util_Password.h" /*********************************************************************** ** -- 2.18.0