diff mbox

[1/1] dependencies: Reject gcj in BR2_NEEDS_HOST_JAVA check

Message ID 1407356782-3118-1-git-send-email-bernd.kuhls@t-online.de
State Superseded
Headers show

Commit Message

Bernd Kuhls Aug. 6, 2014, 8:26 p.m. UTC
Xbmc uses the Groovy java package to generate API code, for details see
http://wiki.xbmc.org/index.php?title=Codegeneration#How_it_works

Groovy itself is broken when used with gcj:
http://jira.codehaus.org/browse/GROOVY-3701

Xbmc recommends to use another java package instead, like openjdk:
http://forum.xbmc.org/showthread.php?tid=199742

Until we come up with a host package to provide a java setup and in order to
make autobuilder happy let´s reject gcj when we check for a java installation
on the host.

Currently Xbmc is the only package using BR2_NEEDS_HOST_JAVA so changing the
behaviour of dependencies.sh has no side effects.

Fixes
http://autobuild.buildroot.net/results/213/213d7454a1dc68cfb8f4c8d9508f52ebf8e58e33/
http://autobuild.buildroot.net/results/639/639cda872cf36c122cbd6139dd76f6b51ac1864e/
http://autobuild.buildroot.net/results/c9e/c9eb12c95b2939c64590692a82af8d84bbd90956/

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
 support/dependencies/dependencies.sh |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

Comments

Yann E. MORIN Aug. 13, 2014, 2:06 p.m. UTC | #1
Bernd, All,

On 2014-08-06 22:26 +0200, Bernd Kuhls spake thusly:
> Xbmc uses the Groovy java package to generate API code, for details see
> http://wiki.xbmc.org/index.php?title=Codegeneration#How_it_works
> 
> Groovy itself is broken when used with gcj:
> http://jira.codehaus.org/browse/GROOVY-3701
> 
> Xbmc recommends to use another java package instead, like openjdk:
> http://forum.xbmc.org/showthread.php?tid=199742
> 
> Until we come up with a host package to provide a java setup and in order to
> make autobuilder happy let´s reject gcj when we check for a java installation
> on the host.
> 
> Currently Xbmc is the only package using BR2_NEEDS_HOST_JAVA so changing the
> behaviour of dependencies.sh has no side effects.
> 
> Fixes
> http://autobuild.buildroot.net/results/213/213d7454a1dc68cfb8f4c8d9508f52ebf8e58e33/
> http://autobuild.buildroot.net/results/639/639cda872cf36c122cbd6139dd76f6b51ac1864e/
> http://autobuild.buildroot.net/results/c9e/c9eb12c95b2939c64590692a82af8d84bbd90956/
> 
> Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
> ---
>  support/dependencies/dependencies.sh |   14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/support/dependencies/dependencies.sh b/support/dependencies/dependencies.sh
> index 88e5ad2..b09e376 100755
> --- a/support/dependencies/dependencies.sh
> +++ b/support/dependencies/dependencies.sh
> @@ -188,7 +188,19 @@ if grep ^BR2_TOOLCHAIN_BUILDROOT=y $BR2_CONFIG > /dev/null && \
>  fi
>  
>  if grep -q ^BR2_NEEDS_HOST_JAVA=y $BR2_CONFIG ; then
> -	check_prog_host "java"
> +	JAVA=$(which java 2> /dev/null)
> +	if [ -z "$JAVA" ] ; then
> +		echo
> +		echo "You must install 'java' on your build machine";
> +		exit 1;
> +	fi;

Well, I'd keep the 'check_prog_host "java"' line, and would just add the
lines below, replacing $JAVA witrh just 'java'.

Regards,
Yann E. MORIN.

> +	JAVA_GCJ=$($JAVA -version 2>&1 | grep gcj)
> +	if [ ! -z "$JAVA_GCJ" ] ; then
> +		echo
> +		echo "$JAVA_GCJ is not sufficient to compile your package selection."
> +		echo "Please install OpenJDK/IcedTea/Oracle Java."
> +		exit 1 ;
> +	fi
>  fi
>  
>  if grep -q ^BR2_NEEDS_HOST_JAVAC=y $BR2_CONFIG ; then
> -- 
> 1.7.10.4
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Yann E. MORIN Aug. 13, 2014, 2:11 p.m. UTC | #2
Bernd, All,

I forgot some part of my review in my previous reply...

On 2014-08-06 22:26 +0200, Bernd Kuhls spake thusly:
> Xbmc uses the Groovy java package to generate API code, for details see
> http://wiki.xbmc.org/index.php?title=Codegeneration#How_it_works
> 
> Groovy itself is broken when used with gcj:
> http://jira.codehaus.org/browse/GROOVY-3701
> 
> Xbmc recommends to use another java package instead, like openjdk:
> http://forum.xbmc.org/showthread.php?tid=199742
> 
> Until we come up with a host package to provide a java setup and in order to
> make autobuilder happy let´s reject gcj when we check for a java installation
> on the host.
> 
> Currently Xbmc is the only package using BR2_NEEDS_HOST_JAVA so changing the
> behaviour of dependencies.sh has no side effects.
> 
> Fixes
> http://autobuild.buildroot.net/results/213/213d7454a1dc68cfb8f4c8d9508f52ebf8e58e33/
> http://autobuild.buildroot.net/results/639/639cda872cf36c122cbd6139dd76f6b51ac1864e/
> http://autobuild.buildroot.net/results/c9e/c9eb12c95b2939c64590692a82af8d84bbd90956/
> 
> Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
> ---
>  support/dependencies/dependencies.sh |   14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/support/dependencies/dependencies.sh b/support/dependencies/dependencies.sh
> index 88e5ad2..b09e376 100755
> --- a/support/dependencies/dependencies.sh
> +++ b/support/dependencies/dependencies.sh
> @@ -188,7 +188,19 @@ if grep ^BR2_TOOLCHAIN_BUILDROOT=y $BR2_CONFIG > /dev/null && \
>  fi
>  
>  if grep -q ^BR2_NEEDS_HOST_JAVA=y $BR2_CONFIG ; then
> -	check_prog_host "java"
> +	JAVA=$(which java 2> /dev/null)
> +	if [ -z "$JAVA" ] ; then
> +		echo
> +		echo "You must install 'java' on your build machine";
> +		exit 1;
> +	fi;
> +	JAVA_GCJ=$($JAVA -version 2>&1 | grep gcj)

$ gcj -version
gcj: error: unrecognized command line option ‘-version’

So I guess we should have:
    JAVA_GCJ="$(java --version 2>/dev/null |grep gcj)"

Which would be empty for the JDK's java, but not for gcj. I prefer we
rely on that, rather than the error mesage from gcj.

Regards,
Yann E. MORIN.

> +	if [ ! -z "$JAVA_GCJ" ] ; then
> +		echo
> +		echo "$JAVA_GCJ is not sufficient to compile your package selection."
> +		echo "Please install OpenJDK/IcedTea/Oracle Java."
> +		exit 1 ;
> +	fi
>  fi
>  
>  if grep -q ^BR2_NEEDS_HOST_JAVAC=y $BR2_CONFIG ; then
> -- 
> 1.7.10.4
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Bernd Kuhls Aug. 13, 2014, 5:13 p.m. UTC | #3
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote in 
news:20140813141110.GF3939@free.fr:

>> +     JAVA=$(which java 2> /dev/null)
>> +     if [ -z "$JAVA" ] ; then
>> +          echo
>> +          echo "You must install 'java' on your build machine";
>> +          exit 1;
>> +     fi;
>> +     JAVA_GCJ=$($JAVA -version 2>&1 | grep gcj)
> $ gcj -version
> gcj: error: unrecognized command line option ‘-version’
> So I guess we should have:
>     JAVA_GCJ="$(java --version 2>/dev/null |grep gcj)"
> Which would be empty for the JDK's java, but not for gcj. I prefer we
> rely on that, rather than the error mesage from gcj.

Hi,

$JAVA contains the result of "which java" which is /usr/bin/java here. This 
corresponds to xbmc/codegenerator.mk, which also calls

JAVA ?= $(shell which java)

Executing /usr/bin/gcj directly is not desired ;)

/usr/bin/java -version resolves to either

$ /usr/bin/java -version
java version "1.5.0"
gij (GNU libgcj) version 4.7.2

or

$ /usr/bin/java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.1) (7u65-2.5.1-2~deb7u1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

on my system (Debian 7.6).

Regards, Bernd
Yann E. MORIN Aug. 13, 2014, 9:23 p.m. UTC | #4
Bernd, All,

On 2014-08-13 19:13 +0200, Bernd Kuhls spake thusly:
> "Yann E. MORIN" <yann.morin.1998@free.fr> wrote in 
> news:20140813141110.GF3939@free.fr:
> 
> >> +     JAVA=$(which java 2> /dev/null)
> >> +     if [ -z "$JAVA" ] ; then
> >> +          echo
> >> +          echo "You must install 'java' on your build machine";
> >> +          exit 1;
> >> +     fi;
> >> +     JAVA_GCJ=$($JAVA -version 2>&1 | grep gcj)
> > $ gcj -version
> > gcj: error: unrecognized command line option ???-version???
> > So I guess we should have:
> >     JAVA_GCJ="$(java --version 2>/dev/null |grep gcj)"
> > Which would be empty for the JDK's java, but not for gcj. I prefer we
> > rely on that, rather than the error mesage from gcj.
> 
> Hi,
> 
> $JAVA contains the result of "which java" which is /usr/bin/java here. This 
> corresponds to xbmc/codegenerator.mk, which also calls
> 
> JAVA ?= $(shell which java)
> 
> Executing /usr/bin/gcj directly is not desired ;)
> 
> /usr/bin/java -version resolves to either
> 
> $ /usr/bin/java -version
> java version "1.5.0"
> gij (GNU libgcj) version 4.7.2
> 
> or
> 
> $ /usr/bin/java -version
> java version "1.7.0_65"
> OpenJDK Runtime Environment (IcedTea 2.5.1) (7u65-2.5.1-2~deb7u1)
> OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

OK, so 'java' from gcj accepts the same args as 'java' from the JDK. OK.

So, I still say we should keep the original check, and then check that
java is not from gcj :

    check_prog_host "java"
    if java -version 2>&1 |grep gcj >/dev/null 2>&1; then
        echo "Failed"
        exit 1
    fi

check_prog_host already calls 'which $1' so we're sure we can call 'java'.

Regards,
Yann E. MORIN.
Bernd Kuhls Aug. 16, 2014, 9:42 a.m. UTC | #5
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote in 
news:20140813212312.GI3939@free.fr:

> check_prog_host already calls 'which $1' so we're sure we can call 'java'.

Hi,

ok, I am going to send v2 with your suggestion added, but I would like to 
keep the $JAVA_GCJ part to have a nicer looking error message, examples:

gij (GNU libgcj) version 4.7.2 is not sufficient to compile your package 
selection.
Please install an OpenJDK/IcedTea/Oracle Java.

gij (GNU libgcj) version 4.6.3 is not sufficient to compile your package 
selection.
Please install an OpenJDK/IcedTea/Oracle Java.

Regards, Bernd
diff mbox

Patch

diff --git a/support/dependencies/dependencies.sh b/support/dependencies/dependencies.sh
index 88e5ad2..b09e376 100755
--- a/support/dependencies/dependencies.sh
+++ b/support/dependencies/dependencies.sh
@@ -188,7 +188,19 @@  if grep ^BR2_TOOLCHAIN_BUILDROOT=y $BR2_CONFIG > /dev/null && \
 fi
 
 if grep -q ^BR2_NEEDS_HOST_JAVA=y $BR2_CONFIG ; then
-	check_prog_host "java"
+	JAVA=$(which java 2> /dev/null)
+	if [ -z "$JAVA" ] ; then
+		echo
+		echo "You must install 'java' on your build machine";
+		exit 1;
+	fi;
+	JAVA_GCJ=$($JAVA -version 2>&1 | grep gcj)
+	if [ ! -z "$JAVA_GCJ" ] ; then
+		echo
+		echo "$JAVA_GCJ is not sufficient to compile your package selection."
+		echo "Please install OpenJDK/IcedTea/Oracle Java."
+		exit 1 ;
+	fi
 fi
 
 if grep -q ^BR2_NEEDS_HOST_JAVAC=y $BR2_CONFIG ; then