cups-startup.m4   [plain text]


dnl
dnl Launch-on-demand/startup stuff for CUPS.
dnl
dnl Copyright 2007-2017 by Apple Inc.
dnl Copyright 1997-2005 by Easy Software Products, all rights reserved.
dnl
dnl Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
dnl

ONDEMANDFLAGS=""
ONDEMANDLIBS=""
AC_SUBST(ONDEMANDFLAGS)
AC_SUBST(ONDEMANDLIBS)

dnl Launchd is used on macOS/Darwin...
AC_ARG_ENABLE(launchd, [  --disable-launchd       disable launchd support])
LAUNCHD_DIR=""
AC_SUBST(LAUNCHD_DIR)

if test x$enable_launchd != xno; then
	AC_CHECK_FUNC(launch_activate_socket, [
		AC_DEFINE(HAVE_LAUNCHD)
		AC_DEFINE(HAVE_ONDEMAND)])
	AC_CHECK_HEADER(launch.h, AC_DEFINE(HAVE_LAUNCH_H))

	if test "$host_os_name" = darwin; then
	        LAUNCHD_DIR="/System/Library/LaunchDaemons"
		# liblaunch is already part of libSystem
	fi
fi

dnl Systemd is used on Linux...
AC_ARG_ENABLE(systemd, [  --disable-systemd       disable systemd support])
AC_ARG_WITH(systemd, [  --with-systemd          set directory for systemd service files],
        SYSTEMD_DIR="$withval", SYSTEMD_DIR="")
AC_SUBST(SYSTEMD_DIR)

if test x$enable_systemd != xno; then
	if test "x$PKGCONFIG" = x; then
        	if test x$enable_systemd = xyes; then
	        	AC_MSG_ERROR(Need pkg-config to enable systemd support.)
                fi
        else
        	have_systemd=no
        	AC_MSG_CHECKING(for libsystemd)
                if $PKGCONFIG --exists libsystemd; then
                        AC_MSG_RESULT(yes)
                        have_systemd=yes
                        ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd`
                        ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd`
		elif $PKGCONFIG --exists libsystemd-daemon; then
			AC_MSG_RESULT(yes - legacy)
                        have_systemd=yes
			ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd-daemon`
			ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd-daemon`

			if $PKGCONFIG --exists libsystemd-journal; then
				ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`"
				ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`"
			fi
                else
                        AC_MSG_RESULT(no)
                fi

		if test $have_systemd = yes; then
                        AC_DEFINE(HAVE_SYSTEMD)
                        AC_DEFINE(HAVE_ONDEMAND)
			AC_CHECK_HEADER(systemd/sd-journal.h,AC_DEFINE(HAVE_SYSTEMD_SD_JOURNAL_H))
			if test "x$SYSTEMD_DIR" = x; then
			        SYSTEMD_DIR="`$PKGCONFIG --variable=systemdsystemunitdir systemd`"
                        fi
                fi
        fi
fi

dnl Upstart is also used on Linux (e.g., Chrome OS)
AC_ARG_ENABLE(upstart, [  --enable-upstart        enable upstart support])
if test "x$enable_upstart" = "xyes"; then
	if test "x$have_systemd" = "xyes"; then
		AC_MSG_ERROR(Cannot support both systemd and upstart.)
	fi
	AC_DEFINE(HAVE_UPSTART)
	AC_DEFINE(HAVE_ONDEMAND)
fi

dnl Solaris uses smf
SMFMANIFESTDIR=""
AC_SUBST(SMFMANIFESTDIR)
AC_ARG_WITH(smfmanifestdir, [  --with-smfmanifestdir   set path for Solaris SMF manifest],SMFMANIFESTDIR="$withval")

dnl Use init on other platforms...
AC_ARG_WITH(rcdir, [  --with-rcdir            set path for rc scripts],rcdir="$withval",rcdir="")
AC_ARG_WITH(rclevels, [  --with-rclevels         set run levels for rc scripts],rclevels="$withval",rclevels="2 3 5")
AC_ARG_WITH(rcstart, [  --with-rcstart          set start number for rc scripts],rcstart="$withval",rcstart="")
AC_ARG_WITH(rcstop, [  --with-rcstop           set stop number for rc scripts],rcstop="$withval",rcstop="")

if test x$rcdir = x; then
	if test x$LAUNCHD_DIR = x -a x$SYSTEMD_DIR = x -a x$SMFMANIFESTDIR = x; then
                # Fall back on "init", the original service startup interface...
                if test -d /sbin/init.d; then
                        # SuSE
                        rcdir="/sbin/init.d"
                elif test -d /etc/init.d; then
                        # Others
                        rcdir="/etc"
                else
                        # RedHat, NetBSD
                        rcdir="/etc/rc.d"
                fi
        else
        	rcdir="no"
	fi
fi

if test "x$rcstart" = x; then
	case "$host_os_name" in
        	linux* | gnu*)
                	# Linux
                        rcstart="81"
                      	;;

		sunos*)
			# Solaris
                        rcstart="81"
			;;

                *)
                        # Others
                        rcstart="99"
                        ;;
	esac
fi

if test "x$rcstop" = x; then
	case "$host_os_name" in
        	linux* | gnu*)
                	# Linux
                        rcstop="36"
                      	;;

                *)
                        # Others
                        rcstop="00"
                        ;;
	esac
fi

INITDIR=""
INITDDIR=""
RCLEVELS="$rclevels"
RCSTART="$rcstart"
RCSTOP="$rcstop"
AC_SUBST(INITDIR)
AC_SUBST(INITDDIR)
AC_SUBST(RCLEVELS)
AC_SUBST(RCSTART)
AC_SUBST(RCSTOP)

if test "x$rcdir" != xno; then
	if test "x$rclevels" = x; then
		INITDDIR="$rcdir"
	else
		INITDIR="$rcdir"
	fi
fi

dnl Xinetd support...
AC_ARG_WITH(xinetd, [  --with-xinetd           set path for xinetd config files],xinetd="$withval",xinetd="")
XINETD=""
AC_SUBST(XINETD)

if test "x$xinetd" = x; then
	if test ! -x /sbin/launchd; then
                for dir in /etc/xinetd.d /usr/local/etc/xinetd.d; do
                        if test -d $dir; then
                                XINETD="$dir"
                                break
                        fi
                done
        fi
elif test "x$xinetd" != xno; then
	XINETD="$xinetd"
fi