| # This file is part of Autoconf. -*- Autoconf -*- |
| # Go language support. |
| # Copyright (C) 2011-2012 Free Software Foundation, Inc. |
| |
| # This file is part of Autoconf. This program is free |
| # software; you can redistribute it and/or modify it under the |
| # terms of the GNU General Public License as published by the |
| # Free Software Foundation, either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # Under Section 7 of GPL version 3, you are granted additional |
| # permissions described in the Autoconf Configure Script Exception, |
| # version 3.0, as published by the Free Software Foundation. |
| # |
| # You should have received a copy of the GNU General Public License |
| # and a copy of the Autoconf Configure Script Exception along with |
| # this program; see the files COPYINGv3 and COPYING.EXCEPTION |
| # respectively. If not, see <http://www.gnu.org/licenses/>. |
| |
| # Go support contributed by Ian Lance Taylor. |
| |
| # This currently only supports gccgo, not 6g/8g/5g. |
| |
| # ------------------- # |
| # Language selection. |
| # ------------------- # |
| |
| # AC_LANG(Go) |
| # ----------- |
| AC_LANG_DEFINE([Go], [go], [GO], [GOC], [], |
| [ac_ext=go |
| ac_compile='$GOC -c $GOFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD' |
| ac_link='$GOC -o conftest$ac_exeext $GOFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD' |
| ac_compiler_gnu=yes |
| ]) |
| |
| # AC_LANG_GO |
| # ---------- |
| AU_DEFUN([AC_LANG_GO], [AC_LANG(Go)]) |
| |
| # ------------------- # |
| # Producing programs. |
| # ------------------- # |
| |
| # AC_LANG_PROGRAM(Go)([PROLOGUE], [BODY]) |
| # --------------------------------------- |
| m4_define([AC_LANG_PROGRAM(Go)], |
| [package main |
| $1 |
| func main() { |
| $2 |
| }]) |
| |
| # _AC_LANG_IO_PROGRAM(Go) |
| # ----------------------- |
| # Produce source that performs I/O. |
| m4_define([_AC_LANG_IO_PROGRAM(Go)], |
| [AC_LANG_PROGRAM([import ( "fmt"; "os" )], |
| [f, err := os.Open("conftest.out", os.O_CREATE|os.O_WRONLY, 0777) |
| if err != nil { |
| fmt.Println(err) |
| os.Exit(1) |
| } |
| if err = f.Close(); err != nil { |
| fmt.Println(err) |
| os.Exit(1) |
| } |
| os.Exit(0) |
| ])]) |
| |
| # AC_LANG_CALL(Go)(PROLOGUE, FUNCTION) |
| # ------------------------------------ |
| # Avoid conflicting decl of main. |
| m4_define([AC_LANG_CALL(Go)], |
| [AC_LANG_PROGRAM([$1 |
| m4_if([$2], [main], , |
| [func $2()])],[$2()])]) |
| |
| # AC_LANG_FUNC_LINK_TRY(Go)(FUNCTION) |
| # ----------------------------------- |
| # Try to link a program which calls FUNCTION. |
| m4_define([AC_LANG_FUNC_LINK_TRY(Go)], |
| [AC_LANG_PROGRAM( |
| [func $1() int |
| var f = $1 |
| ], [return f()])]) |
| |
| # AC_LANG_BOOL_COMPILE_TRY(Go)(PROLOGUE, EXPRESSION) |
| # -------------------------------------------------- |
| # Return a program which is valid if EXPRESSION is nonzero. |
| m4_define([AC_LANG_BOOL_COMPILE_TRY(Go)], |
| [AC_LANG_PROGRAM([$1], [var test_array @<:@1 - 2 * !($2)@:>@int |
| test_array @<:@0@:>@ = 0 |
| ])]) |
| |
| # AC_LANG_INT_SAVE(Go)(PROLOGUE, EXPRESSION) |
| # ------------------------------------------ |
| m4_define([AC_LANG_INT_SAVE(Go)], |
| [AC_LANG_PROGRAM([$1 |
| import ( |
| "fmt" |
| "os" |
| ) |
| ], |
| [f, err := os.Open("conftest.val", os.O_CREATE|os.O_WRONLY, 0777) |
| if err != nil { |
| os.Exit(1) |
| } |
| if $2 < 0 { |
| int64 i = int64($2) |
| if i != $2 { |
| os.Exit(1) |
| } |
| if _, err := fmt.Print(f, i); err != nil { |
| os.Exit(1) |
| } |
| } else { |
| uint64 i = uint64($2) |
| if i != $2 { |
| os.Exit(1) |
| } |
| if _, err := fmt.Print(f, i); err != nil { |
| os.Exit(1) |
| } |
| } |
| if err = f.Close(); err != nil { |
| os.Exit(1) |
| } |
| os.Exit(0); |
| ])]) |
| |
| # ---------------------- # |
| # Looking for compilers. # |
| # ---------------------- # |
| |
| # AC_LANG_COMPILER(Go) |
| # -------------------- |
| AC_DEFUN([AC_LANG_COMPILER(Go)], |
| [AC_REQUIRE([AC_PROG_GO])]) |
| |
| # 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([GOFLAGS], [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, , , 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 |
| GOFLAGS="-g -O2" |
| AC_LANG_POP(Go)dnl |
| ])# AC_PROG_GO |