169 kx
169 kx # daemon - https://libslack.org/daemon
169 kx #
169 kx # Copyright (C) 1999-2004, 2010, 2020-2023 raf <raf@raf.org>
169 kx #
169 kx # This program is free software; you can redistribute it and/or modify
169 kx # it under the terms of the GNU General Public License as published by
169 kx # the Free Software Foundation; either version 2 of the License, or
169 kx # (at your option) any later version.
169 kx #
169 kx # This program is distributed in the hope that it will be useful,
169 kx # but WITHOUT ANY WARRANTY; without even the implied warranty of
169 kx # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
169 kx # GNU General Public License for more details.
169 kx #
169 kx # You should have received a copy of the GNU General Public License
169 kx # along with this program; if not, see <https://www.gnu.org/licenses/>.
169 kx #
169 kx # 20230824 raf <raf@raf.org>
169 kx #
169 kx
169 kx ifneq ($(DAEMON_TARGET),./$(DAEMON_NAME))
169 kx
169 kx .PHONY: $(DAEMON_NAME)
169 kx
169 kx $(DAEMON_NAME): $(DAEMON_TARGET)
169 kx
169 kx endif
169 kx
169 kx $(DAEMON_TARGET): $(DAEMON_OFILES) $(DAEMON_SUBTARGETS)
169 kx $(CC) -o $(DAEMON_TARGET) $(DAEMON_OFILES) $(DAEMON_LDFLAGS)
169 kx
169 kx .PHONY: man-daemon html-daemon
169 kx
169 kx man-daemon: $(DAEMON_MANFILES)
169 kx
169 kx html-daemon: $(DAEMON_HTMLFILES)
169 kx
169 kx .PHONY: install-daemon install-daemon-bin install-daemon-man install-daemon-html install-daemon-conf
169 kx
169 kx install-daemon: install-daemon-bin install-daemon-man
169 kx
169 kx install-daemon-bin:
169 kx mkdir -p $(DESTDIR)$(APP_INSDIR)
169 kx install -m 755 $(DAEMON_TARGET) $(DESTDIR)$(APP_INSDIR)
169 kx
169 kx install-daemon-man: man-daemon
169 kx @mkdir -p $(DESTDIR)$(APP_MANDIR); \
169 kx install -m 644 $(DAEMON_MANFILES) $(DESTDIR)$(APP_MANDIR); \
169 kx mkdir -p $(DESTDIR)$(FMT_MANDIR); \
169 kx rm -f $(DESTDIR)$(FMT_MANDIR)/$(notdir $(DAEMON_MANLINK)); \
169 kx ln -s ../man$(APP_MANSECT)/$(notdir $(DAEMON_MANFILES)) $(DESTDIR)$(FMT_MANDIR)/$(notdir $(DAEMON_MANLINK))
169 kx
169 kx install-daemon-html: html-daemon
169 kx @mkdir -p $(DESTDIR)$(DAEMON_HTMLDIR); \
169 kx install -m 644 $(DAEMON_HTMLFILES) $(DESTDIR)$(DAEMON_HTMLDIR)
169 kx
169 kx install-daemon-conf: $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE)
169 kx @mkdir -p $(DESTDIR)$(DAEMON_CONF_INSDIR); \
169 kx [ -f $(DESTDIR)$(DAEMON_CONF_INSDIR)/$(DAEMON_CONFFILE) ] || install -m 644 $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE) $(DESTDIR)$(DAEMON_CONF_INSDIR); \
169 kx [ -d $(DESTDIR)$(DAEMON_CONF_INSDIR)/$(DAEMON_CONFDIR) ] || mkdir $(DESTDIR)$(DAEMON_CONF_INSDIR)/$(DAEMON_CONFDIR)
169 kx
169 kx .PHONY: uninstall-daemon uninstall-daemon-bin uninstall-daemon-man uninstall-daemon-html uninstall-daemon-conf
169 kx
169 kx uninstall-daemon: uninstall-daemon-bin uninstall-daemon-man
169 kx
169 kx uninstall-daemon-bin:
169 kx rm -f $(patsubst %, $(DESTDIR)$(APP_INSDIR)/%, $(notdir $(DAEMON_TARGET)))
169 kx
169 kx uninstall-daemon-man:
169 kx @rm -f $(patsubst %, $(DESTDIR)$(APP_MANDIR)/%, $(notdir $(DAEMON_MANFILES))) \
169 kx $(DESTDIR)$(FMT_MANDIR)/$(notdir $(DAEMON_MANLINK))
169 kx
169 kx uninstall-daemon-html:
169 kx @rm -f $(patsubst %, $(DESTDIR)$(DAEMON_HTMLDIR)/%, $(notdir $(DAEMON_HTMLFILES)))
169 kx
169 kx uninstall-daemon-conf:
169 kx @rm -rf $(DESTDIR)$(DAEMON_CONF_INSDIR)/$(DAEMON_CONFFILE) $(DESTDIR)$(DAEMON_CONF_INSDIR)/$(DAEMON_CONFDIR)
169 kx
169 kx .PHONY: dist-daemon dist-html-daemon rpm-daemon deb-daemon sol-daemon obsd-daemon fbsd-daemon nbsd-daemon osx-daemon
169 kx
169 kx dist-daemon: distclean
169 kx @set -e; \
169 kx up="`pwd`/.."; \
169 kx cd $(DAEMON_SRCDIR); \
169 kx src=`basename \`pwd\``; \
169 kx dst=$(DAEMON_ID); \
169 kx cd ..; \
169 kx [ "$$src" != "$$dst" -a ! -d "$$dst" ] && ln -s $$src $$dst; \
169 kx tar chzf $$up/$(DAEMON_DIST) --exclude='.git*' $$dst; \
169 kx [ -h "$$dst" ] && rm -f $$dst; \
169 kx tar tzfv $$up/$(DAEMON_DIST); \
169 kx ls -l $$up/$(DAEMON_DIST)
169 kx
169 kx dist-html-daemon: html-daemon
169 kx @set -e; \
169 kx up="`pwd`/.."; \
169 kx cd $(DAEMON_SRCDIR); \
169 kx src=`basename \`pwd\``; \
169 kx dst=$(DAEMON_HTML_ID); \
169 kx cd ..; \
169 kx [ "$$src" != "$$dst" -a ! -d "$$dst" ] && ln -s $$src $$dst; \
169 kx tar chzf $$up/$(DAEMON_HTML_DIST) $(patsubst $(DAEMON_SRCDIR)/%, $$dst/%, $(DAEMON_SRCDIR)/README.md $(DAEMON_SRCDIR)/INSTALL $(DAEMON_SRCDIR)/COPYING $(DAEMON_SRCDIR)/LICENSE $(DAEMON_SRCDIR)/REFERENCES $(DAEMON_SRCDIR)/CHANGELOG $(DAEMON_HTMLFILES)); \
169 kx [ -h "$$dst" ] && rm -f $$dst; \
169 kx tar tzfv $$up/$(DAEMON_HTML_DIST); \
169 kx ls -l $$up/$(DAEMON_HTML_DIST)
169 kx
169 kx #RPMDIR := /usr/src/redhat
169 kx RPMDIR := $(HOME)/rpmbuild
169 kx #RPMBUILD := rpm # rpm 3.x
169 kx RPMBUILD := rpmbuild # rpm 4.x
169 kx
169 kx rpm-daemon: $(DAEMON_SRCDIR)/daemon.spec
169 kx @set -e; \
169 kx up="`pwd`/.."; \
169 kx [ -d $(RPMDIR) ] || mkdir -p $(RPMDIR); \
169 kx [ -d $(RPMDIR)/BUILD ] || mkdir -p $(RPMDIR)/BUILD; \
169 kx [ -d $(RPMDIR)/BUILDROOT ] || mkdir -p $(RPMDIR)/BUILDROOT; \
169 kx [ -d $(RPMDIR)/RPMS ] || mkdir -p $(RPMDIR)/RPMS; \
169 kx [ -d $(RPMDIR)/SOURCES ] || mkdir -p $(RPMDIR)/SOURCES; \
169 kx [ -d $(RPMDIR)/SPECS ] || mkdir -p $(RPMDIR)/SPECS; \
169 kx [ -d $(RPMDIR)/SRPMS ] || mkdir -p $(RPMDIR)/SRPMS; \
169 kx cp $$up/$(DAEMON_DIST) $(RPMDIR)/SOURCES; \
169 kx $(RPMBUILD) --buildroot "/tmp/$(DAEMON_ID)" -ba --target "`uname -m`" $(DAEMON_SRCDIR)/daemon.spec; \
169 kx rm -rf $(DAEMON_SRCDIR)/daemon.spec "/tmp/$(DAEMON_ID)"; \
169 kx mv $(RPMDIR)/SRPMS/$(DAEMON_ID)-*.src.rpm $$up; \
169 kx mv $(RPMDIR)/RPMS/*/$(DAEMON_ID)-*.*.rpm $$up; \
169 kx rm -rf $(RPMDIR)/BUILD/$(DAEMON_ID); \
169 kx rm -f $(RPMDIR)/SOURCES/$(DAEMON_DIST); \
169 kx rm -f $(RPMDIR)/SPECS/daemon.spec; \
169 kx rpm -qlpv $$up/$(DAEMON_ID)-*.*.rpm
169 kx
169 kx DAEMON_SPEC_CODE := perl -ne ' \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx $$summary = $$_ if $$section eq "README" && /^[*\w]/; \
169 kx $$description .= $$_ if $$section eq "DESCRIPTION"; \
169 kx if ($$section ne "README" && $$section ne "DESCRIPTION") \
169 kx { \
169 kx $$summary =~ s/[*`]//g; \
169 kx $$description =~ s/[*`]//g; \
169 kx print "Summary: $$summary"; \
169 kx print "Name: $(DAEMON_NAME)\n"; \
169 kx print "Version: $(DAEMON_VERSION)\n"; \
169 kx print "Release: 1\n"; \
169 kx print "Group: System Environment/Daemons\n"; \
169 kx print "Source: $(DAEMON_URL)download/$(DAEMON_DIST)\n"; \
169 kx print "URL: $(DAEMON_URL)\n"; \
169 kx print "License: GPL\n"; \
169 kx print "Prefix: $(PREFIX)\n"; \
169 kx print "%description\n"; \
169 kx print $$description; \
169 kx print "%prep\n"; \
169 kx print "%setup\n"; \
169 kx print "%build\n"; \
169 kx print "make\n"; \
169 kx print "%install\n"; \
169 kx print "make PREFIX=\"\$${RPM_BUILD_ROOT}$(PREFIX)\" install-daemon\n"; \
169 kx print "%files\n"; \
169 kx exit; \
169 kx }'
169 kx
169 kx $(DAEMON_SRCDIR)/daemon.spec:
169 kx @set -e; \
169 kx $(DAEMON_SPEC_CODE) < $(DAEMON_SRCDIR)/README.md > $(DAEMON_SRCDIR)/daemon.spec; \
169 kx for file in $(DAEMON_RPM_FILES); do echo $$file >> $(DAEMON_SRCDIR)/daemon.spec; done; \
169 kx for file in $(sort $(DAEMON_RPM_DOCFILES)); do echo %doc $$file >> $(DAEMON_SRCDIR)/daemon.spec; done
169 kx
169 kx # Extra debuild options: Don't sign anything (I'm not a debian maintainer)
169 kx DEBUILD_OPTIONS := -us -uc
169 kx
169 kx # Extra debuild options should be:
169 kx # DEBUILD_OPTIONS := -mmaintainer@debian.org
169 kx
169 kx deb-daemon: $(DAEMON_SRCDIR)/debian
169 kx @set -e; \
169 kx CDPATH=""; \
169 kx DAEMON_RENAMED=""; \
169 kx case "`pwd`" in \
169 kx */$(DAEMON_NAME)) \
169 kx cd ..; \
169 kx [ -d $(DAEMON_NAME)-$(DAEMON_VERSION) ] && echo "error: ../$(DAEMON_NAME)-$(DAEMON_VERSION) exists but we're not in it" && exit 1; \
169 kx mv $(DAEMON_NAME) $(DAEMON_NAME)-$(DAEMON_VERSION); \
169 kx cd $(DAEMON_NAME)-$(DAEMON_VERSION); \
169 kx DAEMON_RENAMED="yes";; \
169 kx esac; \
169 kx echo "Building debian packages."; \
169 kx debuild -rfakeroot -tc $(DEBUILD_OPTIONS); \
169 kx rm -rf $(CLEAN_FILES) $(CLOBBER_FILES); \
169 kx [ "$$DAEMON_RENAMED" = "yes" ] && cd .. && mv $(DAEMON_NAME)-$(DAEMON_VERSION) $(DAEMON_NAME) && cd $(DAEMON_NAME); \
169 kx echo "Listing package info and contents."; \
169 kx dpkg --info ../$(DAEMON_NAME)_$(DAEMON_VERSION)-*_*.deb; \
169 kx dpkg --contents ../$(DAEMON_NAME)_$(DAEMON_VERSION)-*_*.deb
169 kx
169 kx DAEMON_DEBIAN_CONTROL_CODE := perl -p -i -e ' \
169 kx BEGIN { \
169 kx open(README, "../README.md") or die("failed to open ../README.md\n"); \
169 kx while (<README>) \
169 kx { \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx $$summary = $$_ if $$section eq "README" && /^[*\w]/; \
169 kx $$description .= $$_ if $$section eq "DESCRIPTION"; \
169 kx if ($$section ne "README" && $$section ne "DESCRIPTION") \
169 kx { \
169 kx chop($$description); \
169 kx chop($$description); \
169 kx $$description =~ s/[*`]//g; \
169 kx chop($$summary); \
169 kx $$summary = $$1 if $$summary =~ /^\*?\w+\*? - (.*)$$/; \
169 kx $$description =~ s/^$$/./mg; \
169 kx $$description =~ s/^/ /mg; \
169 kx last; \
169 kx } \
169 kx } \
169 kx close(README); \
169 kx } \
169 kx s/^Section: unknown$$/Section: utils/; \
169 kx s/^(Build-Depends: .*)/$$1, perl/; \
169 kx s/^Homepage: <.*>$$/Homepage: http:\/\/libslack.org\/daemon\//; \
169 kx s/, \$$\{misc:Depends\}//; \
169 kx s/^Description: <insert up to 60 chars description>$$/Description: $$summary/; \
169 kx s/^ <insert long description, indented with spaces>$$/$$description/'
169 kx
169 kx DAEMON_DEBIAN_COPYRIGHT_CODE := perl -p -i -e ' \
169 kx s/<url:\/\/example\.com>/<http:\/\/libslack.org\/daemon\/>/; \
169 kx s/Copyright: <years> <put author.s name and email here>/Copyright: 1999-2004, 2010, 2020-2023 raf <raf\@raf.org>/; \
169 kx s/\s+<years> <likewise for another author>\n//; \
169 kx s/License: <special license>/License: GPL-2+/; \
169 kx s/<Put the license of the package here indented by 1 space>/This software is released under the terms of the GNU General Public License v2+:\n\n https:\/\/www.gnu.org\/licenses\/ (on the Web)\n file:\/usr\/share\/common-licenses\/GPL-2 (on Debian systems)/; \
169 kx s/ <This follows the format of Description: lines in control file>\n//; \
169 kx s/ <Including paragraphs>\n//; \
169 kx s/\#.*//'
169 kx
169 kx DAEMON_DEBIAN_RULES_CODE := perl -p -i -e ' \
169 kx s/^\t(.*)\$$\(MAKE\) \S*clean$$/\t$$1\$$(MAKE) clobber/; \
169 kx s/^\t\$$\(MAKE\)$$/\t\$$(MAKE) all daemon.conf man-daemon html-daemon/; \
169 kx s/^\t\$$\(MAKE\) .*install.*$$/\t\$$(MAKE) PREFIX=debian\/$(DAEMON_NAME)\/usr install-daemon-bin\n\t\$$(MAKE) PREFIX=debian\/$(DAEMON_NAME)\/usr\/share install-daemon-man\n\t\$$(MAKE) DAEMON_HTMLDIR=debian\/$(DAEMON_NAME)\/usr\/share\/doc\/daemon\/html install-daemon-html\n\t\$$(MAKE) DAEMON_CONF_INSDIR=debian\/$(DAEMON_NAME)\/etc install-daemon-conf/; \
169 kx s/^\tdh_installexamples$$/\#\tdh_installexamples/; \
169 kx s/^\tdh_installmenu$$/\#\tdh_installmenu/; \
169 kx s/^\tdh_installcron$$/\#\tdh_installcron/; \
169 kx s/^\tdh_installman$$/\#\tdh_installman/; \
169 kx s/^\tdh_installinfo$$/\#\tdh_installinfo/; \
169 kx s/^\tdh_suidregister$$/\#\tdh_suidregister/; \
169 kx s/[ \t]+$$//;'
169 kx
169 kx $(DAEMON_SRCDIR)/debian:
169 kx @set -e; \
169 kx echo "NOT ALLOWED"; exit 1; \
169 kx CDPATH=""; \
169 kx DAEMON_RENAMED=""; \
169 kx case "`pwd`" in \
169 kx */$(DAEMON_NAME)) \
169 kx cd ..; \
169 kx [ -d $(DAEMON_NAME)-$(DAEMON_VERSION) ] && echo "error: ../$(DAEMON_NAME)-$(DAEMON_VERSION) exists but we're not in it" && exit 1; \
169 kx mv $(DAEMON_NAME) $(DAEMON_NAME)-$(DAEMON_VERSION); \
169 kx cd $(DAEMON_NAME)-$(DAEMON_VERSION); \
169 kx DAEMON_RENAMED="yes"; \
169 kx ;; \
169 kx esac; \
169 kx echo "Creating debian directory."; \
169 kx dh_make -h | grep createorig >/dev/null && createorig=--createorig; \
169 kx dh_make $$createorig -s -e raf@raf.org; \
169 kx [ "$$DAEMON_RENAMED" = "yes" ] && cd .. && mv $(DAEMON_NAME)-$(DAEMON_VERSION) $(DAEMON_NAME) && cd $(DAEMON_NAME); \
169 kx cd $(DAEMON_SRCDIR)/debian; \
169 kx echo "Cleaning up debian directory."; \
169 kx rm -f README.Debian README.source *.ex *.EX ex.*; \
169 kx echo "Creating debian/conffiles."; \
169 kx echo /etc/daemon.conf > conffiles; \
169 kx echo "Completing debian/control."; \
169 kx $(DAEMON_DEBIAN_CONTROL_CODE) control; \
169 kx echo "Completing debian/copyright."; \
169 kx $(DAEMON_DEBIAN_COPYRIGHT_CODE) copyright; \
169 kx echo "Completing debian/changelog."; \
169 kx perl -p -i -e 'last if /^Local variables:/' changelog; \
169 kx perl -p -i -e 's/ \(Closes.*//' changelog; \
169 kx perl -p -i -e 's/-1/-0/' changelog; \
169 kx echo "Creating debian/doc-base."; \
169 kx echo "Document: $(DAEMON_NAME)" > doc-base; \
169 kx echo "Title: $(DAEMON_NAME) manual" >> doc-base; \
169 kx echo "Author: raf <raf@raf.org>" >> doc-base; \
169 kx echo "Abstract: $(DAEMON_NAME)(1) - turns other processes into daemons" >> doc-base; \
169 kx echo "Section: Applications/System" >> doc-base; \
169 kx echo "" >> doc-base; \
169 kx echo "Format: HTML" >> doc-base; \
169 kx echo "Index: /usr/share/doc/$(DAEMON_NAME)/html/" >> doc-base; \
169 kx echo "Files: /usr/share/doc/$(DAEMON_NAME)/html/*.html" >> doc-base; \
169 kx echo "" >> doc-base; \
169 kx echo "Completing debian/rules."; \
169 kx $(DAEMON_DEBIAN_RULES_CODE) rules
169 kx
169 kx $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE):
169 kx @echo '# /etc/daemon.conf: system-wide daemon(1) configuration.' > $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '# See daemon(1) or daemon.conf(5) for full documentation.' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '#' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '# Format:' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '# VAR=value' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '# <name|"*"> <option(","option)*>' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '#' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '# Example:' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '# PATH=$$PATH:~/bin' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '# * pidfiles=~/.pidfiles' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '# name respawn,command=/usr/bin/command args' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE); \
169 kx echo '' >> $(DAEMON_SRCDIR)/$(DAEMON_CONFFILE)
169 kx
169 kx sol-daemon: $(DAEMON_SRCDIR)/daemon.pkginfo
169 kx @set -e; \
169 kx base="`pwd`"; \
169 kx up="$$base/.."; \
169 kx mkdir -p $(DAEMON_SRCDIR)/solaris/install; \
169 kx mkdir -p $(DAEMON_SRCDIR)/solaris/build; \
169 kx mkdir -p $(DAEMON_SRCDIR)/solaris/info; \
169 kx cd $(DAEMON_SRCDIR)/solaris/build; \
169 kx gzip -dc $$up/$(DAEMON_DIST) | tar xf -; \
169 kx cd $(DAEMON_ID); \
169 kx ./configure; \
169 kx gmake PREFIX=../../install FINAL_PREFIX="$(PREFIX)" all install-daemon; \
169 kx cd "$$base"; \
169 kx mv $(DAEMON_SRCDIR)/daemon.pkginfo $(DAEMON_SRCDIR)/solaris/info/pkginfo; \
169 kx cd $(DAEMON_SRCDIR)/solaris/install; \
169 kx pkgproto . > ../info/prototype; \
169 kx echo "i pkginfo" >> ../info/prototype; \
169 kx cd ../info; \
169 kx pkgmk -o -b ../install -r ../install $(DAEMON_SOL); \
169 kx cd "$$base"; \
169 kx rm -rf $(DAEMON_SRCDIR)/solaris; \
169 kx arch="`isainfo -k`"; \
169 kx pkgtrans /var/spool/pkg $(DAEMON_ID).$$arch.pkg $(DAEMON_SOL); \
169 kx rm -rf /var/spool/pkg/$(DAEMON_SOL); \
169 kx mv /var/spool/pkg/$(DAEMON_ID).$$arch.pkg $$up/$(DAEMON_ID)-solaris-$$arch.pkg; \
169 kx gzip $$up/$(DAEMON_ID)-solaris-$$arch.pkg
169 kx
169 kx DAEMON_PKGINFO_CODE := perl -ne ' \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx chop($$description = $$_) if $$section eq "README" && /^[*\w]/; \
169 kx if ($$section ne "README") \
169 kx { \
169 kx $$description =~ s/[*`]//g; \
169 kx print "PKG=\"$(DAEMON_SOL)\"\n"; \
169 kx print "NAME=\"$$description\"\n"; \
169 kx print "VERSION=\"$(DAEMON_VERSION)\"\n"; \
169 kx print "CATEGORY=\"application\"\n"; \
169 kx print "BASEDIR=\"$(FINAL_PREFIX)\"\n"; \
169 kx exit; \
169 kx }'
169 kx
169 kx $(DAEMON_SRCDIR)/daemon.pkginfo:
169 kx @set -e; \
169 kx $(DAEMON_PKGINFO_CODE) < $(DAEMON_SRCDIR)/README.md > $(DAEMON_SRCDIR)/daemon.pkginfo
169 kx
169 kx obsd-daemon: $(DAEMON_SRCDIR)/obsd-daemon-oneline $(DAEMON_SRCDIR)/obsd-daemon-description
169 kx @set -e; \
169 kx base="`pwd`"; \
169 kx up="$$base/.."; \
169 kx mkdir -p "$$base/obsd-$(DAEMON_NAME)/build"; \
169 kx mkdir -p "$$base/obsd-$(DAEMON_NAME)/install"; \
169 kx cd "$$base/obsd-$(DAEMON_NAME)/build"; \
169 kx tar xzf "$$up/$(DAEMON_DIST)"; \
169 kx cd ./$(DAEMON_ID); \
169 kx ./configure; \
169 kx gmake PREFIX=../../install FINAL_PREFIX="$(PREFIX)" all install-daemon; \
169 kx cd "$$base"; \
169 kx echo "@cwd $(PREFIX)" >> $(DAEMON_SRCDIR)/obsd-daemon-packinglist; \
169 kx for file in $(patsubst $(PREFIX)/%, %, $(sort $(DAEMON_RPM_FILES) $(DAEMON_RPM_DOCFILES))); do echo $$file >> $(DAEMON_SRCDIR)/obsd-daemon-packinglist; done; \
169 kx arch="`uname -m`"; \
169 kx pkg_create -A "$$arch" -f $(DAEMON_SRCDIR)/obsd-daemon-packinglist -D COMMENT="`cat $(DAEMON_SRCDIR)/obsd-daemon-oneline`" -d $(DAEMON_SRCDIR)/obsd-daemon-description -p / -v $(DAEMON_ID).tgz; \
169 kx mv $(DAEMON_ID).tgz "$$up/$(DAEMON_ID)-openbsd-$$arch.tgz"; \
169 kx rm -rf "$$base/obsd-$(DAEMON_NAME)" $(DAEMON_SRCDIR)/obsd-daemon-packinglist $(DAEMON_SRCDIR)/obsd-daemon-oneline $(DAEMON_SRCDIR)/obsd-daemon-description
169 kx
169 kx DAEMON_OBSD_ONELINE_CODE := perl -ne ' \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx chop($$description = $$_) if $$section eq "README" && /^[*\w]/; \
169 kx if ($$section ne "README") \
169 kx { \
169 kx my ($$name, $$desc) = $$description =~ /^\*?(\w+)\*? - (.*)$$/; \
169 kx print "$$desc\n"; \
169 kx exit; \
169 kx }'
169 kx
169 kx $(DAEMON_SRCDIR)/obsd-daemon-oneline:
169 kx @$(DAEMON_OBSD_ONELINE_CODE) < $(DAEMON_SRCDIR)/README.md > $(DAEMON_SRCDIR)/obsd-daemon-oneline
169 kx
169 kx DAEMON_OBSD_DESCRIPTION_CODE := perl -ne ' \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx $$description .= $$_ if $$section eq "DESCRIPTION"; \
169 kx if ($$section ne "README" && $$section ne "DESCRIPTION") \
169 kx { \
169 kx $$description =~ s/[*`]//g; \
169 kx print $$description; \
169 kx exit; \
169 kx }'
169 kx
169 kx $(DAEMON_SRCDIR)/obsd-daemon-description:
169 kx @$(DAEMON_OBSD_DESCRIPTION_CODE) < $(DAEMON_SRCDIR)/README.md > $(DAEMON_SRCDIR)/obsd-daemon-description
169 kx
169 kx fbsd-daemon: $(DAEMON_SRCDIR)/fbsd-daemon-oneline $(DAEMON_SRCDIR)/fbsd-daemon-description
169 kx @set -e; \
169 kx base="`pwd`"; \
169 kx up="$$base/.."; \
169 kx mkdir -p "$$base/fbsd-$(DAEMON_NAME)/build"; \
169 kx mkdir -p "$$base/fbsd-$(DAEMON_NAME)/install"; \
169 kx cd "$$base/fbsd-$(DAEMON_NAME)/build"; \
169 kx tar xzf "$$up/$(DAEMON_DIST)"; \
169 kx cd ./$(DAEMON_ID); \
169 kx ./configure; \
169 kx gmake PREFIX=../../install FINAL_PREFIX="$(PREFIX)" all install-daemon; \
169 kx cd "$$base"; \
169 kx echo "@name $(DAEMON_ID)" > $(DAEMON_SRCDIR)/fbsd-daemon-packinglist; \
169 kx echo "@cwd $(PREFIX)" >> $(DAEMON_SRCDIR)/fbsd-daemon-packinglist; \
169 kx echo "@srcdir $$base/fbsd-$(DAEMON_NAME)/install" >> $(DAEMON_SRCDIR)/fbsd-daemon-packinglist; \
169 kx for file in $(patsubst $(PREFIX)/%, %, $(sort $(DAEMON_RPM_FILES) $(DAEMON_RPM_DOCFILES))); do echo $$file >> $(DAEMON_SRCDIR)/fbsd-daemon-packinglist; done; \
169 kx pkg_create -f $(DAEMON_SRCDIR)/fbsd-daemon-packinglist -c $(DAEMON_SRCDIR)/fbsd-daemon-oneline -d $(DAEMON_SRCDIR)/fbsd-daemon-description -v $(DAEMON_NAME); \
169 kx arch="`uname -m`"; \
169 kx mv $(DAEMON_NAME).tbz "$$up/$(DAEMON_ID)-freebsd-$$arch.tbz"; \
169 kx rm -rf "$$base/fbsd-$(DAEMON_NAME)" $(DAEMON_SRCDIR)/fbsd-daemon-packinglist $(DAEMON_SRCDIR)/fbsd-daemon-oneline $(DAEMON_SRCDIR)/fbsd-daemon-description
169 kx
169 kx DAEMON_FBSD_ONELINE_CODE := perl -ne ' \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx chop($$description = $$_) if $$section eq "README" && /^[*\w]/; \
169 kx if ($$section ne "README") \
169 kx { \
169 kx my ($$name, $$desc) = $$description =~ /^\*?(\w+)\*? - (.*)$$/; \
169 kx print "$$desc\n"; \
169 kx exit; \
169 kx }'
169 kx
169 kx $(DAEMON_SRCDIR)/fbsd-daemon-oneline:
169 kx @$(DAEMON_FBSD_ONELINE_CODE) < $(DAEMON_SRCDIR)/README.md > $(DAEMON_SRCDIR)/fbsd-daemon-oneline
169 kx
169 kx DAEMON_FBSD_DESCRIPTION_CODE := perl -ne ' \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx $$description .= $$_ if $$section eq "DESCRIPTION"; \
169 kx if ($$section ne "README" && $$section ne "DESCRIPTION") \
169 kx { \
169 kx $$description =~ s/[*`]//g; \
169 kx print $$description; \
169 kx exit; \
169 kx }'
169 kx
169 kx $(DAEMON_SRCDIR)/fbsd-daemon-description:
169 kx @$(DAEMON_FBSD_DESCRIPTION_CODE) < $(DAEMON_SRCDIR)/README.md > $(DAEMON_SRCDIR)/fbsd-daemon-description
169 kx
169 kx nbsd-daemon: $(DAEMON_SRCDIR)/nbsd-daemon-oneline $(DAEMON_SRCDIR)/nbsd-daemon-description $(DAEMON_SRCDIR)/nbsd-daemon-buildinfo
169 kx @set -e; \
169 kx base="`pwd`"; \
169 kx up="$$base/.."; \
169 kx mkdir -p "$$base/nbsd-$(DAEMON_NAME)/build"; \
169 kx mkdir -p "$$base/nbsd-$(DAEMON_NAME)/install"; \
169 kx cd "$$base/nbsd-$(DAEMON_NAME)/build"; \
169 kx tar xzf "$$up/$(DAEMON_DIST)"; \
169 kx cd ./$(DAEMON_ID); \
169 kx ./configure; \
169 kx gmake PREFIX=../../install FINAL_PREFIX="$(PREFIX)" all install-daemon; \
169 kx cd "$$base"; \
169 kx echo "@name $(DAEMON_ID)" > $(DAEMON_SRCDIR)/nbsd-daemon-packinglist; \
169 kx echo "@cwd $(PREFIX)" >> $(DAEMON_SRCDIR)/nbsd-daemon-packinglist; \
169 kx echo "@src $$base/nbsd-$(DAEMON_NAME)/install" >> $(DAEMON_SRCDIR)/nbsd-daemon-packinglist; \
169 kx for file in $(patsubst $(PREFIX)/%, %, $(sort $(DAEMON_RPM_FILES) $(DAEMON_RPM_DOCFILES))); do echo $$file >> $(DAEMON_SRCDIR)/nbsd-daemon-packinglist; done; \
169 kx pkg_create -f $(DAEMON_SRCDIR)/nbsd-daemon-packinglist -c $(DAEMON_SRCDIR)/nbsd-daemon-oneline -d $(DAEMON_SRCDIR)/nbsd-daemon-description -B $(DAEMON_SRCDIR)/nbsd-daemon-buildinfo -v $(DAEMON_NAME); \
169 kx arch="`uname -m`"; \
169 kx mv $(DAEMON_NAME).tgz "$$up/$(DAEMON_ID)-netbsd-$$arch.tgz"; \
169 kx cat $(DAEMON_SRCDIR)/nbsd-daemon-packinglist; \
169 kx rm -rf "$$base/nbsd-$(DAEMON_NAME)" $(DAEMON_SRCDIR)/nbsd-daemon-packinglist $(DAEMON_SRCDIR)/nbsd-daemon-oneline $(DAEMON_SRCDIR)/nbsd-daemon-description $(DAEMON_SRCDIR)/nbsd-daemon-buildinfo
169 kx
169 kx DAEMON_NBSD_ONELINE_CODE := perl -ne ' \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx chop($$description = $$_) if $$section eq "README" && /^[*\w]/; \
169 kx if ($$section ne "README") \
169 kx { \
169 kx my ($$name, $$desc) = $$description =~ /^\*?(\w+)\*? - (.*)$$/; \
169 kx print "$$desc\n"; \
169 kx exit; \
169 kx }'
169 kx
169 kx $(DAEMON_SRCDIR)/nbsd-daemon-oneline:
169 kx @$(DAEMON_NBSD_ONELINE_CODE) < $(DAEMON_SRCDIR)/README.md > $(DAEMON_SRCDIR)/nbsd-daemon-oneline
169 kx
169 kx DAEMON_NBSD_DESCRIPTION_CODE := perl -ne ' \
169 kx next if /^=+$$/; \
169 kx chop($$section = $$_), next if /^[A-Z]+$$/; \
169 kx $$description .= $$_ if $$section eq "DESCRIPTION"; \
169 kx if ($$section ne "README" && $$section ne "DESCRIPTION") \
169 kx { \
169 kx $$description =~ s/[*`]//g; \
169 kx print $$description; \
169 kx exit; \
169 kx }'
169 kx
169 kx $(DAEMON_SRCDIR)/nbsd-daemon-description:
169 kx @$(DAEMON_NBSD_DESCRIPTION_CODE) < $(DAEMON_SRCDIR)/README.md > $(DAEMON_SRCDIR)/nbsd-daemon-description
169 kx
169 kx $(DAEMON_SRCDIR)/nbsd-daemon-buildinfo:
169 kx @echo "MACHINE_ARCH=`uname -p`" > $(DAEMON_SRCDIR)/nbsd-daemon-buildinfo; \
169 kx echo "OPSYS=`uname -s`" >> $(DAEMON_SRCDIR)/nbsd-daemon-buildinfo; \
169 kx echo "OS_VERSION=`uname -r`" >> $(DAEMON_SRCDIR)/nbsd-daemon-buildinfo
169 kx
169 kx osx-daemon:
169 kx @set -e; \
169 kx base="`pwd`"; \
169 kx up="$$base/.."; \
169 kx mkdir -p "osx-$(DAEMON_NAME)/build"; \
169 kx mkdir -p "osx-$(DAEMON_NAME)/install"; \
169 kx cd "./osx-$(DAEMON_NAME)/build"; \
169 kx tar xzf "$$up/$(DAEMON_DIST)"; \
169 kx cd ./$(DAEMON_ID); \
169 kx ./configure; \
169 kx make PREFIX=../../install FINAL_PREFIX="$(PREFIX)" all install-daemon; \
169 kx cd ../../install; \
169 kx arch="`uname -m`"; \
169 kx tar czf "$$up/$(DAEMON_ID)-macosx-$$arch.tar.gz" .; \
169 kx cd "$$base"; \
169 kx rm -rf "$$base/osx-$(DAEMON_NAME)"
169 kx
169 kx # Present make targets separately in help if we are not alone
169 kx
169 kx ifneq ($(DAEMON_SRCDIR), .)
169 kx DAEMON_SPECIFIC_HELP := 1
169 kx else
169 kx ifneq ($(DAEMON_SUBTARGETS),)
169 kx DAEMON_SPECIFIC_HELP := 1
169 kx endif
169 kx endif
169 kx
169 kx ifeq ($(DAEMON_SPECIFIC_HELP), 1)
169 kx help::
169 kx @echo " $(DAEMON_NAME) -- makes $(DAEMON_TARGET) and $(DAEMON_SUBTARGETS)"; \
169 kx echo " man-$(DAEMON_NAME) -- makes the $(DAEMON_NAME) manpages"; \
169 kx echo " html-$(DAEMON_NAME) -- makes the $(DAEMON_NAME) manpages in html"; \
169 kx echo " install-daemon -- installs $(DAEMON_NAME) and its manpage"; \
169 kx echo " install-daemon-bin -- installs $(DAEMON_NAME) in $(DESTDIR)$(APP_INSDIR)"; \
169 kx echo " install-daemon-man -- installs the $(DAEMON_NAME) manpage in $(DESTDIR)$(APP_MANDIR)"; \
169 kx echo " install-daemon-html -- installs the $(DAEMON_NAME) html manpage in $(DESTDIR)$(DAEMON_HTMLDIR)"; \
169 kx echo " install-daemon-conf -- installs the $(DAEMON_NAME).conf{,.d} file/directory in $(DESTDIR)$(DAEMON_CONF_INSDIR)"; \
169 kx echo " uninstall-daemon -- uninstalls $(DAEMON_NAME) and its manpage"; \
169 kx echo " uninstall-daemon-bin -- uninstalls $(DAEMON_NAME) from $(DESTDIR)$(APP_INSDIR)"; \
169 kx echo " uninstall-daemon-man -- uninstalls the $(DAEMON_NAME) manpage from $(DESTDIR)$(APP_MANDIR)"; \
169 kx echo " uninstall-daemon-html -- uninstalls the $(DAEMON_NAME) html manpage from $(DESTDIR)$(DAEMON_HTMLDIR)"; \
169 kx echo " uninstall-daemon-conf -- uninstalls the $(DAEMON_NAME).conf{,.d} file/directory from $(DESTDIR)$(DAEMON_CONF_INSDIR)"; \
169 kx echo " dist-daemon -- makes a source tarball for daemon+libslack"; \
169 kx echo " dist-html-daemon -- makes a tarball of daemon's html manpages"; \
169 kx echo " rpm-daemon -- makes source and binary rpm packages for daemon"; \
169 kx echo " deb-daemon -- makes source and binary deb package for daemon"; \
169 kx echo " sol-daemon -- makes a binary solaris package for daemon"; \
169 kx echo " obsd-daemon -- makes a binary openbsd package for daemon"; \
169 kx echo " fbsd-daemon -- makes a binary freebsd package for daemon"; \
169 kx echo " nbsd-daemon -- makes a binary netbsd package for daemon"; \
169 kx echo " osx-daemon -- makes a binary macosx package for daemon"; \
169 kx echo
169 kx endif
169 kx
169 kx help-macros::
169 kx @echo "DAEMON_NAME = $(DAEMON_NAME)"; \
169 kx echo "DAEMON_VERSION = $(DAEMON_VERSION)"; \
169 kx echo "DAEMON_ID = $(DAEMON_ID)"; \
169 kx echo "DAEMON_DIST = $(DAEMON_DIST)"; \
169 kx echo "DAEMON_HTML_DIST = $(DAEMON_HTML_DIST)"; \
169 kx echo "DAEMON_TARGET = $(DAEMON_TARGET)"; \
169 kx echo "DAEMON_MODULES = $(DAEMON_MODULES)"; \
169 kx echo "DAEMON_SRCDIR = $(DAEMON_SRCDIR)"; \
169 kx echo "DAEMON_INCDIRS = $(DAEMON_INCDIRS)"; \
169 kx echo "DAEMON_LIBDIRS = $(DAEMON_LIBDIRS)"; \
169 kx echo "DAEMON_LIBS = $(DAEMON_LIBS)"; \
169 kx echo "DAEMON_CFILES = $(DAEMON_CFILES)"; \
169 kx echo "DAEMON_OFILES = $(DAEMON_OFILES)"; \
169 kx echo "DAEMON_HFILES = $(DAEMON_HFILES)"; \
169 kx echo "DAEMON_HTMLDIR = $(DAEMON_HTMLDIR)"; \
169 kx echo "DAEMON_PODFILES = $(DAEMON_PODFILES)"; \
169 kx echo "DAEMON_MANFILES = $(DAEMON_MANFILES)"; \
169 kx echo "DAEMON_HTMLFILES = $(DAEMON_HTMLFILES)"; \
169 kx echo "DAEMON_CONFFILE = $(DAEMON_CONFFILE)"; \
169 kx echo "DAEMON_CONFDIR = $(DAEMON_CONFDIR)"; \
169 kx echo "DAEMON_RPM_FILES = $(DAEMON_RPM_FILES)"; \
169 kx echo "DAEMON_RPM_DOCFILES = $(DAEMON_RPM_DOCFILES)"; \
169 kx echo "DAEMON_DEFINES = $(DAEMON_DEFINES)"; \
169 kx echo "DAEMON_CPPFLAGS = $(DAEMON_CPPFLAGS)"; \
169 kx echo "DAEMON_CCFLAGS = $(DAEMON_CCFLAGS)"; \
169 kx echo "DAEMON_CFLAGS = $(DAEMON_CFLAGS)"; \
169 kx echo "DAEMON_LDFLAGS = $(DAEMON_LDFLAGS)"; \
169 kx echo "DAEMON_SUBTARGETS = $(DAEMON_SUBTARGETS)"; \
169 kx echo "DAEMON_SUBDIRS = $(DAEMON_SUBDIRS)"; \
169 kx echo
169 kx
169 kx include $(SLACK_SRCDIR)/rules.mk
169 kx
169 kx $(DAEMON_SRCDIR)/%.o: $(DAEMON_SRCDIR)/%.c
169 kx $(CC) $(DAEMON_CFLAGS) -o $@ -c $<
169 kx
169 kx $(DAEMON_SRCDIR)/%.$(APP_MANSECT): $(DAEMON_SRCDIR)/%.c
169 kx $(POD2MAN) --section=$(APP_MANSECT) --center='$(APP_MANSECTNAME)' --name=$(shell echo $(DAEMON_NAME) | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ) --release=$(DAEMON_ID) --date=$(DAEMON_DATE) --quotes=none $< > $@
169 kx
169 kx $(DAEMON_SRCDIR)/%.gz: $(DAEMON_SRCDIR)/%
169 kx $(GZIP) $<
169 kx
169 kx $(DAEMON_SRCDIR)/%.$(APP_MANSECT).html: $(DAEMON_SRCDIR)/%.c
169 kx $(POD2HTML) --noindex < $< > $@ 2>/dev/null
169 kx