123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- # 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
|