* lib/autoconf/go.m4: New file.
* lib/autoconf/autoconf.m4: Include autoconf/go.m4.
* lib/autoconf/Makefile.am (dist_autoconflib_DATA): Add go.m4.
* lib/freeze.mk (autoconf_m4f_dependencies): Add
$(src_libdir)/autoconf/go.m4.
* doc/autoconf.texi: Rebuild menus.
(Preset Output Variables): Mention Go. Document GOFLAGS.
(Libraries): Mention Go.
(Go Compiler): New subsection.
(Language Choice): Mention Go.
(Generating Sources): Likewise.
(Running the Preprocessor): Likewise.
* tests/go.at: New file.
* tests/suite.at: Include go.at and acgo.at.
* tests/local.at (_AT_CHECK_ENV): Add GOC and GOFLAGS.
* tests/Makefile.am (TESTSUITE_GENERATED_AT): Add
$(srcdir)/acgo.at.
(TESTSUITE_HAND_AT): Add go.at.
(AUTOCONF_FILES): Add $(autoconfdir)/go.m4.
* NEWS: Update.
Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+2011-02-21 Ian Lance Taylor <iant@google.com>
+
+ * lib/autoconf/go.m4: New file.
+ * lib/autoconf/autoconf.m4: Include autoconf/go.m4.
+ * lib/autoconf/Makefile.am (dist_autoconflib_DATA): Add go.m4.
+ * lib/freeze.mk (autoconf_m4f_dependencies): Add
+ $(src_libdir)/autoconf/go.m4.
+ * doc/autoconf.texi: Rebuild menus.
+ (Preset Output Variables): Mention Go. Document GOFLAGS.
+ (Libraries): Mention Go.
+ (Go Compiler): New subsection.
+ (Language Choice): Mention Go.
+ (Generating Sources): Likewise.
+ (Running the Preprocessor): Likewise.
+ * tests/go.at: New file.
+ * tests/suite.at: Include go.at and acgo.at.
+ * tests/local.at (_AT_CHECK_ENV): Add GOC and GOFLAGS.
+ * tests/Makefile.am (TESTSUITE_GENERATED_AT): Add
+ $(srcdir)/acgo.at.
+ (TESTSUITE_HAND_AT): Add go.at.
+ (AUTOCONF_FILES): Add $(autoconfdir)/go.m4.
+ * NEWS: Update.
+
2011-02-20 Christian Rössel <christian.roessel@gmx.de> (tiny change)
Markus Geimer <m.geimer@fz-juelich.de> (tiny change)
* Noteworthy changes in release ?.? (????-??-??) [?]
+** Support for the Go programming language has been added. The new macro
+ AC_LANG_GO sets variables GOC and GOFLAGS.
+
** AS_LITERAL_IF again treats '=' as a literal. Regression introduced in
2.66.
* Objective C++ Compiler:: Likewise
* Erlang Compiler and Interpreter:: Likewise
* Fortran Compiler:: Likewise
+* Go Compiler:: Likewise
Writing Tests
Options for the linker. If it is not set
in the environment when @command{configure} runs, the default value is empty.
@command{configure} uses this variable when linking programs to test for
-C, C++, Objective C, Objective C++, and Fortran features.
+C, C++, Objective C, Objective C++, Fortran, and Go features.
This variable's contents should contain options like @option{-s} and
@option{-L} that affect only the behavior of the linker. Please see the
but some Autoconf macros may prepend extra libraries to this variable if
those libraries are found and provide necessary functions, see
@ref{Libraries}. @command{configure} uses this variable when linking
-programs to test for C, C++, Objective C, Objective C++, and Fortran
+programs to test for C, C++, Objective C, Objective C++, Fortran, and Go
features.
@end defvar
acts like @code{CXXFLAGS}, but for Objective C++ instead of C++.
@end defvar
+@defvar GOFLAGS
+@evindex GOFLAGS
+@ovindex GOFLAGS
+Debugging and optimization options for the Go compiler. It acts like
+@code{CFLAGS}, but for Go instead of C.
+@end defvar
+
@defvar builddir
@ovindex builddir
Rigorously equal to @samp{.}. Added for symmetry only.
@section Library Files
@cindex Library, checking
-The following macros check for the presence of certain C, C++, or Fortran
-library archive files.
+The following macros check for the presence of certain C, C++, Fortran,
+or Go library archive files.
@anchor{AC_CHECK_LIB}
@defmac AC_CHECK_LIB (@var{library}, @var{function}, @
* Objective C++ Compiler:: Likewise
* Erlang Compiler and Interpreter:: Likewise
* Fortran Compiler:: Likewise
+* Go Compiler:: Likewise
@end menu
@node Specific Compiler Characteristics
@end defmac
+@node Go Compiler
+@subsection Go Compiler Characteristics
+@cindex Go
+
+Autoconf provides basic support for the Go programming language when
+using the @code{gccgo} compiler (there is currently no support for the
+@code{6g} and @code{8g} compilers).
+
+@defmac AC_PROG_GO (@ovar{compiler-search-list})
+Find the Go compiler to use. Check whether the environment variable
+@code{GOC} is set; if so, then set output variable @code{GOC} to its
+value.
+
+Otherwise, if the macro is invoked without an argument, then search for
+a Go compiler named @code{gccgo}. If it is not found, then as a last
+resort set @code{GOC} to @code{gccgo}.
+
+This macro may be invoked with an optional first argument which, if
+specified, must be a blank-separated list of Go compilers to search for.
+
+If output variable @code{GOFLAGS} was not already set, set it to
+@option{-g -O2}. If your package does not like this default,
+@code{GOFLAGS} may be set before @code{AC_PROG_GO}.
+@end defmac
+
+
@node System Services
@section System Services
extension @file{.mm} for test programs. Use compilation flags:
@code{CPPFLAGS} with @code{OBJCXXCPP}, and both @code{CPPFLAGS} and
@code{OBJCXXFLAGS} with @code{OBJCXX}.
+
+@item Go
+Do compilation tests using @code{GOC} and use extension @file{.go} for
+test programs. Use compilation flags @code{GOFLAGS}.
@end table
@end defmac
const char hw[] = "Hello, World\n";
@end example
-When the test language is Fortran or Erlang, the @code{AC_DEFINE} definitions
-are not automatically translated into constants in the source code by this
-macro.
+When the test language is Fortran, Erlang, or Go, the @code{AC_DEFINE}
+definitions are not automatically translated into constants in the
+source code by this macro.
@defmac AC_LANG_PROGRAM (@var{prologue}, @var{body})
@acindex{LANG_PROGRAM}
Nevertheless, if you need to run the preprocessor, then use
@code{AC_PREPROC_IFELSE}.
-The macros described in this section cannot be used for tests in Erlang or
-Fortran, since those languages require no preprocessor.
+The macros described in this section cannot be used for tests in Erlang,
+Fortran, or Go, since those languages require no preprocessor.
@anchor{AC_PREPROC_IFELSE}
@defmac AC_PREPROC_IFELSE (@var{input}, @ovar{action-if-true}, @
general.m4 status.m4 oldnames.m4 specific.m4 \
autoheader.m4 autoupdate.m4 autotest.m4 autoscan.m4 \
lang.m4 c.m4 erlang.m4 fortran.m4 \
- functions.m4 headers.m4 types.m4 libs.m4 programs.m4
+ functions.m4 go.m4 headers.m4 types.m4 libs.m4 programs.m4
nodist_autoconflib_DATA = autoconf.m4f
CLEANFILES = $(nodist_autoconflib_DATA)
m4_include([autoconf/c.m4])
m4_include([autoconf/erlang.m4])
m4_include([autoconf/fortran.m4])
+m4_include([autoconf/go.m4])
m4_include([autoconf/functions.m4])
m4_include([autoconf/headers.m4])
m4_include([autoconf/types.m4])
--- /dev/null
+# This file is part of Autoconf. -*- Autoconf -*-
+# Go language support.
+# Copyright (C) 2011 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
$(src_libdir)/autoconf/c.m4 \
$(src_libdir)/autoconf/fortran.m4 \
$(src_libdir)/autoconf/erlang.m4 \
+ $(src_libdir)/autoconf/go.m4 \
$(src_libdir)/autoconf/functions.m4 \
$(src_libdir)/autoconf/headers.m4 \
$(src_libdir)/autoconf/types.m4 \
$(srcdir)/aclang.at \
$(srcdir)/acc.at \
$(srcdir)/acfortran.at \
+ $(srcdir)/acgo.at \
$(srcdir)/acgeneral.at \
$(srcdir)/acstatus.at \
$(srcdir)/acautoheader.at \
suite.at \
m4sugar.at m4sh.at autotest.at \
base.at tools.at torture.at \
- compile.at c.at erlang.at fortran.at \
+ compile.at c.at erlang.at fortran.at go.at \
semantics.at \
autoscan.at \
foreign.at
$(autoconfdir)/c.m4 \
$(autoconfdir)/erlang.m4 \
$(autoconfdir)/fortran.m4 \
+ $(autoconfdir)/go.m4 \
$(autoconfdir)/headers.m4 \
$(autoconfdir)/libs.m4 \
$(autoconfdir)/types.m4 \
--- /dev/null
+# -*- Autotest -*-
+
+AT_BANNER([Go low level compiling and utility macros.])
+
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+
+# Since the macros which compile are required by most tests, check
+# them first. But remember that looking for a compiler is even more
+# primitive, so check those first.
+
+
+## ------------- ##
+## Go Compiler. ##
+## ------------- ##
+
+AT_CHECK_MACRO([Go],
+[[AC_LANG(Go)
+AC_LANG_COMPILER
+]])
[ERLANG_LIB_DIR_.*|ERLANG_LIB_VER_.*|ERLANG_INSTALL_LIB_DIR],
[ERLANG_INSTALL_LIB_DIR_.*|ERLANG_ERTS_VER|OBJC|OBJCPP|OBJCFLAGS],
[OBJCXX|OBJCXXCPP|OBJCXXFLAGS],
+ [GOC|GOFLAGS],
[OPENMP_CFLAGS],
[LIBS|LIB@&t@OBJS|LTLIBOBJS|LDFLAGS],
[INSTALL(_(DATA|PROGRAM|SCRIPT))?],
m4_include([fortran.at])
m4_include([acfortran.at])
m4_include([erlang.at])
+m4_include([go.at])
+m4_include([acgo.at])
# Checking that AC_CHECK_FOO macros work properly.
m4_include([semantics.at])