Bug#754755: libinline-java-perl: FTBFS on mips: test suite issues
gregor herrmann
gregoa at debian.org
Thu Oct 30 17:03:19 UTC 2014
On Wed, 29 Oct 2014 16:52:13 +0000, Jurica Stanojkovic wrote:
> I have tried to build libinline-java-perl_0.53-3 from Debian on mips.
> Package FTBFS on mips.
>
> But same package (libinline-java-perl_0.53-3) can be built from same source manually with following commands:
> perl Makefile.PL J2SDK=/usr/
> make
> make test
>
> If built manually all tests pass on mips.
>
> Can someone please help with this issue?
Interesting finding, thank you!
What J2SDK does is choosing the Java version to use.
And probably it should be something like J2SDK=/usr/lib/jvm/...
And with or without it, /usr/bin/javac -> /etc/alternatives/javac ->
/usr/lib/jvm/java-7-openjdk-$arch/bin/javac is called. If we'd want
to change this we'd need to set JAVA_HOME presumably.
Some tests, with your example of J2SDK=/usr/:
1) amd64 without the variable, tests pass:
Welcome to the Inline::Java installation procedure.
Using /usr/lib/jvm/default-java as J2SDK directory.
Default J2SDK for Inline::Java will be '/usr/lib/jvm/default-java'.
See module documentation for information on how to use a different J2SDK
or change this default value.
[..]
Building with:
/usr/lib/jvm/default-java/include/jni.h
/usr/lib/jvm/default-java/include/jni_md.h
/usr/lib/jvm/default-java/jre/lib/amd64/server/libjvm.so
2) amd64 with the variable, tests pass:
Welcome to the Inline::Java installation procedure.
Default J2SDK for Inline::Java will be '/usr/'.
See module documentation for information on how to use a different J2SDK
or change this default value.
[..]
Building with:
/usr/lib/jvm/java-1.7.0-openjdk-amd64/include/jni.h
/usr/lib/jvm/java-1.7.0-openjdk-amd64/include/jni_md.h
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/libjvm.so
1) and 2) shouldn't be different since /usr/lib/jvm/default-java is a
symlink to java-1.7.0-openjdk-amd64.
3) mips without the variable:
Welcome to the Inline::Java installation procedure.
Using /usr/lib/jvm/default-java as J2SDK directory.
Default J2SDK for Inline::Java will be '/usr/lib/jvm/default-java'.
See module documentation for information on how to use a different J2SDK
or change this default value.
[..]
Building with:
/usr/lib/jvm/default-java/include/jni.h
/usr/lib/jvm/default-java/include/jni_md.h
/usr/lib/jvm/default-java/jre/lib/mips/server/libjvm.so
We don't even get to tests, since the build fails earlier:
/usr/bin/perl /usr/share/perl/5.20.1/ExtUtils/xsubpp -typemap /usr/share/perl/5.20/ExtUtils/typemap -typemap typemap JNI.xs > JNI.xsc && mv JNI.xsc JNI.c
cc -c -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -D_FORTIFY_SOURCE=2 -DVERSION=\"0.53\" -DXS_VERSION=\"0.53\" -fPIC "-I/usr/lib/mips-linux-gnu/perl/5.20/CORE" JNI.c
JNI.xs: In function 'check_exception_from_perl':
JNI.xs:51:3: error: format not a string literal and no format arguments [-Werror=format-security]
croak(msg) ;
^
JNI.c: In function 'XS_Inline__Java__JNI_new':
JNI.c:291:9: warning: unused variable 'CLASS' [-Wunused-variable]
char * CLASS = (char *)SvPV_nolen(ST(0))
^
JNI.c: In function 'XS_Inline__Java__JNI_shutdown':
JNI.c:417:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
this = (InlineJavaJNIVM *)SvIV((SV*)SvRV(ST(0))) ;
^
JNI.c: In function 'XS_Inline__Java__JNI_DESTROY':
JNI.c:443:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
this = (InlineJavaJNIVM *)SvIV((SV*)SvRV(ST(0))) ;
^
JNI.c: In function 'XS_Inline__Java__JNI_create_ijs':
JNI.c:474:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
this = (InlineJavaJNIVM *)SvIV((SV*)SvRV(ST(0))) ;
^
JNI.c: In function 'XS_Inline__Java__JNI_process_command':
JNI.c:514:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
this = (InlineJavaJNIVM *)SvIV((SV*)SvRV(ST(0))) ;
^
In file included from /usr/lib/mips-linux-gnu/perl/5.20/CORE/perl.h:5089:0,
from JNI.xs:2:
JNI.c: In function 'XS_Inline__Java__JNI_DESTROY':
/usr/lib/mips-linux-gnu/perl/5.20/CORE/embed.h:483:22: warning: 'this' may be used uninitialized in this function [-Wmaybe-uninitialized]
#define safesysfree Perl_safesysfree
^
JNI.c:440:20: note: 'this' was declared here
InlineJavaJNIVM * this;
^
JNI.c: In function 'XS_Inline__Java__JNI_shutdown':
JNI.xs:250:2: warning: 'this' may be used uninitialized in this function [-Wmaybe-uninitialized]
shutdown_JVM(this) ;
^
JNI.c:414:20: note: 'this' was declared here
InlineJavaJNIVM * this;
^
JNI.c: In function 'XS_Inline__Java__JNI_process_command':
JNI.xs:295:9: warning: 'this' may be used uninitialized in this function [-Wmaybe-uninitialized]
resp = (*(env))->CallObjectMethod(env, this->ijs, this->process_command_mid, cmd) ;
^
JNI.c:500:20: note: 'this' was declared here
InlineJavaJNIVM * this;
^
JNI.c: In function 'XS_Inline__Java__JNI_create_ijs':
JNI.xs:273:14: warning: 'this' may be used uninitialized in this function [-Wmaybe-uninitialized]
this->ijs = (*(env))->CallStaticObjectMethod(env, this->ijs_class, this->jni_main_mid, this->debug, this->native_doubles) ;
^
JNI.c:467:20: note: 'this' was declared here
InlineJavaJNIVM * this;
^
cc1: some warnings being treated as errors
Makefile:413: recipe for target 'JNI.o' failed
make[2]: *** [JNI.o] Error 1
Hm, no idea why this "JNI.xs:51:3: error:" only appears on mips?!
4) mips with the variable:
Welcome to the Inline::Java installation procedure.
Default J2SDK for Inline::Java will be '/usr/'.
See module documentation for information on how to use a different J2SDK
or change this default value.
[..]
Building with:
/usr/lib/jvm/java-7-openjdk-mips/include/jni.h
/usr/lib/jvm/java-7-openjdk-mips/include/jni_md.h
/usr/lib/jvm/java-1.7.0-openjdk-mips/jre/lib/mips/server/libjvm.so
And then the build fails with the same error.
But again, /usr/lib/jvm/default-java is a symlink to
java-7-openjdk-mips, so setting J2SDK or not shouldn't make a
difference.
5) mips without the variable, and with a patch for JNI.xs:
Yay, no more build errors :)
But the tests fail.
6) mips with the variable, and with a patch for JNI.xs:
Tests still fail, even the first one.
Also interesting: lintian (on amd64) says:
W: libinline-java-perl: incompatible-java-bytecode-format Java7 version (Class format: 51)
Conclusions:
- not sure :)
- but setting J2SDK=/usr doesn't (unsurprisingly) change anything
in a mips sid chroot where the one and only Java is openjdk-7
- next time please provide a bit more information, like
environment/java version, and log excerpts
Cheers,
gregor
Footnotes:
i) J2SDK in debian/rules:
#v+
--- a/debian/rules
+++ b/debian/rules
@@ -29,6 +29,9 @@ DEB_UPSTREAM_PACKAGE = Inline-Java
DEB_UPSTREAM_URL = http://www.cpan.org/modules/by-module/Inline
DEB_UPSTREAM_TARBALL_MD5 = 23f96c2ac4915302c3647c0abc92916f
+# pass J2SDK=/usr/ to perl Makefile.PL, cf. #754755
+DEB_MAKEMAKER_INVOKE += J2SDK=/usr/
+
# Needed both by upstream build and at runtime
deps = libinline-perl, default-jdk | java-compiler
#v-
ii) patch for Java/JNI.xs:
#v+
--- a/Java/JNI.xs
+++ b/Java/JNI.xs
@@ -48,7 +48,7 @@
if ((*(env))->ExceptionCheck(env)){
(*(env))->ExceptionDescribe(env) ;
(*(env))->ExceptionClear(env) ;
- croak(msg) ;
+ croak("%s", msg) ;
}
}
#v-
--
.''`. Homepage: http://info.comodo.priv.at/ - OpenPGP key 0xBB3A68018649AA06
: :' : Debian GNU/Linux user, admin, and developer - http://www.debian.org/
`. `' Member of VIBE!AT & SPI, fellow of the Free Software Foundation Europe
`- NP: David Bowie: Tvc 15
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 949 bytes
Desc: Digital Signature
URL: <http://lists.alioth.debian.org/pipermail/pkg-perl-maintainers/attachments/20141030/b11bc020/attachment.sig>
More information about the pkg-perl-maintainers
mailing list