# csharpcomp.m4 # serial 11 dnl Copyright (C) 2003-2005, 2007, 2009-2024 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. dnl This file is offered as-is, without any warranty. # Prerequisites of csharpcomp.sh. # Checks for a C# compiler. # Sets at most one of HAVE_MCS, HAVE_DOTNET_SDK, HAVE_DOTNET_CSC, HAVE_CSC. # Sets HAVE_CSHARPCOMP to nonempty if csharpcomp.sh will work. # Also sets CSHARPCOMPFLAGS. AC_DEFUN([gt_CSHARPCOMP], [ AC_REQUIRE([gt_CSHARP_CHOICE]) AC_MSG_CHECKING([for C[#] compiler]) HAVE_CSHARPCOMP=1 pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl AC_CHECK_PROG([HAVE_MCS_IN_PATH], [mcs], [yes]) AC_CHECK_PROG([HAVE_DOTNET_IN_PATH], [dotnet], [yes]) AC_CHECK_PROG([HAVE_CSC_IN_PATH], [csc], [yes]) popdef([AC_MSG_RESULT])dnl popdef([AC_CHECKING])dnl popdef([AC_MSG_CHECKING])dnl for impl in "$CSHARP_CHOICE" mono dotnet sscli no; do case "$impl" in mono) if test -n "$HAVE_MCS_IN_PATH" \ && mcs --version >/dev/null 2>/dev/null \ && mcs --version 2>/dev/null | grep Mono >/dev/null; then HAVE_MCS=1 ac_result="mcs" break fi ;; dotnet) # The dotnet compiler is called "Roslyn". # # There are two situations: # - A dotnet SDK, that contains a 'dotnet' program and the Roslyn # compiler as csc.dll. # - An MSVC installation, that contains the Roslyn compiler as csc.exe # (e.g. in C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\Roslyn\csc.exe). # In the first case, the user only has to make sure that 'dotnet' is # found in $PATH. # In the second case, they need to make sure that both 'dotnet' and # 'csc' are found in $PATH. if test -n "$HAVE_DOTNET_IN_PATH" \ && dotnet --list-runtimes >/dev/null 2>/dev/null \ && test -n "`dotnet --list-sdks 2>/dev/null`"; then HAVE_DOTNET_SDK=1 ac_result="dotnet" break else if test -n "$HAVE_CSC_IN_PATH" \ && csc -help 2>/dev/null | grep analyzer >/dev/null \ && { if csc -help 2>/dev/null | grep -i chicken > /dev/null; then false; else true; fi; }; then HAVE_DOTNET_CSC=1 ac_result="dotnet" break fi fi ;; sscli) if test -n "$HAVE_CSC_IN_PATH" \ && csc -help >/dev/null 2>/dev/null \ && { if csc -help 2>/dev/null | grep -i chicken > /dev/null; then false; else true; fi; }; then HAVE_CSC=1 ac_result="csc" break fi ;; no) HAVE_CSHARPCOMP= ac_result="no" break ;; esac done AC_MSG_RESULT([$ac_result]) AC_SUBST([HAVE_MCS]) AC_SUBST([HAVE_DOTNET_SDK]) AC_SUBST([HAVE_DOTNET_CSC]) AC_SUBST([HAVE_CSC]) dnl Provide a default for CSHARPCOMPFLAGS. if test -z "${CSHARPCOMPFLAGS+set}"; then CSHARPCOMPFLAGS="-O -g" fi AC_SUBST([CSHARPCOMPFLAGS]) ])