Copy --version support from gnulib-tool to posix-modules.
[gnulib.git] / lib / javacomp.c
index 7a2b768..7d0a942 100644 (file)
@@ -1,11 +1,11 @@
 /* Compile a Java program.
-   Copyright (C) 2001-2003, 2006-2007 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc.
    Written by Bruno Haible <haible@clisp.cons.org>, 2001.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,8 +13,7 @@
    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.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include <alloca.h>
@@ -41,9 +40,8 @@
 #include "binary-io.h"
 #include "safe-read.h"
 #include "xalloc.h"
-#include "xallocsa.h"
-#include "getline.h"
-#include "filename.h"
+#include "xmalloca.h"
+#include "concat-filename.h"
 #include "fwriteerror.h"
 #include "clean-temp.h"
 #include "error.h"
@@ -230,7 +228,7 @@ compile_using_envjavac (const char *javac,
     command_length += 1 + shell_quote_length (java_sources[i]);
   command_length += 1;
 
-  command = (char *) xallocsa (command_length);
+  command = (char *) xmalloca (command_length);
   p = command;
   /* Don't shell_quote $JAVAC, because it may consist of a command
      and options.  */
@@ -270,10 +268,10 @@ compile_using_envjavac (const char *javac,
   argv[2] = command;
   argv[3] = NULL;
   exitstatus = execute (javac, "/bin/sh", argv, false, false, false,
-                       null_stderr, true, true);
+                       null_stderr, true, true, NULL);
   err = (exitstatus != 0);
 
-  freesa (command);
+  freea (command);
 
   return err;
 }
@@ -303,7 +301,7 @@ compile_using_gcj (const char * const *java_sources,
     2 + (no_assert_option ? 1 : 0) + (fsource_option ? 1 : 0)
     + (ftarget_option ? 1 : 0) + (optimize ? 1 : 0) + (debug ? 1 : 0)
     + (directory != NULL ? 2 : 0) + java_sources_count;
-  argv = (char **) xallocsa ((argc + 1) * sizeof (char *));
+  argv = (char **) xmalloca ((argc + 1) * sizeof (char *));
 
   argp = argv;
   *argp++ = "gcj";
@@ -312,7 +310,7 @@ compile_using_gcj (const char * const *java_sources,
     *argp++ = "-fno-assert";
   if (fsource_option)
     {
-      fsource_arg = (char *) xallocsa (9 + strlen (source_version) + 1);
+      fsource_arg = (char *) xmalloca (9 + strlen (source_version) + 1);
       memcpy (fsource_arg, "-fsource=", 9);
       strcpy (fsource_arg + 9, source_version);
       *argp++ = fsource_arg;
@@ -321,7 +319,7 @@ compile_using_gcj (const char * const *java_sources,
     fsource_arg = NULL;
   if (ftarget_option)
     {
-      ftarget_arg = (char *) xallocsa (9 + strlen (target_version) + 1);
+      ftarget_arg = (char *) xmalloca (9 + strlen (target_version) + 1);
       memcpy (ftarget_arg, "-ftarget=", 9);
       strcpy (ftarget_arg + 9, target_version);
       *argp++ = ftarget_arg;
@@ -352,14 +350,14 @@ compile_using_gcj (const char * const *java_sources,
     }
 
   exitstatus = execute ("gcj", "gcj", argv, false, false, false, null_stderr,
-                       true, true);
+                       true, true, NULL);
   err = (exitstatus != 0);
 
   if (ftarget_arg != NULL)
-    freesa (ftarget_arg);
+    freea (ftarget_arg);
   if (fsource_arg != NULL)
-    freesa (fsource_arg);
-  freesa (argv);
+    freea (fsource_arg);
+  freea (argv);
 
   return err;
 }
@@ -385,7 +383,7 @@ compile_using_javac (const char * const *java_sources,
   argc =
     1 + (source_option ? 2 : 0) + (target_option ? 2 : 0) + (optimize ? 1 : 0)
     + (debug ? 1 : 0) + (directory != NULL ? 2 : 0) + java_sources_count;
-  argv = (char **) xallocsa ((argc + 1) * sizeof (char *));
+  argv = (char **) xmalloca ((argc + 1) * sizeof (char *));
 
   argp = argv;
   *argp++ = "javac";
@@ -423,10 +421,10 @@ compile_using_javac (const char * const *java_sources,
     }
 
   exitstatus = execute ("javac", "javac", argv, false, false, false,
-                       null_stderr, true, true);
+                       null_stderr, true, true, NULL);
   err = (exitstatus != 0);
 
-  freesa (argv);
+  freea (argv);
 
   return err;
 }
@@ -450,7 +448,7 @@ compile_using_jikes (const char * const *java_sources,
   argc =
     1 + (optimize ? 1 : 0) + (debug ? 1 : 0) + (directory != NULL ? 2 : 0)
     + java_sources_count;
-  argv = (char **) xallocsa ((argc + 1) * sizeof (char *));
+  argv = (char **) xmalloca ((argc + 1) * sizeof (char *));
 
   argp = argv;
   *argp++ = "jikes";
@@ -478,10 +476,10 @@ compile_using_jikes (const char * const *java_sources,
     }
 
   exitstatus = execute ("jikes", "jikes", argv, false, false, false,
-                       null_stderr, true, true);
+                       null_stderr, true, true, NULL);
   err = (exitstatus != 0);
 
-  freesa (argv);
+  freea (argv);
 
   return err;
 }
@@ -566,7 +564,7 @@ is_envjavac_gcj (const char *javac)
 
       /* Setup the command "$JAVAC --version".  */
       command_length = strlen (javac) + 1 + 9 + 1;
-      command = (char *) xallocsa (command_length);
+      command = (char *) xmalloca (command_length);
       p = command;
       /* Don't shell_quote $JAVAC, because it may consist of a command
         and options.  */
@@ -607,12 +605,13 @@ is_envjavac_gcj (const char *javac)
       fclose (fp);
 
       /* Remove zombie process from process list, and retrieve exit status.  */
-      exitstatus = wait_subprocess (child, javac, true, true, true, false);
+      exitstatus =
+       wait_subprocess (child, javac, true, true, true, false, NULL);
       if (exitstatus != 0)
        envjavac_gcj = false;
 
      failed:
-      freesa (command);
+      freea (command);
 
       envjavac_tested = true;
     }
@@ -647,7 +646,7 @@ is_envjavac_gcj43 (const char *javac)
 
       /* Setup the command "$JAVAC --version".  */
       command_length = strlen (javac) + 1 + 9 + 1;
-      command = (char *) xallocsa (command_length);
+      command = (char *) xmalloca (command_length);
       p = command;
       /* Don't shell_quote $JAVAC, because it may consist of a command
         and options.  */
@@ -691,12 +690,13 @@ is_envjavac_gcj43 (const char *javac)
       fclose (fp);
 
       /* Remove zombie process from process list, and retrieve exit status.  */
-      exitstatus = wait_subprocess (child, javac, true, true, true, false);
+      exitstatus =
+       wait_subprocess (child, javac, true, true, true, false, NULL);
       if (exitstatus != 0)
        envjavac_gcj43 = false;
 
      failed:
-      freesa (command);
+      freea (command);
 
       envjavac_tested = true;
     }
@@ -741,7 +741,7 @@ is_envjavac_gcj43_usable (const char *javac,
        return true;
 
       conftest_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
       if (write_temp_file (tmpdir, conftest_file_name,
                           get_goodcode_snippet (source_version)))
        {
@@ -751,7 +751,7 @@ is_envjavac_gcj43_usable (const char *javac,
        }
 
       compiled_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
       register_temp_file (tmpdir, compiled_file_name);
 
       java_sources[0] = conftest_file_name;
@@ -785,9 +785,9 @@ is_envjavac_gcj43_usable (const char *javac,
                  free (conftest_file_name);
 
                  conftest_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestfail.java",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestfail.java",
+                                           NULL);
                  if (write_temp_file (tmpdir, conftest_file_name, failcode))
                    {
                      free (conftest_file_name);
@@ -797,9 +797,9 @@ is_envjavac_gcj43_usable (const char *javac,
                    }
 
                  compiled_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestfail.class",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestfail.class",
+                                           NULL);
                  register_temp_file (tmpdir, compiled_file_name);
 
                  java_sources[0] = conftest_file_name;
@@ -890,7 +890,7 @@ is_envjavac_oldgcj_14_14_usable (const char *javac, bool *usablep)
        return true;
 
       conftest_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
       if (write_temp_file (tmpdir, conftest_file_name,
                           get_goodcode_snippet ("1.4")))
        {
@@ -900,7 +900,7 @@ is_envjavac_oldgcj_14_14_usable (const char *javac, bool *usablep)
        }
 
       compiled_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
       register_temp_file (tmpdir, compiled_file_name);
 
       java_sources[0] = conftest_file_name;
@@ -951,7 +951,7 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
        return true;
 
       conftest_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
       if (write_temp_file (tmpdir, conftest_file_name,
                           get_goodcode_snippet ("1.3")))
        {
@@ -961,7 +961,7 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
        }
 
       compiled_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
       register_temp_file (tmpdir, compiled_file_name);
 
       java_sources[0] = conftest_file_name;
@@ -994,8 +994,8 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
       if (javac_works && javac_noassert_works)
        {
          conftest_file_name =
-           concatenated_filename (tmpdir->dir_name, "conftestfail.java",
-                                  NULL);
+           xconcatenated_filename (tmpdir->dir_name, "conftestfail.java",
+                                   NULL);
          if (write_temp_file (tmpdir, conftest_file_name,
                               get_failcode_snippet ("1.3")))
            {
@@ -1006,8 +1006,8 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
            }
 
          compiled_file_name =
-           concatenated_filename (tmpdir->dir_name, "conftestfail.class",
-                                  NULL);
+           xconcatenated_filename (tmpdir->dir_name, "conftestfail.class",
+                                   NULL);
          register_temp_file (tmpdir, compiled_file_name);
 
          java_sources[0] = conftest_file_name;
@@ -1091,7 +1091,7 @@ is_envjavac_nongcj_usable (const char *javac,
        return true;
 
       conftest_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
       if (write_temp_file (tmpdir, conftest_file_name,
                           get_goodcode_snippet (source_version)))
        {
@@ -1101,7 +1101,7 @@ is_envjavac_nongcj_usable (const char *javac,
        }
 
       compiled_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
       register_temp_file (tmpdir, compiled_file_name);
 
       java_sources[0] = conftest_file_name;
@@ -1135,9 +1135,9 @@ is_envjavac_nongcj_usable (const char *javac,
                  free (conftest_file_name);
 
                  conftest_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestfail.java",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestfail.java",
+                                           NULL);
                  if (write_temp_file (tmpdir, conftest_file_name, failcode))
                    {
                      free (conftest_file_name);
@@ -1147,9 +1147,9 @@ is_envjavac_nongcj_usable (const char *javac,
                    }
 
                  compiled_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestfail.class",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestfail.class",
+                                           NULL);
                  register_temp_file (tmpdir, compiled_file_name);
 
                  java_sources[0] = conftest_file_name;
@@ -1219,9 +1219,9 @@ is_envjavac_nongcj_usable (const char *javac,
                      free (conftest_file_name);
 
                      conftest_file_name =
-                       concatenated_filename (tmpdir->dir_name,
-                                              "conftestfail.java",
-                                              NULL);
+                       xconcatenated_filename (tmpdir->dir_name,
+                                               "conftestfail.java",
+                                               NULL);
                      if (write_temp_file (tmpdir, conftest_file_name,
                                           failcode))
                        {
@@ -1233,9 +1233,9 @@ is_envjavac_nongcj_usable (const char *javac,
                        }
 
                      compiled_file_name =
-                       concatenated_filename (tmpdir->dir_name,
-                                              "conftestfail.class",
-                                              NULL);
+                       xconcatenated_filename (tmpdir->dir_name,
+                                               "conftestfail.class",
+                                               NULL);
                      register_temp_file (tmpdir, compiled_file_name);
 
                      java_sources[0] = conftest_file_name;
@@ -1369,7 +1369,7 @@ is_gcj_present (void)
          /* Remove zombie process from process list, and retrieve exit
             status.  */
          exitstatus =
-           wait_subprocess (child, "gcj", false, true, true, false);
+           wait_subprocess (child, "gcj", false, true, true, false, NULL);
          if (exitstatus != 0)
            gcj_present = false;
        }
@@ -1387,8 +1387,8 @@ is_gcj_present (void)
              char *conftest_file_name;
 
              conftest_file_name =
-               concatenated_filename (tmpdir->dir_name, "conftestlib.java",
-                                      NULL);
+               xconcatenated_filename (tmpdir->dir_name, "conftestlib.java",
+                                       NULL);
              if (write_temp_file (tmpdir, conftest_file_name,
 "public class conftestlib {\n"
 "  public static void main (String[] args) {\n"
@@ -1401,9 +1401,9 @@ is_gcj_present (void)
                  const char *java_sources[1];
 
                  compiled_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestlib.class",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestlib.class",
+                                           NULL);
                  register_temp_file (tmpdir, compiled_file_name);
 
                  java_sources[0] = conftest_file_name;
@@ -1484,7 +1484,7 @@ is_gcj_43 (void)
          /* Remove zombie process from process list, and retrieve exit
             status.  */
          exitstatus =
-           wait_subprocess (child, "gcj", false, true, true, false);
+           wait_subprocess (child, "gcj", false, true, true, false, NULL);
          if (exitstatus != 0)
            gcj_43 = false;
        }
@@ -1531,7 +1531,7 @@ is_gcj43_usable (const char *source_version,
        return true;
 
       conftest_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
       if (write_temp_file (tmpdir, conftest_file_name,
                           get_goodcode_snippet (source_version)))
        {
@@ -1541,7 +1541,7 @@ is_gcj43_usable (const char *source_version,
        }
 
       compiled_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
       register_temp_file (tmpdir, compiled_file_name);
 
       java_sources[0] = conftest_file_name;
@@ -1571,9 +1571,9 @@ is_gcj43_usable (const char *source_version,
                  free (conftest_file_name);
 
                  conftest_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestfail.java",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestfail.java",
+                                           NULL);
                  if (write_temp_file (tmpdir, conftest_file_name, failcode))
                    {
                      free (conftest_file_name);
@@ -1582,9 +1582,9 @@ is_gcj43_usable (const char *source_version,
                    }
 
                  compiled_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestfail.class",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestfail.class",
+                                           NULL);
                  register_temp_file (tmpdir, compiled_file_name);
 
                  java_sources[0] = conftest_file_name;
@@ -1670,7 +1670,7 @@ is_oldgcj_14_14_usable (bool *usablep)
        return true;
 
       conftest_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
       if (write_temp_file (tmpdir, conftest_file_name,
                           get_goodcode_snippet ("1.4")))
        {
@@ -1680,7 +1680,7 @@ is_oldgcj_14_14_usable (bool *usablep)
        }
 
       compiled_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
       register_temp_file (tmpdir, compiled_file_name);
 
       java_sources[0] = conftest_file_name;
@@ -1727,7 +1727,7 @@ is_oldgcj_14_13_usable (bool *usablep, bool *need_no_assert_option_p)
        return true;
 
       conftest_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
       if (write_temp_file (tmpdir, conftest_file_name,
                           get_goodcode_snippet ("1.3")))
        {
@@ -1737,7 +1737,7 @@ is_oldgcj_14_13_usable (bool *usablep, bool *need_no_assert_option_p)
        }
 
       compiled_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
       register_temp_file (tmpdir, compiled_file_name);
 
       java_sources[0] = conftest_file_name;
@@ -1793,7 +1793,7 @@ is_javac_present (void)
       argv[0] = "javac";
       argv[1] = NULL;
       exitstatus = execute ("javac", "javac", argv, false, false, true, true,
-                           true, false);
+                           true, false, NULL);
       javac_present = (exitstatus == 0 || exitstatus == 1 || exitstatus == 2);
       javac_tested = true;
     }
@@ -1835,7 +1835,7 @@ is_javac_usable (const char *source_version, const char *target_version,
        return true;
 
       conftest_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
       if (write_temp_file (tmpdir, conftest_file_name,
                           get_goodcode_snippet (source_version)))
        {
@@ -1845,7 +1845,7 @@ is_javac_usable (const char *source_version, const char *target_version,
        }
 
       compiled_file_name =
-       concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
+       xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
       register_temp_file (tmpdir, compiled_file_name);
 
       java_sources[0] = conftest_file_name;
@@ -1878,9 +1878,9 @@ is_javac_usable (const char *source_version, const char *target_version,
                  free (conftest_file_name);
 
                  conftest_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestfail.java",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestfail.java",
+                                           NULL);
                  if (write_temp_file (tmpdir, conftest_file_name, failcode))
                    {
                      free (conftest_file_name);
@@ -1889,9 +1889,9 @@ is_javac_usable (const char *source_version, const char *target_version,
                    }
 
                  compiled_file_name =
-                   concatenated_filename (tmpdir->dir_name,
-                                          "conftestfail.class",
-                                          NULL);
+                   xconcatenated_filename (tmpdir->dir_name,
+                                           "conftestfail.class",
+                                           NULL);
                  register_temp_file (tmpdir, compiled_file_name);
 
                  java_sources[0] = conftest_file_name;
@@ -1959,9 +1959,9 @@ is_javac_usable (const char *source_version, const char *target_version,
                      free (conftest_file_name);
 
                      conftest_file_name =
-                       concatenated_filename (tmpdir->dir_name,
-                                              "conftestfail.java",
-                                              NULL);
+                       xconcatenated_filename (tmpdir->dir_name,
+                                               "conftestfail.java",
+                                               NULL);
                      if (write_temp_file (tmpdir, conftest_file_name,
                                           failcode))
                        {
@@ -1971,9 +1971,9 @@ is_javac_usable (const char *source_version, const char *target_version,
                        }
 
                      compiled_file_name =
-                       concatenated_filename (tmpdir->dir_name,
-                                              "conftestfail.class",
-                                              NULL);
+                       xconcatenated_filename (tmpdir->dir_name,
+                                               "conftestfail.class",
+                                               NULL);
                      register_temp_file (tmpdir, compiled_file_name);
 
                      java_sources[0] = conftest_file_name;
@@ -2057,7 +2057,7 @@ is_jikes_present (void)
       argv[0] = "jikes";
       argv[1] = NULL;
       exitstatus = execute ("jikes", "jikes", argv, false, false, true, true,
-                           true, false);
+                           true, false, NULL);
       jikes_present = (exitstatus == 0 || exitstatus == 1);
       jikes_tested = true;
     }