[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: adding URL to --help output
From: |
Eric Blake |
Subject: |
Re: adding URL to --help output |
Date: |
Tue, 27 Jan 2009 23:36:12 +0000 (UTC) |
User-agent: |
Loom/3.14 (http://gmane.org/) |
Eric Blake <ebb9 <at> byu.net> writes:
> What do you think of these patches? A recent discussion among GNU
> developers suggested that we should provide a URL for package home pages
> as part of --help output.
In the meantime, standards.texi was updated to make this recommendation
official, and a bug report to coreutils suggested changing the punctuation to
make help2man do a better job with the additional text.
The patch series now stands at the following: The first three fix --help
output of: autoconf's executables, built configure/config.status files, and
built testsuites; and the fourth adds an undocumented macro
m4_copyright_condense, useful for making autoconf's './configure --version'
output match GNU standards of only displaying the most recent year. What do
you think? Should I go ahead and document that macro, or the fact that I
tweaked A[CT]_COPYRIGHT to take an optional filter parameter? If we do
document it, should we reorder AC_COPYRIGHT's parameters to make the filter
second and diversion name third (as I want to leave the diversion name argument
undocumented)?
$ git pull git://repo.or.cz/autoconf/ericb.git help
Unless I hear comments in 24 hours, I'll go ahead and push this series (plus
maybe an upstream sync to pick up the updated standards.texi justifying the
series in the first place):
Eric Blake (4):
Use URLs in --help output, part 1: autoconf executables.
Use URLs in --help output, part 2: configure.
Use URLs in --help output, part 3: testsuite.
Fix years in copyright notices.
>From c875bf7a97be2ce7dc67c697267cdcab162e32a2 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Mon, 26 Jan 2009 11:39:43 -0700
Subject: [PATCH] Use URLs in --help output, part 1: autoconf executables.
* bin/autoconf.as (usage): Make output consistent with recent
change in gnulib version-etc module.
* bin/autoheader.in ($help): Likewise.
* bin/autom4te.in ($help): Likewise.
* bin/autoreconf.in ($help): Likewise.
* bin/autoscan.in ($help): Likewise.
* bin/autoupdate.in ($help): Likewise.
* bin/ifnames.in ($help): Likewise.
Signed-off-by: Eric Blake <address@hidden>
---
ChangeLog | 12 ++++++++++++
bin/autoconf.as | 6 ++++--
bin/autoheader.in | 5 ++++-
bin/autom4te.in | 2 ++
bin/autoreconf.in | 4 +++-
bin/autoscan.in | 7 +++++--
bin/autoupdate.in | 4 +++-
bin/ifnames.in | 4 +++-
8 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 4fdcce6..e676fbd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2009-01-27 Eric Blake <address@hidden>
+
+ Use URLs in --help output, part 1: autoconf executables.
+ * bin/autoconf.as (usage): Make output consistent with recent
+ change in gnulib version-etc module.
+ * bin/autoheader.in ($help): Likewise.
+ * bin/autom4te.in ($help): Likewise.
+ * bin/autoreconf.in ($help): Likewise.
+ * bin/autoscan.in ($help): Likewise.
+ * bin/autoupdate.in ($help): Likewise.
+ * bin/ifnames.in ($help): Likewise.
+
2009-01-27 Peter Breitenlohner <address@hidden> (tiny change)
Quote traced macros passed from autom4te to M4.
diff --git a/bin/autoconf.as b/bin/autoconf.as
index dcd8ae0..590f198 100644
--- a/bin/autoconf.as
+++ b/bin/autoconf.as
@@ -4,7 +4,7 @@ m4_divert_push([HEADER-COPYRIGHT])dnl
# autoconf -- create `configure' using m4 macros
# Copyright (C) 1992, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2003,
-# 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# 2004, 2005, 2006, 2007, 2008, 2009 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
@@ -63,7 +63,9 @@ Tracing:
In tracing mode, no configuration script is created. FORMAT defaults
to \`\$f:\$l:\$n:\$%'; see \`autom4te --help' for information about FORMAT.
-Report bugs to <address@hidden>."]
+Report bugs to <address@hidden>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."]
version=["\
autoconf (@PACKAGE_NAME@) @VERSION@
diff --git a/bin/autoheader.in b/bin/autoheader.in
index ab5bfce..66a2f2c 100644
--- a/bin/autoheader.in
+++ b/bin/autoheader.in
@@ -8,7 +8,8 @@ eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -
S "$0" "$@";; esac'
# autoheader -- create `config.h.in' from `configure.ac'
# Copyright (C) 1992, 1993, 1994, 1996, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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
@@ -81,6 +82,8 @@ Library directories:
-I, --include=DIR append directory DIR to search path
Report bugs to <address@hidden>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
";
diff --git a/bin/autom4te.in b/bin/autom4te.in
index 4281e03..946452c 100644
--- a/bin/autom4te.in
+++ b/bin/autom4te.in
@@ -198,6 +198,8 @@ SEP can be empty for the default (comma for \@ and *, colon
for %),
a single character for that character, or {STRING} to use a string.
Report bugs to <address@hidden>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
";
# $VERSION
diff --git a/bin/autoreconf.in b/bin/autoreconf.in
index 86e8826..9bedbf6 100644
--- a/bin/autoreconf.in
+++ b/bin/autoreconf.in
@@ -7,7 +7,7 @@ eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -
S "$0" "$@";; esac'
# autoreconf - install the GNU Build System in a directory tree
# Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-# 2007, 2008 Free Software Foundation, Inc.
+# 2007, 2008, 2009 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
@@ -92,6 +92,8 @@ The environment variables AUTOCONF, AUTOHEADER, AUTOMAKE,
ACLOCAL,
AUTOPOINT, LIBTOOLIZE, M4, and MAKE are honored.
Report bugs to <address@hidden>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
";
# $VERSION
diff --git a/bin/autoscan.in b/bin/autoscan.in
index 18d9ac1..df39c9b 100644
--- a/bin/autoscan.in
+++ b/bin/autoscan.in
@@ -4,7 +4,7 @@
# autoscan - Create configure.scan (a preliminary configure.ac) for a package.
# Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-# 2007, 2008 Free Software Foundation, Inc.
+# 2007, 2008, 2009 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
@@ -118,7 +118,10 @@ Library directories:
-B, --prepend-include=DIR prepend directory DIR to search path
-I, --include=DIR append directory DIR to search path
-Report bugs to <address@hidden>.\n";
+Report bugs to <address@hidden>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+";
# $version
# --------
diff --git a/bin/autoupdate.in b/bin/autoupdate.in
index c923559..50987b4 100644
--- a/bin/autoupdate.in
+++ b/bin/autoupdate.in
@@ -4,7 +4,7 @@
# autoupdate - modernize an Autoconf file.
# Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-# 2007, 2008 Free Software Foundation, Inc.
+# 2007, 2008, 2009 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
@@ -79,6 +79,8 @@ Library directories:
-I, --include=DIR append directory DIR to search path
Report bugs to <address@hidden>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
";
# $VERSION
diff --git a/bin/ifnames.in b/bin/ifnames.in
index 5ee70d7..f99e4b9 100644
--- a/bin/ifnames.in
+++ b/bin/ifnames.in
@@ -8,7 +8,7 @@ eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -
S "$0" "$@";; esac'
# ifnames - print the identifiers used in C preprocessor conditionals
# Copyright (C) 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2005, 2006,
-# 2007, 2008 Free Software Foundation, Inc.
+# 2007, 2008, 2009 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
@@ -61,6 +61,8 @@ space-separated list of the files in which that identifier
occurs.
-V, --version print version number, then exit
Report bugs to <address@hidden>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
";
--
1.6.0.4
>From b9cce80527a228b4f38d412589995d07e2d7faee Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Mon, 26 Jan 2009 16:43:20 -0700
Subject: [PATCH] Use URLs in --help output, part 2: configure.
* lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Bump copyright
date.
(_AC_INIT_PACKAGE): Support optional URL parameter, mapped to
AC_PACKAGE_URL.
(_AC_INIT_DEFAULTS, _AC_INIT_PREPARE): Substitute it.
(_AC_INIT_HELP): Use it in './configure --help' output.
* lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Likewise, for
'./config.status --help'. Bump copyright date.
* doc/autoconf.texi (Initializing configure) <AC_INIT>: Document
new parameter.
* NEWS: Likewise.
Signed-off-by: Eric Blake <address@hidden>
---
ChangeLog | 13 +++++++++++++
NEWS | 4 ++++
doc/autoconf.texi | 18 ++++++++++++++----
lib/autoconf/general.m4 | 39 +++++++++++++++++++++++++++++++--------
lib/autoconf/status.m4 | 12 +++++++++---
5 files changed, 71 insertions(+), 15 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e676fbd..6aa2a63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
2009-01-27 Eric Blake <address@hidden>
+ Use URLs in --help output, part 2: configure.
+ * lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Bump copyright
+ date.
+ (_AC_INIT_PACKAGE): Support optional URL parameter, mapped to
+ AC_PACKAGE_URL.
+ (_AC_INIT_DEFAULTS, _AC_INIT_PREPARE): Substitute it.
+ (_AC_INIT_HELP): Use it in './configure --help' output.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Likewise, for
+ './config.status --help'. Bump copyright date.
+ * doc/autoconf.texi (Initializing configure) <AC_INIT>: Document
+ new parameter.
+ * NEWS: Likewise.
+
Use URLs in --help output, part 1: autoconf executables.
* bin/autoconf.as (usage): Make output consistent with recent
change in gnulib version-etc module.
diff --git a/NEWS b/NEWS
index d5c7ed2..ba006cd 100644
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,10 @@ GNU Autoconf NEWS - User visible changes.
** AC_HEADER_ASSERT is fixed so that './configure --enable-assert' no
longer mistakenly disables assertions.
+** AC_INIT now takes an optional fifth parameter that can be used to
+ set AC_PACKAGE_URL, a URL for the package's home page; the URL is
+ used in `configure --help' and is also available via AC_DEFINE.
+
** Autotest testsuites accept an option --jobs[=N] for parallel testing.
** Autotest testsuites do not attempt to write startup error messages
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index fc7d42b..bc58070 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -1756,7 +1756,7 @@ Initializing configure
@anchor{AC_INIT}
@defmac AC_INIT (@var{package}, @var{version}, @ovar{bug-report}, @
- @ovar{tarname})
+ @ovar{tarname}, @ovar{url})
@acindex{INIT}
Process any command-line arguments and perform various initializations
and verifications.
@@ -1769,7 +1769,8 @@ Initializing configure
package name (e.g., @samp{GNU Autoconf}), while the former is meant for
distribution tar ball names (e.g., @samp{autoconf}). It defaults to
@var{package} with @samp{GNU } stripped, lower-cased, and all characters
-other than alphanumerics and underscores are changed to @samp{-}.
+other than alphanumerics and underscores are changed to @samp{-}. If
+provided, @var{url} should be the home page for the package.
It is preferable that the arguments of @code{AC_INIT} be static, i.e.,
there should not be any shell computation, but they can be computed by
@@ -1790,7 +1791,7 @@ Initializing configure
@acindex{PACKAGE_TARNAME}
@ovindex PACKAGE_TARNAME
@cvindex PACKAGE_TARNAME
-Exactly @var{tarname}.
+Exactly @var{tarname}, possibly generated from @var{package}.
@item @code{AC_PACKAGE_VERSION}, @code{PACKAGE_VERSION}
@acindex{PACKAGE_VERSION}
@@ -1808,7 +1809,16 @@ Initializing configure
@acindex{PACKAGE_BUGREPORT}
@ovindex PACKAGE_BUGREPORT
@cvindex PACKAGE_BUGREPORT
-Exactly @var{bug-report}.
+Exactly @var{bug-report}, if one was provided.
+
address@hidden @code{AC_PACKAGE_URL}, @code{PACKAGE_URL}
address@hidden
address@hidden PACKAGE_URL
address@hidden PACKAGE_URL
+Exactly @var{url}, if one was provided. If @var{url} was empty, but
address@hidden begins with @samp{GNU }, then this defaults to
address@hidden://www.gnu.org/software/@var{tarname}/}, otherwise, no URL is
+assumed.
@end table
@end defmac
diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
index bcf8720..1a0e635 100644
--- a/lib/autoconf/general.m4
+++ b/lib/autoconf/general.m4
@@ -1,7 +1,8 @@
# This file is part of Autoconf. -*- Autoconf -*-
# Parameterized macros.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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
@@ -245,8 +246,8 @@ AU_ALIAS([AC_HELP_STRING], [AS_HELP_STRING])
-# _AC_INIT_PACKAGE(PACKAGE-NAME, VERSION, BUG-REPORT, [TARNAME])
-# --------------------------------------------------------------
+# _AC_INIT_PACKAGE(PACKAGE-NAME, VERSION, BUG-REPORT, [TARNAME], [URL])
+# ---------------------------------------------------------------------
m4_define([_AC_INIT_PACKAGE],
[AS_LITERAL_IF([$1], [], [m4_warn([syntax], [AC_INIT: not a literal: $1])])
AS_LITERAL_IF([$2], [], [m4_warn([syntax], [AC_INIT: not a literal: $2])])
@@ -266,6 +267,11 @@ m4_ifndef([AC_PACKAGE_STRING],
[m4_define([AC_PACKAGE_STRING], [$1 $2])])
m4_ifndef([AC_PACKAGE_BUGREPORT],
[m4_define([AC_PACKAGE_BUGREPORT], [$3])])
+m4_ifndef([AC_PACKAGE_URL],
+ [m4_define([AC_PACKAGE_URL],
+ m4_if([$5], [], [m4_if(m4_index([$1], [GNU ]), [0],
+ [[http://www.gnu.org/software/]m4_defn([AC_PACKAGE_TARNAME])[/]])],
+ [[$5]]))])
])
@@ -364,7 +370,8 @@ m4_ifset([AC_PACKAGE_BUGREPORT],
m4_define([_AC_INIT_COPYRIGHT],
[AC_COPYRIGHT(
[Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.],
[VERSION_FSF])dnl
@@ -431,6 +438,8 @@ AC_SUBST([PACKAGE_STRING],
[m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])dnl
AC_SUBST([PACKAGE_BUGREPORT],
[m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])dnl
+AC_SUBST([PACKAGE_URL],
+ [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])])dnl
m4_divert_pop([DEFAULTS])dnl
m4_wrap_lifo([m4_divert_text([DEFAULTS],
@@ -1117,8 +1126,13 @@ m4_ifset([AC_PACKAGE_STRING],
cat <<\_ACEOF
m4_divert_pop([HELP_ENABLE])dnl
m4_divert_push([HELP_END])dnl
-m4_ifset([AC_PACKAGE_BUGREPORT], [
-Report bugs to <AC_PACKAGE_BUGREPORT>.])
+
+Report bugs to m4_ifset([AC_PACKAGE_BUGREPORT], [<AC_PACKAGE_BUGREPORT>],
+ [the package provider]).dnl
+m4_ifset([AC_PACKAGE_URL], [
+AC_PACKAGE_NAME home page: <AC_PACKAGE_URL>.])dnl
+m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], [
+General help using GNU software: <http://www.gnu.org/gethelp/>.])
_ACEOF
ac_status=$?
fi
@@ -1343,6 +1357,8 @@ AC_DEFINE_UNQUOTED([PACKAGE_STRING], ["$PACKAGE_STRING"],
AC_DEFINE_UNQUOTED([PACKAGE_BUGREPORT], ["$PACKAGE_BUGREPORT"],
[Define to the address where bug reports for this package
should be sent.])dnl
+AC_DEFINE_UNQUOTED([PACKAGE_URL], ["$PACKAGE_URL"],
+ [Define to the home page for this package.])
# Let the site file select an alternate cache file if it wants to.
AC_SITE_LOAD
@@ -1362,10 +1378,17 @@ AC_CONFIG_SRCDIR([$1])], [[AC_INIT]])])[]dnl
])
-# AC_INIT([PACKAGE, VERSION, [BUG-REPORT])
-# ----------------------------------------
+# AC_INIT([PACKAGE, VERSION, [BUG-REPORT], [TARNAME], [URL])
+# ----------------------------------------------------------
# Include the user macro files, prepare the diversions, and output the
# preamble of the `configure' script.
+#
+# If BUG-REPORT is omitted, do without (unless the user previously
+# defined the m4 macro AC_PACKAGE_BUGREPORT). If TARNAME is omitted,
+# use PACKAGE to seed it. If URL is omitted, use
+# `http://www.gnu.org/software/TARNAME/' if PACKAGE begins with `GNU',
+# otherwise, do without.
+#
# Note that the order is important: first initialize, then set the
# AC_CONFIG_SRCDIR.
m4_define([AC_INIT],
diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
index bfd7a79..28d86d8 100644
--- a/lib/autoconf/status.m4
+++ b/lib/autoconf/status.m4
@@ -1,7 +1,8 @@
# This file is part of Autoconf. -*- Autoconf -*-
# Parameterizing and creating config.status.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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
@@ -1428,7 +1429,12 @@ m4_ifdef([_AC_SEEN_CONFIG(COMMANDS)],
$config_commands
])dnl
-Report bugs to <address@hidden>."
+Report bugs to m4_ifset([AC_PACKAGE_BUGREPORT], [<AC_PACKAGE_BUGREPORT>],
+ [the package provider]).dnl
+m4_ifset([AC_PACKAGE_URL], [
+AC_PACKAGE_NAME home page: <AC_PACKAGE_URL>.])dnl
+m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], [
+General help using GNU software: <http://www.gnu.org/gethelp/>.])"
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
@@ -1438,7 +1444,7 @@ m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
configured by $[0], generated by m4_PACKAGE_STRING,
with options \\"`AS_ECHO(["$ac_configure_args"]) | sed 's/^ //; s/
[[\\""\`\$]]/\\\\&/g'`\\"
-Copyright (C) 2008 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
--
1.6.0.4
>From 7450ab6c0ff694ac098fbbde85bf5337585c80e1 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Tue, 27 Jan 2009 16:13:41 -0700
Subject: [PATCH] Use URLs in --help output, part 3: testsuite.
* doc/autoconf.texi (Writing Testsuites): Mention autotest
namespace.
(Writing Testsuites) <AT_INIT>: Mention mandatory macros.
(Making testsuite Scripts): Document AT_PACKAGE_URL.
* tests/Makefile.am (package.m4): Follow our own advice.
* lib/autotest/general.m4 (AT_INIT): Give the user a hint about
package.m4. Enhance --help output.
Signed-off-by: Eric Blake <address@hidden>
---
ChangeLog | 9 +++++++++
doc/autoconf.texi | 40 +++++++++++++++++++++++++++++++---------
lib/autotest/general.m4 | 25 +++++++++++++++----------
tests/Makefile.am | 7 ++++---
4 files changed, 59 insertions(+), 22 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 6aa2a63..ce31292 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2009-01-27 Eric Blake <address@hidden>
+ Use URLs in --help output, part 3: testsuite.
+ * doc/autoconf.texi (Writing Testsuites): Mention autotest
+ namespace.
+ (Writing Testsuites) <AT_INIT>: Mention mandatory macros.
+ (Making testsuite Scripts): Document AT_PACKAGE_URL.
+ * tests/Makefile.am (package.m4): Follow our own advice.
+ * lib/autotest/general.m4 (AT_INIT): Give the user a hint about
+ package.m4. Enhance --help output.
+
Use URLs in --help output, part 2: configure.
* lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Bump copyright
date.
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index bc58070..ee50c95 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -21807,11 +21807,11 @@ Using Autotest
@cindex Autotest
@display
address@hidden: This section describes an experimental feature which will
-be part of Autoconf in a forthcoming release. Although we believe
-Autotest is stabilizing, this documentation describes an interface which
-might change in the future: do not depend upon Autotest without
-subscribing to the Autoconf mailing lists.}
address@hidden: This section describes a feature which is still
+stabilizing. Although we believe that Autotest is useful as-is, this
+documentation describes an interface which might change in the future:
+do not depend upon Autotest without subscribing to the Autoconf mailing
+lists.}
@end display
It is paradoxical that portable projects depend on nonportable tools
@@ -22035,13 +22035,31 @@ Writing Testsuites
and then completes with a call to @code{AT_CLEANUP}. Multiple test
groups can be categorized by a call to @code{AT_BANNER}.
+All of the public Autotest macros have all-uppercase names in the
+namespace @samp{^AT_} to prevent them from accidentally conflicting with
+other text; Autoconf also reserves the namespace @samp{^_AT_} for
+internal macros. All shell variables used in the testsuite for internal
+purposes have mostly-lowercase names starting with @samp{at_}. Autotest
+also uses here-doc delimiters in the namespace @samp{^_AT[A-Z]}, and
+makes use of the file system namespace @samp{^at-}.
+
+Since Autoconf is built on top of M4sugar (@pxref{Programming in
+M4sugar}) and M4sh (@pxref{Programming in M4sh}), you must also be aware
+of those namespaces (@samp{^_?\(m4\|AS\)_}). In general, you
address@hidden not use} the namespace of a package that does not own the
+macro or shell code you are writing.
+
@defmac AT_INIT (@ovar{name})
@atindex{INIT}
@c FIXME: Not clear, plus duplication of the information.
Initialize Autotest. Giving a @var{name} to the test suite is
-encouraged if your package includes several test suites. In any case,
-the test suite always displays the package name and version. It also
-inherits the package bug report address.
+encouraged if your package includes several test suites. Before this
+macro is called, @code{AT_PACKAGE_STRING} and
address@hidden must be defined, which are used to display
+information about the testsuite to the user. Typically, these macros
+are provided by a file @file{package.m4} built by @command{make}
+(@pxref{Making testsuite Scripts}), in order to inherit the package
+name, version, and bug reporting address from @file{configure.ac}.
@end defmac
@defmac AT_COPYRIGHT (@var{copyright-notice})
@@ -22329,12 +22347,14 @@ Making testsuite Scripts
@atindex{PACKAGE_NAME}
@atindex{PACKAGE_TARNAME}
@atindex{PACKAGE_VERSION}
address@hidden
Make sure to create the file @file{package.m4}, which defines the
identity of the package. It must define @code{AT_PACKAGE_STRING}, the
full signature of the package, and @code{AT_PACKAGE_BUGREPORT}, the
address to which bug reports should be sent. For sake of completeness,
we suggest that you also define @code{AT_PACKAGE_NAME},
address@hidden, and @code{AT_PACKAGE_VERSION}.
address@hidden, @code{AT_PACKAGE_VERSION}, and
address@hidden
@xref{Initializing configure}, for a description of these variables.
Be sure to distribute @file{package.m4} and to put it into the source
hierarchy: the test suite ought to be shipped! See below for an example
@@ -22381,6 +22401,8 @@ Making testsuite Scripts
echo ' [@@PACKAGE_STRING@@])' && \
echo 'm4_define([AT_PACKAGE_BUGREPORT],' && \
echo ' [@@PACKAGE_BUGREPORT@@])'; \
+ echo 'm4_define([AT_PACKAGE_URL],' && \
+ echo ' [@@PACKAGE_URL@@])'; \
@} >'$(srcdir)/package.m4'
EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) atlocal.in
diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
index 5f2db79..a53c394 100644
--- a/lib/autotest/general.m4
+++ b/lib/autotest/general.m4
@@ -1,8 +1,8 @@
# This file is part of Autoconf. -*- Autoconf -*-
# M4 macros used in building test suites.
-
-# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
+m4_define([_AT_COPYRIGHT_YEARS],
+[Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+2009 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
@@ -206,7 +206,9 @@ m4_define([_AT_DEFINE_SETUP],
m4_define([AT_INIT],
[m4_pushdef([AT_INIT], [m4_fatal([$0: invoked multiple times])])]
[m4_pattern_forbid([^_?AT_])]
-[m4_pattern_allow([^_AT_T_EOF$])]
+[m4_pattern_allow([^_ATEOF$])]
+[m4_ifndef([AT_PACKAGE_BUGREPORT], [m4_fatal(
+ [$1: AT_PACKAGE_BUGREPORT is missing, consider writing package.m4])])]
[m4_define([AT_TESTSUITE_NAME],
m4_defn([AT_PACKAGE_STRING])[ test suite]m4_ifval([$1],
[m4_expand([: $1])]))]
@@ -222,9 +224,7 @@ dnl This trick removes that banner, since it adds nothing
to autotest.
[m4_cleardivert([BODY])]dnl
[AS_ME_PREPARE[]]dnl
[m4_divert_push([DEFAULTS])]dnl
-[AT_COPYRIGHT(
-[Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-Free Software Foundation, Inc.
+[AT_COPYRIGHT(m4_defn([_AT_COPYRIGHT_YEARS])[
This test suite is free software; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.])
AS_PREPARE
@@ -704,7 +704,12 @@ m4_divert_pop([HELP_TUNING])dnl
m4_divert_push([HELP_END])dnl
cat <<_ATEOF || at_write_fail=1
-Report bugs to <AT_PACKAGE_BUGREPORT>.
+Report bugs to <AT_PACKAGE_BUGREPORT>.dnl
+m4_ifdef([AT_PACKAGE_NAME],
+[m4_ifset([AT_PACKAGE_URL], [
+m4_defn([AT_PACKAGE_NAME]) home page: <AT_PACKAGE_URL>.])dnl
+m4_if(m4_index(m4_defn([AT_PACKAGE_NAME]), [GNU ]), [0], [
+General help using GNU software: <http://www.gnu.org/gethelp/>.])])
_ATEOF
exit $at_write_fail
fi
@@ -764,10 +769,10 @@ m4_divert_pop([HELP_END])dnl
m4_divert_push([VERSION])dnl
if $at_version_p; then
AS_ECHO(["$as_me (AT_PACKAGE_STRING)"]) &&
- cat <<\_ACEOF || at_write_fail=1
+ cat <<\_ATEOF || at_write_fail=1
m4_divert_pop([VERSION])dnl
m4_divert_push([VERSION_END])dnl
-_ACEOF
+_ATEOF
exit $at_write_fail
fi
m4_divert_pop([VERSION_END])dnl
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0556b29..522236d 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,7 +1,7 @@
## Make Autoconf tests.
-# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+# 2009 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
@@ -44,7 +44,8 @@ package.m4: Makefile
echo 'm4_define([AT_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])' && \
echo 'm4_define([AT_PACKAGE_VERSION], [$(PACKAGE_VERSION)])' && \
echo 'm4_define([AT_PACKAGE_STRING], [$(PACKAGE_STRING)])' && \
- echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
+ echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])' && \
+ echo 'm4_define([AT_PACKAGE_URL], [$(PACKAGE_URL)])'; \
} > address@hidden
mv address@hidden $@
--
1.6.0.4
>From d65cd4cb2259404ad5b4d24474150832c20e795b Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Tue, 27 Jan 2009 16:13:55 -0700
Subject: [PATCH] Fix years in copyright notices.
* lib/m4sugar/m4sugar.m4 (m4_copyright_condense): New macro,
undocumented for now.
* lib/m4sugar/Makefile.am (version.m4): Add m4_PACKAGE_YEAR,
m4_PACKAGE_URL.
* lib/autoconf/general.m4 (_AC_COPYRIGHT_YEARS): New macro.
(AC_COPYRIGHT): Add undocumented third parameter.
(_AC_INIT_COPYRIGHT): Avoid need to bump copyright years.
* lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Likewise.
* lib/autotest/general.m4 (_AT_COPYRIGHT_YEARS): New macro.
(AT_INIT): Avoid need to bump copyright years.
* lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Likewise.
(AT_COPYRIGHT): Add undocumented third parameter.
* tests/local.at (AT_COPYRIGHT): Don't add an extra copyright
parameter; the generic copyright given by autotest is sufficient
since we are the package that owns autotest.
Signed-off-by: Eric Blake <address@hidden>
---
ChangeLog | 17 +++++++++++++++++
lib/autoconf/autotest.m4 | 6 +++---
lib/autoconf/general.m4 | 34 +++++++++++++++++-----------------
lib/autoconf/status.m4 | 2 +-
lib/autotest/general.m4 | 25 ++++++++++++++-----------
lib/m4sugar/Makefile.am | 9 ++++++---
lib/m4sugar/m4sugar.m4 | 7 +++++++
tests/local.at | 9 ++-------
8 files changed, 67 insertions(+), 42 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ce31292..df15a7b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
2009-01-27 Eric Blake <address@hidden>
+ Fix years in copyright notices.
+ * lib/m4sugar/m4sugar.m4 (m4_copyright_condense): New macro,
+ undocumented for now.
+ * lib/m4sugar/Makefile.am (version.m4): Add m4_PACKAGE_YEAR,
+ m4_PACKAGE_URL.
+ * lib/autoconf/general.m4 (_AC_COPYRIGHT_YEARS): New macro.
+ (AC_COPYRIGHT): Add undocumented third parameter.
+ (_AC_INIT_COPYRIGHT): Avoid need to bump copyright years.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Likewise.
+ * lib/autotest/general.m4 (_AT_COPYRIGHT_YEARS): New macro.
+ (AT_INIT): Avoid need to bump copyright years.
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Likewise.
+ (AT_COPYRIGHT): Add undocumented third parameter.
+ * tests/local.at (AT_COPYRIGHT): Don't add an extra copyright
+ parameter; the generic copyright given by autotest is sufficient
+ since we are the package that owns autotest.
+
Use URLs in --help output, part 3: testsuite.
* doc/autoconf.texi (Writing Testsuites): Mention autotest
namespace.
diff --git a/lib/autoconf/autotest.m4 b/lib/autoconf/autotest.m4
index d4b2f4d..72b4b7f 100644
--- a/lib/autoconf/autotest.m4
+++ b/lib/autoconf/autotest.m4
@@ -1,7 +1,7 @@
# This file is part of Autoconf. -*- Autoconf -*-
# Interface with Autotest.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2009 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
@@ -66,7 +66,7 @@ AC_DEFUN([AC_CONFIG_TESTDIR],
[cat >$1/atconfig <<ATEOF
@%:@ Configurable variable values for building test suites.
@%:@ Generated by $[0].
address@hidden:@ Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation,
Inc.
address@hidden:@ Copyright (C) m4_PACKAGE_YEAR Free Software Foundation, Inc.
# The test suite will define top_srcdir=$at_top_srcdir/../.. etc.
at_testdir='$1'
diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
index 1a0e635..17be94c 100644
--- a/lib/autoconf/general.m4
+++ b/lib/autoconf/general.m4
@@ -1,8 +1,9 @@
# This file is part of Autoconf. -*- Autoconf -*-
# Parameterized macros.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
-# Foundation, Inc.
+m4_define([_AC_COPYRIGHT_YEARS],
+[Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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
@@ -275,16 +276,17 @@ m4_ifndef([AC_PACKAGE_URL],
])
-# AC_COPYRIGHT(TEXT, [VERSION-DIVERSION = VERSION_USER])
+# AC_COPYRIGHT(TEXT, [VERSION-DIVERSION = VERSION_USER],
+# [FILTER = m4_newline])
# ------------------------------------------------------
# Emit TEXT, a copyright notice, in the top of `configure' and in
-# --version output. Macros in TEXT are evaluated once.
+# --version output. Macros in TEXT are evaluated once. Process
+# the --version output through FILTER (m4_newline, m4_do, and
+# m4_copyright_condense are common filters).
m4_define([AC_COPYRIGHT],
-[AS_COPYRIGHT([$1])[]dnl
-m4_divert_text(m4_default([$2], [VERSION_USER]),
-[
-$1])dnl
-])# AC_COPYRIGHT
+[AS_COPYRIGHT([$1])[]]dnl
+[m4_divert_text(m4_default_quoted([$2], [VERSION_USER]),
+[m4_default([$3], [m4_newline])([$1])])])# AC_COPYRIGHT
# AC_REVISION(REVISION-INFO)
@@ -368,14 +370,12 @@ m4_ifset([AC_PACKAGE_BUGREPORT],
# We dump to VERSION_FSF to make sure we are inserted before the
# user copyrights, and after the setup of the --version handling.
m4_define([_AC_INIT_COPYRIGHT],
-[AC_COPYRIGHT(
-[Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
-Foundation, Inc.
-This configure script is free software; the Free Software Foundation
+[AC_COPYRIGHT(m4_defn([_AC_COPYRIGHT_YEARS]), [VERSION_FSF], [
+m4_copyright_condense])dnl
+AC_COPYRIGHT(
+[This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.],
- [VERSION_FSF])dnl
-])
+ [VERSION_FSF], [m4_echo])])
# File Descriptors
diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
index 28d86d8..8eb9fbb 100644
--- a/lib/autoconf/status.m4
+++ b/lib/autoconf/status.m4
@@ -1444,7 +1444,7 @@ m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
configured by $[0], generated by m4_PACKAGE_STRING,
with options \\"`AS_ECHO(["$ac_configure_args"]) | sed 's/^ //; s/
[[\\""\`\$]]/\\\\&/g'`\\"
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) m4_PACKAGE_YEAR Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
index a53c394..86a5c6a 100644
--- a/lib/autotest/general.m4
+++ b/lib/autotest/general.m4
@@ -224,10 +224,12 @@ dnl This trick removes that banner, since it adds nothing
to autotest.
[m4_cleardivert([BODY])]dnl
[AS_ME_PREPARE[]]dnl
[m4_divert_push([DEFAULTS])]dnl
-[AT_COPYRIGHT(m4_defn([_AT_COPYRIGHT_YEARS])[
-This test suite is free software; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.])
-AS_PREPARE
+[AT_COPYRIGHT(m4_defn([_AT_COPYRIGHT_YEARS]), [
+m4_copyright_condense])]
+[AT_COPYRIGHT(
+[This test suite is free software; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.], [m4_echo])]
+[AS_PREPARE
SHELL=${CONFIG_SHELL-/bin/sh}
@@ -1717,15 +1719,16 @@ m4_define([AT_TESTED],
[m4_append_uniq_w([AT_tested], [$1])])
-# AT_COPYRIGHT(TEXT)
-# ------------------
+# AT_COPYRIGHT(TEXT, [FILTER = m4_newline])
+# -----------------------------------------
# Emit TEXT, a copyright notice, in the top of the test suite and in
-# --version output. Macros in TEXT are evaluated once.
+# --version output. Macros in TEXT are evaluated once. Process
+# the --version output through FILTER (m4_newline, m4_do, and
+# m4_copyright_condense are common filters).
m4_define([AT_COPYRIGHT],
-[AS_COPYRIGHT([$1])[]dnl
-m4_divert_text([VERSION_NOTICES],
-[
-$1])])# AT_COPYRIGHT
+[AS_COPYRIGHT([$1])[]]dnl
+[m4_divert_text([VERSION_NOTICES],
+[m4_default([$2], [m4_newline])([$1])])])# AT_COPYRIGHT
# AT_SETUP(DESCRIPTION)
diff --git a/lib/m4sugar/Makefile.am b/lib/m4sugar/Makefile.am
index 98654a0..34fe4ff 100644
--- a/lib/m4sugar/Makefile.am
+++ b/lib/m4sugar/Makefile.am
@@ -1,6 +1,7 @@
# Make Autoconf library for M4sugar.
-# Copyright (C) 2001, 2002, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2006, 2007, 2008, 2009 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
@@ -29,14 +30,16 @@ version.m4: Makefile
:;{ \
echo '# This file is part of -*- Autoconf -*-.' && \
echo '# Version of Autoconf.' && \
- echo '# Copyright (C) 1999, 2000, 2001, 2002, 2006, 2007' && \
+ echo '# Copyright (C) 1999, 2000, 2001, 2002, 2006, 2007, 2009' && \
echo '# Free Software Foundation, Inc.' && \
echo &&\
echo 'm4_define([m4_PACKAGE_NAME], [$(PACKAGE_NAME)])' && \
echo 'm4_define([m4_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])' && \
echo 'm4_define([m4_PACKAGE_VERSION], [$(PACKAGE_VERSION)])' && \
echo 'm4_define([m4_PACKAGE_STRING], [$(PACKAGE_STRING)])' && \
- echo 'm4_define([m4_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
+ echo 'm4_define([m4_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])' && \
+ echo 'm4_define([m4_PACKAGE_URL], [$(PACKAGE_URL)])' && \
+ echo 'm4_define([m4_PACKAGE_YEAR], [$(RELEASE_YEAR)])'; \
} > address@hidden
mv address@hidden $@
diff --git a/lib/m4sugar/m4sugar.m4 b/lib/m4sugar/m4sugar.m4
index 2ea42d8..183c8a6 100644
--- a/lib/m4sugar/m4sugar.m4
+++ b/lib/m4sugar/m4sugar.m4
@@ -2587,6 +2587,13 @@ m4_if(m4_index([$1], address@hidden), [-1],
[m4_len([$1])],
address@hidden(\(<:\|:>\|S|\|%:\|\{:\|:\}\)\(@\)\|&address@hidden)],
[\3]))]))_m4_defn([m4_qlen-$1])])
+# m4_copyright_condense(TEXT)
+# ---------------------------
+# Condense the copyright notice in TEXT to only display the final
+# year, wrapping the results to fit in 80 columns.
+m4_define([m4_copyright_condense],
+[m4_text_wrap(m4_bpatsubst(m4_flatten([[$1]]),
+[(C)[- ,0-9]*\([1-9][0-9][0-9][0-9]\)], [(C) \1]))])
## ----------------------- ##
## 13. Number processing. ##
diff --git a/tests/local.at b/tests/local.at
index ba81e7c..dffeebf 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -1,7 +1,7 @@
# M4 macros used in building Autoconf test suites. -*- Autotest -*-
-# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+# 2009 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
@@ -521,8 +521,3 @@ AT_CLEANUP[]dnl
## ----------------------- ##
AT_INIT
-AT_COPYRIGHT(
-[Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.])
--
1.6.0.4