summaryrefslogtreecommitdiff
path: root/configure.ac
blob: 8927ace0f740608eecdc2f365f0473d01d9ebf52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
dnl
dnl Copyright © 2013 Keith Packard
dnl
dnl Permission to use, copy, modify, distribute, and sell this software and its
dnl documentation for any purpose is hereby granted without fee, provided that
dnl the above copyright notice appear in all copies and that both that copyright
dnl notice and this permission notice appear in supporting documentation, and
dnl that the name of the copyright holders not be used in advertising or
dnl publicity pertaining to distribution of the software without specific,
dnl written prior permission.  The copyright holders make no representations
dnl about the suitability of this software for any purpose.  It is provided "as
dnl is" without express or implied warranty.
dnl
dnl THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
dnl EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
dnl OF THIS SOFTWARE.
dnl
dnl
dnl Process this file with autoconf to create configure.

AC_PREREQ([2.60])
AC_INIT([libxshmfence], [1.3.2],
        [https://gitlab.freedesktop.org/xorg/lib/libxshmfence/-/issues],
        [libxshmfence])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])

AC_USE_SYSTEM_EXTENSIONS

# Initialize Automake
AM_INIT_AUTOMAKE([foreign dist-xz])

# Initialize libtool
AC_PROG_LIBTOOL

# Require xorg-macros: XORG_DEFAULT_OPTIONS, XORG_WITH_LINT
m4_ifndef([XORG_MACROS_VERSION],
          [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
XORG_MACROS_VERSION(1.3)
XORG_DEFAULT_OPTIONS

dnl Allow checking code with lint, sparse, etc.
XORG_WITH_LINT
LINT_FLAGS="${LINT_FLAGS} ${FONTENC_CFLAGS}"

# Checks for typedefs, structures, and compiler characteristics.
AC_SYS_LARGEFILE

dnl
dnl Locate a suitable tmp file system for creating shared memory files
dnl

AC_ARG_ENABLE(futex,	AS_HELP_STRING([--enable-futex], [Enable futexes (default: auto)]),
		[FUTEX=$enableval], [FUTEX=auto])

if test "x$FUTEX" = "xauto"; then
	AC_CHECK_HEADER([linux/futex.h], [FUTEX=yes])
fi

if test "x$FUTEX" = "xauto"; then
	AC_CHECK_HEADER([sys/umtx.h], [FUTEX=yes], [FUTEX=no],
	    [#include <errno.h>
	     #include <sys/types.h>])
	if test "x$FUTEX" = "xyes"; then
		AC_DEFINE(HAVE_UMTX, 1, [Use umtx])
	fi
fi

if test "x$FUTEX" = "xyes"; then
	PTHREAD=no
	AC_DEFINE(HAVE_FUTEX,1,[Use futexes])
else
	PTHREAD=yes
	AC_DEFINE(HAVE_PTHREAD,1,[Use pthread primitives])
fi

PTHREAD_LIBS=
if test "x$PTHREAD" = "xyes"; then
	AC_CHECK_LIB(pthread,pthread_create,[PTHREAD_LIBS=-lpthread],[PTHREAD_LIBS=])
fi

AC_SUBST([PTHREAD_LIBS])

AM_CONDITIONAL([FUTEX], [test x"$FUTEX" = xyes])
AM_CONDITIONAL([PTHREAD], [test x"$PTHREAD" = xyes])

PKG_CHECK_MODULES(XPROTO, xproto)

AC_SUBST([XPROTO_CFLAGS])

CFLAGS="$CFLAGS $XPROTO_CFLAGS"

AC_CHECK_FUNCS(memfd_create mkostemp)

AC_CHECK_DECLS([__NR_memfd_create], [], [], [[#include <asm/unistd.h>]])

AC_CHECK_HEADERS([sys/memfd.h], [AC_DEFINE([HAVE_MEMFD_H], 1, [Has sys/memfd.h header])])

AC_ARG_ENABLE(visibility,     AC_HELP_STRING([--enable-visibility], [Enable symbol visibility (default: auto)]),
				[SYMBOL_VISIBILITY=$enableval],
				[SYMBOL_VISIBILITY=auto])

dnl ==================================================================
dnl symbol visibility
symbol_visibility=
have_visibility=disabled
if test x$SYMBOL_VISIBILITY != xno; then
    AC_MSG_CHECKING(for symbol visibility support)
    if test x$GCC = xyes; then
	VISIBILITY_CFLAGS="-fvisibility=hidden"
    else
	if test x$SUNCC = xyes; then
	    VISIBILITY_CFLAGS="-xldscope=hidden"
	else
	    have_visibility=no
	fi
    fi
    if test x$have_visibility != xno; then
	AC_TRY_COMPILE(
	    [#include <X11/Xfuncproto.h>
	     extern _X_HIDDEN int hidden_int;
	     extern _X_EXPORT int public_int;
	     extern _X_HIDDEN int hidden_int_func(void);
	     extern _X_EXPORT int public_int_func(void);],
	    [],
	    have_visibility=yes,
	    have_visibility=no)
    fi
    AC_MSG_RESULT([$have_visibility])
    if test x$have_visibility != xno; then
	symbol_visibility=$VISIBILITY_CFLAGS
	CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
    fi
fi

AC_ARG_WITH(shared-memory-dir, AS_HELP_STRING([--with-shared-memory-dir=PATH], [Path to directory in a world-writable temporary directory for anonymous shared memory (default: auto)]),
[],
[with_shared_memory_dir=yes])

shmdirs="/run/shm /dev/shm /var/tmp /tmp"

case x"$with_shared_memory_dir" in
xyes)
	for dir in $shmdirs; do
		case x"$with_shared_memory_dir" in
		xyes)
			echo Checking temp dir "$dir"
			if test -d "$dir"; then
				with_shared_memory_dir="$dir"
			fi
			;;
		esac
	done
	;;
x/*)
	;;
xno)
	;;
*)
	AC_MSG_ERROR([Invalid directory specified for --with-shared-memory-dir: $with_shared_memory_dir])
	;;
esac

case x"$with_shared_memory_dir" in
xyes)
	AC_MSG_ERROR([No directory found for shared memory temp files.])
	;;
xno)
	;;
*)
	AC_DEFINE_UNQUOTED(SHMDIR, ["$with_shared_memory_dir"], [Directory for shared memory temp files])
	;;
esac

AC_CONFIG_FILES([Makefile
                 src/Makefile
		 test/Makefile
                 xshmfence.pc])
AC_OUTPUT