-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
149 lines (113 loc) · 3.41 KB
/
Makefile
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
138
139
140
141
142
143
144
145
146
147
148
SHELL=/bin/sh
MAKE = make
SUBDIRS = www
# Package dependencies
PKGS += libc6-dev
PKGS += git
PKGS += g++
PKGS += cmake
PKGS += unzip
PKGS += wget
PKGS += php-cgi php-sqlite3
PKGS += libsqlite3-dev sqlite3
PKGS += lighttpd
PKGS += libssl-dev
PKGS += libz-dev
PKGS += libjson-c-dev
# Source files to be compiled
SRCS = wsocknmea.c adc-sensors.c ais.c
HDRS = wsocknmea.h
BIN = wsocknmea
# Where to install web pages
WWWTOP?=/var/www/html
# The web-server's runtime user and group belongings
WO = www-data
WG = $(WO)
UID=$(shell getent passwd $(WO) |cut -d: -f3)
GID=$(shell getent group $(WG) |cut -d: -f3)
ifeq ($(strip $(UID)),)
$(error user $(WO) not found. Try "./mk-user $(WO) $(WWWTOP)" and run make again)
endif
ifeq ($(strip $(GID)),)
$(error GID is not set)
endif
# Configuration database
NAVIDBPATH = $(WWWTOP)/inc/navi.db
# Kplex config file
KPCONFPATH = $(WWWTOP)/inc/kplex.conf
UPLOADPATH = $(WWWTOP)/upload
# Where to install binaries
DEST=/usr/local/bin
# Where to find libais.so
LIBDIR=/usr/local/lib
# Extra includes
INCDIR=/usr/local/include
CC=gcc
GETC=".git/HEAD"
ifeq ($(shell test -e $(GETC) && echo -n yes),yes)
CFLAGS=-DREV=\"$(shell git log --pretty=format:'%h' -n 1 2>/dev/null)\"
endif
CFLAGS+= -Wall -g -std=gnu99 -pedantic -D_REENTRANT
CFLAGS+= -DUID=$(UID) -DGID=$(GID) -I$(INCDIR) -DUPLOADPATH=\"$(UPLOADPATH)\"
CFLAGS+= -DNAVIDBPATH=\"$(NAVIDBPATH)\" -DKPCONFPATH=\"$(KPCONFPATH)\"
LDFLAGS=-L$(LIBDIR) -lwebsockets -lsqlite3 -lais -lpthread -ljson-c -lrt -lz -lm -Wl,-rpath=$(LIBDIR)
all: $(BIN)
$(BIN): $(SRCS) $(HDRS)
$(CC) $(SRCS) $(CFLAGS) $(LDFLAGS) -o $(BIN)
clean:
rm -f $(BIN) *~
distclean:
@for i in $(SUBDIRS); do \
echo "Clearing in $$i..."; \
(cd $$i; $(MAKE) TOP=$(WWWTOP) clean); done;
cd contrib && $(MAKE) clean
$(MAKE) clean
install: $(BIN)
sudo install -m 0755 -g root -o root $(BIN) -D $(DEST)/$(BIN)
@if [ ! -e $(DEST)/a2dnotice ]; then \
sudo install -m 755 -g root -o root a2dnotice -D $(DEST)/a2dnotice; \
fi
-sudo systemctl stop wsocknmea.service
-sudo systemctl disable wsocknmea.service
-sudo install -m 0644 -g root -o root wsocknmea.service -D /lib/systemd/system/
-sudo systemctl enable wsocknmea.service
status:
-sudo systemctl status wsocknmea.service --no-pager -l || true
stop:
-sudo systemctl stop wsocknmea.service || true
-sudo systemctl status wsocknmea.service --no-pager -l || true
restart: $(DEST)/$(BIN)
-sudo systemctl restart wsocknmea.service || true
-sudo systemctl status wsocknmea.service --no-pager -l || true
install-www:
$(MAKE) install
@for i in $(SUBDIRS); do \
echo "Installing in $$i..."; \
(cd $$i; $(MAKE) TOP=$(WWWTOP) WO=$(WO) WG=$(WG) install); done
install-dep:
@if [ ! -f .updated ]; then \
echo "\nNeeded packages:" ; \
echo $(PKGS) | sed 's/\s\+/\n/g'; echo ; \
read -p "OK to check for and install these packages (y/n)? " yn ; \
if [ "$${yn}" = "y" ]; then \
sudo apt-get update; \
sudo apt-get install $(PKGS); \
touch .updated; \
fi \
else \
echo "Dependency installation done"; \
fi
install-contribs:
cd contrib && $(MAKE)
cd contrib && $(MAKE) install
contribs:
cd contrib && $(MAKE)
install-configs:
cd contrib && $(MAKE) TOP=$(WWWTOP) WO=$(WO) WG=$(WG) install-configs
world:
$(MAKE) install-dep
$(MAKE) contribs
$(MAKE) install-contribs
$(MAKE)
$(MAKE) install-www
$(MAKE) install-configs