4 dnl Common configuration stuff for CUPS.
6 dnl Copyright 2007-2015 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 Set the name of the config header file...
17 AC_CONFIG_HEADER(config.h)
19 dnl Version number information...
20 CUPS_VERSION="AC_PACKAGE_VERSION"
22 case "$CUPS_VERSION" in
24 if test -z "$CUPS_REVISION" -a -d .svn; then
25 CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
36 CUPS_BUILD="cups-$CUPS_VERSION"
38 AC_ARG_WITH(cups_build, [ --with-cups-build set "cups-config --build" string ],
39 CUPS_BUILD="$withval")
41 AC_SUBST(CUPS_VERSION)
42 AC_SUBST(CUPS_REVISION)
44 AC_DEFINE_UNQUOTED(CUPS_SVERSION, "AC_PACKAGE_NAME v$CUPS_VERSION$CUPS_REVISION")
45 AC_DEFINE_UNQUOTED(CUPS_MINIMAL, "AC_PACKAGE_NAME/$CUPS_VERSION$CUPS_REVISION")
47 dnl Default compiler flags...
49 CPPFLAGS="${CPPFLAGS:=}"
50 CXXFLAGS="${CXXFLAGS:=}"
51 LDFLAGS="${LDFLAGS:=}"
53 dnl Checks for programs...
55 AC_PROG_CC(clang cc gcc)
57 AC_PROG_CXX(clang++ c++ g++)
60 AC_PATH_PROG(CHMOD,chmod)
61 AC_PATH_PROG(GZIP,gzip)
66 AC_PATH_PROG(RMDIR,rmdir)
68 AC_PATH_PROG(XDGOPEN,xdg-open)
69 if test "x$XDGOPEN" = x; then
70 CUPS_HTMLVIEW="htmlview"
72 CUPS_HTMLVIEW="$XDGOPEN"
74 AC_SUBST(CUPS_HTMLVIEW)
76 AC_MSG_CHECKING(for install-sh script)
77 INSTALL="`pwd`/install-sh"
79 AC_MSG_RESULT(using $INSTALL)
81 if test "x$AR" = x; then
82 AC_MSG_ERROR([Unable to find required library archive command.])
84 if test "x$CC" = x; then
85 AC_MSG_ERROR([Unable to find required C compiler command.])
88 dnl Static library option...
90 AC_ARG_ENABLE(static, [ --enable-static install static libraries])
92 if test x$enable_static = xyes; then
93 echo Installing static libraries...
94 INSTALLSTATIC="installstatic"
97 AC_SUBST(INSTALLSTATIC)
99 dnl Check for pkg-config, which is used for some other tests later on...
100 AC_PATH_TOOL(PKGCONFIG, pkg-config)
102 dnl Check for libraries...
103 AC_SEARCH_LIBS(abs, m, AC_DEFINE(HAVE_ABS))
104 AC_SEARCH_LIBS(crypt, crypt)
105 AC_SEARCH_LIBS(fmod, m)
106 AC_SEARCH_LIBS(getspent, sec gen)
109 AC_ARG_ENABLE(mallinfo, [ --enable-mallinfo build with malloc debug logging])
111 if test x$enable_mallinfo = xyes; then
114 AC_SEARCH_LIBS(mallinfo, malloc, AC_DEFINE(HAVE_MALLINFO))
121 dnl Check for libpaper support...
122 AC_ARG_ENABLE(libpaper, [ --enable-libpaper build with libpaper support])
124 if test x$enable_libpaper = xyes; then
125 AC_CHECK_LIB(paper,systempapername,
126 AC_DEFINE(HAVE_LIBPAPER)
134 dnl Checks for header files.
136 AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H))
137 AC_CHECK_HEADER(crypt.h,AC_DEFINE(HAVE_CRYPT_H))
138 AC_CHECK_HEADER(langinfo.h,AC_DEFINE(HAVE_LANGINFO_H))
139 AC_CHECK_HEADER(malloc.h,AC_DEFINE(HAVE_MALLOC_H))
140 AC_CHECK_HEADER(shadow.h,AC_DEFINE(HAVE_SHADOW_H))
141 AC_CHECK_HEADER(stdint.h,AC_DEFINE(HAVE_STDINT_H))
142 AC_CHECK_HEADER(string.h,AC_DEFINE(HAVE_STRING_H))
143 AC_CHECK_HEADER(strings.h,AC_DEFINE(HAVE_STRINGS_H))
144 AC_CHECK_HEADER(bstring.h,AC_DEFINE(HAVE_BSTRING_H))
145 AC_CHECK_HEADER(sys/ioctl.h,AC_DEFINE(HAVE_SYS_IOCTL_H))
146 AC_CHECK_HEADER(sys/param.h,AC_DEFINE(HAVE_SYS_PARAM_H))
147 AC_CHECK_HEADER(sys/ucred.h,AC_DEFINE(HAVE_SYS_UCRED_H))
148 AC_CHECK_HEADER(asl.h,AC_DEFINE(HAVE_ASL_H))
150 dnl Checks for iconv.h and iconv_open
151 AC_CHECK_HEADER(iconv.h,
154 AC_SEARCH_LIBS(iconv_open,iconv,
155 AC_DEFINE(HAVE_ICONV_H)
156 SAVELIBS="$SAVELIBS $LIBS")
157 AC_SEARCH_LIBS(libiconv_open,iconv,
158 AC_DEFINE(HAVE_ICONV_H)
159 SAVELIBS="$SAVELIBS $LIBS")
162 dnl Checks for Mini-XML (www.minixml.org)...
164 AC_CHECK_HEADER(mxml.h,
166 AC_SEARCH_LIBS(mmxlNewElement,mxml,
167 AC_DEFINE(HAVE_MXML_H)
172 dnl Checks for statfs and its many headers...
173 AC_CHECK_HEADER(sys/mount.h,AC_DEFINE(HAVE_SYS_MOUNT_H))
174 AC_CHECK_HEADER(sys/statfs.h,AC_DEFINE(HAVE_SYS_STATFS_H))
175 AC_CHECK_HEADER(sys/statvfs.h,AC_DEFINE(HAVE_SYS_STATVFS_H))
176 AC_CHECK_HEADER(sys/vfs.h,AC_DEFINE(HAVE_SYS_VFS_H))
177 AC_CHECK_FUNCS(statfs statvfs)
179 dnl Checks for string functions.
180 AC_CHECK_FUNCS(strdup strlcat strlcpy)
181 if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then
182 echo Forcing snprintf emulation for HP-UX.
184 AC_CHECK_FUNCS(snprintf vsnprintf)
187 dnl Check for random number functions...
188 AC_CHECK_FUNCS(random lrand48 arc4random)
190 dnl Check for geteuid function.
191 AC_CHECK_FUNCS(geteuid)
193 dnl Check for setpgid function.
194 AC_CHECK_FUNCS(setpgid)
196 dnl Check for vsyslog function.
197 AC_CHECK_FUNCS(vsyslog)
199 dnl Checks for signal functions.
202 # Do not use sigset on Linux or GNU HURD
205 # Use sigset on other platforms, if available
206 AC_CHECK_FUNCS(sigset)
210 AC_CHECK_FUNCS(sigaction)
212 dnl Checks for wait functions.
213 AC_CHECK_FUNCS(waitpid wait3)
215 dnl Check for posix_spawn
216 AC_CHECK_FUNCS(posix_spawn)
218 dnl See if the tm structure has the tm_gmtoff member...
219 AC_MSG_CHECKING(for tm_gmtoff member in tm structure)
220 AC_TRY_COMPILE([#include <time.h>],[struct tm t;
221 int o = t.tm_gmtoff;],
223 AC_DEFINE(HAVE_TM_GMTOFF),
226 dnl See if the stat structure has the st_gen member...
227 AC_MSG_CHECKING(for st_gen member in stat structure)
228 AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat t;
231 AC_DEFINE(HAVE_ST_GEN),
234 dnl See if we have the removefile(3) function for securely removing files
235 AC_CHECK_FUNCS(removefile)
237 dnl See if we have libusb...
238 AC_ARG_ENABLE(libusb, [ --enable-libusb use libusb for USB printing])
245 if test "x$PKGCONFIG" != x; then
246 if test x$enable_libusb != xno -a $uname != Darwin; then
247 AC_MSG_CHECKING(for libusb-1.0)
248 if $PKGCONFIG --exists libusb-1.0; then
250 AC_DEFINE(HAVE_LIBUSB)
251 CFLAGS="$CFLAGS `$PKGCONFIG --cflags libusb-1.0`"
252 LIBUSB="`$PKGCONFIG --libs libusb-1.0`"
253 USBQUIRKS="\$(DATADIR)/usb"
256 if test x$enable_libusb = xyes; then
257 AC_MSG_ERROR(libusb required for --enable-libusb.)
261 elif test x$enable_libusb = xyes; then
262 AC_MSG_ERROR(Need pkg-config to enable libusb support.)
265 dnl See if we have libwrap for TCP wrappers support...
266 AC_ARG_ENABLE(tcp_wrappers, [ --enable-tcp-wrappers use libwrap for TCP wrappers support])
271 if test x$enable_tcp_wrappers = xyes; then
272 AC_CHECK_LIB(wrap, hosts_access,[
273 AC_CHECK_HEADER(tcpd.h,
274 AC_DEFINE(HAVE_TCPD_H)
281 AC_CHECK_HEADER(zlib.h,
282 AC_CHECK_LIB(z, gzgets,
286 AC_CHECK_LIB(z, inflateCopy, AC_DEFINE(HAVE_INFLATECOPY))
287 if test "x$GZIP" != z; then
290 AC_SUBST(INSTALL_GZIP)
293 dnl Flags for "ar" command...
305 dnl Prep libraries specifically for cupsd and backends...
311 dnl See if we have POSIX ACL support...
314 AC_ARG_ENABLE(acl, [ --enable-acl build with POSIX ACL support])
315 if test "x$enable_acl" != xno; then
316 AC_SEARCH_LIBS(acl_init, acl, AC_DEFINE(HAVE_ACL_INIT))
317 SERVERLIBS="$SERVERLIBS $LIBS"
321 dnl Check for DBUS support
322 AC_ARG_ENABLE(dbus, [ --disable-dbus build without DBUS support])
323 AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ],
330 if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$uname" != xDarwin; then
331 AC_MSG_CHECKING(for DBUS)
332 if $PKGCONFIG --exists dbus-1; then
335 CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE"
336 SERVERLIBS="$SERVERLIBS `$PKGCONFIG --libs dbus-1`"
338 DBUS_NOTIFIERLIBS="`$PKGCONFIG --libs dbus-1`"
340 LIBS="$LIBS $DBUS_NOTIFIERLIBS"
341 AC_CHECK_FUNC(dbus_message_iter_init_append,
342 AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND))
343 AC_CHECK_FUNC(dbus_threads_init,
344 AC_DEFINE(HAVE_DBUS_THREADS_INIT))
346 if test -d /etc/dbus-1; then
347 DBUSDIR="/etc/dbus-1"
355 AC_SUBST(DBUS_NOTIFIER)
356 AC_SUBST(DBUS_NOTIFIERLIBS)
358 dnl Extra platform-specific libraries...
359 CUPS_DEFAULT_PRINTOPERATOR_AUTH="@SYSTEM"
360 CUPS_DEFAULT_SYSTEM_AUTHKEY=""
361 CUPS_SYSTEM_AUTHKEY=""
366 BACKLIBS="$BACKLIBS -framework IOKit"
367 SERVERLIBS="$SERVERLIBS -framework IOKit -weak_framework ApplicationServices"
368 LIBS="-framework SystemConfiguration -framework CoreFoundation -framework Security $LIBS"
370 dnl Check for framework headers...
371 AC_CHECK_HEADER(ApplicationServices/ApplicationServices.h,AC_DEFINE(HAVE_APPLICATIONSERVICES_H))
372 AC_CHECK_HEADER(CoreFoundation/CoreFoundation.h,AC_DEFINE(HAVE_COREFOUNDATION_H))
373 AC_CHECK_HEADER(CoreFoundation/CFPriv.h,AC_DEFINE(HAVE_CFPRIV_H))
374 AC_CHECK_HEADER(CoreFoundation/CFBundlePriv.h,AC_DEFINE(HAVE_CFBUNDLEPRIV_H))
376 dnl Check for dynamic store function...
377 AC_CHECK_FUNCS(SCDynamicStoreCopyComputerName)
379 dnl Check for the new membership functions in MacOSX 10.4...
380 AC_CHECK_HEADER(membership.h,AC_DEFINE(HAVE_MEMBERSHIP_H))
381 AC_CHECK_HEADER(membershipPriv.h,AC_DEFINE(HAVE_MEMBERSHIPPRIV_H))
382 AC_CHECK_FUNCS(mbr_uid_to_uuid)
384 dnl Need <dlfcn.h> header...
385 AC_CHECK_HEADER(dlfcn.h,AC_DEFINE(HAVE_DLFCN_H))
387 dnl Check for notify_post support
388 AC_CHECK_HEADER(notify.h,AC_DEFINE(HAVE_NOTIFY_H))
389 AC_CHECK_FUNCS(notify_post)
391 dnl Check for Authorization Services support
392 AC_ARG_WITH(adminkey, [ --with-adminkey set the default SystemAuthKey value],
393 default_adminkey="$withval",
394 default_adminkey="default")
395 AC_ARG_WITH(operkey, [ --with-operkey set the default operator @AUTHKEY value],
396 default_operkey="$withval",
397 default_operkey="default")
399 AC_CHECK_HEADER(Security/Authorization.h, [
400 AC_DEFINE(HAVE_AUTHORIZATION_H)
402 if test "x$default_adminkey" != xdefault; then
403 CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey $default_adminkey"
404 CUPS_DEFAULT_SYSTEM_AUTHKEY="$default_adminkey"
405 elif grep -q system.print.operator /etc/authorization; then
406 CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.print.admin"
407 CUPS_DEFAULT_SYSTEM_AUTHKEY="system.print.admin"
409 CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.preferences"
410 CUPS_DEFAULT_SYSTEM_AUTHKEY="system.preferences"
413 if test "x$default_operkey" != xdefault; then
414 CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY($default_operkey) @admin @lpadmin"
415 elif grep -q system.print.operator /etc/authorization; then
416 CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin"
418 CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.admin) @admin @lpadmin"
420 AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H))
422 dnl Check for sandbox/Seatbelt support
423 if test $uversion -ge 100; then
424 AC_CHECK_HEADER(sandbox.h,AC_DEFINE(HAVE_SANDBOX_H))
426 if test $uversion -ge 110 -a $uversion -lt 120; then
427 # Broken public headers in 10.7.x...
428 AC_MSG_CHECKING(for sandbox/private.h presence)
429 if test -f /usr/local/include/sandbox/private.h; then
433 AC_MSG_ERROR(Run 'sudo mkdir -p /usr/local/include/sandbox' and 'sudo touch /usr/local/include/sandbox/private.h' to build CUPS.)
437 dnl Check for XPC support
438 AC_CHECK_HEADER(xpc/xpc.h,
440 INSTALLXPC="install-xpc")
441 AC_CHECK_HEADER(xpc/private.h,
442 AC_DEFINE(HAVE_XPC_PRIVATE_H))
446 AC_SUBST(CUPS_DEFAULT_PRINTOPERATOR_AUTH)
447 AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTOPERATOR_AUTH, "$CUPS_DEFAULT_PRINTOPERATOR_AUTH")
448 AC_DEFINE_UNQUOTED(CUPS_DEFAULT_SYSTEM_AUTHKEY, "$CUPS_DEFAULT_SYSTEM_AUTHKEY")
449 AC_SUBST(CUPS_SYSTEM_AUTHKEY)
452 dnl Check for build components
455 AC_ARG_WITH(components, [ --with-components set components to build:
456 - "all" (default) builds everything
457 - "core" builds libcups and ipptool],
458 COMPONENTS="$withval")
460 case "$COMPONENTS" in
462 BUILDDIRS="filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates"
466 BUILDDIRS="data locale"
470 AC_MSG_ERROR([Bad build component "$COMPONENT" specified!])