• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1dnl
2dnl Common configuration stuff for CUPS.
3dnl
4dnl Copyright © 2020-2025 by OpenPrinting.
5dnl Copyright © 2007-2019 by Apple Inc.
6dnl Copyright © 1997-2007 by Easy Software Products, all rights reserved.
7dnl
8dnl Licensed under Apache License v2.0.  See the file "LICENSE" for more
9dnl information.
10dnl
11
12dnl Set the name of the config header file...
13AC_CONFIG_HEADERS([config.h])
14
15dnl Version number information...
16CUPS_VERSION="AC_PACKAGE_VERSION"
17CUPS_API_VERSION="$(echo AC_PACKAGE_VERSION | awk -F. '{print $1 "." $2}')"
18CUPS_BUILD="cups-$CUPS_VERSION"
19
20AC_ARG_WITH([cups_build], AS_HELP_STRING([--with-cups-build], [set "pkg-config --variable=build" string]), [
21    CUPS_BUILD="$withval"
22])
23
24AC_SUBST([CUPS_API_VERSION])
25AC_SUBST([CUPS_BUILD])
26AC_SUBST([CUPS_VERSION])
27AC_DEFINE_UNQUOTED([CUPS_SVERSION], ["AC_PACKAGE_NAME v$CUPS_VERSION"], [Version number])
28AC_DEFINE_UNQUOTED([CUPS_MINIMAL], ["AC_PACKAGE_NAME/$CUPS_VERSION"], [Version for HTTP headers])
29
30dnl Default compiler flags...
31CFLAGS="${CFLAGS:=}"
32CPPFLAGS="${CPPFLAGS:=}"
33CXXFLAGS="${CXXFLAGS:=}"
34LDFLAGS="${LDFLAGS:=}"
35
36dnl Checks for programs...
37AC_PROG_AWK
38AC_PROG_CC
39AC_PROG_CPP
40AC_PROG_CXX
41AC_PROG_RANLIB
42AC_PATH_PROG([AR], [ar])
43AC_PATH_PROG([CHMOD], [chmod])
44AC_PATH_PROG([GZIPPROG], [gzip])
45AC_MSG_CHECKING([for install-sh script])
46INSTALL="`pwd`/install-sh"
47AC_SUBST([INSTALL])
48AC_MSG_RESULT([using $INSTALL])
49AC_PATH_PROG([LD], [ld])
50AC_PATH_PROG([LN], [ln])
51AC_PATH_PROG([MKDIR], [mkdir])
52AC_PATH_PROG([MV], [mv])
53AC_PATH_PROG([RM], [rm])
54AC_PATH_PROG([RMDIR], [rmdir])
55AC_PATH_PROG([SED], [sed])
56AC_PATH_PROG([XDGOPEN], [xdg-open])
57
58AS_IF([test "x$XDGOPEN" = x], [
59    CUPS_HTMLVIEW="htmlview"
60], [
61    CUPS_HTMLVIEW="$XDGOPEN"
62])
63AC_SUBST([CUPS_HTMLVIEW])
64
65AS_IF([test "x$AR" = x], [
66    AC_MSG_ERROR([Unable to find required library archive command.])
67])
68AS_IF([test "x$CC" = x], [
69    AC_MSG_ERROR([Unable to find required C compiler command.])
70])
71
72dnl Static library option...
73INSTALLSTATIC=""
74AC_ARG_ENABLE([static], AS_HELP_STRING([--enable-static], [install static libraries]))
75
76AS_IF([test x$enable_static = xyes], [
77    AC_MSG_NOTICE([Installing static libraries...])
78    INSTALLSTATIC="installstatic"
79])
80
81AC_SUBST([INSTALLSTATIC])
82
83dnl Check for pkg-config, which is used for some other tests later on...
84AC_PATH_TOOL([PKGCONFIG], [pkg-config])
85PKGCONFIG_CFLAGS=""
86PKGCONFIG_LIBS=""
87PKGCONFIG_LIBS_STATIC=""
88PKGCONFIG_REQUIRES=""
89AC_SUBST([PKGCONFIG_CFLAGS])
90AC_SUBST([PKGCONFIG_LIBS])
91AC_SUBST([PKGCONFIG_LIBS_STATIC])
92AC_SUBST([PKGCONFIG_REQUIRES])
93
94dnl Check for libraries...
95AC_SEARCH_LIBS([abs], [m], [AC_DEFINE(HAVE_ABS)])
96AC_SEARCH_LIBS([crypt], [crypt])
97AC_SEARCH_LIBS([fmod], [m])
98AC_SEARCH_LIBS([getspent], [sec gen])
99
100LIBMALLOC=""
101AC_ARG_ENABLE([mallinfo], AS_HELP_STRING([--enable-mallinfo], [build with malloc debug logging]))
102
103AS_IF([test x$enable_mallinfo = xyes], [
104    SAVELIBS="$LIBS"
105    LIBS=""
106    AC_SEARCH_LIBS([mallinfo], [malloc], [AC_DEFINE(HAVE_MALLINFO)])
107    LIBMALLOC="$LIBS"
108    LIBS="$SAVELIBS"
109])
110
111AC_SUBST([LIBMALLOC])
112
113dnl Check for libpaper support...
114AC_ARG_ENABLE([libpaper], AS_HELP_STRING([--enable-libpaper], [build with libpaper support]))
115
116AS_IF([test x$enable_libpaper = xyes], [
117    AC_CHECK_LIB([paper], [systempapername], [
118	AC_DEFINE([HAVE_LIBPAPER], [1], [Have paper library?])
119	LIBPAPER="-lpaper"
120    ], [
121	LIBPAPER=""
122    ])
123], [
124    LIBPAPER=""
125])
126AC_SUBST([LIBPAPER])
127
128dnl Checks for header files.
129AC_CHECK_HEADER([crypt.h], AC_DEFINE([HAVE_CRYPT_H], [1], [Have <crypt.h> header?]))
130AC_CHECK_HEADER([langinfo.h], AC_DEFINE([HAVE_LANGINFO_H], [1], [Have <langinfo.h> header?]))
131AC_CHECK_HEADER([malloc.h], AC_DEFINE([HAVE_MALLOC_H], [1], [Have <malloc.h> header?]))
132AC_CHECK_HEADER([shadow.h], AC_DEFINE([HAVE_SHADOW_H], [1], [Have <shadow.h> header?]))
133AC_CHECK_HEADER([stdint.h], AC_DEFINE([HAVE_STDINT_H], [1], [Have <stdint.h> header?]))
134AC_CHECK_HEADER([sys/ioctl.h], AC_DEFINE([HAVE_SYS_IOCTL_H], [1], [Have <sys/ioctl.h> header?]))
135AC_CHECK_HEADER([sys/param.h], AC_DEFINE([HAVE_SYS_PARAM_H], [1], [Have <sys/param.h> header?]))
136AC_CHECK_HEADER([sys/ucred.h], AC_DEFINE([HAVE_SYS_UCRED_H], [1], [Have <sys/ucred.h> header?]))
137
138dnl Checks for iconv.h and iconv_open
139AC_CHECK_HEADER([iconv.h], [
140    SAVELIBS="$LIBS"
141    LIBS=""
142    AC_SEARCH_LIBS([iconv_open], [iconv], [
143        AC_DEFINE([HAVE_ICONV_H], [1], [Have <iconv.h> header?])
144	SAVELIBS="$SAVELIBS $LIBS"
145    ])
146    AC_SEARCH_LIBS([libiconv_open], [iconv], [
147	AC_DEFINE([HAVE_ICONV_H], [1], [Have <iconv.h> header?])
148	SAVELIBS="$SAVELIBS $LIBS"
149    ])
150    LIBS="$SAVELIBS"
151])
152
153dnl Checks for statfs and its many headers...
154AC_CHECK_HEADER([sys/mount.h], AC_DEFINE([HAVE_SYS_MOUNT_H], [1], [Have <sys/mount.h> header?]))
155AC_CHECK_HEADER([sys/statfs.h], AC_DEFINE([HAVE_SYS_STATFS_H], [1], [Have <sys/statfs.h> header?]))
156AC_CHECK_HEADER([sys/statvfs.h], AC_DEFINE([HAVE_SYS_STATVFS_H], [1], [Have <sys/statvfs.h> header?]))
157AC_CHECK_HEADER([sys/vfs.h], AC_DEFINE([HAVE_SYS_VFS_H], [1], [Have <sys/vfs.h> header?]))
158AC_CHECK_FUNCS([statfs statvfs])
159
160dnl Checks for string functions.
161dnl TODO: Remove strdup, snprintf, and vsnprintf checks since they are C99?
162AC_CHECK_FUNCS([strdup snprintf vsnprintf])
163AC_CHECK_FUNCS([strlcat strlcpy])
164
165dnl Check for random number functions...
166AC_CHECK_FUNCS([random lrand48 arc4random])
167
168dnl Check for geteuid function.
169AC_CHECK_FUNCS([geteuid])
170
171dnl Check for setpgid function.
172AC_CHECK_FUNCS([setpgid])
173
174dnl Check for vsyslog function.
175AC_CHECK_FUNCS([vsyslog])
176
177dnl Checks for signal functions.
178AS_CASE(["$host_os_name"], [linux* | gnu*], [
179    # Do not use sigset on Linux or GNU HURD
180], [*], [
181    # Use sigset on other platforms, if available
182    AC_CHECK_FUNCS([sigset])
183])
184
185AC_CHECK_FUNCS([sigaction])
186
187dnl Checks for wait functions.
188AC_CHECK_FUNCS([waitpid wait3])
189
190dnl Check for posix_spawn
191AC_CHECK_FUNCS([posix_spawn])
192
193dnl Check for getgrouplist
194AC_CHECK_FUNCS([getgrouplist])
195
196dnl See if the tm structure has the tm_gmtoff member...
197AC_MSG_CHECKING([for tm_gmtoff member in tm structure])
198AC_COMPILE_IFELSE([
199    AC_LANG_PROGRAM([[#include <time.h>]], [[
200        struct tm t;
201	int o = t.tm_gmtoff;
202    ]])
203], [
204    AC_MSG_RESULT([yes])
205    AC_DEFINE([HAVE_TM_GMTOFF], [1], [Have tm_gmtoff member in struct tm?])
206], [
207    AC_MSG_RESULT([no])
208])
209
210dnl See if we have the timegm function...
211AC_CHECK_FUNC([timegm], [
212    AC_DEFINE([HAVE_TIMEGM], [1], [Do we have the timegm function?])
213])
214
215dnl See if the stat structure has the st_gen member...
216AC_MSG_CHECKING([for st_gen member in stat structure])
217AC_COMPILE_IFELSE([
218    AC_LANG_PROGRAM([[#include <sys/stat.h>]], [[
219        struct stat t;
220	int o = t.st_gen;
221    ]])
222], [
223    AC_MSG_RESULT([yes])
224    AC_DEFINE([HAVE_ST_GEN], [1], [Have st_gen member in struct stat?])
225], [
226    AC_MSG_RESULT([no])
227])
228
229dnl See if we have the removefile(3) function for securely removing files
230AC_CHECK_FUNCS([removefile])
231
232dnl See if we have libusb...
233AC_ARG_ENABLE([libusb], AS_HELP_STRING([--enable-libusb], [use libusb for USB printing]))
234
235LIBUSB=""
236USBQUIRKS=""
237AC_SUBST([LIBUSB])
238AC_SUBST([USBQUIRKS])
239
240AS_IF([test "x$PKGCONFIG" != x], [
241    AS_IF([test x$enable_libusb != xno -a $host_os_name != darwin], [
242	AC_MSG_CHECKING([for libusb-1.0])
243	AS_IF([$PKGCONFIG --exists libusb-1.0], [
244	    AC_MSG_RESULT([yes])
245	    AC_DEFINE([HAVE_LIBUSB], [1], [Have usb library?])
246	    CFLAGS="$CFLAGS $($PKGCONFIG --cflags libusb-1.0)"
247	    LIBUSB="$($PKGCONFIG --libs libusb-1.0)"
248	    USBQUIRKS="\$(DATADIR)/usb"
249	], [
250	    AC_MSG_RESULT([no])
251	    AS_IF([test x$enable_libusb = xyes], [
252		AC_MSG_ERROR([libusb required for --enable-libusb.])
253	    ])
254	])
255    ])
256], [test x$enable_libusb = xyes], [
257    AC_MSG_ERROR([Need pkg-config to enable libusb support.])
258])
259
260dnl See if we have libwrap for TCP wrappers support...
261AC_ARG_ENABLE([tcp_wrappers], AS_HELP_STRING([--enable-tcp-wrappers], [use libwrap for TCP wrappers support]))
262
263LIBWRAP=""
264AC_SUBST([LIBWRAP])
265
266AS_IF([test x$enable_tcp_wrappers = xyes], [
267    AC_CHECK_LIB([wrap], [hosts_access], [
268	AC_CHECK_HEADER([tcpd.h], [
269	    AC_DEFINE([HAVE_TCPD_H], [1], [Have <tcpd.h> header?])
270	    LIBWRAP="-lwrap"
271	])
272    ])
273])
274
275dnl ZLIB
276INSTALL_GZIP=""
277LIBZ=""
278AC_CHECK_HEADER([zlib.h], [
279    AC_CHECK_LIB([z], [gzgets], [
280	AC_DEFINE([HAVE_LIBZ], [1], [Have zlib library?])
281	LIBZ="-lz"
282	LIBS="$LIBS -lz"
283	AC_CHECK_LIB([z], [inflateCopy], [
284	    AC_DEFINE([HAVE_INFLATECOPY], [1], [Have inflateCopy function?])
285	])
286	AS_IF([test "x$GZIPPROG" != x], [
287	    INSTALL_GZIP="-z"
288	])
289    ])
290])
291AC_SUBST([INSTALL_GZIP])
292AC_SUBST([LIBZ])
293
294PKGCONFIG_LIBS_STATIC="$PKGCONFIG_LIBS_STATIC $LIBZ"
295
296dnl Flags for "ar" command...
297AS_CASE([host_os_name], [darwin* | *bsd*], [
298    ARFLAGS="-rcv"
299], [*], [
300    ARFLAGS="crvs"
301])
302AC_SUBST([ARFLAGS])
303
304dnl Prep libraries specifically for cupsd and backends...
305BACKLIBS=""
306SERVERLIBS=""
307AC_SUBST([BACKLIBS])
308AC_SUBST([SERVERLIBS])
309
310dnl See if we have POSIX ACL support...
311SAVELIBS="$LIBS"
312LIBS=""
313AC_ARG_ENABLE([acl], AS_HELP_STRING([--enable-acl], [build with POSIX ACL support]))
314AS_IF([test "x$enable_acl" != xno], [
315    AC_SEARCH_LIBS([acl_init], [acl], [
316        AC_DEFINE([HAVE_ACL_INIT], [1], [Have acl_init function?])
317    ])
318    SERVERLIBS="$SERVERLIBS $LIBS"
319])
320LIBS="$SAVELIBS"
321
322dnl Check for DBUS support
323DBUSDIR=""
324DBUS_NOTIFIER=""
325DBUS_NOTIFIERLIBS=""
326
327AC_ARG_ENABLE([dbus], AS_HELP_STRING([--disable-dbus], [build without DBUS support]))
328AC_ARG_WITH([dbusdir], AS_HELP_STRING([--with-dbusdir], [set DBUS configuration directory]), [
329    DBUSDIR="$withval"
330])
331
332AS_IF([test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdarwin], [
333    AC_MSG_CHECKING([for DBUS])
334    AS_IF([$PKGCONFIG --exists dbus-1], [
335	AC_MSG_RESULT([yes])
336	AC_DEFINE([HAVE_DBUS], [1], [Have dbus library?])
337	CFLAGS="$CFLAGS $($PKGCONFIG --cflags dbus-1) -DDBUS_API_SUBJECT_TO_CHANGE"
338	SERVERLIBS="$SERVERLIBS $($PKGCONFIG --libs dbus-1)"
339	DBUS_NOTIFIER="dbus"
340	DBUS_NOTIFIERLIBS="$($PKGCONFIG --libs dbus-1)"
341	SAVELIBS="$LIBS"
342	LIBS="$LIBS $DBUS_NOTIFIERLIBS"
343	AC_CHECK_FUNC([dbus_message_iter_init_append], [
344	    AC_DEFINE([HAVE_DBUS_MESSAGE_ITER_INIT_APPEND], [1], [Have dbus_message_iter_init_append function?])
345	])
346	AC_CHECK_FUNC([dbus_threads_init_default], [
347	    AC_DEFINE([HAVE_DBUS_THREADS_INIT], [1], [Have dbus_threads_init_default function?])
348	])
349	LIBS="$SAVELIBS"
350	AS_IF([test -d /etc/dbus-1 -a "x$DBUSDIR" = x], [
351	    DBUSDIR="/etc/dbus-1"
352	])
353    ], [
354	AC_MSG_RESULT([no])
355    ])
356])
357
358AC_SUBST([DBUSDIR])
359AC_SUBST([DBUS_NOTIFIER])
360AC_SUBST([DBUS_NOTIFIERLIBS])
361
362dnl Extra platform-specific libraries...
363CUPS_DEFAULT_PRINTOPERATOR_AUTH="@SYSTEM"
364CUPS_DEFAULT_SYSTEM_AUTHKEY=""
365CUPS_SYSTEM_AUTHKEY=""
366INSTALLXPC=""
367
368AS_CASE([$host_os_name], [darwin*], [
369    BACKLIBS="$BACKLIBS -framework IOKit"
370    SERVERLIBS="$SERVERLIBS -framework IOKit -weak_framework ApplicationServices"
371    LIBS="-framework CoreFoundation -framework Security $LIBS"
372    PKGCONFIG_LIBS_STATIC="$PKGCONFIG_LIBS_STATIC -framework CoreFoundation -framework Security"
373
374    dnl Check for framework headers...
375    AC_CHECK_HEADER([ApplicationServices/ApplicationServices.h], [
376        AC_DEFINE([HAVE_APPLICATIONSERVICES_H], [1], [Have <ApplicationServices/ApplicationServices.h>?])
377    ])
378    AC_CHECK_HEADER([CoreFoundation/CoreFoundation.h], [
379        AC_DEFINE([HAVE_COREFOUNDATION_H], [1], [Have <CoreFoundation/CoreFoundation.h>?])
380    ])
381
382    dnl Check for dynamic store function...
383    SAVELIBS="$LIBS"
384    LIBS="-framework SystemConfiguration $LIBS"
385    AC_CHECK_FUNCS([SCDynamicStoreCopyComputerName], [
386	AC_DEFINE([HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME], [1], [Have SCDynamicStoreCopyComputerName function?])
387    ],[
388	LIBS="$SAVELIBS"
389    ])
390
391    dnl Check for the new membership functions in MacOSX 10.4...
392    AC_CHECK_HEADER([membership.h], [
393        AC_DEFINE([HAVE_MEMBERSHIP_H], [1], [Have <membership.h>?])
394    ])
395    AC_CHECK_FUNCS([mbr_uid_to_uuid])
396
397    dnl Need <dlfcn.h> header...
398    AC_CHECK_HEADER([dlfcn.h], [
399        AC_DEFINE([HAVE_DLFCN_H], [1], [Have <dlfcn.h>?])
400    ])
401
402    dnl Check for notify_post support
403    AC_CHECK_HEADER([notify.h], [
404        AC_DEFINE([HAVE_NOTIFY_H], [1], [Have <notify.h>?])
405    ])
406    AC_CHECK_FUNCS(notify_post)
407
408    dnl Check for Authorization Services support
409    AC_ARG_WITH([adminkey], AS_HELP_STRING([--with-adminkey], [set the default SystemAuthKey value]), [
410	default_adminkey="$withval"
411    ], [
412	default_adminkey="default"
413    ])
414    AC_ARG_WITH([operkey], AS_HELP_STRING([--with-operkey], [set the default operator @AUTHKEY value]), [
415	default_operkey="$withval"
416    ], [
417	default_operkey="default"
418    ])
419
420    AC_CHECK_HEADER([Security/Authorization.h], [
421	AC_DEFINE([HAVE_AUTHORIZATION_H], [1], [Have <Security/Authorization.h>?])
422
423	AS_IF([test "x$default_adminkey" != xdefault], [
424	    CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey $default_adminkey"
425	    CUPS_DEFAULT_SYSTEM_AUTHKEY="$default_adminkey"
426	], [
427	    CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.print.admin"
428	    CUPS_DEFAULT_SYSTEM_AUTHKEY="system.print.admin"
429	])
430
431	AS_IF([test "x$default_operkey" != xdefault], [
432	    CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY($default_operkey) @admin @lpadmin"
433	], [
434	    CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin"
435	])
436    ])
437
438    dnl Check for sandbox/Seatbelt support
439    AC_CHECK_HEADER([sandbox.h], [
440        AC_DEFINE([HAVE_SANDBOX_H], [1], [Have <sandbox.h>?])
441    ])
442
443    dnl Check for XPC support
444    AC_CHECK_HEADER([xpc/xpc.h], [
445	AC_DEFINE([HAVE_XPC], [1], [Have <xpc.h>?])
446	INSTALLXPC="install-xpc"
447    ])
448])
449
450AC_SUBST([CUPS_DEFAULT_PRINTOPERATOR_AUTH])
451AC_DEFINE_UNQUOTED([CUPS_DEFAULT_PRINTOPERATOR_AUTH], ["$CUPS_DEFAULT_PRINTOPERATOR_AUTH"], [Default authorization for print operators?])
452AC_DEFINE_UNQUOTED([CUPS_DEFAULT_SYSTEM_AUTHKEY], ["$CUPS_DEFAULT_SYSTEM_AUTHKEY"], [Default system authorization key for macOS?])
453AC_SUBST([CUPS_SYSTEM_AUTHKEY])
454AC_SUBST([INSTALLXPC])
455
456dnl Check for build components
457COMPONENTS="all"
458
459AC_ARG_WITH([components], AS_HELP_STRING([--with-components], [set components to build: "all" (default) builds everything, "core" builds libcups and ipptool, "libcups" builds just libcups, "libcupslite" builds just libcups without driver support]), [
460    COMPONENTS="$withval"
461])
462
463cupsimagebase="cupsimage"
464IPPEVECOMMANDS="ippevepcl ippeveps"
465LIBCUPSOBJS="\$(COREOBJS) \$(DRIVEROBJS)"
466LIBHEADERS="\$(COREHEADERS) \$(DRIVERHEADERS)"
467LIBHEADERSPRIV="\$(COREHEADERSPRIV) \$(DRIVERHEADERSPRIV)"
468
469AS_CASE(["$COMPONENTS"], [all], [
470    BUILDDIRS="tools filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates"
471], [core], [
472    BUILDDIRS="tools examples locale"
473], [corelite], [
474    AC_DEFINE([CUPS_LITE], [1], [Building CUPS without driver support?])
475    BUILDDIRS="tools examples locale"
476    cupsimagebase=""
477    LIBCUPSOBJS="\$(COREOBJS)"
478    LIBHEADERS="\$(COREHEADERS)"
479    LIBHEADERSPRIV="\$(COREHEADERSPRIV)"
480], [libcups], [
481    BUILDDIRS="locale"
482    cupsimagebase=""
483], [libcupslite], [
484    AC_DEFINE([CUPS_LITE], [1], [Building CUPS without driver support?])
485    BUILDDIRS="locale"
486    cupsimagebase=""
487    LIBCUPSOBJS="\$(COREOBJS)"
488    LIBHEADERS="\$(COREHEADERS)"
489    LIBHEADERSPRIV="\$(COREHEADERSPRIV)"
490], [*], [
491    AC_MSG_ERROR([Bad build component "$COMPONENTS" specified.])
492])
493
494AC_SUBST([BUILDDIRS])
495AC_SUBST([IPPEVECOMMANDS])
496AC_SUBST([LIBCUPSOBJS])
497AC_SUBST([LIBHEADERS])
498AC_SUBST([LIBHEADERSPRIV])
499