dnl acinclude.m4 -- configure macros

dnl Copyright 2009 The Go Authors. All rights reserved.
dnl Use of this source code is governed by a BSD-style
dnl license that can be found in the LICENSE file.

dnl Go support--this could be in autoconf.
dnl This version is probably autoconf 2.64 specific.

AC_LANG_DEFINE([Go], [go], [GO], [],
[ac_ext=go
ac_compile='$GOC -c $GOCFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
ac_link='$GOC -o conftest$ac_exeext $GOCFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
ac_compile_gnu=yes
])

AU_DEFUN([AC_LANG_GO], [AC_LANG(Go)])

m4_define([AC_LANG_PROGRAM(Go)],
[package main
$1
func main() {
$2
}])

m4_define([_AC_LANG_IO_PROGRAM(Go)],
[AC_LANG_PROGRAM([import "os"],
[if f, err := os.Create("conftest.out"), err != nil {
	os.Exit(1);
 }
 if err := f.Close(); err != nil {
	os.Exit(1);
 }
 os.Exit(0);
])])

m4_define([AC_LANG_CALL(Go)],
[AC_LANG_PROGRAM([$1
m4_if([$2], [main], ,
[func $2();])],[$2();])])

m4_define([AC_LANG_FUNC_LINK_TRY(Go)],
[AC_LANG_PROGRAM(
[func $1() int;
var f := $1;
], [return f();])])

m4_define([AC_LANG_BOOL_COMPILE_TRY(Go)],
[AC_LANG_PROGRAM([$1], [var test_array @<:@1 - 2 * !($2)@:>@;
test_array @<:@0@:>@ = 0
])])

m4_define([AC_LANG_INT_SAVE(Go)],
[AC_LANG_PROGRAM([$1
import os
func longval() long { return $2 }
func ulongval() ulong { return $2 }],
[panic("unimplemented")])])

AC_DEFUN([AC_LANG_COMPILER(Go)],
[AC_REQUIRE([AC_PROG_GO])])

AN_MAKEVAR([GOC], [AC_PROG_GO])
AN_PROGRAM([gccgo], [AC_PROG_GO])
AC_DEFUN([AC_PROG_GO],
[AC_LANG_PUSH(Go)dnl
AC_ARG_VAR([GOC],   [Go compiler command])dnl
AC_ARG_VAR([GOCFLAGS], [Go compiler flags])dnl
_AC_ARG_VAR_LDFLAGS()dnl
m4_ifval([$1],
      [AC_CHECK_TOOLS(GOC, [$1])],
[AC_CHECK_TOOL(GOC, gccgo)
if test -z "$GOC"; then
  if test -n "$ac_tool_prefix"; then
    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [$ac_tool_prefix}gccgo])
  fi
fi
if test -z "$GOC"; then
  AC_CHECK_PROG(GOC, gccgo, gccgo, , , gccgo)
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
GOCFLAGS="-g -O2"
AC_LANG_POP(Go)dnl
])# AC_PROG_GO
