4 dnl Common configuration stuff for CUPS.
6 dnl Copyright 2007-2013 by Apple Inc.
7 dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
9 dnl These coded instructions, statements, and computer programs are the
10 dnl property of Apple Inc. and are protected by Federal copyright
11 dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
12 dnl which should have been included with this file. If this file is
13 dnl file is missing or damaged, see the license at "http://www.cups.org/".
16 dnl We need at least autoconf 2.60...
19 dnl Set the name of the config header file...
20 AC_CONFIG_HEADER(config.h)
22 dnl Version number information...
25 if test -z "$CUPS_REVISION" -a -d .svn; then
26 CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
28 CUPS_BUILD="cups-$CUPS_VERSION"
30 AC_ARG_WITH(cups_build, [ --with-cups-build set "cups-config --build" string ],
31 CUPS_BUILD="$withval")
33 AC_SUBST(CUPS_VERSION)
34 AC_SUBST(CUPS_REVISION)
36 AC_DEFINE_UNQUOTED(CUPS_SVERSION, "CUPS v$CUPS_VERSION$CUPS_REVISION")
37 AC_DEFINE_UNQUOTED(CUPS_MINIMAL, "CUPS/$CUPS_VERSION$CUPS_REVISION")
39 dnl Default compiler flags...
41 CPPFLAGS="${CPPFLAGS:=}"
42 CXXFLAGS="${CXXFLAGS:=}"
43 LDFLAGS="${LDFLAGS:=}"
45 dnl Checks for programs...
47 AC_PROG_CC(clang cc gcc)
49 AC_PROG_CXX(clang++ c++ g++)
52 AC_PATH_PROG(CHMOD,chmod)
53 AC_PATH_PROG(GZIP,gzip)
58 AC_PATH_PROG(RMDIR,rmdir)
60 AC_PATH_PROG(XDGOPEN,xdg-open)
61 if test "x$XDGOPEN" = x; then
62 CUPS_HTMLVIEW="htmlview"
64 CUPS_HTMLVIEW="$XDGOPEN"
66 AC_SUBST(CUPS_HTMLVIEW)
68 AC_MSG_CHECKING(for install-sh script)
69 INSTALL="`pwd`/install-sh"
71 AC_MSG_RESULT(using $INSTALL)
73 if test "x$AR" = x; then
74 AC_MSG_ERROR([Unable to find required library archive command.])
76 if test "x$CC" = x; then
77 AC_MSG_ERROR([Unable to find required C compiler command.])
80 dnl Static library option...
82 AC_ARG_ENABLE(static, [ --enable-static install static libraries])
84 if test x$enable_static = xyes; then
85 echo Installing static libraries...
86 INSTALLSTATIC="installstatic"
89 AC_SUBST(INSTALLSTATIC)
91 dnl Check for pkg-config, which is used for some other tests later on...
92 AC_PATH_PROG(PKGCONFIG, pkg-config)
94 dnl Check for libraries...
95 AC_SEARCH_LIBS(abs, m, AC_DEFINE(HAVE_ABS))
96 AC_SEARCH_LIBS(crypt, crypt)
97 AC_SEARCH_LIBS(fmod, m)
98 AC_SEARCH_LIBS(getspent, sec gen)
101 AC_ARG_ENABLE(mallinfo, [ --enable-mallinfo build with malloc debug logging])
103 if test x$enable_mallinfo = xyes; then
106 AC_SEARCH_LIBS(mallinfo, malloc, AC_DEFINE(HAVE_MALLINFO))
113 dnl Check for libpaper support...
114 AC_ARG_ENABLE(libpaper, [ --enable-libpaper build with libpaper support])
116 if test x$enable_libpaper = xyes; then
117 AC_CHECK_LIB(paper,systempapername,
118 AC_DEFINE(HAVE_LIBPAPER)
126 dnl Checks for header files.
128 AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H))
129 AC_CHECK_HEADER(crypt.h,AC_DEFINE(HAVE_CRYPT_H))
130 AC_CHECK_HEADER(langinfo.h,AC_DEFINE(HAVE_LANGINFO_H))
131 AC_CHECK_HEADER(malloc.h,AC_DEFINE(HAVE_MALLOC_H))
132 AC_CHECK_HEADER(shadow.h,AC_DEFINE(HAVE_SHADOW_H))
133 AC_CHECK_HEADER(stdint.h,AC_DEFINE(HAVE_STDINT_H))
134 AC_CHECK_HEADER(string.h,AC_DEFINE(HAVE_STRING_H))
135 AC_CHECK_HEADER(strings.h,AC_DEFINE(HAVE_STRINGS_H))
136 AC_CHECK_HEADER(bstring.h,AC_DEFINE(HAVE_BSTRING_H))
137 AC_CHECK_HEADER(sys/ioctl.h,AC_DEFINE(HAVE_SYS_IOCTL_H))
138 AC_CHECK_HEADER(sys/param.h,AC_DEFINE(HAVE_SYS_PARAM_H))
139 AC_CHECK_HEADER(sys/ucred.h,AC_DEFINE(HAVE_SYS_UCRED_H))
141 dnl Checks for iconv.h and iconv_open
142 AC_CHECK_HEADER(iconv.h,
145 AC_SEARCH_LIBS(iconv_open,iconv,
146 AC_DEFINE(HAVE_ICONV_H)
147 SAVELIBS="$SAVELIBS $LIBS")
150 dnl Checks for Mini-XML (www.minixml.org)...
152 AC_CHECK_HEADER(mxml.h,
154 AC_SEARCH_LIBS(mmxlNewElement,mxml,
155 AC_DEFINE(HAVE_MXML_H)
160 dnl Checks for statfs and its many headers...
161 AC_CHECK_HEADER(sys/mount.h,AC_DEFINE(HAVE_SYS_MOUNT_H))
162 AC_CHECK_HEADER(sys/statfs.h,AC_DEFINE(HAVE_SYS_STATFS_H))
163 AC_CHECK_HEADER(sys/statvfs.h,AC_DEFINE(HAVE_SYS_STATVFS_H))
164 AC_CHECK_HEADER(sys/vfs.h,AC_DEFINE(HAVE_SYS_VFS_H))
165 AC_CHECK_FUNCS(statfs statvfs)
167 dnl Checks for string functions.
168 AC_CHECK_FUNCS(strdup strlcat strlcpy)
169 if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then
170 echo Forcing snprintf emulation for HP-UX.
172 AC_CHECK_FUNCS(snprintf vsnprintf)
175 dnl Check for random number functions...
176 AC_CHECK_FUNCS(random lrand48 arc4random)
178 dnl Check for geteuid function.
179 AC_CHECK_FUNCS(geteuid)
181 dnl Check for setpgid function.
182 AC_CHECK_FUNCS(setpgid)
184 dnl Check for vsyslog function.
185 AC_CHECK_FUNCS(vsyslog)
187 dnl Checks for signal functions.
190 # Do not use sigset on Linux or GNU HURD
193 # Use sigset on other platforms, if available
194 AC_CHECK_FUNCS(sigset)
198 AC_CHECK_FUNCS(sigaction)
200 dnl Checks for wait functions.
201 AC_CHECK_FUNCS(waitpid wait3)
203 dnl See if the tm structure has the tm_gmtoff member...
204 AC_MSG_CHECKING(for tm_gmtoff member in tm structure)
205 AC_TRY_COMPILE([#include <time.h>],[struct tm t;
206 int o = t.tm_gmtoff;],
208 AC_DEFINE(HAVE_TM_GMTOFF),
211 dnl See if the stat structure has the st_gen member...
212 AC_MSG_CHECKING(for st_gen member in stat structure)
213 AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat t;
216 AC_DEFINE(HAVE_ST_GEN),
219 dnl See if we have the removefile(3) function for securely removing files
220 AC_CHECK_FUNCS(removefile)
222 dnl See if we have libusb...
223 AC_ARG_ENABLE(libusb, [ --enable-libusb use libusb for USB printing])
230 if test "x$PKGCONFIG" != x; then
231 if test x$enable_libusb = xyes -o $uname != Darwin; then
232 AC_MSG_CHECKING(for libusb-1.0)
233 if $PKGCONFIG --exists libusb-1.0; then
235 AC_DEFINE(HAVE_LIBUSB)
236 CFLAGS="$CFLAGS `$PKGCONFIG --cflags libusb-1.0`"
237 LIBUSB="`$PKGCONFIG --libs libusb-1.0`"
238 USBQUIRKS="\$(DATADIR)/usb"
243 elif test x$enable_libusb = xyes; then
244 AC_MSG_ERROR(Need pkg-config to enable libusb support.)
247 dnl See if we have libwrap for TCP wrappers support...
248 AC_ARG_ENABLE(tcp_wrappers, [ --enable-tcp-wrappers use libwrap for TCP wrappers support])
253 if test x$enable_tcp_wrappers = xyes; then
254 AC_CHECK_LIB(wrap, hosts_access,[
255 AC_CHECK_HEADER(tcpd.h,
256 AC_DEFINE(HAVE_TCPD_H)
263 AC_CHECK_HEADER(zlib.h,
264 AC_CHECK_LIB(z, gzgets,
268 AC_CHECK_LIB(z, inflateCopy, AC_DEFINE(HAVE_INFLATECOPY))
269 if test "x$GZIP" != z; then
272 AC_SUBST(INSTALL_GZIP)
275 dnl Flags for "ar" command...
287 dnl Prep libraries specifically for cupsd and backends...
293 dnl See if we have POSIX ACL support...
296 AC_ARG_ENABLE(acl, [ --enable-acl build with POSIX ACL support])
297 if test "x$enable_acl" != xno; then
298 AC_SEARCH_LIBS(acl_init, acl, AC_DEFINE(HAVE_ACL_INIT))
299 SERVERLIBS="$SERVERLIBS $LIBS"
303 dnl Check for DBUS support
304 if test -d /etc/dbus-1; then
305 DBUSDIR="/etc/dbus-1"
310 AC_ARG_ENABLE(dbus, [ --disable-dbus build without DBUS support])
311 AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ],
317 if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x; then
318 AC_MSG_CHECKING(for DBUS)
319 if $PKGCONFIG --exists dbus-1; then
322 CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE"
323 SERVERLIBS="$SERVERLIBS `$PKGCONFIG --libs dbus-1`"
325 DBUS_NOTIFIERLIBS="`$PKGCONFIG --libs dbus-1`"
327 LIBS="$LIBS $DBUS_NOTIFIERLIBS"
328 AC_CHECK_FUNC(dbus_message_iter_init_append,
329 AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND))
337 AC_SUBST(DBUS_NOTIFIER)
338 AC_SUBST(DBUS_NOTIFIERLIBS)
340 dnl Extra platform-specific libraries...
341 CUPS_DEFAULT_PRINTOPERATOR_AUTH="@SYSTEM"
342 CUPS_DEFAULT_SYSTEM_AUTHKEY=""
343 CUPS_SYSTEM_AUTHKEY=""
348 BACKLIBS="$BACKLIBS -framework IOKit"
349 SERVERLIBS="$SERVERLIBS -framework IOKit -weak_framework ApplicationServices"
350 LIBS="-framework SystemConfiguration -framework CoreFoundation -framework Security $LIBS"
352 dnl Check for framework headers...
353 AC_CHECK_HEADER(ApplicationServices/ApplicationServices.h,AC_DEFINE(HAVE_APPLICATIONSERVICES_H))
354 AC_CHECK_HEADER(CoreFoundation/CoreFoundation.h,AC_DEFINE(HAVE_COREFOUNDATION_H))
355 AC_CHECK_HEADER(CoreFoundation/CFPriv.h,AC_DEFINE(HAVE_CFPRIV_H))
356 AC_CHECK_HEADER(CoreFoundation/CFBundlePriv.h,AC_DEFINE(HAVE_CFBUNDLEPRIV_H))
357 AC_CHECK_HEADER(IOKit/pwr_mgt/IOPMLibPrivate.h,AC_DEFINE(HAVE_IOKIT_PWR_MGT_IOPMLIBPRIVATE_H))
359 dnl Check for dynamic store function...
360 AC_CHECK_FUNCS(SCDynamicStoreCopyComputerName)
362 dnl Check for the new membership functions in MacOSX 10.4...
363 AC_CHECK_HEADER(membership.h,AC_DEFINE(HAVE_MEMBERSHIP_H))
364 AC_CHECK_HEADER(membershipPriv.h,AC_DEFINE(HAVE_MEMBERSHIPPRIV_H))
365 AC_CHECK_FUNCS(mbr_uid_to_uuid)
367 dnl Check for the vproc_transaction_begin/end stuff...
368 AC_CHECK_FUNCS(vproc_transaction_begin)
370 dnl Need <dlfcn.h> header...
371 AC_CHECK_HEADER(dlfcn.h,AC_DEFINE(HAVE_DLFCN_H))
373 dnl Check for notify_post support
374 AC_CHECK_HEADER(notify.h,AC_DEFINE(HAVE_NOTIFY_H))
375 AC_CHECK_FUNCS(notify_post)
377 dnl Check for Authorization Services support
378 AC_ARG_WITH(adminkey, [ --with-adminkey set the default SystemAuthKey value],
379 default_adminkey="$withval",
380 default_adminkey="default")
381 AC_ARG_WITH(operkey, [ --with-operkey set the default operator @AUTHKEY value],
382 default_operkey="$withval",
383 default_operkey="default")
385 AC_CHECK_HEADER(Security/Authorization.h, [
386 AC_DEFINE(HAVE_AUTHORIZATION_H)
388 if test "x$default_adminkey" != xdefault; then
389 CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey $default_adminkey"
390 CUPS_DEFAULT_SYSTEM_AUTHKEY="$default_adminkey"
391 elif grep -q system.print.operator /etc/authorization; then
392 CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.print.admin"
393 CUPS_DEFAULT_SYSTEM_AUTHKEY="system.print.admin"
395 CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.preferences"
396 CUPS_DEFAULT_SYSTEM_AUTHKEY="system.preferences"
399 if test "x$default_operkey" != xdefault; then
400 CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY($default_operkey) @admin @lpadmin"
401 elif grep -q system.print.operator /etc/authorization; then
402 CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin"
404 CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.admin) @admin @lpadmin"
406 AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H))
408 dnl Check for sandbox/Seatbelt support
409 if test $uversion -ge 100; then
410 AC_CHECK_HEADER(sandbox.h,AC_DEFINE(HAVE_SANDBOX_H))
412 if test $uversion -ge 110 -a $uversion -lt 120; then
413 # Broken public headers in 10.7.x...
414 AC_MSG_CHECKING(for sandbox/private.h presence)
415 if test -f /usr/local/include/sandbox/private.h; then
419 AC_MSG_ERROR(Run 'sudo mkdir -p /usr/local/include/sandbox' and 'sudo touch /usr/local/include/sandbox/private.h' to build CUPS.)
423 dnl Check for XPC support
424 AC_CHECK_HEADER(xpc/xpc.h,
426 INSTALLXPC="install-xpc")
427 AC_CHECK_HEADER(xpc/private.h,
428 AC_DEFINE(HAVE_XPC_PRIVATE_H))
432 AC_SUBST(CUPS_DEFAULT_PRINTOPERATOR_AUTH)
433 AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTOPERATOR_AUTH, "$CUPS_DEFAULT_PRINTOPERATOR_AUTH")
434 AC_DEFINE_UNQUOTED(CUPS_DEFAULT_SYSTEM_AUTHKEY, "$CUPS_DEFAULT_SYSTEM_AUTHKEY")
435 AC_SUBST(CUPS_SYSTEM_AUTHKEY)
438 dnl Check for build components
441 AC_ARG_WITH(components, [ --with-components set components to build:
442 - "all" (default) builds everything
443 - "core" builds libcups and ipptool],
444 COMPONENTS="$withval")
446 case "$COMPONENTS" in
448 BUILDDIRS="filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates"
452 BUILDDIRS="data locale"
456 AC_MSG_ERROR([Bad build component "$COMPONENT" specified!])