]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
Add support for the Go programming language.
authorIan Lance Taylor <iant@google.com>
Tue, 12 Oct 2010 19:26:39 +0000 (12:26 -0700)
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Mon, 21 Feb 2011 20:24:59 +0000 (21:24 +0100)
* 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>
ChangeLog
NEWS
doc/autoconf.texi
lib/autoconf/Makefile.am
lib/autoconf/autoconf.m4
lib/autoconf/go.m4 [new file with mode: 0644]
lib/freeze.mk
tests/Makefile.am
tests/go.at [new file with mode: 0644]
tests/local.at
tests/suite.at

index 52d4cac9bd972ebfacb3d399fbbce0e27dfac760..00c13f022f5546f0c1c8fabaf6fabe17f5199bb7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+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)
 
diff --git a/NEWS b/NEWS
index c485f229ba19e8ebba7be75dc722206cff79a80c..3edebd801f4c19dd969a1ea2100611b8e1fdd542 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ GNU Autoconf NEWS - User visible changes.
 
 * 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.
 
index a08208f88a7187176155323ab8dae8bcfa7431c8..b011316429078a3843234432c5d62c16ba46cdb6 100644 (file)
@@ -413,6 +413,7 @@ Compilers and Preprocessors
 * Objective C++ Compiler::      Likewise
 * Erlang Compiler and Interpreter::  Likewise
 * Fortran Compiler::            Likewise
+* Go Compiler::                 Likewise
 
 Writing Tests
 
@@ -2605,7 +2606,7 @@ programs to test for Fortran 77 features.
 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
@@ -2623,7 +2624,7 @@ Don't use this variable to pass library names
 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
 
@@ -2641,6 +2642,13 @@ Debugging and optimization options for the Objective C++ compiler.  It
 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.
@@ -4435,8 +4443,8 @@ a variable name mapped to underscores.
 @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}, @
@@ -6989,6 +6997,7 @@ compiling.
 * Objective C++ Compiler::      Likewise
 * Erlang Compiler and Interpreter::  Likewise
 * Fortran Compiler::            Likewise
+* Go Compiler::                 Likewise
 @end menu
 
 @node Specific Compiler Characteristics
@@ -8238,6 +8247,32 @@ message).
 @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
 
@@ -8628,6 +8663,10 @@ Do compilation tests using @code{OBJCXX} and @code{OBJCXXCPP} and use
 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
 
@@ -8871,9 +8910,9 @@ on a system with @command{gcc} installed, results in:
 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}
@@ -8995,8 +9034,8 @@ temptation of following the easiest path.
 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}, @
index ed2d4e9c26335ac0b90111c703bfd51e1372fb9f..6390590e43938ccd6293650d80117b79fed46678 100644 (file)
@@ -22,7 +22,7 @@ dist_autoconflib_DATA = \
        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)
index 32a6248a84b2e74eeea35c08685e9e2d5f95944c..897639c9ffb6e96db9a3bc54ab740b67aaec18e5 100644 (file)
@@ -42,6 +42,7 @@ m4_include([autoconf/lang.m4])
 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])
diff --git a/lib/autoconf/go.m4 b/lib/autoconf/go.m4
new file mode 100644 (file)
index 0000000..0539d99
--- /dev/null
@@ -0,0 +1,177 @@
+# 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
index 31a946e8cc8eec8c5f1a928a8e344ac442f87fc7..bf7de4dbded1ad6773b9bdcc48f96ade8de45f61 100644 (file)
@@ -88,6 +88,7 @@ autoconf_m4f_dependencies =                   \
        $(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         \
index d068a10d725a27f35d5fef4a464ee5148005620d..265a74992d7b17b20d08c1fae52059a9b5b2b43b 100644 (file)
@@ -84,6 +84,7 @@ TESTSUITE_GENERATED_AT = \
        $(srcdir)/aclang.at \
        $(srcdir)/acc.at \
        $(srcdir)/acfortran.at \
+       $(srcdir)/acgo.at \
        $(srcdir)/acgeneral.at \
        $(srcdir)/acstatus.at \
        $(srcdir)/acautoheader.at \
@@ -99,7 +100,7 @@ TESTSUITE_HAND_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
@@ -169,6 +170,7 @@ AUTOCONF_FILES = $(autoconfdir)/general.m4 \
                 $(autoconfdir)/c.m4 \
                 $(autoconfdir)/erlang.m4 \
                 $(autoconfdir)/fortran.m4 \
+                $(autoconfdir)/go.m4 \
                 $(autoconfdir)/headers.m4 \
                 $(autoconfdir)/libs.m4 \
                 $(autoconfdir)/types.m4 \
diff --git a/tests/go.at b/tests/go.at
new file mode 100644 (file)
index 0000000..6bad32d
--- /dev/null
@@ -0,0 +1,35 @@
+#                                                      -*- 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
+]])
index 8e20ec3d12fa57979c0e1132b4da007a0b5d5849..bfd124f306bed5952518a1c6093af86444b184a7 100644 (file)
@@ -307,6 +307,7 @@ if test -f state-env.before && test -f state-env.after; then
       [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))?],
index 24685a0c4bf922dd5a845398f0eb435aed060bed..9a23d60cd1ff4ba477df9342bdeb9b4b8700f090 100644 (file)
@@ -52,6 +52,8 @@ m4_include([acc.at])
 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])