summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2016-07-20 14:03:06 +0000
committerIngo Schwarze <schwarze@openbsd.org>2016-07-20 14:03:06 +0000
commitadabbf213c455215091757e8a41226b45d6f2128 (patch)
tree6301b81dcaa0c7c6ba87740f719eca25f29989e5
parent1c8453f78a03f9001101f31308bbb164b9990469 (diff)
downloadmandoc-adabbf213c455215091757e8a41226b45d6f2128.tar.gz
Autodetect if -lrt is needed for nanosleep(3).
Helpful for Solaris 9 and 10. Reminded by Thomas Klausner.
-rw-r--r--Makefile1
-rwxr-xr-xconfigure20
-rw-r--r--configure.local.example14
-rw-r--r--test-nanosleep.c17
4 files changed, 47 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 44fed4fb..ebc27bce 100644
--- a/Makefile
+++ b/Makefile
@@ -26,6 +26,7 @@ TESTSRCS = test-dirent-namlen.c \
test-getsubopt.c \
test-isblank.c \
test-mkdtemp.c \
+ test-nanosleep.c \
test-ohash.c \
test-pledge.c \
test-progname.c \
diff --git a/configure b/configure
index 919b2b9e..f852fcbd 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,7 @@
#!/bin/sh
#
+# $Id$
+#
# Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
#
# Permission to use, copy, modify, and distribute this software for any
@@ -39,6 +41,7 @@ CFLAGS="-g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings"
CFLAGS="${CFLAGS} -Wno-unused-parameter"
LDADD=
LDFLAGS=
+LD_NANOSLEEP=
LD_OHASH=
STATIC="-static"
@@ -52,6 +55,7 @@ HAVE_GETLINE=
HAVE_GETSUBOPT=
HAVE_ISBLANK=
HAVE_MKDTEMP=
+HAVE_NANOSLEEP=
HAVE_OHASH=
HAVE_PLEDGE=
HAVE_PROGNAME=
@@ -197,6 +201,20 @@ runtest strtonum STRTONUM || true
runtest vasprintf VASPRINTF || true
runtest wchar WCHAR || true
+# --- nanosleep ---
+if [ -n "${LD_NANOSLEEP}" ]; then
+ runtest nanosleep NANOSLEEP "${LD_NANOSLEEP}" || true
+elif singletest nanosleep NANOSLEEP; then
+ :
+elif runtest nanosleep NANOSLEEP "-lrt"; then
+ LD_NANOSLEEP="-lrt"
+fi
+if [ "${HAVE_NANOSLEEP}" -eq 0 ]; then
+ echo "FATAL: nanosleep: no" 1>&2
+ echo "FATAL: nanosleep: no" 1>&3
+ exit 1
+fi
+
# --- ohash ---
if ismanual ohash "${HAVE_OHASH}"; then
:
@@ -212,7 +230,7 @@ if [ "${HAVE_OHASH}" -eq 0 ]; then
fi
# --- LDADD ---
-LDADD="${LDADD} ${LD_OHASH} -lz"
+LDADD="${LDADD} ${LD_NANOSLEEP} ${LD_OHASH} -lz"
echo "LDADD=\"${LDADD}\"" 1>&2
echo "LDADD=\"${LDADD}\"" 1>&3
echo 1>&3
diff --git a/configure.local.example b/configure.local.example
index db86c2fb..0fa3d3cb 100644
--- a/configure.local.example
+++ b/configure.local.example
@@ -129,11 +129,17 @@ LD_OHASH="-lutil"
CFLAGS="${CFLAGS} -I/usr/local/include"
-# Some platforms may need additional linker flags to link against libmandoc
-# that are not autodetected.
-# For example, Solaris 9 and 10 need -lrt for nanosleep(2).
+# Some platforms may need an additional linker flag for nanosleep(2).
+# If none is needed or it is -lrt, it is autodetected.
+# Otherwise, set the following variable.
-LDADD="-lrt"
+LD_NANOSLEEP="-lrt"
+
+# Some platforms might need additional linker flags to link against
+# libmandoc that are not autodetected, though no such cases are
+# currently known.
+
+LDADD="-lm"
# Some systems may want to set additional linker flags for all the
# binaries, not only for those using libmandoc, for example for
diff --git a/test-nanosleep.c b/test-nanosleep.c
new file mode 100644
index 00000000..4b25ca4c
--- /dev/null
+++ b/test-nanosleep.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <time.h>
+
+int
+main(void)
+{
+ struct timespec timeout;
+
+ timeout.tv_sec = 0;
+ timeout.tv_nsec = 100000000; /* 0.1 seconds */
+
+ if (nanosleep(&timeout, NULL)) {
+ perror("nanosleep");
+ return 1;
+ }
+ return 0;
+}