From 136b57a7fdd137b610932c774d8ff9edbcfab580 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 22 Jul 2006 14:32:41 +0000 Subject: [PATCH] Update csharpexec module from GNU gettext. --- ChangeLog | 5 ++ build-aux/csharpexec.sh.in | 18 +++++-- lib/ChangeLog | 6 +++ lib/csharpexec.c | 97 +++++++++++++++++++++++++++++++++++++- m4/ChangeLog | 5 ++ m4/csharpexec.m4 | 29 +++++++++++- 6 files changed, 154 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8426da8ee6..0965dc2e27 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-12-04 Bruno Haible + + * build-aux/csharpexec.sh.in: Add support for 'clix' launcher + (untested). + 2006-06-21 Bruno Haible Avoid warnings from recent versions of mcs. diff --git a/build-aux/csharpexec.sh.in b/build-aux/csharpexec.sh.in index 98694091dd..66c0a6b85b 100644 --- a/build-aux/csharpexec.sh.in +++ b/build-aux/csharpexec.sh.in @@ -1,7 +1,7 @@ #!/bin/sh # Execute a C# program. -# Copyright (C) 2003 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. # Written by Bruno Haible , 2003. # # This program is free software; you can redistribute it and/or modify @@ -78,7 +78,19 @@ else test -z "$CSHARP_VERBOSE" || echo mono "$@" exec mono "$@" else - echo 'C# virtual machine not found, try installing pnet, then reconfigure' 1>&2 - exit 1 + if test -n "@HAVE_CLIX@"; then + CONF_CLIX_PATH='@CLIX_PATH@' + if test -n "$libdirs_mono"; then + @CLIX_PATH_VAR@="$libdirs_mono${CONF_CLIX_PATH:+@MONO_PATH_SEPARATOR@$CONF_CLIX_PATH}" + else + @CLIX_PATH_VAR@="$CONF_CLIX_PATH" + fi + export @CLIX_PATH_VAR@ + test -z "$CSHARP_VERBOSE" || echo clix "$@" + exec clix "$@" + else + echo 'C# virtual machine not found, try installing pnet, then reconfigure' 1>&2 + exit 1 + fi fi fi diff --git a/lib/ChangeLog b/lib/ChangeLog index c327a44773..006cb28836 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,9 @@ +2005-12-04 Bruno Haible + + * csharpexec.c: Add support for 'clix' launcher (untested). + (execute_csharp_using_sscli): New function. + (execute_csharp_program): Call it. + 2006-06-21 Bruno Haible Avoid warnings from recent versions of mcs. diff --git a/lib/csharpexec.c b/lib/csharpexec.c index 604e13769f..6c25ecd1ea 100644 --- a/lib/csharpexec.c +++ b/lib/csharpexec.c @@ -1,5 +1,5 @@ /* Execute a C# program. - Copyright (C) 2003-2004 Free Software Foundation, Inc. + Copyright (C) 2003-2005 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify @@ -40,6 +40,31 @@ #define reset_classpath reset_monopath #include "classpath.h" #include "classpath.c" +#undef reset_classpath +#undef set_classpath +#undef new_classpath +#undef CLASSPATHVAR + +/* Handling of clix' PATH variable is just like Java CLASSPATH. */ +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ + /* Win32, Cygwin */ + #define CLASSPATHVAR "PATH" +#elif defined __APPLE__ && defined __MACH__ + /* MacOS X */ + #define CLASSPATHVAR "DYLD_LIBRARY_PATH" +#else + /* Normal Unix */ + #define CLASSPATHVAR "LD_LIBRARY_PATH" +#endif +#define new_classpath new_clixpath +#define set_classpath set_clixpath +#define reset_classpath reset_clixpath +#include "classpath.h" +#include "classpath.c" +#undef reset_classpath +#undef set_classpath +#undef new_classpath +#undef CLASSPATHVAR #define _(str) gettext (str) @@ -50,6 +75,7 @@ ilrun pnet mono mono + clix sscli With Mono, the MONO_PATH is a colon separated list of pathnames. (On Windows: semicolon separated list of pathnames.) @@ -58,6 +84,8 @@ 1. "ilrun", because it is a completely free system. 2. "mono", because it is a partially free system but doesn't integrate well with Unix. + 3. "clix", although it is not free, because it is a kind of "reference + implementation" of C#. But the order can be changed through the --enable-csharp configuration option. */ @@ -194,6 +222,67 @@ execute_csharp_using_mono (const char *assembly_path, return -1; } +static int +execute_csharp_using_sscli (const char *assembly_path, + const char * const *libdirs, + unsigned int libdirs_count, + const char * const *args, unsigned int nargs, + bool verbose, bool quiet, + execute_fn *executer, void *private_data) +{ + static bool clix_tested; + static bool clix_present; + + if (!clix_tested) + { + /* Test for presence of clix: + "clix >/dev/null 2>/dev/null ; test $? = 1" */ + char *argv[2]; + int exitstatus; + + argv[0] = "clix"; + argv[1] = NULL; + exitstatus = execute ("clix", "clix", argv, false, false, true, true, + true, false); + clix_present = (exitstatus == 0 || exitstatus == 1); + clix_tested = true; + } + + if (clix_present) + { + char *old_clixpath; + char **argv = (char **) xallocsa ((2 + nargs + 1) * sizeof (char *)); + unsigned int i; + bool err; + + /* Set clix' PATH variable. */ + old_clixpath = set_clixpath (libdirs, libdirs_count, false, verbose); + + argv[0] = "clix"; + argv[1] = (char *) assembly_path; + for (i = 0; i <= nargs; i++) + argv[2 + i] = (char *) args[i]; + + if (verbose) + { + char *command = shell_quote_argv (argv); + printf ("%s\n", command); + free (command); + } + + err = executer ("clix", "clix", argv, private_data); + + /* Reset clix' PATH variable. */ + reset_clixpath (old_clixpath); + + freesa (argv); + + return err; + } + else + return -1; +} + bool execute_csharp_program (const char *assembly_path, const char * const *libdirs, @@ -247,6 +336,12 @@ execute_csharp_program (const char *assembly_path, return (bool) result; #endif + result = execute_csharp_using_sscli (assembly_path, libdirs, libdirs_count, + args, nargs, verbose, quiet, + executer, private_data); + if (result >= 0) + return (bool) result; + if (!quiet) error (0, 0, _("C# virtual machine not found, try installing pnet")); return true; diff --git a/m4/ChangeLog b/m4/ChangeLog index 69c7813a8e..55a3c99bbc 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,8 @@ +2005-12-04 Bruno Haible + + * csharpexec.m4 (gt_CSHARPEXEC): Add support for 'clix' launcher + (untested). + 2005-12-04 Bruno Haible * csharpcomp.m4 (gt_CSHARPCOMP): Also set CSHARPCOMPFLAGS. diff --git a/m4/csharpexec.m4 b/m4/csharpexec.m4 index 7813bd15c8..fb254289bc 100644 --- a/m4/csharpexec.m4 +++ b/m4/csharpexec.m4 @@ -1,13 +1,14 @@ -# csharpexec.m4 serial 2 (gettext-0.15) +# csharpexec.m4 serial 3 (gettext-0.15) dnl Copyright (C) 2003-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of csharpexec.sh. +# Checks for a C# execution engine. # gt_CSHARPEXEC or gt_CSHARPEXEC(testexecutable, its-directory) +# Sets at most one of HAVE_ILRUN, HAVE_MONO, HAVE_CLIX. # Sets HAVE_CSHARPEXEC to nonempty if csharpexec.sh will work. - AC_DEFUN([gt_CSHARPEXEC], [ AC_REQUIRE([gt_CSHARP_CHOICE]) @@ -23,6 +24,7 @@ AC_DEFUN([gt_CSHARPEXEC], pushdef([AC_MSG_RESULT],[:])dnl AC_CHECK_PROG(HAVE_ILRUN_IN_PATH, ilrun, yes) AC_CHECK_PROG(HAVE_MONO_IN_PATH, mono, yes) + AC_CHECK_PROG(HAVE_CLIX_IN_PATH, clix, yes) popdef([AC_MSG_RESULT])dnl popdef([AC_CHECKING])dnl popdef([AC_MSG_CHECKING])dnl @@ -46,6 +48,26 @@ AC_DEFUN([gt_CSHARPEXEC], break fi ;; + sscli) + if test -n "$HAVE_CLIX_IN_PATH" \ + ifelse([$1], , , [&& clix $2/$1 >/dev/null 2>/dev/null]); then + HAVE_CLIX=1 + case $host_os in + cygwin* | mingw* | pw32*) + CLIX_PATH_VAR=PATH + ;; + darwin* | rhapsody*) + CLIX_PATH_VAR=DYLD_LIBRARY_PATH + ;; + *) + CLIX_PATH_VAR=LD_LIBRARY_PATH + ;; + esac + eval CLIX_PATH=\"\$CLIX_PATH_VAR\" + ac_result="clix" + break + fi + ;; no) HAVE_CSHARPEXEC= ac_result="no" @@ -56,6 +78,9 @@ AC_DEFUN([gt_CSHARPEXEC], AC_MSG_RESULT([$ac_result]) AC_SUBST(MONO_PATH) AC_SUBST(MONO_PATH_SEPARATOR) + AC_SUBST(CLIX_PATH_VAR) + AC_SUBST(CLIX_PATH) AC_SUBST(HAVE_ILRUN) AC_SUBST(HAVE_MONO) + AC_SUBST(HAVE_CLIX) ]) -- 2.30.2