aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2020-06-22 20:00:38 +0000
committerIngo Schwarze <schwarze@openbsd.org>2020-06-22 20:00:38 +0000
commit1542428e49efefc79fdacc5797aee55722164987 (patch)
treec5f0a628164575199aecebcebf108a089efa1aad
parente6e331420a7d737bb26d35ecef4180cc569577a4 (diff)
downloadmandoc-1542428e49efefc79fdacc5797aee55722164987.tar.gz
mandoc-1542428e49efefc79fdacc5797aee55722164987.tar.zst
mandoc-1542428e49efefc79fdacc5797aee55722164987.zip
Provide a real feature test for __attribute__().
Looking at version numbers like __GNUC__ is always a bad idea. Believe it or not, this even makes ./configure shorter by one line.
-rw-r--r--Makefile5
-rwxr-xr-xconfigure9
-rw-r--r--configure.local.example3
-rw-r--r--test-attribute.c48
4 files changed, 57 insertions, 8 deletions
diff --git a/Makefile b/Makefile
index 80882eea..181014fb 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.534 2020/06/15 16:58:24 schwarze Exp $
+# $Id: Makefile,v 1.535 2020/06/22 20:00:38 schwarze Exp $
#
# Copyright (c) 2011, 2013-2020 Ingo Schwarze <schwarze@openbsd.org>
# Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -19,7 +19,8 @@ VERSION = 1.14.5
# === LIST OF FILES ====================================================
-TESTSRCS = test-be32toh.c \
+TESTSRCS = test-attribute.c \
+ test-be32toh.c \
test-cmsg.c \
test-dirent-namlen.c \
test-EFTYPE.c \
diff --git a/configure b/configure
index dbd7762a..1b1a5755 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $Id: configure,v 1.75 2020/06/15 01:37:15 schwarze Exp $
+# $Id: configure,v 1.76 2020/06/22 20:00:38 schwarze Exp $
#
# Copyright (c) 2014-2020 Ingo Schwarze <schwarze@openbsd.org>
#
@@ -55,6 +55,7 @@ BUILD_CGI=0
BUILD_CATMAN=0
INSTALL_LIBMANDOC=0
+HAVE_ATTRIBUTE=
HAVE_CMSG=
HAVE_DIRENT_NAMLEN=
HAVE_EFTYPE=
@@ -294,6 +295,7 @@ fi
# --- tests for config.h ----------------------------------------------
# --- library functions ---
+runtest attribute ATTRIBUTE || true
runtest cmsg CMSG "" "-D_XPG4_2" || true
runtest dirent-namlen DIRENT_NAMLEN || true
runtest be32toh ENDIAN || true
@@ -422,10 +424,6 @@ cat << __HEREDOC__
#error "Do not use C++. See the INSTALL file."
#endif
-#if !defined(__GNUC__) || (__GNUC__ < 4)
-#define __attribute__(x)
-#endif
-
__HEREDOC__
[ ${NEED_GNU_SOURCE} -eq 0 ] || echo "#define _GNU_SOURCE"
@@ -447,6 +445,7 @@ echo "#define OSENUM ${OSENUM}"
[ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\""
[ -n "${UTF8_LOCALE}" ] && echo "#define UTF8_LOCALE \"${UTF8_LOCALE}\""
[ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\""
+[ ${HAVE_ATTRIBUTE} -eq 0 ] && echo "#define __attribute__(x)"
[ ${HAVE_EFTYPE} -eq 0 ] && echo "#define EFTYPE EINVAL"
[ ${HAVE_O_DIRECTORY} -eq 0 ] && echo "#define O_DIRECTORY 0"
[ ${HAVE_PATH_MAX} -eq 0 ] && echo "#define PATH_MAX 4096"
diff --git a/configure.local.example b/configure.local.example
index bfb2e3fd..63f16865 100644
--- a/configure.local.example
+++ b/configure.local.example
@@ -1,4 +1,4 @@
-# $Id: configure.local.example,v 1.37 2020/02/05 15:12:11 schwarze Exp $
+# $Id: configure.local.example,v 1.38 2020/06/22 20:00:38 schwarze Exp $
#
# Copyright (c) 2014-2019 Ingo Schwarze <schwarze@openbsd.org>
#
@@ -288,6 +288,7 @@ CFLAGS="-g"
# and will be regarded as failed) or 1 (test will not be run and will
# be regarded as successful).
+HAVE_ATTRIBUTE=0
HAVE_DIRENT_NAMLEN=0
HAVE_ENDIAN=0
HAVE_EFTYPE=0
diff --git a/test-attribute.c b/test-attribute.c
new file mode 100644
index 00000000..adbcc926
--- /dev/null
+++ b/test-attribute.c
@@ -0,0 +1,48 @@
+/* $Id: test-attribute.c,v 1.1 2020/06/22 20:00:38 schwarze Exp $ */
+/*
+ * Copyright (c) 2020 Ingo Schwarze <schwarze@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void var_arg(const char *, ...)
+ __attribute__((__format__ (__printf__, 1, 2)));
+void no_ret(int)
+ __attribute__((__noreturn__));
+
+void
+var_arg(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+}
+
+void
+no_ret(int i)
+{
+ exit(i);
+}
+
+int
+main(void)
+{
+ var_arg("Test output: %d\n", 42);
+ no_ret(0);
+}