mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-27 14:52:16 +00:00
New build script for Java classes.
This commit is contained in:
parent
e3f71a6d6d
commit
7c49f258fd
@ -53,12 +53,14 @@ include $(CORE_DEPTH)/coreconf/config.mk
|
||||
# (4) Include "local" platform-dependent assignments (OPTIONAL). #
|
||||
#######################################################################
|
||||
|
||||
|
||||
|
||||
#######################################################################
|
||||
# (5) Execute "global" rules. (OPTIONAL) #
|
||||
#######################################################################
|
||||
|
||||
# have to put this here, instead of in rules.mk, so that Java gets
|
||||
# built first
|
||||
all:: buildJava
|
||||
|
||||
include $(CORE_DEPTH)/coreconf/rules.mk
|
||||
|
||||
#######################################################################
|
||||
@ -71,6 +73,8 @@ include $(CORE_DEPTH)/coreconf/rules.mk
|
||||
# (7) Execute "local" rules. (OPTIONAL). #
|
||||
#######################################################################
|
||||
|
||||
include rules.mk
|
||||
|
||||
#
|
||||
# The public NSS headers from an NSS binary release are now unpacked in
|
||||
# the mozilla/dist/public/nss directory; they were unpacked in the
|
||||
|
240
security/jss/build_java.pl
Normal file
240
security/jss/build_java.pl
Normal file
@ -0,0 +1,240 @@
|
||||
#use strict;
|
||||
use File::Find;
|
||||
use File::Compare;
|
||||
use File::Basename;
|
||||
use File::stat;
|
||||
use File::Copy;
|
||||
|
||||
@excluded_sources = qw(
|
||||
Debug_.*\.java
|
||||
provider\.new/
|
||||
org/mozilla/jss/pkcs11/PK11DSAPrivateKey\.java
|
||||
org/mozilla/jss/provider/java/security/KeyFactorySpi1_4\.java
|
||||
org/mozilla/jss/pkix/cert/X509Certificate\.java
|
||||
org/mozilla/jss/tools/
|
||||
samples/
|
||||
);
|
||||
|
||||
@javah_classes = qw(
|
||||
org.mozilla.jss.pkcs11.PK11Token
|
||||
org.mozilla.jss.ssl.SSLSocket
|
||||
org.mozilla.jss.ssl.SSLServerSocket
|
||||
org.mozilla.jss.ssl.SocketBase
|
||||
org.mozilla.jss.crypto.Algorithm
|
||||
org.mozilla.jss.crypto.EncryptionAlgorithm
|
||||
org.mozilla.jss.crypto.PQGParams
|
||||
org.mozilla.jss.DatabaseCloser
|
||||
org.mozilla.jss.CryptoManager
|
||||
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.PK11KeyGenerator
|
||||
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.PK11SecureRandom
|
||||
org.mozilla.jss.util.Debug
|
||||
org.mozilla.jss.util.Password
|
||||
org.mozilla.jss.crypto.SecretDecoderRing
|
||||
);
|
||||
|
||||
# setup variables
|
||||
setup_vars(\@ARGV);
|
||||
|
||||
# run the command with its arguments
|
||||
my $cmd = (shift || "build"); # first argument is command
|
||||
grep { s/(.*)/"$1"/ } @ARGV; # enclose remaining arguments in quotes
|
||||
my $args = join(",",@ARGV); # and comma-separate them
|
||||
eval "$cmd($args)"; # now run the command
|
||||
if( $@ ) {
|
||||
die $@; # errors in eval will be put in $@
|
||||
}
|
||||
|
||||
# END
|
||||
|
||||
sub grab_cmdline_vars {
|
||||
my $argv = shift;
|
||||
|
||||
while( $$argv[0] =~ /(.+)=(.*)/ ) {
|
||||
$cmdline_vars{$1} = $2;
|
||||
shift @$argv;
|
||||
}
|
||||
}
|
||||
|
||||
sub dump_cmdline_vars {
|
||||
print "Command variables:\n";
|
||||
for(keys %cmdline_vars) {
|
||||
print "$_=" . $cmdline_vars{$_} . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub setup_vars {
|
||||
my $argv = shift;
|
||||
|
||||
grab_cmdline_vars($argv);
|
||||
dump_cmdline_vars();
|
||||
|
||||
$javac = "$ENV{JAVA_HOME}/bin/javac";
|
||||
$javah = "$ENV{JAVA_HOME}/bin/javah";
|
||||
|
||||
$dist_dir = $cmdline_vars{SOURCE_PREFIX};
|
||||
|
||||
if( $ENV{BUILD_OPT} ) {
|
||||
$class_dir = "$dist_dir/classes";
|
||||
$javac_opt_flag = "-O";
|
||||
$debug_source_file = "org/mozilla/jss/util/Debug_ship.java";
|
||||
} else {
|
||||
$class_dir = "$dist_dir/classes_DBG";
|
||||
$javac_opt_flag = "-g";
|
||||
$debug_source_file = "org/mozilla/jss/util/Debug_debug.java";
|
||||
}
|
||||
$jni_header_dir = "$dist_dir/private/jss/_jni";
|
||||
}
|
||||
|
||||
sub clean {
|
||||
print_do("rm -rf $class_dir");
|
||||
print_do("rm -rf $jni_header_dir");
|
||||
}
|
||||
|
||||
sub build {
|
||||
|
||||
#
|
||||
# copy the appropriate debug file
|
||||
#
|
||||
my $debug_target_file = "org/mozilla/jss/util/Debug.java";
|
||||
if( compare($debug_source_file, $debug_target_file) ) {
|
||||
copy($debug_source_file, $debug_target_file) or die "Copying file: $!";
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# recursively find *.java
|
||||
#
|
||||
my %source_list;
|
||||
find sub {
|
||||
my $name = $File::Find::name;
|
||||
if( $name =~ /\.java$/) {
|
||||
$source_list{$File::Find::name} = 1;
|
||||
}
|
||||
}, ".";
|
||||
|
||||
#
|
||||
# weed out files that are excluded or don't need to be updated
|
||||
#
|
||||
my $file;
|
||||
foreach $file (keys %source_list) {
|
||||
my $pattern;
|
||||
foreach $pattern (@excluded_sources) {
|
||||
if( $file =~ /$pattern/ ) {
|
||||
delete $source_list{$file};
|
||||
}
|
||||
}
|
||||
unless( java_source_needs_update( $file, $class_dir ) ){
|
||||
delete $source_list{$file};
|
||||
}
|
||||
}
|
||||
my @source_list = keys(%source_list);
|
||||
|
||||
#
|
||||
# build the java sources
|
||||
#
|
||||
ensure_dir_exists($class_dir);
|
||||
print_do("$javac $javac_opt_flag -d $class_dir " . (join " ",@source_list));
|
||||
|
||||
#
|
||||
# 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 {
|
||||
my $cmd = shift;
|
||||
print "$cmd\n";
|
||||
system($cmd);
|
||||
my $exit_status = $?>>8;
|
||||
$exit_status and die "Command failed ($exit_status)\n";
|
||||
}
|
||||
|
||||
sub needs_update {
|
||||
my $target = shift;
|
||||
my @dependencies = @_;
|
||||
|
||||
my $target_mtime = (stat($target))[9];
|
||||
my $dep;
|
||||
foreach $dep( @dependencies ) {
|
||||
my $dep_mtime = (stat($dep))[9];
|
||||
if( $dep_mtime > $target_mtime ) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
# A quick-and-dirty way to guess whether a .java file needs to be rebuilt.
|
||||
# We merely look for a .class file of the same name. This won't work if
|
||||
# the source file's directory is different from its package, and it
|
||||
# doesn't know about nested or inner classes.
|
||||
# source_file: the relative path to the source file ("org/mozilla/jss/...")
|
||||
# dest_dir: the directory where classes are output ("../../dist/classes_DBG")
|
||||
# Returns 1 if the source file is newer than the class file, or the class file
|
||||
# doesn't exist. Returns 0 if the class file is newer than the source file.
|
||||
sub java_source_needs_update {
|
||||
my $source_file = shift;
|
||||
my $dest_dir = shift;
|
||||
|
||||
my $class_dir = "$dest_dir/" . dirname($source_file);
|
||||
my $class_file = basename($source_file);
|
||||
$class_file =~ s/\.java/.class/;
|
||||
$class_file = $class_dir . "/" . $class_file;
|
||||
if( -f $class_file ) {
|
||||
my $class_stat = stat($class_file);
|
||||
my $source_stat = stat($source_file);
|
||||
|
||||
if( $source_stat->mtime > $class_stat->mtime) {
|
||||
# class file exists and is out of date
|
||||
return 1;
|
||||
} else {
|
||||
#class file exists and is up to date
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
# class file hasn't been generated yet.
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Recursively makes the given directory. Dies at the first sign of trouble
|
||||
sub ensure_dir_exists {
|
||||
my $dir = shift;
|
||||
my $parent = dirname($dir);
|
||||
if( $parent ne $dir ) {
|
||||
ensure_dir_exists($parent);
|
||||
}
|
||||
if( ! -d $dir ) {
|
||||
mkdir($dir, 0777) or die "Failed to mkdir $dir: $!";
|
||||
}
|
||||
}
|
||||
|
||||
sub release {
|
||||
print "Arguments: " . join(",", @_) . "\n";
|
||||
}
|
13
security/jss/rules.mk
Normal file
13
security/jss/rules.mk
Normal file
@ -0,0 +1,13 @@
|
||||
.PHONY: buildJava
|
||||
.PHONY: cleanJava
|
||||
.PHONY: releaseJava
|
||||
|
||||
clean:: cleanJava
|
||||
|
||||
PERL_VARIABLES="SOURCE_PREFIX=$(SOURCE_PREFIX)"
|
||||
|
||||
buildJava:
|
||||
perl build_java.pl $(PERL_VARIABLES) build
|
||||
|
||||
cleanJava:
|
||||
perl build_java.pl $(PERL_VARIABLES) clean
|
Loading…
Reference in New Issue
Block a user