# File: Makefile for arandr-trayicon # Location: arandr-trayicon source package # Author: bgstack15 # Startdate: 2022-12-02 # Title: Makefile for arandr-trayicon source package # Purpose: To use traditional Unix make utility # History: # Usage: # Reference: # Makefiles from keyboard-leds-trayicons, bgscripts # Improve: # Document: # Includes a nice way to dynamically generate dependencies as self-reported by all the files. # Dependencies: # build-devuan: txt2man, bgscripts-core APPNAME = arandr-trayicon APPVERSION = 0.0.1 SRCDIR = $(CURDIR) prefix = /usr SYSCONFDIR = $(DESTDIR)/etc BINDIR = $(DESTDIR)$(prefix)/bin SHAREDIR = $(DESTDIR)$(prefix)/share DOCDIR = $(SHAREDIR)/doc/${APPNAME} MANDIR = $(SHAREDIR)/man APPSDIR = $(SHAREDIR)/applications ICONDIR = $(SHAREDIR)/icons SYSCONFDIR = $(DESTDIR)/etc XDGAUTODIR = $(SYSCONFDIR)/xdg/autostart awkbin :=$(shell which awk) cpbin :=$(shell which cp) echobin :=$(shell which echo) findbin :=$(shell which find) grepbin :=$(shell which grep) installbin :=$(shell which install) lnbin :=$(shell which ln) rmbin :=$(shell which rm) sedbin :=$(shell which sed) sortbin :=$(shell which sort) trbin :=$(shell which tr) truebin :=$(shell which true) uniqbin :=$(shell which uniq) xargsbin :=$(shell which xargs) txt2manwrapper :=$(shell which txt2man-wrapper) gzipbin :=$(shell which gzip) SEPARATOR ?=, all: build_man .PHONY: clean install install_files build_man uninstall list deplist deplist_opts list: @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | ${awkbin} -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | ${sortbin} | ${grepbin} -E -v -e '^[^[:alnum:]]' -e '^$@$$' deplist: @if test -z "$(DISTRO)" ; then ${echobin} "Please run \`make deplist\` with DISTRO= one of: `make deplist_opts 2>&1 1>/dev/null | ${xargsbin}`. Aborted." ; exit 1 ; fi @${grepbin} -h --exclude='Makefile' --exclude-dir='doc' -A5 -riIE dependencies $(SRCDIR) | ${awkbin} -v 'distro=$(DISTRO)' 'tolower($$0) ~ distro {$$1="";$$2="";print}' | ${trbin} ',' '\n' | ${sedbin} -r -e 's/^\s*//;' -e 's/\*$$//;' | ${sortbin} | ${uniqbin} | ${sedbin} -r -e 's/$$/$(SEPARATOR)/' | ${xargsbin} deplist_opts: @${echobin} "devuan" 1>&2 install: build_man install_files install_files: @ls usr/share/man/man*/*gz 1>/dev/null 2>&1 && echo "Including man pages." || : @${echobin} Installing files to ${DESTDIR} for td in $$( ${findbin} ${SRCDIR} -type d ! -name '.*.swp' ! -name 'Makefile' -printf '%P\n' | ${sedbin} -r -e "s:etc/sysconfig:${DEFAULTDIR}:" -e "s:${DESTDIR}/?::" ) ; do ${installbin} -m0755 -d ${DESTDIR}/$${td} ; done for tf in $$( ${findbin} ${SRCDIR} ! -type d ! -name '.*.swp' ! -name 'Makefile' ! \( -path '*/man/*' -name '*.txt' \) ! -path '*/sysconfig/*' -printf '%P\n' ) ; do MODE=0644 ; echo "$${tf}" | grep -qE "(bin|libexec|deprecated|\/screenlayouts)\/" && MODE=0755 ; ${installbin} -m$${MODE} ${SRCDIR}/$${tf} ${DESTDIR}/$${tf} ; done @# sysconfig/default dir MAN_TXT:=$(wildcard usr/share/man/man*/*.txt) MAN_GZ:= $(subst .txt,.gz,$(MAN_TXT)) build_man: $(MAN_GZ) $(MAN_GZ): %.gz: %.txt ${txt2manwrapper} - < $< | ${gzipbin} > $@ uninstall: @${echobin} SRCDIR=${SRCDIR} ${rmbin} -f $$( ${findbin} ${SRCDIR} -mindepth 1 ! -type d -printf '%p\n' | ${sedbin} -r -e "s:^${SRCDIR}:${DESTDIR}:" ) $$( ${findbin} ${SRCDIR}/usr/share/man ! -type d -printf '%p\n' | ${sedbin} -r -e "s:^${SRCDIR}:${DESTDIR}:" -r -e 's/\.md$$/.gz/;' ) # remove all installed directories that are now blank. for word in $$( ${findbin} ${SRCDIR} -mindepth 1 -type d -printf '%p\n' | ${sedbin} -r -e "s:^${SRCDIR}:${DESTDIR}:" | ${awkbin} '{ print length, $$0 }' | sort -rn | ${awkbin} '{print $$2}' ) ; do ${findbin} $${word} -mindepth 1 1>/dev/null 2>&1 | read 1>/dev/null 2>&1 || { rmdir "$${word}" 2>/dev/null || ${truebin} ; } ; done clean: -@#${echobin} "target $@ not implemented yet! Gotta say unh." -${rmbin} -f usr/share/man/man*/*.gz || :