Blame nss/coreconf/jniregen.pl

Packit 40b132
#!/usr/local/bin/perl
Packit 40b132
#
Packit 40b132
# This Source Code Form is subject to the terms of the Mozilla Public
Packit 40b132
# License, v. 2.0. If a copy of the MPL was not distributed with this
Packit 40b132
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
Packit 40b132
Packit 40b132
# Input: -d dir -j javahcmd foo1 foo2 . . .
Packit 40b132
#        Compares generated "_jni/foo1.h" file with "foo1.class", and
Packit 40b132
#        generated "_jni/foo2.h" file with "foo2.class", etc.
Packit 40b132
#        (NOTE:  unlike its closely related cousin, outofdate.pl,
Packit 40b132
#                the "-d dir" must always be specified)
Packit 40b132
#        Runs the javahcmd on all files that are different.
Packit 40b132
#
Packit 40b132
# Returns: list of headers which are OLDER than corresponding class
Packit 40b132
#          files (non-existent class files are considered to be real old :-)
Packit 40b132
Packit 40b132
my $javah = "";
Packit 40b132
my $classdir = "";
Packit 40b132
Packit 40b132
while(1) {
Packit 40b132
    if ($ARGV[0] eq '-d') {
Packit 40b132
        $classdir = $ARGV[1];
Packit 40b132
        $classdir .= "/";
Packit 40b132
        shift;
Packit 40b132
        shift;
Packit 40b132
    } elsif($ARGV[0] eq '-j') {
Packit 40b132
        $javah = $ARGV[1];
Packit 40b132
        shift;
Packit 40b132
        shift;
Packit 40b132
    } else {
Packit 40b132
        last;
Packit 40b132
    }
Packit 40b132
}
Packit 40b132
Packit 40b132
if( $javah  eq "") {
Packit 40b132
    die "Must specify -j <javah command>";
Packit 40b132
}
Packit 40b132
if( $classdir eq "") {
Packit 40b132
    die "Must specify -d <classdir>";
Packit 40b132
}
Packit 40b132
Packit 40b132
foreach $filename (@ARGV)
Packit 40b132
{
Packit 40b132
    $headerfilename = "_jni/";
Packit 40b132
    $headerfilename .= $filename;
Packit 40b132
    $headerfilename =~ s/\./_/g;
Packit 40b132
    $headerfilename .= ".h";
Packit 40b132
Packit 40b132
    $classfilename = $filename;
Packit 40b132
    $classfilename =~ s|\.|/|g;
Packit 40b132
    $classfilename .= ".class";
Packit 40b132
Packit 40b132
    $classfilename = $classdir . $classfilename;
Packit 40b132
Packit 40b132
Packit 40b132
    ( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $headermtime,
Packit 40b132
      $ctime, $blksize, $blocks ) = stat( $headerfilename );
Packit 40b132
Packit 40b132
    ( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $classmtime,
Packit 40b132
      $ctime, $blksize, $blocks ) = stat( $classfilename );
Packit 40b132
Packit 40b132
    if( $headermtime < $classmtime )
Packit 40b132
    {
Packit 40b132
	# NOTE:  Since this is used by "javah", and "javah" refuses to overwrite
Packit 40b132
	#        an existing file, we force an unlink from this script, since
Packit 40b132
	#        we actually want to regenerate the header file at this time.
Packit 40b132
        unlink $headerfilename;
Packit 40b132
        push @filelist, $filename;
Packit 40b132
    }
Packit 40b132
}
Packit 40b132
Packit 40b132
if( @filelist ) {
Packit 40b132
    $cmd = "$javah " . join(" ",@filelist);
Packit 40b132
    $cmd =~ s/\'/\"/g;  # because windows doesn't understand single quote
Packit 40b132
    print "$cmd\n";
Packit 40b132
    exit (system($cmd) >> 8);
Packit 40b132
} else {
Packit 40b132
    print "All JNI header files up to date.\n"
Packit 40b132
}