aboutsummaryrefslogtreecommitdiff
path: root/extra/Makefile
blob: 785d2df645a6186165de1bce2bb5b7cd1bf24d88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File: Makefile for stackbin
# Location: stackbin source package
# Author: bgstack15
# Startdate: 2020-12-30
# Title: Makefile for stackbin source package
# Purpose: To use traditional Unix make utility
# History:
# Usage:
# Reference:
#    fuss Makefile
# Improve:
#    add man page?
# Document:
# Dependencies:
#    build-devuan:

APPNAME    = stackbin
APPVERSION = 0.0.1
SRCDIR     = $(CURDIR)/..# because Makefile is in extra/ inside this repo
prefix     = /usr
SYSCONFDIR = $(DESTDIR)/etc
DEFAULTDIR = $(DESTDIR)/etc/sysconfig# for debian use '$(DESTDIR)/etc/default'
LIBEXECDIR = $(DESTDIR)$(prefix)/libexec
SHAREDIR   = $(DESTDIR)$(prefix)/share
DOCDIR     = $(SHAREDIR)/doc/$(APPNAME)
APPDIR     = $(SHAREDIR)/$(APPNAME)
APPVARDIR  = $(DESTDIR)/var/www/$(APPNAME)
MANDIR     = $(SHAREDIR)/man
SYSVDIR    = $(SYSCONFDIR)/init.d
SYSDDIR    = $(DESTDIR)$(prefix)/lib/systemd/system
LOGDIR	  = $(DESTDIR)/var/log/stackbin
APACHEDIR  = $(SYSCONFDIR)/httpd/conf.d# for debian use '$(SYSCONFDIR)/apache2/sites-available'
NGINXDIR	  = $(SYSCONFDIR)/nginx/default.d
CRONDIR    = $(SYSCONFDIR)/cron.d
SBINDIR	  = $(DESTDIR)$(prefix)/sbin

# variables for deplist
DEPTYPE = dep
SEPARATOR = ,

awkbin     :=$(shell which awk)
chmodbin   :=$(shell which chmod)
cpbin      :=$(shell which cp)
echobin    :=$(shell which echo)
falsebin   :=$(shell which false)
findbin    :=$(shell which find)
grepbin    :=$(shell which grep)
gzipbin    :=$(shell which gzip)
installbin :=$(shell which install)
rmbin      :=$(shell which rm)
rmdirbin   :=$(shell which rmdir)
sedbin     :=$(shell which sed)
sortbin    :=$(shell which sort)
truebin    :=$(shell which true)
uniqbin    :=$(shell which uniq)
xargsbin   :=$(shell which xargs)

with_apache ?= NO
with_nginx ?= YES
with_init ?= YES
with_systemd ?= NO
with_pip_helper ?= NO

all:
	-@echo "Nothing to build." && ${truebin}

install: install_files

.PHONY: clean install install_files 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:
	@# deplist 2020-04-18 input must be comma separated
	@# DEPTYPE( dep , rec , sug ) for depends, recommends, or suggests
	@if test -z "${DISTRO}" ; then ${echobin} "Please run \`make deplist\` with DISTRO= one of: `make deplist_opts 2>&1 1>/dev/null | ${xargsbin}`. Aborted." 1>&2 ; exit 1 ; fi
	@if ! ${echobin} "${DEPTYPE}" | grep -qE "^(dep|rec|sug)$$" ; then ${echobin} "Please run \`make deplist\` with DEPTYPE= one of: dep, rec, sug. Undefined will use \`dep\`. Aborted." 1>&2 ; exit 1; fi
	@${grepbin} -h --exclude-dir='doc' -riIE "\<${DEPTYPE}-" ${SRCDIR} | ${awkbin} -v "domain=${DISTRO}" -v "deptype=${DEPTYPE}" 'tolower($$2) ~ deptype"-"domain {$$1="";$$2="";print}' | tr ',' '\n' | ${sortbin} | ${uniqbin} | ${sedbin} -r -e 's/^\s*//' -e "s/\s*\$$/${SEPARATOR}/" | ${xargsbin}

deplist_opts:
	@# deplist_opts 2020-04-18 find all available dependency domains
	@${grepbin} -h -o -riIE '\<(dep|rec|sug)-[^\ :]+:' ${SRCDIR} | ${sedbin} -r -e 's/(dep|rec|sug)-//;' -e 's/:$$//;' | ${sortbin} | ${uniqbin} 1>&2

install_files:
	${installbin} -m0755 -d ${LOGDIR} ${APPVARDIR} ${APPDIR}/static ${APPDIR}/templates \
		${DOCDIR} ${SBINDIR} ${SYSCONFDIR} ${LIBEXECDIR}/${APPNAME}
	${installbin} -m0755 -t ${SBINDIR} ${SRCDIR}/${APPNAME}.bin
	${installbin} -m0644 -t ${LIBEXECDIR}/${APPNAME} ${SRCDIR}/${APPNAME}.py
	${installbin} -m0644 ${SRCDIR}/${APPNAME}.conf.example ${SYSCONFDIR}/${APPNAME}.conf
	${installbin} -m0644 ${SRCDIR}/${APPNAME}.wsgi.ini.example ${SYSCONFDIR}/${APPNAME}.wsgi.ini
	${installbin} -m0644 -t ${DOCDIR} ${SRCDIR}/*.md
	${installbin} -m0644 -t ${APPDIR}/static ${SRCDIR}/static/*
	${installbin} -m0644 -t ${APPDIR}/templates ${SRCDIR}/templates/*
ifeq ($(with_apache),YES)
	${installbin} -m0755 -d ${APACHEDIR}
	${installbin} -m0644 ${SRCDIR}/extra/${APPNAME}.conf.apache ${APACHEDIR}/${APPNAME}.conf
endif
ifeq ($(with_nginx),YES)
	${installbin} -m0755 -d ${NGINXDIR}
	${installbin} -m0644 ${SRCDIR}/extra/${APPNAME}.conf.nginx ${NGINXDIR}/${APPNAME}.conf
endif
ifeq ($(with_init),YES)
	${installbin} -m0755 -d ${SYSVDIR}
	${installbin} -m0755 ${SRCDIR}/extra/${APPNAME}.init ${SYSVDIR}/${APPNAME}
endif
ifeq ($(with_systemd),YES)
	${installbin} -m0755 -d ${SYSDDIR}
	${installbin} -m0644 ${SRCDIR}/extra/stackbin.service -t ${SYSDDIR}
endif
ifeq ($(with_pip_helper),YES)
	${installbin} -m0755 -t ${LIBEXECDIR}/${APPNAME}/ ${SRCDIR}/extra/pip-helper.sh
endif

uninstall:
	@${echobin} SRCDIR=${SRCDIR}
	${rmbin} -f ${APPDIR}/${APPNAME}.* \
		${DOCDIR}/* \
		${APPDIR}/static/* \
		${APPDIR}/templates/* \
		${LIBEXECDIR}/${APPNAME}/* \
		${SBINDIR}/${APPNAME}.bin \
		1>/dev/null 2>&1 || :
	${rmbin} -f ${APACHEDIR}/${APPNAME}.conf || :
	${rmbin} -f ${SYSVDIR}/${APPNAME} || :

	# remove all installed directories that are now blank.
	${rmdirbin} ${APPVARDIR} ${APPDIR}/static \
		${SYSVDIR} ${APACHEDIR} ${DOCDIR} \
		${LIBEXECDIR}/${APPNAME} ${LOGDIR} 2>/dev/null || :
	${rmdirbin} ${APPDIR} 2>/dev/null || :

clean:
	-@${echobin} "target $@ not implemented yet! Gotta say unh." && ${falsebin}
bgstack15