ping

Is there anything else I should do to get this support added to
Autoconf?

Thanks!

> ping
>
>> [Changes from V5:
>>  - Typo fixed in doc/autoconf.texi.
>>  Changes from V4:
>>  - A68C and A68CFLAGS renamed back to A68 and A68FLAGS
>>    as per discussion in:
>>    https://lists.gnu.org/archive/html/autoconf-patches/2025-05/msg00013.html
>>  Changes from V3:
>>  - Rename A68FLAGS to A68CFLAGS as mandated by the GCS.
>>    Automake support has been updated accordingly upstream.
>>  Changes from V2:
>>  - Call the language 'Algol 68', not 'A68'.
>>  - Rename A68 shell variable to A68C.
>>  - Rename macro AC_PROG_A68 to AC_PROG_A68C.
>>  - Clarify where to get ga68 in the manual.
>>  - Adapt to latest language changes.
>>  Changes from V1:
>>  - Variables GA68* renamed to A68*.]
>>
>> This patch adds support for the Algol 68 programming language to
>> Autoconf.  It is based on the Algol 68 GCC front-end, which is
>> currently under development [1].  The front-end is temporarily hosted
>> in the sourceware forge until integration in GCC is completed [3].
>>
>> Note that the GCC Algol 68 front-end is not yet integrated in the main
>> compiler, so it is developed and distributed off-tree.  See
>> https://gcc.gnu.org/wiki/Algol68FrontEnd.  Additional information
>> about the Algol 68 programming language, and how it is being evolved
>> by the GNU Algol 68 Working Group can be found at
>> https://algol68-lang.org.
>>
>> Automake support for Algol 68 has been already pushed as of 2 February
>> 2025.
>>
>> [1] https://gcc.gnu.org/wiki/Algol68FrontEnd
>> [2] 
>> https://inbox.sourceware.org/gcc-patches/[email protected]/T/#t
>> [3] https://forge.sourceforge.org/gcc/gcc-a68
>>
>>     Add support for the Algol68 programming language.
>>
>>     * lib/autoconf/a68.m4: New file.
>>     * lib/autoconf/autoconf.m4: Include autoconf/a68.m4.
>>     * lib/autoconf/Makefile.am (dist_autoconflib_DATA): Add a68.m4.
>>     * lib/freeze.mk (autoconf_m4f_dependencies): Add
>>     $(src_libdir)/autoconf/a68.m4.
>>     * doc/autoconf.texi: Rebuild menus.
>>     (Preset Output Variables): Mention Algol 68.  Document A68FLAGS.
>>     (Algol 68 Compiler): New subsection.
>>     (Language Choice): Mention Algol 68.
>>     (Generating Sources): Likewise.
>>     (Running the Preprocessor): Likewise.
>>     * tests/a68.at: New file.
>>     * tests/suite.at: Include a68.at.
>>     * tests/local.at (_AT_CHECK_ENV): Add A68 and A68FLAGS.
>>     * NEWS: Update.
>> ---
>>  NEWS                     |   3 +
>>  doc/autoconf.texi        |  52 ++++++++++++-
>>  lib/autoconf/a68.m4      | 153 +++++++++++++++++++++++++++++++++++++++
>>  lib/autoconf/autoconf.m4 |   1 +
>>  lib/freeze.mk            |   1 +
>>  lib/local.mk             |   1 +
>>  tests/a68.at             |  33 +++++++++
>>  tests/local.at           |   2 +-
>>  tests/local.mk           |   3 +
>>  tests/suite.at           |   2 +
>>  10 files changed, 247 insertions(+), 4 deletions(-)
>>  create mode 100644 lib/autoconf/a68.m4
>>  create mode 100644 tests/a68.at
>>
>> diff --git a/NEWS b/NEWS
>> index 1e4e513e..b0d26beb 100644
>> --- a/NEWS
>> +++ b/NEWS
>> @@ -28,6 +28,9 @@ GNU Autoconf NEWS - User visible changes.
>>    The autom4te, autoscan and ifnames programs now recognize the two
>>    preprocessor directives, which were introduced in C23 and C++23.
>>  
>> +*** Support for the Algol 68 programming language has been added.
>> +  The new macro AC_LANG_A68 sets variables A68 and A68FLAGS.
>> +
>>  *** AC_PROG_AWK now also checks for busybox awk.
>>  
>>  *** AC_USE_SYSTEM_EXTENSIONS now defines _COSMO_SOURCE for Cosmopolitan 
>> Libc.
>> diff --git a/doc/autoconf.texi b/doc/autoconf.texi
>> index 12734446..37c4eae1 100644
>> --- a/doc/autoconf.texi
>> +++ b/doc/autoconf.texi
>> @@ -416,6 +416,7 @@ Compilers and Preprocessors
>>  * Erlang Compiler and Interpreter::  Likewise
>>  * Fortran Compiler::            Likewise
>>  * Go Compiler::                 Likewise
>> +* Algol 68 Compiler::           Likewise
>>  
>>  Writing Tests
>>  
>> @@ -2742,7 +2743,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++, Fortran, and Go features.
>> +features in C, C++, Objective C, Objective C++, Fortran, Go, and Algol 68.
>>  
>>  This variable's contents should contain options like @option{-s} and
>>  @option{-L} that affect only the behavior of the linker.  Please see the
>> @@ -2785,6 +2786,13 @@ Debugging and optimization options for the Go 
>> compiler.  It acts like
>>  @code{CFLAGS}, but for Go instead of C.
>>  @end defvar
>>  
>> +@defvar A68FLAGS
>> +@evindex A68FLAGS
>> +@ovindex A68FLAGS
>> +Debugging and optimization options for the Algol 68 compiler.  It acts
>> +like @code{CFLAGS}, but for Algol 68 instead of C.
>> +@end defvar
>> +
>>  @defvar builddir
>>  @ovindex builddir
>>  Rigorously equal to @samp{.}.  Added for symmetry only.
>> @@ -7094,6 +7102,7 @@ compiling.
>>  * Erlang Compiler and Interpreter::  Likewise
>>  * Fortran Compiler::            Likewise
>>  * Go Compiler::                 Likewise
>> +* Algol 68 Compiler::           Likewise
>>  @end menu
>>  
>>  @node Specific Compiler Characteristics
>> @@ -8635,6 +8644,38 @@ If output variable @code{GOFLAGS} was not already 
>> set, set it to
>>  @end defmac
>>  
>>  
>> +@node Algol 68 Compiler
>> +@subsection Algol 68 Compiler
>> +@cindex Algol 68
>> +
>> +Autoconf provides basic support for the Algol 68 programming language
>> +when using the @code{ga68} compiler.
>> +
>> +Note that the GCC Algol 68 front-end is not yet integrated in the main
>> +compiler, so it is developed and distributed off-tree.  See
>> +@url{https://gcc.gnu.org/wiki/Algol68FrontEnd}.  Additional information
>> +about the Algol 68 programming language, and how it is being evolved by
>> +the GNU Algol 68 Working Group can be found at
>> +@url{https://algol68-lang.org}.
>> +
>> +@defmac AC_PROG_A68 (@ovar{compiler-search-list})
>> +Find the Algol 68 compiler to use.  Check whether the environment
>> +variable @code{A68} is set; if so, then set output variable @code{A68}
>> +to its value.
>> +
>> +Otherwise, if the macro is invoked without an argument, then search for
>> +an Algol 68 compiler named @code{ga68}.  If it is not found, then as a
>> +last resort set @code{A68} to @code{ga68}.
>> +
>> +This macro may be invoked with an optional first argument which, if
>> +specified, must be a blank-separated list of Algol 68 compilers to
>> +search for.
>> +
>> +If output variable @code{A68FLAGS} was not already set, set it to
>> +@option{-g -O2}.  If your package does not like this default,
>> +@code{A68FLAGS} may be set before @code{AC_PROG_A68}.
>> +@end defmac
>> +
>>  @node System Services
>>  @section System Services
>>  
>> @@ -9185,6 +9226,10 @@ extension @file{.mm} for test programs.  Use 
>> compilation flags:
>>  @item Go
>>  Do compilation tests using @code{GOC} and use extension @file{.go} for
>>  test programs.  Use compilation flags @code{GOFLAGS}.
>> +
>> +@item Algol 68
>> +Do compilation tests using @code{A68} and use extension @file{.a68} for
>> +test programs.  Use compilation flags @code{A68FLAGS}.
>>  @end table
>>  @end defmac
>>  
>> @@ -9432,7 +9477,8 @@ on a system with @command{gcc} installed, results in:
>>  const char hw[] = "Hello, World\n";
>>  @end example
>>  
>> -When the test language is Fortran, Erlang, or Go, the @code{AC_DEFINE}
>> +When the test language is Fortran, Erlang, Go, or Algol 68,
>> +the @code{AC_DEFINE}
>>  definitions are not automatically translated into constants in the
>>  source code by this macro.
>>  
>> @@ -9557,7 +9603,7 @@ 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,
>> -Fortran, or Go, since those languages require no preprocessor.
>> +Fortran, Go, or Algol 68 since those languages require no preprocessor.
>>  
>>  @anchor{AC_PREPROC_IFELSE}
>>  @defmac AC_PREPROC_IFELSE (@var{input}, @ovar{action-if-true}, @
>> diff --git a/lib/autoconf/a68.m4 b/lib/autoconf/a68.m4
>> new file mode 100644
>> index 00000000..12d366c9
>> --- /dev/null
>> +++ b/lib/autoconf/a68.m4
>> @@ -0,0 +1,153 @@
>> +# This file is part of Autoconf.                       -*- Autoconf -*-
>> +# Algol 68 language support.
>> +# Copyright 2025 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 <https://www.gnu.org/licenses/> and
>> +# 
>> <https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=blob_plain;f=COPYING.EXCEPTION>.
>> +
>> +# Algol 68 support contributed by Jose E. Marchesi.
>> +
>> +# ------------------- #
>> +# Language selection.
>> +# ------------------- #
>> +
>> +# AC_LANG(Algol 68)
>> +# -----------------
>> +AC_LANG_DEFINE([Algol 68], [a68], [A68], [A68], [],
>> +[ac_ext=a68
>> +ac_compile='$A68 -c $A68FLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
>> +ac_link='$A68 -o conftest$ac_exeext $A68FLAGS $LDFLAGS conftest.$ac_ext 
>> $LIBS >&AS_MESSAGE_LOG_FD'
>> +ac_compiler_gnu=yes
>> +])
>> +
>> +# AC_LANG_A68
>> +# -----------
>> +AU_DEFUN([AC_LANG_A68], [AC_LANG(Algol 68)])
>> +
>> +# ------------------- #
>> +# Producing programs.
>> +# ------------------- #
>> +
>> +# AC_LANG_PROGRAM(Algol 68)([PROLOGUE], [BODY])
>> +# ---------------------------------------------
>> +m4_define([AC_LANG_PROGRAM(Algol 68)],
>> +[$1
>> +begin $2 m4_ifnblank([$2],[;])
>> +      skip
>> +end])
>> +
>> +# _AC_LANG_IO_PROGRAM(Algol 68)
>> +# -----------------------------
>> +# Produce source that performs I/O.
>> +m4_define([_AC_LANG_IO_PROGRAM(Algol 68)],
>> +[AC_LANG_PROGRAM([],
>> +[if int fd = fcreate ("conftest.out", 8r0777); fd = -1
>> + then perror ("error creating conftest.out")
>> + elif fclose (fd) = -1 then perror ("error closing conftest.out")
>> + fi
>> +])])
>> +
>> +# AC_LANG_CALL(Algol 68)(PROLOGUE, FUNCTION)
>> +# ------------------------------------------
>> +# Avoid conflicting decl of main.
>> +m4_define([AC_LANG_CALL(Algol 68)],
>> +[AC_LANG_PROGRAM([],[])])
>> +
>> +# AC_LANG_FUNC_LINK_TRY(Algol 68)(FUNCTION)
>> +# -----------------------------------------
>> +# Try to link a program which calls FUNCTION.
>> +m4_define([AC_LANG_FUNC_LINK_TRY(Algol 68)],
>> +[AC_LANG_PROGRAM([],[])])
>> +
>> +# AC_LANG_BOOL_COMPILE_TRY(Algol 68)(PROLOGUE, EXPRESSION)
>> +# --------------------------------------------------------
>> +# Return a program which is valid if EXPRESSION is nonzero.
>> +m4_define([AC_LANG_BOOL_COMPILE_TRY(Algol 68)],
>> +[AC_LANG_PROGRAM([], [@<:@$2@:>@INT test multiple;
>> +                  0])])
>> +
>> +# AC_LANG_INT_SAVE(Algol 68)(PROLOGUE, EXPRESSION)
>> +# ------------------------------------------------
>> +m4_define([AC_LANG_INT_SAVE(Algol 68)],
>> +[AC_LANG_PROGRAM([
>> +proc itoa = (int i) string:
>> +      begin if i = 0
>> +        then "0"
>> +        else int n := ABS i;
>> +             string res;
>> +             while n /= 0
>> +             do int rem = n %* 10;
>> +                res := (REPR (rem > 9 | (rem - 10) + ABS "a"
>> +                              | rem + ABS "0")
>> +                        + res);
>> +                n %:= 10
>> +             od;
>> +             (i < 0 | "-" + res | res)
>> +        fi
>> +      end;
>> +
>> +int ret := 0;
>> +int fd = fopen ("conftest.val", file o wronly)/
>> +(fd = -1 | ret := 1; stop);
>> +(fputs (fd, itoa ($2)) = 0 | ret := 1; stop)
>> +])])
>> +
>> +# ---------------------- #
>> +# Looking for compilers. #
>> +# ---------------------- #
>> +
>> +# AC_LANG_COMPILER(Algol 68)
>> +# --------------------------
>> +AC_DEFUN([AC_LANG_COMPILER(Algol 68)],
>> +[AC_REQUIRE([AC_PROG_A68])])
>> +
>> +# AC_PROG_A68
>> +# ------------
>> +AN_MAKEVAR([A68], [AC_PROG_A68])
>> +AN_PROGRAM([ga68], [AC_PROG_A68])
>> +AC_DEFUN([AC_PROG_A68],
>> +[AC_LANG_PUSH(Algol 68)dnl
>> +AC_ARG_VAR([A68], [Algol 68 compiler command])dnl
>> +AC_ARG_VAR([A68FLAGS], [Algol 68 compiler flags])dnl
>> +_AC_ARG_VAR_LDFLAGS()dnl
>> +m4_ifval([$1],
>> +      [AC_CHECK_TOOLS(A68, [$1])],
>> +[AC_CHECK_TOOL(A68, ga68)
>> +if test -z "$A68"; then
>> +  if test -n "$ac_tool_prefix"; then
>> +    AC_CHECK_PROG(A68, [${ac_tool_prefix}ga68], [$ac_tool_prefix}ga68])
>> +  fi
>> +fi
>> +if test -z "$A68"; then
>> +  AC_CHECK_PROG(A68, ga68, ga68, , , 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
>> +A68FLAGS="-g -O2"
>> +AC_LANG_POP(Algol 68)dnl
>> +])# AC_PROG_A68
>> diff --git a/lib/autoconf/autoconf.m4 b/lib/autoconf/autoconf.m4
>> index c2b6aea3..d79888e9 100644
>> --- a/lib/autoconf/autoconf.m4
>> +++ b/lib/autoconf/autoconf.m4
>> @@ -44,6 +44,7 @@ m4_include([autoconf/c.m4])
>>  m4_include([autoconf/erlang.m4])
>>  m4_include([autoconf/fortran.m4])
>>  m4_include([autoconf/go.m4])
>> +m4_include([autoconf/a68.m4])
>>  m4_include([autoconf/functions.m4])
>>  m4_include([autoconf/headers.m4])
>>  m4_include([autoconf/types.m4])
>> diff --git a/lib/freeze.mk b/lib/freeze.mk
>> index 8239080e..9535306f 100644
>> --- a/lib/freeze.mk
>> +++ b/lib/freeze.mk
>> @@ -89,6 +89,7 @@ autoconf_m4f_dependencies =                        \
>>      $(src_libdir)/autoconf/fortran.m4       \
>>      $(src_libdir)/autoconf/erlang.m4        \
>>      $(src_libdir)/autoconf/go.m4            \
>> +    $(src_libdir)/autoconf/a68.m4           \
>>      $(src_libdir)/autoconf/functions.m4     \
>>      $(src_libdir)/autoconf/headers.m4       \
>>      $(src_libdir)/autoconf/types.m4         \
>> diff --git a/lib/local.mk b/lib/local.mk
>> index 98a7f36a..62440dd0 100644
>> --- a/lib/local.mk
>> +++ b/lib/local.mk
>> @@ -95,6 +95,7 @@ dist_autoconflib_DATA = \
>>    lib/autoconf/fortran.m4 \
>>    lib/autoconf/functions.m4 \
>>    lib/autoconf/go.m4 \
>> +  lib/autoconf/a68.m4 \
>>    lib/autoconf/headers.m4 \
>>    lib/autoconf/types.m4 \
>>    lib/autoconf/libs.m4 \
>> diff --git a/tests/a68.at b/tests/a68.at
>> new file mode 100644
>> index 00000000..e9ac00fc
>> --- /dev/null
>> +++ b/tests/a68.at
>> @@ -0,0 +1,33 @@
>> +#                                                   -*- Autotest -*-
>> +
>> +AT_BANNER([Algol 68 low level compiling and utility macros.])
>> +
>> +# Copyright (C) 2025 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, see <https://www.gnu.org/licenses/>.
>> +
>> +
>> +# 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.
>> +
>> +
>> +## ------------------- ##
>> +## Algol 68 Compiler.  ##
>> +## ------------------- ##
>> +
>> +AT_CHECK_MACRO([Algol 68],
>> +[[AC_LANG(Algol 68)
>> +AC_LANG_COMPILER
>> +]])
>> diff --git a/tests/local.at b/tests/local.at
>> index 6bf31ab3..05cfdb39 100644
>> --- a/tests/local.at
>> +++ b/tests/local.at
>> @@ -581,7 +581,7 @@ if test -f state-env.before && test -f state-env.after; 
>> then
>>      ($EGREP -v '^(m4_join([|],
>>        [a[cs]_.*],
>>        [(exec_)?prefix|DEFS|CONFIG_STATUS],
>> -      
>> [CC|CFLAGS|CPPFLAGS|CPP|GCC|CXX|CXXFLAGS|CXXCPP|GXX|F77|FFLAGS|FLIBS|G77],
>> +      
>> [A68|A68FLAGS|CC|CFLAGS|CPPFLAGS|CPP|GCC|CXX|CXXFLAGS|CXXCPP|GXX|F77|FFLAGS|FLIBS|G77],
>>        [ERL|ERLC|ERLCFLAGS|ERLANG_PATH_ERL|ERLANG_ROOT_DIR|ERLANG_LIB_DIR],
>>        [ERLANG_LIB_DIR_.*|ERLANG_LIB_VER_.*|ERLANG_INSTALL_LIB_DIR],
>>        [ERLANG_INSTALL_LIB_DIR_.*|ERLANG_ERTS_VER|OBJC|OBJCPP|OBJCFLAGS],
>> diff --git a/tests/local.mk b/tests/local.mk
>> index 6a2c06a8..77808f7d 100644
>> --- a/tests/local.mk
>> +++ b/tests/local.mk
>> @@ -92,6 +92,7 @@ TESTSUITE_GENERATED_AT = \
>>    tests/acerlang.at \
>>    tests/acfortran.at \
>>    tests/acgo.at \
>> +  tests/aca68.at \
>>    tests/acgeneral.at \
>>    tests/acstatus.at \
>>    tests/acautoheader.at \
>> @@ -116,6 +117,7 @@ TESTSUITE_HAND_AT = \
>>    tests/erlang.at \
>>    tests/fortran.at \
>>    tests/go.at \
>> +  tests/a68.at \
>>    tests/semantics.at \
>>    tests/autoscan.at \
>>    tests/foreign.at
>> @@ -198,6 +200,7 @@ AUTOCONF_FILES = $(autoconfdir)/general.m4 \
>>               $(autoconfdir)/erlang.m4 \
>>               $(autoconfdir)/fortran.m4 \
>>               $(autoconfdir)/go.m4 \
>> +             $(autoconfdir)/a68.m4 \
>>               $(autoconfdir)/headers.m4 \
>>               $(autoconfdir)/libs.m4 \
>>               $(autoconfdir)/types.m4 \
>> diff --git a/tests/suite.at b/tests/suite.at
>> index 17fca508..1600bf32 100644
>> --- a/tests/suite.at
>> +++ b/tests/suite.at
>> @@ -55,6 +55,8 @@ m4_include([erlang.at])
>>  m4_include([acerlang.at])
>>  m4_include([go.at])
>>  m4_include([acgo.at])
>> +m4_include([a68.at])
>> +m4_include([aca68.at])
>>  
>>  # Checking that AC_CHECK_FOO macros work properly.
>>  m4_include([semantics.at])

Reply via email to