From 86170f0617fd4da0fd85c6c8918a0a27aeec0f94 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 22 Jul 2006 15:28:21 +0000 Subject: [PATCH] New module 'javaversion'. --- ChangeLog | 5 +++ MODULES.html.sh | 1 + lib/ChangeLog | 7 +++ lib/javaversion.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/javaversion.class | Bin 0 -> 510 bytes lib/javaversion.h | 40 +++++++++++++++++ lib/javaversion.java | 32 ++++++++++++++ modules/javaversion | 31 +++++++++++++ 8 files changed, 235 insertions(+) create mode 100644 lib/javaversion.c create mode 100644 lib/javaversion.class create mode 100644 lib/javaversion.h create mode 100644 lib/javaversion.java create mode 100644 modules/javaversion diff --git a/ChangeLog b/ChangeLog index 6abfea2be..1cf6c0a00 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-07-22 Bruno Haible + + * modules/javaversion: New file. + * MODULES.html.sh (Java): Add javaversion. + 2006-03-12 Bruno Haible * build-aux/javaexec.sh.in: Update for changed javaexec.m4. diff --git a/MODULES.html.sh b/MODULES.html.sh index e27785b95..125a009c4 100755 --- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -2038,6 +2038,7 @@ func_all_modules () func_module classpath func_module javacomp func_module javaexec + func_module javaversion #func_module gcj func_end_table diff --git a/lib/ChangeLog b/lib/ChangeLog index ddccf1f4b..eeae0a524 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,10 @@ +2006-07-22 Bruno Haible + + * javaversion.h: New file, from GNU gettext. + * javaversion.c: New file, from GNU gettext. + * javaversion.java: New file, from GNU gettext. + * javaversion.class: New file, from GNU gettext. + 2006-05-17 Bruno Haible Cygwin portability. diff --git a/lib/javaversion.c b/lib/javaversion.c new file mode 100644 index 000000000..a0dea953e --- /dev/null +++ b/lib/javaversion.c @@ -0,0 +1,119 @@ +/* Determine the Java version supported by javaexec. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* Specification. */ +#include "javaversion.h" + +#include +#include +#include + +#if ENABLE_RELOCATABLE +# include "relocatable.h" +#else +# define relocate(pathname) (pathname) +#endif + +#include "javaexec.h" +#include "pipe.h" +#include "wait-process.h" +#include "error.h" +#include "getline.h" +#include "gettext.h" + +#define _(str) gettext (str) + + +struct locals +{ + /* OUT */ + char *line; +}; + +static bool +execute_and_read_line (const char *progname, + const char *prog_path, char **prog_argv, + void *private_data) +{ + struct locals *l = (struct locals *) private_data; + pid_t child; + int fd[1]; + FILE *fp; + char *line; + size_t linesize; + size_t linelen; + int exitstatus; + + /* Open a pipe to the JVM. */ + child = create_pipe_in (progname, prog_path, prog_argv, DEV_NULL, false, + true, false, fd); + + if (child == -1) + return false; + + /* Retrieve its result. */ + fp = fdopen (fd[0], "r"); + if (fp == NULL) + { + error (0, errno, _("fdopen() failed")); + return false; + } + + line = NULL; linesize = 0; + linelen = getline (&line, &linesize, fp); + if (linelen == (size_t)(-1)) + { + error (0, 0, _("%s subprocess I/O error"), progname); + return false; + } + if (linelen > 0 && line[linelen - 1] == '\n') + line[linelen - 1] = '\0'; + + fclose (fp); + + /* Remove zombie process from process list, and retrieve exit status. */ + exitstatus = wait_subprocess (child, progname, true, false, true, false); + if (exitstatus != 0) + { + free (line); + return false; + } + + l->line = line; + return false; +} + +char * +javaexec_version (void) +{ + const char *class_name = "javaversion"; + const char *pkgdatadir = relocate (PKGDATADIR); + const char *args[1]; + struct locals locals; + + args[0] = NULL; + locals.line = NULL; + execute_java_class (class_name, &pkgdatadir, 1, true, NULL, args, + false, false, execute_and_read_line, &locals); + + return locals.line; +} diff --git a/lib/javaversion.class b/lib/javaversion.class new file mode 100644 index 0000000000000000000000000000000000000000..d62585b0ecd259dc3d661247c323788c927ff140 GIT binary patch literal 510 zcmZutO;5r=5Pi#6p;SSzh#(>tQ%$5l0OQ5P6HyWj7f(xF$r9RN#n}O8;*si zHlY4uri4$EgfTtXE1xoSdt_3PRl)rZDUO8dMd4ILYQb>oY#HZ2#8B2o+)XtGW2&_$ zv>1Dv&;TuDX#e^o!1NL*nsjSWW|Y(CZ(z? literal 0 HcmV?d00001 diff --git a/lib/javaversion.h b/lib/javaversion.h new file mode 100644 index 000000000..803e64690 --- /dev/null +++ b/lib/javaversion.h @@ -0,0 +1,40 @@ +/* Determine the Java version supported by javaexec. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _JAVAVERSION_H +#define _JAVAVERSION_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return information about the Java version used by execute_java_class(). + This is the value of System.getProperty("java.specification.version"). + Some possible values are: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6. Return NULL if + the Java version cannot be determined. */ +extern char * javaexec_version (void); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _JAVAVERSION_H */ diff --git a/lib/javaversion.java b/lib/javaversion.java new file mode 100644 index 000000000..a66004918 --- /dev/null +++ b/lib/javaversion.java @@ -0,0 +1,32 @@ +/* Show the Java version. + * Copyright (C) 2006 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** + * This program shows the Java version. + * + * This program _must_ be compiled with + * javac -d . -target 1.1 javaversion.java + * since its purpose is to show the version of _any_ Java implementation. + * + * @author Bruno Haible + */ +public class javaversion { + public static void main (String[] args) { + System.out.println(System.getProperty("java.specification.version")); + } +} diff --git a/modules/javaversion b/modules/javaversion new file mode 100644 index 000000000..e52d1a27d --- /dev/null +++ b/modules/javaversion @@ -0,0 +1,31 @@ +Description: +Determine the Java version supported by javaexec. + +Files: +lib/javaversion.h +lib/javaversion.c +lib/javaversion.java +lib/javaversion.class + +Depends-on: +javaexec +stdbool +pipe +wait-process +getline +gettext-h + +configure.ac: + +Makefile.am: +lib_SOURCES += javaversion.h javaversion.c + +Include: +"javaversion.h" + +License: +GPL + +Maintainer: +Bruno Haible + -- 2.11.0