On Wed, 2003-11-26 at 22:32, William S Fulton wrote: > We need to detect whether C# is installed on Unix systems and are > using a simple autoconf macro to look for mcs. Unfortunately there > is another program called mcs and so it incorrectly detects mcs. > Does anyone know of any better autoconf macros to detect whether mcs > installed and whether or not it is a working C# compiler?
Find attached the code we have in the Mercury compiler to detect whether one has a recent enough version of the compiler to bootstrap the compiler.
MERCURY_MSG("looking for an already installed Mercury compiler to bootstrap with...") AC_PATH_PROG(BOOTSTRAP_MC,mmc) if test "$BOOTSTRAP_MC" != ""; then AC_MSG_CHECKING(whether $BOOTSTRAP_MC works and is sufficiently recent) cat > conftest.m << EOF % this module contains features which didn't work in % previous versions of the Mercury compiler % We may also test to see if the installed compiler is % recent enough by checking what flags mmc takes. % Use [[ ]] for lists. :- module conftest. :- interface. :- import_module io. :- pred main(io__state::di, io__state::uo) is det. :- implementation. :- import_module int. main(!IO) :- return_rtti_version(Version), ( Version >= 8, ac(2) ^ elem(3, 5) = 17 -> io.print("Hello, world\n", !IO) ; io.print("Nope.\n", !IO) ). :- type a ---> ac(int). :- func a ^ elem(int, int) = int. :- mode in ^ elem(in, in ) = out is det. ac(T) ^ elem(I, J) = T + I * J. :- pred return_rtti_version(int::out) is det. :- pragma foreign_proc("C", return_rtti_version(Version::out), [[will_not_call_mercury, promise_pure]], " Version = MR_RTTI_VERSION; "). EOF if # Test for the `--read-config-file-2003-03-01' option echo $BOOTSTRAP_MC conftest >&AC_FD_CC 2>&1 && $BOOTSTRAP_MC \ --verbose \ --read-config-file-2003-03-01 \ --halt-at-warn $link_static_opt conftest \ </dev/null >&AC_FD_CC 2>&1 && test "`./conftest 2>&1 | tr -d '\015'`" = "Hello, world" then AC_MSG_RESULT(yes) else BOOTSTRAP_MC= AC_MSG_RESULT(no) fi rm -f conftest* fi