diff options
author | Andreas K. Hüttel <dilfridge@gentoo.org> | 2014-04-15 11:34:10 +0000 |
---|---|---|
committer | Andreas K. Hüttel <dilfridge@gentoo.org> | 2014-04-15 11:34:10 +0000 |
commit | 81d6462d5a746fededbac4f8b89bea49b25d179d (patch) | |
tree | df81e378935b238521d7ad99c6fddb94df6351be /net-print | |
parent | Update Ondrej's mail and fix typo. (diff) | |
download | gentoo-2-81d6462d5a746fededbac4f8b89bea49b25d179d.tar.gz gentoo-2-81d6462d5a746fededbac4f8b89bea49b25d179d.tar.bz2 gentoo-2-81d6462d5a746fededbac4f8b89bea49b25d179d.zip |
Version bump, bug 507696; no keywords because of build failures
(Portage version: 2.2.8-r1/cvs/Linux x86_64, signed Manifest commit with key 94BFDF4484AD142F)
Diffstat (limited to 'net-print')
-rw-r--r-- | net-print/cups/ChangeLog | 8 | ||||
-rw-r--r-- | net-print/cups/cups-1.7.2.ebuild | 322 | ||||
-rw-r--r-- | net-print/cups/files/cups-1.7.2-systemd-socket-2.patch | 391 |
3 files changed, 720 insertions, 1 deletions
diff --git a/net-print/cups/ChangeLog b/net-print/cups/ChangeLog index 2a668a5d11fe..ed9ce871a56c 100644 --- a/net-print/cups/ChangeLog +++ b/net-print/cups/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for net-print/cups # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/net-print/cups/ChangeLog,v 1.598 2014/03/01 22:33:47 mgorny Exp $ +# $Header: /var/cvsroot/gentoo-x86/net-print/cups/ChangeLog,v 1.599 2014/04/15 11:34:09 dilfridge Exp $ + +*cups-1.7.2 (15 Apr 2014) + + 15 Apr 2014; Andreas K. Huettel <dilfridge@gentoo.org> +cups-1.7.2.ebuild, + +files/cups-1.7.2-systemd-socket-2.patch: + Version bump, bug 507696; no keywords because of build failures 01 Mar 2014; Michał Górny <mgorny@gentoo.org> cups-1.7.1.ebuild, cups-9999.ebuild: diff --git a/net-print/cups/cups-1.7.2.ebuild b/net-print/cups/cups-1.7.2.ebuild new file mode 100644 index 000000000000..36c530dfb3ac --- /dev/null +++ b/net-print/cups/cups-1.7.2.ebuild @@ -0,0 +1,322 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-print/cups/cups-1.7.2.ebuild,v 1.1 2014/04/15 11:34:09 dilfridge Exp $ + +EAPI=5 + +PYTHON_COMPAT=( python{2_6,2_7} ) + +inherit autotools base fdo-mime gnome2-utils flag-o-matic linux-info \ + multilib pam python-single-r1 user versionator java-pkg-opt-2 systemd \ + toolchain-funcs + +MY_P=${P/_rc/rc} +MY_P=${MY_P/_beta/b} +MY_PV=${PV/_rc/rc} +MY_PV=${MY_PV/_beta/b} + +if [[ ${PV} == *9999 ]]; then + inherit git-2 + EGIT_REPO_URI="http://www.cups.org/cups.git" + if [[ ${PV} != 9999 ]]; then + EGIT_BRANCH=branch-${PV/.9999} + fi + KEYWORDS="" +else + SRC_URI="http://www.cups.org/software/${MY_PV}/${MY_P}-source.tar.bz2" +# KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~m68k-mint" + KEYWORDS="" +fi + +DESCRIPTION="The Common Unix Printing System" +HOMEPAGE="http://www.cups.org/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="acl dbus debug gnutls java kerberos lprng-compat pam + python selinux +ssl static-libs +threads usb X xinetd zeroconf" + +LANGS="ca es fr it ja ru" +for X in ${LANGS} ; do + IUSE="${IUSE} +linguas_${X}" +done + +RDEPEND=" + app-text/libpaper + acl? ( + kernel_linux? ( + sys-apps/acl + sys-apps/attr + ) + ) + dbus? ( sys-apps/dbus ) + java? ( >=virtual/jre-1.6 ) + kerberos? ( virtual/krb5 ) + !lprng-compat? ( !net-print/lprng ) + pam? ( virtual/pam ) + python? ( ${PYTHON_DEPS} ) + selinux? ( sec-policy/selinux-cups ) + ssl? ( + gnutls? ( + dev-libs/libgcrypt:0 + net-libs/gnutls + ) + !gnutls? ( >=dev-libs/openssl-0.9.8g ) + ) + usb? ( virtual/libusb:1 ) + X? ( x11-misc/xdg-utils ) + xinetd? ( sys-apps/xinetd ) + zeroconf? ( net-dns/avahi ) +" + +DEPEND="${RDEPEND} + virtual/pkgconfig +" + +PDEPEND=" + app-text/ghostscript-gpl[cups] + app-text/poppler[utils] + >=net-print/cups-filters-1.0.43 +" + +REQUIRED_USE=" + gnutls? ( ssl ) + python? ( ${PYTHON_REQUIRED_USE} ) + usb? ( threads ) +" + +# upstream includes an interactive test which is a nono for gentoo +RESTRICT="test" + +S="${WORKDIR}/${MY_P}" + +PATCHES=( + "${FILESDIR}/${PN}-1.6.0-dont-compress-manpages.patch" + "${FILESDIR}/${PN}-1.6.0-fix-install-perms.patch" + "${FILESDIR}/${PN}-1.4.4-nostrip.patch" + "${FILESDIR}/${PN}-1.7.2-systemd-socket-2.patch" # systemd support +) + +pkg_setup() { + enewgroup lp + enewuser lp -1 -1 -1 lp + enewgroup lpadmin 106 + + use python && python-single-r1_pkg_setup + + if use kernel_linux; then + linux-info_pkg_setup + if ! linux_config_exists; then + ewarn "Can't check the linux kernel configuration." + ewarn "You might have some incompatible options enabled." + else + # recheck that we don't have usblp to collide with libusb + if use usb; then + if linux_chkconfig_present USB_PRINTER; then + eerror "Your usb printers will be managed via libusb. In this case, " + eerror "${P} requires the USB_PRINTER support disabled." + eerror "Please disable it:" + eerror " CONFIG_USB_PRINTER=n" + eerror "in /usr/src/linux/.config or" + eerror " Device Drivers --->" + eerror " USB support --->" + eerror " [ ] USB Printer support" + eerror "Alternatively, just disable the usb useflag for cups (your printer will still work)." + fi + else + #here we should warn user that he should enable it so he can print + if ! linux_chkconfig_present USB_PRINTER; then + ewarn "If you plan to use USB printers you should enable the USB_PRINTER" + ewarn "support in your kernel." + ewarn "Please enable it:" + ewarn " CONFIG_USB_PRINTER=y" + ewarn "in /usr/src/linux/.config or" + ewarn " Device Drivers --->" + ewarn " USB support --->" + ewarn " [*] USB Printer support" + ewarn "Alternatively, enable the usb useflag for cups and use the libusb code." + fi + fi + fi + fi +} + +src_prepare() { + base_src_prepare + AT_M4DIR=config-scripts eaclocal + eautoconf +} + +src_configure() { + export DSOFLAGS="${LDFLAGS}" + + einfo LANGS=\"${LANGS}\" + einfo LINGUAS=\"${LINGUAS}\" + + local myconf + if use ssl ; then + myconf+=" + $(use_enable gnutls) + $(use_enable !gnutls openssl) + " + else + myconf+=" + --disable-gnutls + --disable-openssl + " + fi + + if tc-is-static-only; then + myconf+=" + --disable-shared + " + fi + + econf \ + --libdir="${EPREFIX}"/usr/$(get_libdir) \ + --localstatedir="${EPREFIX}"/var \ + --with-rundir="${EPREFIX}"/run/cups \ + --with-cups-user=lp \ + --with-cups-group=lp \ + --with-docdir="${EPREFIX}"/usr/share/cups/html \ + --with-languages="${LINGUAS}" \ + --with-system-groups=lpadmin \ + $(use_enable acl) \ + $(use_enable zeroconf avahi) \ + $(use_enable dbus) \ + $(use_enable debug) \ + $(use_enable debug debug-guards) \ + $(use_enable kerberos gssapi) \ + $(use_enable pam) \ + $(use_enable static-libs static) \ + $(use_enable threads) \ + $(use_enable usb libusb) \ + --disable-dnssd \ + $(use_with java) \ + --without-perl \ + --without-php \ + $(use_with python python "${PYTHON}") \ + $(use_with xinetd xinetd /etc/xinetd.d) \ + --enable-libpaper \ + --with-systemdsystemunitdir="$(systemd_get_unitdir)" \ + ${myconf} + + # install in /usr/libexec always, instead of using /usr/lib/cups, as that + # makes more sense when facing multilib support. + sed -i -e "s:SERVERBIN.*:SERVERBIN = \"\$\(BUILDROOT\)${EPREFIX}/usr/libexec/cups\":" Makedefs || die + sed -i -e "s:#define CUPS_SERVERBIN.*:#define CUPS_SERVERBIN \"${EPREFIX}/usr/libexec/cups\":" config.h || die + sed -i -e "s:cups_serverbin=.*:cups_serverbin=\"${EPREFIX}/usr/libexec/cups\":" cups-config || die +} + +src_install() { + # Fix install-sh, posix sh does not have 'function'. + sed 's#function gzipcp#gzipcp()#g' -i "${S}/install-sh" + + emake BUILDROOT="${D}" install + dodoc {CHANGES,CREDITS,README}.txt + + # move the default config file to docs + dodoc "${ED}"/etc/cups/cupsd.conf.default + rm -f "${ED}"/etc/cups/cupsd.conf.default + + # clean out cups init scripts + rm -rf "${ED}"/etc/{init.d/cups,rc*,pam.d/cups} + + # install our init script + local neededservices + use zeroconf && neededservices+=" avahi-daemon" + use dbus && neededservices+=" dbus" + [[ -n ${neededservices} ]] && neededservices="need${neededservices}" + cp "${FILESDIR}"/cupsd.init.d-r1 "${T}"/cupsd || die + sed -i \ + -e "s/@neededservices@/$neededservices/" \ + "${T}"/cupsd || die + doinitd "${T}"/cupsd + + # install our pam script + pamd_mimic_system cups auth account + + if use xinetd ; then + # correct path + sed -i \ + -e "s:server = .*:server = /usr/libexec/cups/daemon/cups-lpd:" \ + "${ED}"/etc/xinetd.d/cups-lpd || die + # it is safer to disable this by default, bug #137130 + grep -w 'disable' "${ED}"/etc/xinetd.d/cups-lpd || \ + { sed -i -e "s:}:\tdisable = yes\n}:" "${ED}"/etc/xinetd.d/cups-lpd || die ; } + # write permission for file owner (root), bug #296221 + fperms u+w /etc/xinetd.d/cups-lpd || die "fperms failed" + else + rm -rf "${ED}"/etc/xinetd.d + fi + + keepdir /usr/libexec/cups/driver /usr/share/cups/{model,profiles} \ + /var/log/cups /var/spool/cups/tmp + + keepdir /etc/cups/{interfaces,ppd,ssl} + + use X || rm -r "${ED}"/usr/share/applications + + # create /etc/cups/client.conf, bug #196967 and #266678 + echo "ServerName ${EPREFIX}/run/cups/cups.sock" >> "${ED}"/etc/cups/client.conf + + # the following files are now provided by cups-filters: + rm -r "${ED}"/usr/share/cups/banners || die + rm -r "${ED}"/usr/share/cups/data/testprint || die + + # the following are created by the init script + rm -r "${ED}"/var/cache/cups || die + rm -r "${ED}"/run || die + + # for the special case of running lprng and cups together, bug 467226 + if use lprng-compat ; then + rm -fv "${ED}"/usr/bin/{lp*,cancel} + rm -fv "${ED}"/usr/sbin/lp* + rm -fv "${ED}"/usr/share/man/man1/{lp*,cancel*} + rm -fv "${ED}"/usr/share/man/man8/lp* + ewarn "Not installing lp... binaries, since the lprng-compat useflag is set." + ewarn "Unless you plan to install an exotic server setup, you most likely" + ewarn "do not want this. Disable the useflag then and all will be fine." + fi +} + +pkg_preinst() { + gnome2_icon_savelist +} + +pkg_postinst() { + # Update desktop file database and gtk icon cache (bug 370059) + gnome2_icon_cache_update + fdo-mime_desktop_database_update + + # not slotted - at most one value + if ! [[ "${REPLACING_VERSIONS}" ]]; then + echo + elog "For information about installing a printer and general cups setup" + elog "take a look at: http://www.gentoo.org/doc/en/printing-howto.xml" + echo + fi + + if [[ "${REPLACING_VERSIONS}" ]] && [[ "${REPLACING_VERSIONS}" < "1.6" ]]; then + echo + elog "CUPS-1.6 no longer supports automatic remote printers or implicit classes" + elog "via the CUPS, LDAP, or SLP protocols, i.e. \"network browsing\"." + elog "You will have to find printers using zeroconf/avahi instead, enter" + elog "the location manually, or run cups-browsed from net-print/cups-filters" + elog "which re-adds that functionality as a separate daemon." + echo + fi + + if [[ "${REPLACING_VERSIONS}" == "1.6.2-r4" ]]; then + ewarn + ewarn "You are upgrading from the broken version net-print/cups-1.6.2-r4." + ewarn "Please rebuild net-print/cups-filters now to make sure everything is OK." + ewarn + fi +} + +pkg_postrm() { + # Update desktop file database and gtk icon cache (bug 370059) + gnome2_icon_cache_update + fdo-mime_desktop_database_update +} diff --git a/net-print/cups/files/cups-1.7.2-systemd-socket-2.patch b/net-print/cups/files/cups-1.7.2-systemd-socket-2.patch new file mode 100644 index 000000000000..547f31ba3737 --- /dev/null +++ b/net-print/cups/files/cups-1.7.2-systemd-socket-2.patch @@ -0,0 +1,391 @@ +diff -ruN cups-1.7.2.orig/Makedefs.in cups-1.7.2/Makedefs.in +--- cups-1.7.2.orig/Makedefs.in 2013-07-17 17:21:18.000000000 +0200 ++++ cups-1.7.2/Makedefs.in 2014-04-15 13:24:45.594054459 +0200 +@@ -134,6 +134,7 @@ + CXXLIBS = @CXXLIBS@ + DBUS_NOTIFIER = @DBUS_NOTIFIER@ + DBUS_NOTIFIERLIBS = @DBUS_NOTIFIERLIBS@ ++SYSTEMD_UNITS = @SYSTEMD_UNITS@ + DNSSD_BACKEND = @DNSSD_BACKEND@ + DSOFLAGS = -L../cups @DSOFLAGS@ + DSOLIBS = @DSOLIBS@ $(COMMONLIBS) +@@ -141,6 +142,7 @@ + IPPFIND_BIN = @IPPFIND_BIN@ + IPPFIND_MAN = @IPPFIND_MAN@ + LAUNCHDLIBS = @LAUNCHDLIBS@ ++SDLIBS = @SDLIBS@ + LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \ + -L../scheduler @LDARCHFLAGS@ \ + @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM) +@@ -232,6 +234,7 @@ + + DEFAULT_LAUNCHD_CONF = @DEFAULT_LAUNCHD_CONF@ + DBUSDIR = @DBUSDIR@ ++SYSTEMDUNITDIR = $(BUILDROOT)@systemdsystemunitdir@ + + + # +diff -ruN cups-1.7.2.orig/config-scripts/cups-systemd.m4 cups-1.7.2/config-scripts/cups-systemd.m4 +--- cups-1.7.2.orig/config-scripts/cups-systemd.m4 1970-01-01 01:00:00.000000000 +0100 ++++ cups-1.7.2/config-scripts/cups-systemd.m4 2014-04-15 13:24:45.592054459 +0200 +@@ -0,0 +1,36 @@ ++dnl ++dnl "$Id: cups-1.7.2-systemd-socket-2.patch,v 1.1 2014/04/15 11:34:10 dilfridge Exp $" ++dnl ++dnl systemd stuff for CUPS. ++ ++dnl Find whether systemd is available ++ ++SDLIBS="" ++AC_ARG_WITH([systemdsystemunitdir], ++ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]), ++ [], [with_systemdsystemunitdir=$($PKGCONFIG --variable=systemdsystemunitdir systemd)]) ++if test "x$with_systemdsystemunitdir" != xno; then ++ AC_MSG_CHECKING(for libsystemd-daemon) ++ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) ++ if $PKGCONFIG --exists libsystemd-daemon; then ++ AC_MSG_RESULT(yes) ++ SDCFLAGS=`$PKGCONFIG --cflags libsystemd-daemon` ++ SDLIBS=`$PKGCONFIG --libs libsystemd-daemon` ++ AC_DEFINE(HAVE_SYSTEMD) ++ else ++ AC_MSG_RESULT(no) ++ fi ++fi ++ ++if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ; then ++ SYSTEMD_UNITS="cups.service cups.socket cups.path" ++else ++ SYSTEMD_UNITS="" ++fi ++ ++AC_SUBST(SYSTEMD_UNITS) ++AC_SUBST(SDLIBS) ++ ++dnl ++dnl "$Id: cups-1.7.2-systemd-socket-2.patch,v 1.1 2014/04/15 11:34:10 dilfridge Exp $" ++dnl +diff -ruN cups-1.7.2.orig/config.h.in cups-1.7.2/config.h.in +--- cups-1.7.2.orig/config.h.in 2014-02-27 16:57:59.000000000 +0100 ++++ cups-1.7.2/config.h.in 2014-04-15 13:24:45.592054459 +0200 +@@ -451,6 +451,13 @@ + + + /* ++ * Do we have systemd support? ++ */ ++ ++#undef HAVE_SYSTEMD ++ ++ ++/* + * Various scripting languages... + */ + +diff -ruN cups-1.7.2.orig/configure.in cups-1.7.2/configure.in +--- cups-1.7.2.orig/configure.in 2013-07-08 23:15:13.000000000 +0200 ++++ cups-1.7.2/configure.in 2014-04-15 13:24:45.593054459 +0200 +@@ -33,6 +33,7 @@ + sinclude(config-scripts/cups-largefile.m4) + sinclude(config-scripts/cups-dnssd.m4) + sinclude(config-scripts/cups-launchd.m4) ++sinclude(config-scripts/cups-systemd.m4) + sinclude(config-scripts/cups-defaults.m4) + sinclude(config-scripts/cups-scripting.m4) + +@@ -67,6 +68,9 @@ + conf/snmp.conf + cups-config + data/testprint ++ data/cups.service ++ data/cups.socket ++ data/cups.path + desktop/cups.desktop + doc/help/ref-cups-files-conf.html + doc/help/ref-cupsd-conf.html +diff -ruN cups-1.7.2.orig/cups/usersys.c cups-1.7.2/cups/usersys.c +--- cups-1.7.2.orig/cups/usersys.c 2014-03-05 22:22:12.000000000 +0100 ++++ cups-1.7.2/cups/usersys.c 2014-04-15 13:24:45.593054459 +0200 +@@ -1050,7 +1050,7 @@ + struct stat sockinfo; /* Domain socket information */ + + if (!stat(CUPS_DEFAULT_DOMAINSOCKET, &sockinfo) && +- (sockinfo.st_mode & S_IRWXO) == S_IRWXO) ++ (sockinfo.st_mode & (S_IROTH | S_IWOTH)) == (S_IROTH | S_IWOTH)) + cups_server = CUPS_DEFAULT_DOMAINSOCKET; + else + #endif /* CUPS_DEFAULT_DOMAINSOCKET */ +diff -ruN cups-1.7.2.orig/data/Makefile cups-1.7.2/data/Makefile +--- cups-1.7.2.orig/data/Makefile 2013-05-29 13:51:34.000000000 +0200 ++++ cups-1.7.2/data/Makefile 2014-04-15 13:24:45.594054459 +0200 +@@ -100,6 +100,12 @@ + $(INSTALL_DATA) $$file $(DATADIR)/ppdc; \ + done + $(INSTALL_DIR) -m 755 $(DATADIR)/profiles ++ if test "x$(SYSTEMD_UNITS)" != "x" ; then \ ++ $(INSTALL_DIR) -m 755 $(SYSTEMDUNITDIR); \ ++ for file in $(SYSTEMD_UNITS); do \ ++ $(INSTALL_DATA) $$file $(SYSTEMDUNITDIR); \ ++ done; \ ++ fi + + + # +@@ -143,6 +149,9 @@ + -$(RMDIR) $(DATADIR)/data + -$(RMDIR) $(DATADIR)/banners + -$(RMDIR) $(DATADIR) ++ for file in $(SYSTEMD_UNITS); do \ ++ $(RM) $(SYSTEMDUNITDIR)/$$file; \ ++ done + + + # +diff -ruN cups-1.7.2.orig/data/cups.path.in cups-1.7.2/data/cups.path.in +--- cups-1.7.2.orig/data/cups.path.in 1970-01-01 01:00:00.000000000 +0100 ++++ cups-1.7.2/data/cups.path.in 2014-04-15 13:24:45.593054459 +0200 +@@ -0,0 +1,8 @@ ++[Unit] ++Description=CUPS Printer Service Spool ++ ++[Path] ++PathExistsGlob=@CUPS_REQUESTS@/d* ++ ++[Install] ++WantedBy=multi-user.target +diff -ruN cups-1.7.2.orig/data/cups.service.in cups-1.7.2/data/cups.service.in +--- cups-1.7.2.orig/data/cups.service.in 1970-01-01 01:00:00.000000000 +0100 ++++ cups-1.7.2/data/cups.service.in 2014-04-15 13:24:45.594054459 +0200 +@@ -0,0 +1,9 @@ ++[Unit] ++Description=CUPS Printing Service ++ ++[Service] ++ExecStart=@sbindir@/cupsd -f ++ ++[Install] ++Also=cups.socket cups.path ++WantedBy=printer.target +diff -ruN cups-1.7.2.orig/data/cups.socket.in cups-1.7.2/data/cups.socket.in +--- cups-1.7.2.orig/data/cups.socket.in 1970-01-01 01:00:00.000000000 +0100 ++++ cups-1.7.2/data/cups.socket.in 2014-04-15 13:24:45.594054459 +0200 +@@ -0,0 +1,10 @@ ++[Unit] ++Description=CUPS Printing Service Sockets ++ ++[Socket] ++ListenStream=@CUPS_DEFAULT_DOMAINSOCKET@ ++ListenStream=631 ++BindIPv6Only=ipv6-only ++ ++[Install] ++WantedBy=sockets.target +diff -ruN cups-1.7.2.orig/scheduler/Makefile cups-1.7.2/scheduler/Makefile +--- cups-1.7.2.orig/scheduler/Makefile 2013-05-29 13:51:34.000000000 +0200 ++++ cups-1.7.2/scheduler/Makefile 2014-04-15 13:24:45.595054459 +0200 +@@ -381,7 +381,7 @@ + $(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \ + $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \ + $(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBS) \ +- $(LIBGSSAPI) $(LIBWRAP) ++ $(LIBGSSAPI) $(LIBWRAP) $(SDLIBS) + + cupsd-static: $(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC) + echo Linking $@... +@@ -389,7 +389,7 @@ + $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \ + ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \ + $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBGSSAPI) \ +- $(LIBWRAP) ++ $(LIBWRAP) $(SDLIBS) + + tls.o: tls-darwin.c tls-gnutls.c tls-openssl.c + +diff -ruN cups-1.7.2.orig/scheduler/client.h cups-1.7.2/scheduler/client.h +--- cups-1.7.2.orig/scheduler/client.h 2013-08-02 00:23:18.000000000 +0200 ++++ cups-1.7.2/scheduler/client.h 2014-04-15 13:24:45.594054459 +0200 +@@ -79,6 +79,9 @@ + int fd; /* File descriptor for this server */ + http_addr_t address; /* Bind address of socket */ + http_encryption_t encryption; /* To encrypt or not to encrypt... */ ++#ifdef HAVE_SYSTEMD ++ int is_systemd; /* Is this a systemd socket? */ ++#endif /* HAVE_SYSTEMD */ + } cupsd_listener_t; + + +diff -ruN cups-1.7.2.orig/scheduler/listen.c cups-1.7.2/scheduler/listen.c +--- cups-1.7.2.orig/scheduler/listen.c 2013-05-29 13:51:34.000000000 +0200 ++++ cups-1.7.2/scheduler/listen.c 2014-04-15 13:24:45.594054459 +0200 +@@ -401,7 +401,11 @@ + lis; + lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) + { +- if (lis->fd != -1) ++ if (lis->fd != -1 ++#ifdef HAVE_SYSTEMD ++ && !lis->is_systemd ++#endif /* HAVE_SYSTEMD */ ++ ) + { + #ifdef WIN32 + closesocket(lis->fd); +diff -ruN cups-1.7.2.orig/scheduler/main.c cups-1.7.2/scheduler/main.c +--- cups-1.7.2.orig/scheduler/main.c 2014-03-21 19:18:56.000000000 +0100 ++++ cups-1.7.2/scheduler/main.c 2014-04-15 13:24:45.595054459 +0200 +@@ -39,6 +39,10 @@ + # endif /* !LAUNCH_JOBKEY_SERVICEIPC */ + #endif /* HAVE_LAUNCH_H */ + ++#ifdef HAVE_SYSTEMD ++#include <systemd/sd-daemon.h> ++#endif /* HAVE_SYSTEMD */ ++ + #if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) + # include <malloc.h> + #endif /* HAVE_MALLOC_H && HAVE_MALLINFO */ +@@ -64,6 +68,9 @@ + static void launchd_checkin(void); + static void launchd_checkout(void); + #endif /* HAVE_LAUNCHD */ ++#ifdef HAVE_SYSTEMD ++static int systemd_checkin(void); ++#endif /* HAVE_SYSTEMD */ + static void parent_handler(int sig); + static void process_children(void); + static void sigchld_handler(int sig); +@@ -553,6 +560,14 @@ + } + #endif /* HAVE_LAUNCHD */ + ++#ifdef HAVE_SYSTEMD ++ /* ++ * If we were started by systemd get the listen sockets file descriptors... ++ */ ++ if (systemd_checkin() < 0) ++ exit(EXIT_FAILURE); ++#endif /* HAVE_SYSTEMD */ ++ + /* + * Startup the server... + */ +@@ -741,6 +756,16 @@ + } + #endif /* HAVE_LAUNCHD */ + ++#ifdef HAVE_SYSTEMD ++ /* ++ * If we were started by systemd get the listen sockets file ++ * descriptors... ++ */ ++ ++ if (systemd_checkin() < 0) ++ exit(EXIT_FAILURE); ++#endif /* HAVE_SYSTEMD */ ++ + /* + * Startup the server... + */ +@@ -1490,6 +1515,102 @@ + } + #endif /* HAVE_LAUNCHD */ + ++#ifdef HAVE_SYSTEMD ++static int ++systemd_checkin(void) ++{ ++ int n, fd; ++ ++ n = sd_listen_fds(0); ++ if (n < 0) ++ { ++ cupsdLogMessage(CUPSD_LOG_ERROR, ++ "systemd_checkin: Failed to acquire sockets " ++ "from systemd - %s -- skipping systemd activation", ++ strerror(-n)); ++ return (1); ++ } ++ ++ if (n == 0) ++ return (0); ++ ++ for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd ++) ++ { ++ http_addr_t addr; ++ socklen_t addrlen = sizeof (addr); ++ int r; ++ cupsd_listener_t *lis; ++ char s[256]; ++ ++ r = sd_is_socket(fd, AF_UNSPEC, SOCK_STREAM, 1); ++ if (r < 0) { ++ cupsdLogMessage(CUPSD_LOG_ERROR, ++ "systemd_checkin: Unable to verify socket type - %s", ++ strerror(-r)); ++ continue; ++ } ++ ++ if (!r) { ++ cupsdLogMessage(CUPSD_LOG_ERROR, ++ "systemd_checkin: Socket not of the right type"); ++ continue; ++ } ++ ++ if (getsockname(fd, (struct sockaddr*) &addr, &addrlen)) ++ { ++ cupsdLogMessage(CUPSD_LOG_ERROR, ++ "systemd_checkin: Unable to get local address - %s", ++ strerror(errno)); ++ continue; ++ } ++ ++ /* ++ * Try to match the systemd socket address to one of the listeners... ++ */ ++ ++ for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); ++ lis; ++ lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) ++ if (httpAddrEqual(&lis->address, &addr)) ++ break; ++ ++ if (lis) ++ { ++ cupsdLogMessage(CUPSD_LOG_DEBUG, ++ "systemd_checkin: Matched existing listener %s with fd %d...", ++ httpAddrString(&(lis->address), s, sizeof(s)), fd); ++ } ++ else ++ { ++ cupsdLogMessage(CUPSD_LOG_DEBUG, ++ "systemd_checkin: Adding new listener %s with fd %d...", ++ httpAddrString(&addr, s, sizeof(s)), fd); ++ ++ if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL) ++ { ++ cupsdLogMessage(CUPSD_LOG_ERROR, ++ "systemd_checkin: Unable to allocate listener - " ++ "%s.", strerror(errno)); ++ return (-ENOMEM); ++ } ++ ++ cupsArrayAdd(Listeners, lis); ++ ++ memcpy(&lis->address, &addr, sizeof(lis->address)); ++ } ++ ++ lis->fd = fd; ++ lis->is_systemd = 1; ++ ++# ifdef HAVE_SSL ++ if (_httpAddrPort(&(lis->address)) == 443) ++ lis->encryption = HTTP_ENCRYPT_ALWAYS; ++# endif /* HAVE_SSL */ ++ } ++ ++ return (0); ++} ++#endif /* HAVE_SYSTEMD */ + + /* + * 'parent_handler()' - Catch USR1/CHLD signals... |