aboutsummaryrefslogtreecommitdiffstatshomepage
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
commitfd04a2530af452252677a5bf5b97f05788e91ba6 (patch)
treed99ae6824e0744df85dbcab73401d09f8fd7cdb6
parent3eb0bed6d844a0f9be00a889a5131b93ef2ef355 (diff)
downloadmandoc-fd04a2530af452252677a5bf5b97f05788e91ba6.tar.gz
mandoc-fd04a2530af452252677a5bf5b97f05788e91ba6.tar.zst
mandoc-fd04a2530af452252677a5bf5b97f05788e91ba6.zip
Autodetect if -lrt is needed for nanosleep(3).
Helpful for Solaris 9 and 10. Reminded by Thomas Klausner.
-rw-r--r--Makefile3
-rwxr-xr-xconfigure20
-rw-r--r--configure.local.example16
-rw-r--r--test-nanosleep.c17
4 files changed, 49 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index df1116af..38f49721 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.489 2016/07/19 21:31:55 schwarze Exp $
+# $Id: Makefile,v 1.490 2016/07/20 14:03:06 schwarze Exp $
#
# Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
# Copyright (c) 2011, 2013-2016 Ingo Schwarze <schwarze@openbsd.org>
@@ -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..64a61f2b 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,7 @@
#!/bin/sh
#
+# $Id: configure,v 1.47 2016/07/20 14:03:06 schwarze Exp $
+#
# 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 9035c565..18a84fbd 100644
--- a/configure.local.example
+++ b/configure.local.example
@@ -1,4 +1,4 @@
-# $Id: configure.local.example,v 1.16 2016/07/19 22:40:33 schwarze Exp $
+# $Id: configure.local.example,v 1.17 2016/07/20 14:03:06 schwarze Exp $
#
# Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
#
@@ -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;
+}