summaryrefslogtreecommitdiff
path: root/Makefile
blob: a6d47a224af8cbef690ca357809f1b59b20cd8f4 (plain) (blame)
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
.POSIX:
DATE         = 1970-01-01
VERSION      = 0.1.0
NAME         = wscat
NAME_UC      = $(NAME)
LANGUAGES    = en
## Installation prefix.  Defaults to "/usr".
PREFIX       = /usr
BINDIR       = $(PREFIX)/bin
LIBDIR       = $(PREFIX)/lib
INCLUDEDIR   = $(PREFIX)/include
SRCDIR       = $(PREFIX)/src/$(NAME)
SHAREDIR     = $(PREFIX)/share
LOCALEDIR    = $(SHAREDIR)/locale
MANDIR       = $(SHAREDIR)/man
EXEC         = ./
## Where to store the installation.  Empty by default.
DESTDIR      =
LDLIBS       =
GOFLAGS      =



.SUFFIXES:
.SUFFIXES: .go .bin



all:
include deps.mk


sources = \
	src/lib.go                     \
	src/cmd/main.go                \


derived-assets = \
	$(NAME).bin                    \
	tests/lib_test.bin             \

side-assets = \
	$(NAME).socket                 \



## Default target.  Builds all artifacts required for testing
## and installation.
all: $(derived-assets)


$(NAME).bin: src/lib.go src/cmd/main.go Makefile
	go build $(GOFLAGS) -v -o $@ src/cmd/main.go

tests/lib_test.bin: src/lib.go tests/lib_test.go Makefile
	go test  $(GOFLAGS) -v -o $@ -c $*.go



check-unit: tests/lib_test.bin
	./tests/lib_test.bin


integration-tests = \
	tests/cli-opts.sh              \
	tests/integration.sh           \

$(integration-tests): $(NAME).bin
$(integration-tests): ALWAYS
	sh $@

check-integration: $(integration-tests)


## Run all tests.  Each test suite is isolated, so that a parallel
## build can run tests at the same time.  The required artifacts
## are created if missing.
check: check-unit check-integration



## Remove *all* derived artifacts produced during the build.
## A dedicated test asserts that this is always true.
clean:
	rm -rf $(derived-assets) $(side-assets)


## Installs into $(DESTDIR)$(PREFIX).  Its dependency target
## ensures that all installable artifacts are crafted beforehand.
install: all
	mkdir -p \
		'$(DESTDIR)$(BINDIR)'     \

	cp $(NAME).bin       '$(DESTDIR)$(BINDIR)'/$(NAME)
	for f in $(sources); do \
		dir='$(DESTDIR)$(SRCDIR)'/"`dirname "$${f#src/}"`"; \
		mkdir -p "$$dir"; \
		cp -P "$$f" "$$dir"; \
	done

## Uninstalls from $(DESTDIR)$(PREFIX).  This is a perfect mirror
## of the "install" target, and removes *all* that was installed.
## A dedicated test asserts that this is always true.
uninstall:
	rm -rf \
		'$(DESTDIR)$(BINDIR)'/$(NAME)       \
		'$(DESTDIR)$(SRCDIR)'               \



## Run it locally.
run: all
	rm -f $(NAME).socket
	./$(NAME).bin wscat.socket retcp.socket


ALWAYS: