/*
 * Configuration file for CUPS.
 *
 * Copyright 2007-2019 by Apple Inc.
 * Copyright 1997-2007 by Easy Software Products.
 *
 * Licensed under Apache License v2.0.  See the file "LICENSE" for more
 * information.
 */

#ifndef _CUPS_CONFIG_H_
#define _CUPS_CONFIG_H_

/*
 * Version of software...
 */

#define CUPS_SVERSION	""
#define CUPS_MINIMAL	""
#define CUPS_LITE	0


/*
 * Default user and groups...
 */

#define CUPS_DEFAULT_USER	"lp"
#define CUPS_DEFAULT_GROUP	"sys"
#define CUPS_DEFAULT_SYSTEM_GROUPS	"sys root system"
#define CUPS_DEFAULT_PRINTOPERATOR_AUTH	"@SYSTEM"
#define CUPS_DEFAULT_SYSTEM_AUTHKEY	"system.print.admin"


/*
 * Default file permissions...
 */

#define CUPS_DEFAULT_CONFIG_FILE_PERM	0640
#define CUPS_DEFAULT_LOG_FILE_PERM	0644


/*
 * Default logging settings...
 */

#define CUPS_DEFAULT_LOG_LEVEL	"warn"
#define CUPS_DEFAULT_ACCESS_LOG_LEVEL "actions"


/*
 * Default fatal error settings...
 */

#define CUPS_DEFAULT_FATAL_ERRORS	"config"


/*
 * Default browsing settings...
 */

#define CUPS_DEFAULT_BROWSING	1
#define CUPS_DEFAULT_BROWSE_LOCAL_PROTOCOLS	""
#define CUPS_DEFAULT_DEFAULT_SHARED 1


/*
 * Default IPP port...
 */

#define CUPS_DEFAULT_IPP_PORT	631


/*
 * Default printcap file...
 */

#define CUPS_DEFAULT_PRINTCAP	"/etc/printcap"


/*
 * Default Samba and LPD config files...
 */

#define CUPS_DEFAULT_SMB_CONFIG_FILE	""
#define CUPS_DEFAULT_LPD_CONFIG_FILE	""


/*
 * Default MaxCopies value...
 */

#define CUPS_DEFAULT_MAX_COPIES	9999


/*
 * Do we have domain socket support, and if so what is the default one?
 */

#undef CUPS_DEFAULT_DOMAINSOCKET


/*
 * Default WebInterface value...
 */

#undef CUPS_DEFAULT_WEBIF


/*
 * Where are files stored?
 *
 * Note: These are defaults, which can be overridden by environment
 *       variables at run-time...
 */

#define CUPS_BINDIR	"/usr/bin"
#define CUPS_CACHEDIR	"/var/cache/cups"
#define CUPS_DATADIR    "/usr/share/cups"
#define CUPS_DOCROOT	"/usr/share/doc/cups"
#define CUPS_FONTPATH	"/usr/share/cups/fonts"
#define CUPS_LOCALEDIR	"/usr/share/locale"
#define CUPS_LOGDIR	"/var/logs/cups"
#define CUPS_REQUESTS	"/var/spool/cups"
#define CUPS_SBINDIR	"/usr/sbin"
#define CUPS_SERVERBIN	"/usr/lib/cups"
#define CUPS_SERVERROOT	"/etc/cups"
#define CUPS_STATEDIR	"/var/run/cups"


/*
 * Do we have posix_spawn?
 */

#undef HAVE_POSIX_SPAWN


/*
 * Do we have ZLIB?
 */

#undef HAVE_LIBZ
#undef HAVE_INFLATECOPY


/*
 * Do we have PAM stuff?
 */

#define HAVE_LIBPAM 0
#undef HAVE_PAM_PAM_APPL_H
#undef HAVE_PAM_SET_ITEM
#undef HAVE_PAM_SETCRED


/*
 * Do we have <shadow.h>?
 */

#undef HAVE_SHADOW_H


/*
 * Do we have <crypt.h>?
 */

#undef HAVE_CRYPT_H


/*
 * Use <stdint.h>?
 */

#undef HAVE_STDINT_H


/*
 * Use <string.h>, <strings.h>, and/or <bstring.h>?
 */

#undef HAVE_STRING_H
#undef HAVE_STRINGS_H
#undef HAVE_BSTRING_H


/*
 * Do we have the long long type?
 */

#undef HAVE_LONG_LONG

#ifdef HAVE_LONG_LONG
#  define CUPS_LLFMT	"%lld"
#  define CUPS_LLCAST	(long long)
#else
#  define CUPS_LLFMT	"%ld"
#  define CUPS_LLCAST	(long)
#endif /* HAVE_LONG_LONG */


/*
 * Do we have the strtoll() function?
 */

#undef HAVE_STRTOLL

#ifndef HAVE_STRTOLL
#  define strtoll(nptr,endptr,base) strtol((nptr), (endptr), (base))
#endif /* !HAVE_STRTOLL */


/*
 * Do we have the strXXX() functions?
 */

#undef HAVE_STRDUP
#undef HAVE_STRLCAT
#undef HAVE_STRLCPY


/*
 * Do we have the geteuid() function?
 */

#undef HAVE_GETEUID


/*
 * Do we have the setpgid() function?
 */

#undef HAVE_SETPGID


/*
 * Do we have the vsyslog() function?
 */

#undef HAVE_VSYSLOG


/*
 * Do we have the systemd journal functions?
 */

#undef HAVE_SYSTEMD_SD_JOURNAL_H


/*
 * Do we have the (v)snprintf() functions?
 */

#undef HAVE_SNPRINTF
#undef HAVE_VSNPRINTF


/*
 * What signal functions to use?
 */

#undef HAVE_SIGSET
#undef HAVE_SIGACTION


/*
 * What wait functions to use?
 */

#undef HAVE_WAITPID
#undef HAVE_WAIT3


/*
 * Do we have the mallinfo function and malloc.h?
 */

#undef HAVE_MALLINFO
#undef HAVE_MALLOC_H


/*
 * Do we have the POSIX ACL functions?
 */

#undef HAVE_ACL_INIT


/*
 * Do we have the langinfo.h header file?
 */

#undef HAVE_LANGINFO_H


/*
 * Which encryption libraries do we have?
 */

#undef HAVE_CDSASSL
#undef HAVE_GNUTLS
#undef HAVE_SSPISSL
#undef HAVE_SSL


/*
 * Do we have the gnutls_transport_set_pull_timeout_function function?
 */

#undef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION


/*
 * Do we have the gnutls_priority_set_direct function?
 */

#undef HAVE_GNUTLS_PRIORITY_SET_DIRECT


/*
 * What Security framework headers do we have?
 */

#undef HAVE_AUTHORIZATION_H
#undef HAVE_SECCERTIFICATE_H
#undef HAVE_SECITEM_H
#undef HAVE_SECPOLICY_H


/*
 * Do we have the SecGenerateSelfSignedCertificate function?
 */

#undef HAVE_SECGENERATESELFSIGNEDCERTIFICATE


/*
 * Do we have libpaper?
 */

#undef HAVE_LIBPAPER


/*
 * Do we have mDNSResponder for DNS Service Discovery (aka Bonjour)?
 */

#undef HAVE_DNSSD


/*
 * Do we have Avahi for DNS Service Discovery (aka Bonjour)?
 */

#undef HAVE_AVAHI


/*
 * Do we have <sys/ioctl.h>?
 */

#undef HAVE_SYS_IOCTL_H


/*
 * Does the "stat" structure contain the "st_gen" member?
 */

#undef HAVE_ST_GEN


/*
 * Does the "tm" structure contain the "tm_gmtoff" member?
 */

#undef HAVE_TM_GMTOFF


/*
 * Do we have rresvport_af()?
 */

#undef HAVE_RRESVPORT_AF


/*
 * Do we have getaddrinfo()?
 */

#undef HAVE_GETADDRINFO


/*
 * Do we have getnameinfo()?
 */

#undef HAVE_GETNAMEINFO


/*
 * Do we have getifaddrs()?
 */

#undef HAVE_GETIFADDRS


/*
 * Do we have hstrerror()?
 */

#undef HAVE_HSTRERROR


/*
 * Do we have res_init()?
 */

#undef HAVE_RES_INIT


/*
 * Do we have <resolv.h>
 */

#undef HAVE_RESOLV_H


/*
 * Do we have the <sys/sockio.h> header file?
 */

#undef HAVE_SYS_SOCKIO_H


/*
 * Does the sockaddr structure contain an sa_len parameter?
 */

#undef HAVE_STRUCT_SOCKADDR_SA_LEN


/*
 * Do we have pthread support?
 */

#undef HAVE_PTHREAD_H


/*
 * Do we have on-demand support (launchd/systemd/upstart)?
 */

#undef HAVE_ONDEMAND


/*
 * Do we have launchd support?
 */

#undef HAVE_LAUNCH_H
#undef HAVE_LAUNCHD


/*
 * Do we have systemd support?
 */

#undef HAVE_SYSTEMD


/*
 * Do we have upstart support?
 */

#undef HAVE_UPSTART


/*
 * Do we have CoreFoundation public headers?
 */

#undef HAVE_COREFOUNDATION_H


/*
 * Do we have ApplicationServices public headers?
 */

#undef HAVE_APPLICATIONSERVICES_H


/*
 * Do we have the SCDynamicStoreCopyComputerName function?
 */

#undef HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME


/*
 * Do we have the getgrouplist() function?
 */

#undef HAVE_GETGROUPLIST


/*
 * Do we have macOS 10.4's mbr_XXX functions?
 */

#undef HAVE_MEMBERSHIP_H
#undef HAVE_MBR_UID_TO_UUID


/*
 * Do we have Darwin's notify_post header and function?
 */

#undef HAVE_NOTIFY_H
#undef HAVE_NOTIFY_POST


/*
 * Do we have DBUS?
 */

#undef HAVE_DBUS
#undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND
#undef HAVE_DBUS_THREADS_INIT


/*
 * Do we have the GSSAPI support library (for Kerberos support)?
 */

#undef HAVE_GSS_ACQUIRE_CRED_EX_F
#undef HAVE_GSS_C_NT_HOSTBASED_SERVICE
#undef HAVE_GSS_GSSAPI_H
#undef HAVE_GSS_GSSAPI_SPI_H
#undef HAVE_GSSAPI
#undef HAVE_GSSAPI_GSSAPI_H
#undef HAVE_GSSAPI_H


/*
 * Default GSS service name...
 */

#define CUPS_DEFAULT_GSSSERVICENAME	""


/*
 * Select/poll interfaces...
 */

#undef HAVE_POLL
#undef HAVE_EPOLL
#undef HAVE_KQUEUE


/*
 * Do we have the <dlfcn.h> header?
 */

#undef HAVE_DLFCN_H


/*
 * Do we have <sys/param.h>?
 */

#undef HAVE_SYS_PARAM_H


/*
 * Do we have <sys/ucred.h>?
 */

#undef HAVE_SYS_UCRED_H


/*
 * Do we have removefile()?
 */

#undef HAVE_REMOVEFILE


/*
 * Do we have <sandbox.h>?
 */

#undef HAVE_SANDBOX_H


/*
 * Which random number generator function to use...
 */

#undef HAVE_ARC4RANDOM
#undef HAVE_RANDOM
#undef HAVE_LRAND48

#ifdef HAVE_ARC4RANDOM
#  define CUPS_RAND() arc4random()
#  define CUPS_SRAND(v)
#elif defined(HAVE_RANDOM)
#  define CUPS_RAND() random()
#  define CUPS_SRAND(v) srandom(v)
#elif defined(HAVE_LRAND48)
#  define CUPS_RAND() lrand48()
#  define CUPS_SRAND(v) srand48(v)
#else
#  define CUPS_RAND() rand()
#  define CUPS_SRAND(v) srand(v)
#endif /* HAVE_ARC4RANDOM */


/*
 * Do we have libusb?
 */

#undef HAVE_LIBUSB


/*
 * Do we have libwrap and tcpd.h?
 */

#undef HAVE_TCPD_H


/*
 * Do we have <iconv.h>?
 */

#undef HAVE_ICONV_H


/*
 * Do we have statfs or statvfs and one of the corresponding headers?
 */

#undef HAVE_STATFS
#undef HAVE_STATVFS
#undef HAVE_SYS_MOUNT_H
#undef HAVE_SYS_STATFS_H
#undef HAVE_SYS_STATVFS_H
#undef HAVE_SYS_VFS_H


/*
 * Location of macOS localization bundle, if any.
 */

#undef CUPS_BUNDLEDIR


/*
 * Do we have XPC?
 */

#undef HAVE_XPC


/*
 * Do we have the C99 abs() function?
 */

#undef HAVE_ABS
#if !defined(HAVE_ABS) && !defined(abs)
#  if defined(__GNUC__) || __STDC_VERSION__ >= 199901L
#    define abs(x) _cups_abs(x)
static inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
#  elif defined(_MSC_VER)
#    define abs(x) _cups_abs(x)
static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
#  else
#    define abs(x) ((x) < 0 ? -(x) : (x))
#  endif /* __GNUC__ || __STDC_VERSION__ */
#endif /* !HAVE_ABS && !abs */

#endif /* !_CUPS_CONFIG_H_ */
