aboutsummaryrefslogtreecommitdiff
path: root/libphobos/m4/autoconf.m4
diff options
context:
space:
mode:
Diffstat (limited to 'libphobos/m4/autoconf.m4')
-rw-r--r--libphobos/m4/autoconf.m4132
1 files changed, 132 insertions, 0 deletions
diff --git a/libphobos/m4/autoconf.m4 b/libphobos/m4/autoconf.m4
new file mode 100644
index 0000000..e1ed4a8
--- /dev/null
+++ b/libphobos/m4/autoconf.m4
@@ -0,0 +1,132 @@
+#
+# Minimal autoconf support for the D language.
+# Adapted from the Go language support files.
+#
+
+# ------------------- #
+# Language selection.
+# ------------------- #
+
+# AC_LANG(D)
+# -----------
+AC_LANG_DEFINE([D], [d], [GDC], [],
+[ac_ext=d
+ac_compile='$GDC -c $GDCFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$GDC -o conftest$ac_exeext $GDCFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
+ac_compiler_gnu=yes
+])
+
+# AC_LANG_D
+# ----------
+AU_DEFUN([AC_LANG_D], [AC_LANG(D)])
+
+# ------------------- #
+# Producing programs.
+# ------------------- #
+
+# AC_LANG_PROGRAM(D)([PROLOGUE], [BODY])
+# ---------------------------------------
+m4_define([AC_LANG_PROGRAM(D)],
+[module mod;
+$1
+
+extern(C) int main() {
+ $2
+}])
+
+# _AC_LANG_IO_PROGRAM(D)
+# -----------------------
+# Produce source that performs I/O.
+m4_define([_AC_LANG_IO_PROGRAM(D)],
+[AC_LANG_PROGRAM([import core.stdc.stdio;],
+[FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+])])
+
+# AC_LANG_CALL(D)(PROLOGUE, FUNCTION)
+# ------------------------------------
+# TODO: Avoid conflicting decl of main?
+# Used by AC_SEARCH_LIBS.
+m4_define([AC_LANG_CALL(D)],
+[AC_LANG_PROGRAM([$1 extern(C) int $2();], [$2(); return 0;])])
+
+# AC_LANG_FUNC_LINK_TRY(D)(FUNCTION)
+# -----------------------------------
+# Try to link a program which calls FUNCTION.
+# This only works for extern(C) functions.
+m4_define([AC_LANG_FUNC_LINK_TRY(D)],
+[AC_LANG_PROGRAM([extern(C) int $1();], [return $1();])])
+
+# AC_LANG_BOOL_COMPILE_TRY(D)(PROLOGUE, EXPRESSION)
+# --------------------------------------------------
+# Return a program which is valid if EXPRESSION is nonzero.
+# Probably not that useful for D, we can extract any information
+# we need using CTFE.
+m4_define([AC_LANG_BOOL_COMPILE_TRY(D)],
+[AC_LANG_PROGRAM([$1],
+[static assert($2); return 0;])])
+
+# AC_LANG_INT_SAVE(D)(PROLOGUE, EXPRESSION)
+# ------------------------------------------
+m4_define([AC_LANG_INT_SAVE(D)],
+[AC_LANG_PROGRAM([$1
+import core.stdc.stdio, core.stdc.stdlib;
+],
+[
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ fprintf (f, "%ld", $2);
+ }
+ else
+ {
+ fprintf (f, "%lu", $2);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+])])
+
+# ---------------------- #
+# Looking for compilers. #
+# ---------------------- #
+
+# AC_LANG_COMPILER(D)
+# --------------------
+AC_DEFUN([AC_LANG_COMPILER(D)],
+[AC_REQUIRE([AC_PROG_GDC])])
+
+# AC_PROG_GDC
+# ----------
+AN_MAKEVAR([GDC], [AC_PROG_GDC])
+AN_PROGRAM([gdc], [AC_PROG_GDC])
+AC_DEFUN([AC_PROG_GDC],
+[AC_LANG_PUSH(D)dnl
+AC_ARG_VAR([GDC], [D compiler command])dnl
+AC_ARG_VAR([GDCFLAGS], [D compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+m4_ifval([$1],
+ [AC_CHECK_TOOLS(GDC, [$1])],
+[AC_CHECK_TOOL(GDC, gdc)
+if test -z "$GDC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GDC, [${ac_tool_prefix}gdc], [$ac_tool_prefix}gdc])
+ fi
+fi
+if test -z "$GDC"; then
+ AC_CHECK_PROG(GDC, gdc, gdc, , , false)
+fi
+])
+
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+_AC_DO_LIMIT([$ac_compiler --version >&AS_MESSAGE_LOG_FD])
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+AC_LANG_POP(D)dnl
+])# AC_PROG_D
+