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