-#ifndef _
-# define _(String) String
-#endif
-
-/* The calling program should define program_name and set it to the
- name of the executing program. */
-extern char *program_name;
-
-#if HAVE_STRERROR
-# ifndef HAVE_DECL_STRERROR
-"this configure-time declaration test was not run"
-# endif
-# if !HAVE_DECL_STRERROR && !defined strerror
-char *strerror (int);
-# endif
-#else
-static char *
-private_strerror (int errnum)
+\f
+
+/** Report an error message.
+ *
+ * \param loc the location, defaulting to the current file,
+ * or the program name.
+ * \param prefix put before the message (e.g., "warning").
+ * \param message the error message, a printf format string. Iff it
+ * ends with ": ", then no trailing newline is printed,
+ * and the caller should print the remaining
+ * newline-terminated message to stderr.
+ * \param args the arguments of the format string.
+ */
+static
+void
+error_message (location *loc,
+ const char *prefix,
+ const char *message, va_list args)