From 931c7ed2ef8ab6ab868743e201b4fa4f3f22315d Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Tue, 5 Jul 2022 15:12:14 -0700 Subject: [PATCH] Makefile.am: allow installing from separate build directory --- Makefile.am | 137 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 99 insertions(+), 38 deletions(-) diff --git a/Makefile.am b/Makefile.am index ae39af39..1e94358d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -200,59 +200,120 @@ shairport_sync_mpris_test_client_SOURCES = shairport-sync-mpris-test-client.c shairport_sync_mpris_test_client_LDADD = lib_mpris_interface.a endif -install-exec-hook: +if INSTALL_CONFIG_FILES + +CONFIG_FILE_INSTALL_TARGET = config-file-install-local +$(CONFIG_FILE_INSTALL_TARGET): scripts/shairport-sync.conf + install -d $(DESTDIR)$(sysconfdir) + install -m 0644 $< $(DESTDIR)$(sysconfdir)/shairport-sync.conf.sample + [ -f $(DESTDIR)$(sysconfdir)/shairport-sync.conf ] || cp $< $(DESTDIR)$(sysconfdir)/shairport-sync.conf + if BUILD_FOR_LINUX -DBUS_POLICY_DIR=$(DESTDIR)/etc/dbus-1/system.d +DBUS_POLICY_DIR = /etc/dbus-1/system.d else -DBUS_POLICY_DIR=$(DESTDIR)$(sysconfdir)/dbus-1/system.d +DBUS_POLICY_DIR = $(sysconfdir)/dbus-1/system.d endif -if INSTALL_CONFIG_FILES - [ -e $(DESTDIR)$(sysconfdir) ] || mkdir $(DESTDIR)$(sysconfdir) - cp scripts/shairport-sync.conf $(DESTDIR)$(sysconfdir)/shairport-sync.conf.sample - [ -f $(DESTDIR)$(sysconfdir)/shairport-sync.conf ] || cp scripts/shairport-sync.conf $(DESTDIR)$(sysconfdir)/shairport-sync.conf + if USE_DBUS - [ -e $(DBUS_POLICY_DIR) ] || mkdir -p $(DBUS_POLICY_DIR) + if INSTALL_CYGWIN_SERVICE - cp scripts/shairport-sync-dbus-policy-cygwin.conf $(DBUS_POLICY_DIR)/shairport-sync-dbus.conf +DBUS_POLICY_FILE = scripts/shairport-sync-dbus-policy-cygwin.conf else - cp scripts/shairport-sync-dbus-policy.conf $(DBUS_POLICY_DIR)/shairport-sync-dbus.conf -endif -endif +DBUS_POLICY_FILE = scripts/shairport-sync-dbus-policy.conf +endif # INSTALL_CYGWIN_SERVICE + +DBUS_POLICY_INSTALL_TARGET = dbus-policy-install-local + +$(DBUS_POLICY_INSTALL_TARGET): $(DBUS_POLICY_FILE) + install -d $(DESTDIR)$(DBUS_POLICY_DIR) + install -m 0644 $< $(DESTDIR)$(DBUS_POLICY_DIR)/shairport-sync-dbus.conf + +endif # USE_DBUS + if USE_MPRIS - [ -e $(DBUS_POLICY_DIR) ] || mkdir -p $(DBUS_POLICY_DIR) + if INSTALL_CYGWIN_SERVICE - cp scripts/shairport-sync-mpris-policy-cygwin.conf $(DBUS_POLICY_DIR)/shairport-sync-mpris.conf +MPRIS_POLICY_FILE = scripts/shairport-sync-mpris-policy-cygwin.conf else - cp scripts/shairport-sync-mpris-policy.conf $(DBUS_POLICY_DIR)/shairport-sync-mpris.conf -endif -endif -endif -if INSTALL_SYSTEMV +MPRIS_POLICY_FILE = scripts/shairport-sync-mpris-policy.conf +endif # INSTALL_CYGWIN_SERVICE + +MPRIS_POLICY_INSTALL_TARGET = mpris-policy-install-local + +$(MPRIS_POLICY_INSTALL_TARGET): $(MPRIS_POLICY_FILE) + install -d $(DESTDIR)$(DBUS_POLICY_DIR) + install -m 0644 $< $(DESTDIR)$(DBUS_POLICY_DIR)/shairport-sync-mpris.conf + +endif # USE_MPRIS + +endif # INSTALL_CONFIG_FILES + +INSTALL_GROUP_TARGET = install-group-local + +$(INSTALL_GROUP_TARGET): getent group shairport-sync &>/dev/null || groupadd -r shairport-sync >/dev/null + +INSTALL_USER_TARGET = install-user-local + +$(INSTALL_USER_TARGET): $(INSTALL_GROUP_TARGET) getent passwd shairport-sync &> /dev/null || useradd -r -M -g shairport-sync -s /usr/sbin/nologin -G audio shairport-sync >/dev/null - [ -e $(DESTDIR)$(sysconfdir)/init.d ] || mkdir -p $(DESTDIR)$(sysconfdir)/init.d - [ -e $(DESTDIR)$(sysconfdir)/init.d/shairport-sync ] || cp scripts/shairport-sync $(DESTDIR)$(sysconfdir)/init.d/ -endif + +if INSTALL_SYSTEMV + +INSTALL_SYSTEMV_TARGET = install-systemv-local + +$(INSTALL_SYSTEMV_TARGET): scripts/shairport-sync $(INSTALL_USER_TARGET) + install -d $(DESTDIR)$(sysconfdir)/init.d + [ -e $(DESTDIR)$(sysconfdir)/init.d/shairport-sync ] || install -m 0644 $< $(DESTDIR)$(sysconfdir)/init.d + +endif # INSTALL_SYSTEMV + if INSTALL_SYSTEMD - getent group shairport-sync &>/dev/null || groupadd -r shairport-sync >/dev/null - getent passwd shairport-sync &> /dev/null || useradd -r -M -g shairport-sync -s /usr/sbin/nologin -G audio shairport-sync >/dev/null - [ -e $(DESTDIR)$(systemdsystemunitdir) ] || mkdir -p $(DESTDIR)$(systemdsystemunitdir) + if USE_AVAHI - [ -e $(DESTDIR)$(systemdsystemunitdir)/shairport-sync.service ] || cp scripts/shairport-sync.service-avahi $(DESTDIR)$(systemdsystemunitdir)/shairport-sync.service +SYSTEMD_SERVICE = shairport-sync.service-avahi else - [ -e $(DESTDIR)$(systemdsystemunitdir)/shairport-sync.service ] || cp scripts/shairport-sync.service $(DESTDIR)$(systemdsystemunitdir) -endif -endif +SYSTEMD_SERVICE = shairport-sync.service +endif # USE_AVAHI + +INSTALL_SYSTEMD_TARGET = install-systemd-local + +$(INSTALL_SYSTEMD_TARGET): scripts/$(SYSTEMD_SERVICE) $(INSTALL_USER_TARGET) + install -d $(DESTDIR)$(systemdsystemunitdir) + [ -e $(DESTDIR)$(systemdsystemunitdir)/shairport-sync.service ] || install -m 0644 $< $(DESTDIR)$(systemdsystemunitdir)/shairport-sync.service + +endif # INSTALL_SYSTEMD + if INSTALL_FREEBSD_SERVICE - # Choose a uid and gid of 801 completely arbitrarity, except that it should be below 1000. FreeBSD doesn't seem to allow you to say "an ID in the range of..." + +# Choose a uid and gid of 801 completely arbitrarity, except that it should be below 1000. FreeBSD doesn't seem to allow you to say "an ID in the range of..." +install-freebsd-user-local: pw showgroup shairport-sync > /dev/null 2>&1 || pw addgroup -n shairport-sync -g 801 > /dev/null 2>&1 pw showuser shairport-sync > /dev/null 2>&1 || pw adduser -c "shairport-sync unprivileged user" -n shairport-sync -u 801 -s /usr/sbin/nologin -d /nonexistent > /dev/null 2>&1 - [ -e /var/run/shairport-sync ] || mkdir -p /var/run/shairport-sync - chown shairport-sync:shairport-sync /var/run/shairport-sync - # Always update the startup script -- this is different to the Linux systemd situation, where the startup script is untouched if it exists. - cp scripts/shairport-sync.freebsd /usr/local/etc/rc.d/shairport_sync - chmod 555 /usr/local/etc/rc.d/shairport_sync -endif + +INSTALL_FREEBSD_TARGET = install-freebsd-local + +$(INSTALL_FREEBSD_TARGET): scripts/shairport-sync.freebsd install-freebsd-user-local + install -d -o shairport-sync -g shairport-sync $(DESTDIR)/var/run/shairport-sync + install -d $(DESTDIR)/usr/local/etc/rc.d/ + install -m 0555 $< $(DESTDIR)/usr/local/etc/rc.d/shairport_sync + +endif # INSTALL_FREEBSD_SERVICE + if INSTALL_CYGWIN_SERVICE - [ -e /usr/local/bin/shairport-sync-config ] || cp scripts/shairport-sync-config /usr/local/bin -endif + +INSTALL_CYGWIN_TARGET = install-cygwin-local + +$(INSTALL_CYGWIN_TARGET): scripts/shairport-sync-config + install -d $(DESTDIR)/usr/local/bin + [ -e $(DESTDIR)/usr/local/bin/shairport-sync-config ] || install -m 0755 $< $(DESTDIR)/usr/local/bin/ + +endif # INSTALL_CYGWIN_SERVICE + +install-exec-hook: $(CONFIG_FILE_INSTALL_TARGET) \ + $(DBUS_POLICY_INSTALL_TARGET) \ + $(MPRIS_POLICY_INSTALL_TARGET) \ + $(INSTALL_SYSTEMV_TARGET) \ + $(INSTALL_SYSTEMD_TARGET) \ + $(INSTALL_FREEBSD_TARGET) \ + $(INSTALL_CYGWIN_TARGET) -- 2.47.2