xref: /netbsd-src/external/gpl3/gcc.old/dist/libphobos/m4/autoconf.m4 (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
1*627f7eb2Smrg#
2*627f7eb2Smrg# Minimal autoconf support for the D language.
3*627f7eb2Smrg# Adapted from the Go language support files.
4*627f7eb2Smrg#
5*627f7eb2Smrg
6*627f7eb2Smrg# ------------------- #
7*627f7eb2Smrg# Language selection.
8*627f7eb2Smrg# ------------------- #
9*627f7eb2Smrg
10*627f7eb2Smrg# AC_LANG(D)
11*627f7eb2Smrg# -----------
12*627f7eb2SmrgAC_LANG_DEFINE([D], [d], [GDC], [GDC], [],
13*627f7eb2Smrg[ac_ext=d
14*627f7eb2Smrgac_compile='$GDC -c $GDCFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
15*627f7eb2Smrgac_link='$GDC -o conftest$ac_exeext $GDCFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
16*627f7eb2Smrgac_compiler_gnu=yes
17*627f7eb2Smrg])
18*627f7eb2Smrg
19*627f7eb2Smrg# AC_LANG_D
20*627f7eb2Smrg# ----------
21*627f7eb2SmrgAU_DEFUN([AC_LANG_D], [AC_LANG(D)])
22*627f7eb2Smrg
23*627f7eb2Smrg# ------------------- #
24*627f7eb2Smrg# Producing programs.
25*627f7eb2Smrg# ------------------- #
26*627f7eb2Smrg
27*627f7eb2Smrg# AC_LANG_PROGRAM(D)([PROLOGUE], [BODY])
28*627f7eb2Smrg# ---------------------------------------
29*627f7eb2Smrgm4_define([AC_LANG_PROGRAM(D)],
30*627f7eb2Smrg[module mod;
31*627f7eb2Smrg$1
32*627f7eb2Smrg
33*627f7eb2Smrgextern(C) int main() {
34*627f7eb2Smrg  $2
35*627f7eb2Smrg}])
36*627f7eb2Smrg
37*627f7eb2Smrg# _AC_LANG_IO_PROGRAM(D)
38*627f7eb2Smrg# -----------------------
39*627f7eb2Smrg# Produce source that performs I/O.
40*627f7eb2Smrgm4_define([_AC_LANG_IO_PROGRAM(D)],
41*627f7eb2Smrg[AC_LANG_PROGRAM([import core.stdc.stdio;],
42*627f7eb2Smrg[FILE *f = fopen ("conftest.out", "w");
43*627f7eb2Smrg return ferror (f) || fclose (f) != 0;
44*627f7eb2Smrg])])
45*627f7eb2Smrg
46*627f7eb2Smrg# AC_LANG_CALL(D)(PROLOGUE, FUNCTION)
47*627f7eb2Smrg# ------------------------------------
48*627f7eb2Smrg# TODO: Avoid conflicting decl of main?
49*627f7eb2Smrg# Used by AC_SEARCH_LIBS.
50*627f7eb2Smrgm4_define([AC_LANG_CALL(D)],
51*627f7eb2Smrg[AC_LANG_PROGRAM([$1 extern(C) int $2();], [$2(); return 0;])])
52*627f7eb2Smrg
53*627f7eb2Smrg# AC_LANG_FUNC_LINK_TRY(D)(FUNCTION)
54*627f7eb2Smrg# -----------------------------------
55*627f7eb2Smrg# Try to link a program which calls FUNCTION.
56*627f7eb2Smrg# This only works for extern(C) functions.
57*627f7eb2Smrgm4_define([AC_LANG_FUNC_LINK_TRY(D)],
58*627f7eb2Smrg[AC_LANG_PROGRAM([extern(C) int $1();], [return $1();])])
59*627f7eb2Smrg
60*627f7eb2Smrg# AC_LANG_BOOL_COMPILE_TRY(D)(PROLOGUE, EXPRESSION)
61*627f7eb2Smrg# --------------------------------------------------
62*627f7eb2Smrg# Return a program which is valid if EXPRESSION is nonzero.
63*627f7eb2Smrg# Probably not that useful for D, we can extract any information
64*627f7eb2Smrg# we need using CTFE.
65*627f7eb2Smrgm4_define([AC_LANG_BOOL_COMPILE_TRY(D)],
66*627f7eb2Smrg[AC_LANG_PROGRAM([$1],
67*627f7eb2Smrg[static assert($2); return 0;])])
68*627f7eb2Smrg
69*627f7eb2Smrg# AC_LANG_INT_SAVE(D)(PROLOGUE, EXPRESSION)
70*627f7eb2Smrg# ------------------------------------------
71*627f7eb2Smrgm4_define([AC_LANG_INT_SAVE(D)],
72*627f7eb2Smrg[AC_LANG_PROGRAM([$1
73*627f7eb2Smrgimport core.stdc.stdio, core.stdc.stdlib;
74*627f7eb2Smrg],
75*627f7eb2Smrg[
76*627f7eb2Smrg  FILE *f = fopen ("conftest.val", "w");
77*627f7eb2Smrg  if (! f)
78*627f7eb2Smrg    return 1;
79*627f7eb2Smrg  if (($2) < 0)
80*627f7eb2Smrg    {
81*627f7eb2Smrg      fprintf (f, "%ld", $2);
82*627f7eb2Smrg    }
83*627f7eb2Smrg  else
84*627f7eb2Smrg    {
85*627f7eb2Smrg      fprintf (f, "%lu", $2);
86*627f7eb2Smrg    }
87*627f7eb2Smrg  /* Do not output a trailing newline, as this causes \r\n confusion
88*627f7eb2Smrg     on some platforms.  */
89*627f7eb2Smrg  return ferror (f) || fclose (f) != 0;
90*627f7eb2Smrg])])
91*627f7eb2Smrg
92*627f7eb2Smrg# ---------------------- #
93*627f7eb2Smrg# Looking for compilers. #
94*627f7eb2Smrg# ---------------------- #
95*627f7eb2Smrg
96*627f7eb2Smrg# AC_LANG_COMPILER(D)
97*627f7eb2Smrg# --------------------
98*627f7eb2SmrgAC_DEFUN([AC_LANG_COMPILER(D)],
99*627f7eb2Smrg[AC_REQUIRE([AC_PROG_GDC])])
100*627f7eb2Smrg
101*627f7eb2Smrg# AC_PROG_GDC
102*627f7eb2Smrg# ----------
103*627f7eb2SmrgAN_MAKEVAR([GDC], [AC_PROG_GDC])
104*627f7eb2SmrgAN_PROGRAM([gdc], [AC_PROG_GDC])
105*627f7eb2SmrgAC_DEFUN([AC_PROG_GDC],
106*627f7eb2Smrg[AC_LANG_PUSH(D)dnl
107*627f7eb2SmrgAC_ARG_VAR([GDC],     [D compiler command])dnl
108*627f7eb2SmrgAC_ARG_VAR([GDCFLAGS],  [D compiler flags])dnl
109*627f7eb2Smrg_AC_ARG_VAR_LDFLAGS()dnl
110*627f7eb2Smrgm4_ifval([$1],
111*627f7eb2Smrg      [AC_CHECK_TOOLS(GDC, [$1])],
112*627f7eb2Smrg[AC_CHECK_TOOL(GDC, gdc)
113*627f7eb2Smrgif test -z "$GDC"; then
114*627f7eb2Smrg  if test -n "$ac_tool_prefix"; then
115*627f7eb2Smrg    AC_CHECK_PROG(GDC, [${ac_tool_prefix}gdc], [$ac_tool_prefix}gdc])
116*627f7eb2Smrg  fi
117*627f7eb2Smrgfi
118*627f7eb2Smrgif test -z "$GDC"; then
119*627f7eb2Smrg  AC_CHECK_PROG(GDC, gdc, gdc, , , false)
120*627f7eb2Smrgfi
121*627f7eb2Smrg])
122*627f7eb2Smrg
123*627f7eb2Smrg# Provide some information about the compiler.
124*627f7eb2Smrg_AS_ECHO_LOG([checking for _AC_LANG compiler version])
125*627f7eb2Smrgset X $ac_compile
126*627f7eb2Smrgac_compiler=$[2]
127*627f7eb2Smrg_AC_DO_LIMIT([$ac_compiler --version >&AS_MESSAGE_LOG_FD])
128*627f7eb2Smrgm4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
129*627f7eb2Smrgm4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
130*627f7eb2SmrgAC_LANG_POP(D)dnl
131*627f7eb2Smrg])# AC_PROG_D
132*627f7eb2Smrg
133