aboutsummaryrefslogtreecommitdiff
path: root/config/Makefile
blob: 74cb73fd95c07859dec1e9c8b86577e88a3f506c (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
135
136
137
# File: Makefile for hex-zero
# Location: hex-zero source package
# Author: bgstack15
# Startdate: 2020-12-09
# Title: Makefile for hex-zero source package
# Purpose: To use traditional Unix make utility
# History:
# Usage:
# Reference:
#    bgscripts Makefile
# Improve:
#    add man page?
# Document:
# Dependencies:
#    build-devuan: 

APPNAME    = hex-zero
APPNAME_   = hex_zero
APPVERSION = 0.0.1
SRCDIR     = $(CURDIR)/..# because Makefile is in config/ 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     = $(DESTDIR)/var/www/$(APPNAME)
MANDIR     = $(SHAREDIR)/man
SYSVDIR    = $(SYSCONFDIR)/init.d
SYSDDIR    = $(DESTDIR)$(prefix)/lib/systemd/system
LOGDIR	  = $(DESTDIR)/var/log/hex-zero
APACHEDIR  = $(SYSCONFDIR)/httpd/conf.d# for debian use '$(SYSCONFDIR)/apache2/sites-available'
CRONDIR    = $(SYSCONFDIR)/cron.d

# 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 ?= YES
with_nsfw ?= NO
with_init ?= YES
with_systemd ?= NO
with_cronjob ?= YES

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} ${APPDIR} ${APPDIR}/up ${DOCDIR} ${DEFAULTDIR}
	${installbin} -m0644 -t ${APPDIR} ${SRCDIR}/front.html.in
	${installbin} -m0644 ${SRCDIR}/config/${APPNAME}.conf.example ${APPDIR}/${APPNAME}.conf
	${installbin} -m0755 -t ${APPDIR} ${SRCDIR}/${APPNAME_}.py ${SRCDIR}/${APPNAME}.wsgi \
		${SRCDIR}/check-for-short_url.sh
	${installbin} -m0644 -t ${DOCDIR} ${SRCDIR}/README*
	${installbin} -m0644 ${SRCDIR}/config/${APPNAME}.etc.default ${DEFAULTDIR}/${APPNAME}

	@# the migrations directory is required for the db upgrade command to execute correctly
	${installbin} -m0755 -d ${APPDIR}/migrations/versions
	${installbin} -m0644 -t ${APPDIR}/migrations ${SRCDIR}/migrations/*.ini ${SRCDIR}/migrations/README
	${installbin} -m0755 -t ${APPDIR}/migrations ${SRCDIR}/migrations/*.py*
	${installbin} -m0644 -t ${APPDIR}/migrations/versions ${SRCDIR}/migrations/versions/*py
ifeq ($(with_apache),YES)
	${installbin} -m0755 -d ${APACHEDIR}
	${installbin} -m0644 ${SRCDIR}/config/${APPNAME}.conf.apache ${APACHEDIR}/${APPNAME}.conf
endif
ifeq ($(with_nsfw),YES)
	${installbin} -m0755 -t ${APPDIR} ${SRCDIR}/nsfw_detect.py
	${installbin} -m0755 -d ${APPDIR}/nsfw_model
	${installbin} -m0644 -t ${APPDIR}/nsfw_model ${SRCDIR}/nsfw_model/*
endif
ifeq ($(with_init),YES)
	${installbin} -m0755 -d ${SYSVDIR}
	${installbin} -m0755 ${SRCDIR}/config/${APPNAME}.init ${SYSVDIR}/${APPNAME}
endif
ifeq ($(with_systemd),YES)
	${installbin} -m0755 -d ${SYSDDIR}
	${installbin} -m0644 ${SRCDIR}/config/0x0.service -t ${SYSDDIR}
endif
ifeq ($(with_cronjob),YES)
	${installbin} -m0755 -d ${CRONDIR}
	${installbin} -m0644 -t ${CRONDIR} ${SRCDIR}/config/80_${APPNAME}_cron
endif

uninstall:
	@${echobin} SRCDIR=${SRCDIR}
	${rmbin} -f ${APPDIR}/${APPNAME}.conf ${APPDIR}/${APPNAME_}.py ${APPDIR}/${APPNAME}.wsgi \
		${APPDIR}/check-for-short_url.sh \
		${APPDIR}/front.html.in ${DOCDIR}/* ${DEFAULTDIR}/${APPNAME} \
		${APPDIR}/migrations/versions/* ${APPDIR}/migrations/* \
		1>/dev/null 2>&1 || :
	${rmbin} -f ${APACHEDIR}/${APPNAME}.conf || :
	${rmbin} -f ${APPDIR}/nsfw_model/* ${APPDIR}/nsfw_detect.py || :
	${rmbin} -f ${SYSVDIR}/${APPNAME} || :
	${rmbin} -f ${SYSDDIR}/0x0.service || :
	${rmbin} -f ${CRONDIR}/80_${APPNAME}_cron || :

	# remove all installed directories that are now blank.
	${rmdirbin} ${APPDIR}/up ${DEFAULTDIR} ${SYSVDIR} ${APPDIR} \
		${APACHEDIR} ${SYSDDIR} ${DOCDIR} ${LOGDIR} 2>/dev/null || :

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