1ed6f5d66Smrgdnl
2ed6f5d66Smrgdnl Copyright © 2013 Keith Packard
3ed6f5d66Smrgdnl
4ed6f5d66Smrgdnl Permission to use, copy, modify, distribute, and sell this software and its
5ed6f5d66Smrgdnl documentation for any purpose is hereby granted without fee, provided that
6ed6f5d66Smrgdnl the above copyright notice appear in all copies and that both that copyright
7ed6f5d66Smrgdnl notice and this permission notice appear in supporting documentation, and
8ed6f5d66Smrgdnl that the name of the copyright holders not be used in advertising or
9ed6f5d66Smrgdnl publicity pertaining to distribution of the software without specific,
10ed6f5d66Smrgdnl written prior permission.  The copyright holders make no representations
11ed6f5d66Smrgdnl about the suitability of this software for any purpose.  It is provided "as
12ed6f5d66Smrgdnl is" without express or implied warranty.
13ed6f5d66Smrgdnl
14ed6f5d66Smrgdnl THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15ed6f5d66Smrgdnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16ed6f5d66Smrgdnl EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17ed6f5d66Smrgdnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18ed6f5d66Smrgdnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19ed6f5d66Smrgdnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20ed6f5d66Smrgdnl OF THIS SOFTWARE.
21ed6f5d66Smrgdnl
22ed6f5d66Smrgdnl
23ed6f5d66Smrgdnl Process this file with autoconf to create configure.
24ed6f5d66Smrg
25ed6f5d66SmrgAC_PREREQ([2.60])
26a3680546SmrgAC_INIT([libxshmfence], [1.3.3],
273d05230fSmrg        [https://gitlab.freedesktop.org/xorg/lib/libxshmfence/-/issues],
283d05230fSmrg        [libxshmfence])
29ed6f5d66SmrgAC_CONFIG_SRCDIR([Makefile.am])
30ed6f5d66SmrgAC_CONFIG_HEADERS([config.h])
31a3680546SmrgAC_CONFIG_MACRO_DIRS([m4])
32ed6f5d66Smrg
33a3680546Smrg# Set common system defines for POSIX extensions, such as _GNU_SOURCE
34a3680546Smrg# Must be called before any macros that run the compiler (like LT_INIT
35a3680546Smrg# or XORG_DEFAULT_OPTIONS) to avoid autoconf errors.
36fbc03982SmrgAC_USE_SYSTEM_EXTENSIONS
37fbc03982Smrg
38ed6f5d66Smrg# Initialize Automake
393d05230fSmrgAM_INIT_AUTOMAKE([foreign dist-xz])
40ed6f5d66Smrg
41ed6f5d66Smrg# Initialize libtool
42a3680546SmrgLT_INIT
43ed6f5d66Smrg
44ed6f5d66Smrg# Require xorg-macros: XORG_DEFAULT_OPTIONS, XORG_WITH_LINT
45ed6f5d66Smrgm4_ifndef([XORG_MACROS_VERSION],
46ed6f5d66Smrg          [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
47ed6f5d66SmrgXORG_MACROS_VERSION(1.3)
48ed6f5d66SmrgXORG_DEFAULT_OPTIONS
49ed6f5d66Smrg
50ed6f5d66Smrgdnl Allow checking code with lint, sparse, etc.
51ed6f5d66SmrgXORG_WITH_LINT
52ed6f5d66SmrgLINT_FLAGS="${LINT_FLAGS} ${FONTENC_CFLAGS}"
53ed6f5d66Smrg
54139359d2Smrg# Checks for typedefs, structures, and compiler characteristics.
55139359d2SmrgAC_SYS_LARGEFILE
56139359d2Smrg
57ed6f5d66Smrgdnl
583d05230fSmrgdnl Locate a suitable tmp file system for creating shared memory files
59ed6f5d66Smrgdnl
60ed6f5d66Smrg
61ed6f5d66SmrgAC_ARG_ENABLE(futex,	AS_HELP_STRING([--enable-futex], [Enable futexes (default: auto)]),
62ed6f5d66Smrg		[FUTEX=$enableval], [FUTEX=auto])
63ed6f5d66Smrg
64ed6f5d66Smrgif test "x$FUTEX" = "xauto"; then
65ed6f5d66Smrg	AC_CHECK_HEADER([linux/futex.h], [FUTEX=yes])
66ed6f5d66Smrgfi
67ed6f5d66Smrg
68ed6f5d66Smrgif test "x$FUTEX" = "xauto"; then
69ed6f5d66Smrg	AC_CHECK_HEADER([sys/umtx.h], [FUTEX=yes], [FUTEX=no],
70ed6f5d66Smrg	    [#include <errno.h>
71ed6f5d66Smrg	     #include <sys/types.h>])
72ed6f5d66Smrg	if test "x$FUTEX" = "xyes"; then
73ed6f5d66Smrg		AC_DEFINE(HAVE_UMTX, 1, [Use umtx])
74ed6f5d66Smrg	fi
75ed6f5d66Smrgfi
76ed6f5d66Smrg
77ed6f5d66Smrgif test "x$FUTEX" = "xyes"; then
78ed6f5d66Smrg	PTHREAD=no
79ed6f5d66Smrg	AC_DEFINE(HAVE_FUTEX,1,[Use futexes])
80ed6f5d66Smrgelse
81ed6f5d66Smrg	PTHREAD=yes
82ed6f5d66Smrg	AC_DEFINE(HAVE_PTHREAD,1,[Use pthread primitives])
83ed6f5d66Smrgfi
84ed6f5d66Smrg
85ed6f5d66SmrgPTHREAD_LIBS=
86ed6f5d66Smrgif test "x$PTHREAD" = "xyes"; then
87ed6f5d66Smrg	AC_CHECK_LIB(pthread,pthread_create,[PTHREAD_LIBS=-lpthread],[PTHREAD_LIBS=])
88ed6f5d66Smrgfi
89ed6f5d66Smrg
90ed6f5d66SmrgAC_SUBST([PTHREAD_LIBS])
91ed6f5d66Smrg
92ed6f5d66SmrgAM_CONDITIONAL([FUTEX], [test x"$FUTEX" = xyes])
93ed6f5d66SmrgAM_CONDITIONAL([PTHREAD], [test x"$PTHREAD" = xyes])
94ed6f5d66Smrg
95ed6f5d66SmrgPKG_CHECK_MODULES(XPROTO, xproto)
96ed6f5d66Smrg
97ed6f5d66SmrgAC_SUBST([XPROTO_CFLAGS])
98ed6f5d66Smrg
99ed6f5d66SmrgCFLAGS="$CFLAGS $XPROTO_CFLAGS"
100ed6f5d66Smrg
1013d05230fSmrgAC_CHECK_FUNCS(memfd_create mkostemp)
102ed6f5d66Smrg
103ed6f5d66SmrgAC_CHECK_DECLS([__NR_memfd_create], [], [], [[#include <asm/unistd.h>]])
104ed6f5d66Smrg
105ed6f5d66SmrgAC_CHECK_HEADERS([sys/memfd.h], [AC_DEFINE([HAVE_MEMFD_H], 1, [Has sys/memfd.h header])])
106ed6f5d66Smrg
107a3680546SmrgAC_ARG_ENABLE(visibility,     AS_HELP_STRING([--enable-visibility], [Enable symbol visibility (default: auto)]),
108ed6f5d66Smrg				[SYMBOL_VISIBILITY=$enableval],
109ed6f5d66Smrg				[SYMBOL_VISIBILITY=auto])
110ed6f5d66Smrg
111ed6f5d66Smrgdnl ==================================================================
112ed6f5d66Smrgdnl symbol visibility
113ed6f5d66Smrgsymbol_visibility=
114ed6f5d66Smrghave_visibility=disabled
115ed6f5d66Smrgif test x$SYMBOL_VISIBILITY != xno; then
116ed6f5d66Smrg    AC_MSG_CHECKING(for symbol visibility support)
117ed6f5d66Smrg    if test x$GCC = xyes; then
118ed6f5d66Smrg	VISIBILITY_CFLAGS="-fvisibility=hidden"
119ed6f5d66Smrg    else
120ed6f5d66Smrg	if test x$SUNCC = xyes; then
121ed6f5d66Smrg	    VISIBILITY_CFLAGS="-xldscope=hidden"
122ed6f5d66Smrg	else
123ed6f5d66Smrg	    have_visibility=no
124ed6f5d66Smrg	fi
125ed6f5d66Smrg    fi
126ed6f5d66Smrg    if test x$have_visibility != xno; then
127a3680546Smrg	AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
128a3680546Smrg           [[#include <X11/Xfuncproto.h>
129ed6f5d66Smrg	     extern _X_HIDDEN int hidden_int;
130ed6f5d66Smrg	     extern _X_EXPORT int public_int;
131ed6f5d66Smrg	     extern _X_HIDDEN int hidden_int_func(void);
132a3680546Smrg	     extern _X_EXPORT int public_int_func(void);]],
133a3680546Smrg            [[]])],
134a3680546Smrg           [have_visibility=yes],
135a3680546Smrg           [have_visibility=no])
136ed6f5d66Smrg    fi
137ed6f5d66Smrg    AC_MSG_RESULT([$have_visibility])
138ed6f5d66Smrg    if test x$have_visibility != xno; then
139ed6f5d66Smrg	symbol_visibility=$VISIBILITY_CFLAGS
140ed6f5d66Smrg	CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
141ed6f5d66Smrg    fi
142ed6f5d66Smrgfi
143ed6f5d66Smrg
144ed6f5d66SmrgAC_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)]),
145ed6f5d66Smrg[],
146ed6f5d66Smrg[with_shared_memory_dir=yes])
147ed6f5d66Smrg
148ed6f5d66Smrgshmdirs="/run/shm /dev/shm /var/tmp /tmp"
149ed6f5d66Smrg
150ed6f5d66Smrgcase x"$with_shared_memory_dir" in
151ed6f5d66Smrgxyes)
152ed6f5d66Smrg	for dir in $shmdirs; do
153ed6f5d66Smrg		case x"$with_shared_memory_dir" in
154ed6f5d66Smrg		xyes)
155ed6f5d66Smrg			echo Checking temp dir "$dir"
156ed6f5d66Smrg			if test -d "$dir"; then
157ed6f5d66Smrg				with_shared_memory_dir="$dir"
158ed6f5d66Smrg			fi
159ed6f5d66Smrg			;;
160ed6f5d66Smrg		esac
161ed6f5d66Smrg	done
162ed6f5d66Smrg	;;
163ed6f5d66Smrgx/*)
164ed6f5d66Smrg	;;
165ed6f5d66Smrgxno)
166ed6f5d66Smrg	;;
167ed6f5d66Smrg*)
168ed6f5d66Smrg	AC_MSG_ERROR([Invalid directory specified for --with-shared-memory-dir: $with_shared_memory_dir])
169ed6f5d66Smrg	;;
170ed6f5d66Smrgesac
171ed6f5d66Smrg
172ed6f5d66Smrgcase x"$with_shared_memory_dir" in
173ed6f5d66Smrgxyes)
174ed6f5d66Smrg	AC_MSG_ERROR([No directory found for shared memory temp files.])
175ed6f5d66Smrg	;;
176ed6f5d66Smrgxno)
177ed6f5d66Smrg	;;
178ed6f5d66Smrg*)
179ed6f5d66Smrg	AC_DEFINE_UNQUOTED(SHMDIR, ["$with_shared_memory_dir"], [Directory for shared memory temp files])
180ed6f5d66Smrg	;;
181ed6f5d66Smrgesac
182ed6f5d66Smrg
183ed6f5d66SmrgAC_CONFIG_FILES([Makefile
184ed6f5d66Smrg                 src/Makefile
185ed6f5d66Smrg		 test/Makefile
186ed6f5d66Smrg                 xshmfence.pc])
187ed6f5d66SmrgAC_OUTPUT
188