[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#743384: lintian: Update unknown-java-class-version to support Java 8 class version (52)



Here it is :)

Sylvestre

On 03/04/2014 12:19, Bastien ROUCARIES wrote:
> I will prefer a patch using Lintian::Data
>
> Could be override by derivative and backport
>
> Bastien
>
> On Wed, Apr 2, 2014 at 12:48 PM, Sylvestre Ledru <sylvestre@debian.org> wrote:
>> On 02/04/2014 10:33, Emmanuel Bourg wrote:
>>> Package: lintian
>>> Version: 2.5.22.1
>>> Severity: normal
>>>
>>> Hi,
>>>
>>> Could you please support the Java 8 class version in the
>>> unknown-java-class-version check? OpenJDK 8 is being packaged and
>>> lintian complains about the new class version (52 for Java 8, Java 7
>>> used 51)
>>>
>> The attached patch should fix it.
>>
>> Cheers,
>> Sylvestre
>>

>From fb326f966d4ea9c0fd93ca4ef6d5cfcf8ce167f5 Mon Sep 17 00:00:00 2001
From: Sylvestre Ledru <sylvestre@debian.org>
Date: Fri, 11 Apr 2014 18:58:39 +0200
Subject: [PATCH] Catch uses of Java8 byte code

---
 checks/java.desc    |  2 +-
 checks/java.pm      | 12 ++++++++----
 data/java/constants | 13 +++++++++++++
 debian/changelog    |  3 +++
 4 files changed, 25 insertions(+), 5 deletions(-)
 create mode 100644 data/java/constants

diff --git a/checks/java.desc b/checks/java.desc
index e73b37c..bf55937 100644
--- a/checks/java.desc
+++ b/checks/java.desc
@@ -108,7 +108,7 @@ Info: The package contains a Jar file with Java class files compiled for an
  for a newer version of Java than Lintian knows about.  In the latter case,
  please file a bug against Lintian.
  .
- Latest class version known by Lintian is Java7 (Major version 51).
+ Latest class version known by Lintian is Java8 (Major version 52).
 
 Tag: zip-parse-error
 Severity: normal
diff --git a/checks/java.pm b/checks/java.pm
index fc30a83..96f40bd 100644
--- a/checks/java.pm
+++ b/checks/java.pm
@@ -24,10 +24,13 @@ use warnings;
 use autodie;
 
 use List::MoreUtils qw(any none);
+use Lintian::Data ();
 
 use Lintian::Tags qw(tag);
 use Lintian::Util qw(normalize_pkg_path);
 
+our $MAX_BYTECODE = Lintian::Data->new('java/constants', qr/\s*=\s*/o);
+
 sub run {
     my ($pkg, undef, $info) = @_;
     my $java_info = $info->java_info;
@@ -81,11 +84,11 @@ sub run {
             my $mver = $files->{$class};
             $classes = 1;
             next if $class =~ m/\.clj$/;
-            # .class but no major version?
+            # .class but no major evrsion?
             next if $mver eq '-';
-            if ($mver <= 44 or $mver >= 52) {
+            if ($mver <= $MAX_BYTECODE->value('min-bytecode-version') - 1 or $mver >= $MAX_BYTECODE->value('max-bytecode-existing-version')) {
                 # First public major version was 45 (Java1), latest
-                # version is 51 (Java7).
+                # version is 52 (Java8).
                 tag 'unknown-java-class-version', $jar_file,
                   "($class -> $mver)";
                 # Skip the rest of this Jar.
@@ -205,10 +208,11 @@ sub run {
         #  45-49 -> Java1 - Java5 (Always ok)
         #     50 -> Java6
         #     51 -> Java7
+        #     52 -> Java8
         my $bad = 0;
 
         # If the lowest version used is:
-        $bad = 1 if $jmajlow == 51; # Java7 - consider bad per request.
+        $bad = 1 if $jmajlow == $MAX_BYTECODE->value('max-bytecode-version') + 1 ; # Java7 - consider bad per request.
 
        # Technically we ought to do some checks with Java6 class files and
        # dependencies/package types, but for now just skip that.  (See #673276)
diff --git a/data/java/constants b/data/java/constants
new file mode 100644
index 0000000..f618e26
--- /dev/null
+++ b/data/java/constants
@@ -0,0 +1,13 @@
+# This defines the maximal version of Java bytecode
+# to make sure it runs on older JVM
+# Byte code numbers:
+#  45-49 -> Java1 - Java5 (Always ok)
+#     50 -> Java6 - Current max version in Debian
+#     51 -> Java7
+#     52 -> Java8
+max-bytecode-version = 50
+
+max-bytecode-existing-version = 52
+
+# The following should not change
+min-bytecode-version = 45
diff --git a/debian/changelog b/debian/changelog
index 14bcc0b..1fb1330 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -23,6 +23,9 @@ lintian (2.5.22.2) UNRELEASED; urgency=medium
     + [SL] Do not trigger a warning when a jar is not in
       /usr/share/java and the package name matches
       lib.*maven.*plugin.*java.
+    + [SL] Catch uses of Java8 byte code
+  * data/java/constants:
+    + [SL] introduce this file to specify JDK values
 
  -- Bastien Roucariès <roucaries.bastien+debian@gmail.com>  Mon, 31 Mar 2014 18:52:04 +0200
 
-- 
1.9.1.662.g3e70902


Reply to: