fix types for ARM support; fix errno handling; minor fixes; license GPL3 or later fix
[guish.git] / Makefile
bloba161bac211a5c87b376d5182bfa04c2e9049577a
1 ########################################################################
2 # Copyright (C) 2023 Francesco Palumbo <phranz@subfc.net>, Naples (Italy)
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <https://www.gnu.org/licenses/>.
16 ########################################################################
18 DESTDIR ?= /
19 PREFIX ?= usr/local
21 CFLAGS ?= -O2 -pedantic -Wall -Wextra -Wfatal-errors -D_REENTRANT -fPIC
22 LDFLAGS ?=
23 LDFLAGS += -lm
24 WIDOBJS =
25 MAINOBJS =
27 DEBUG ?= 0
28 ENABLE_X11 ?= 1
29 ENABLE_CONTROL ?= 1
30 ENABLE_IMAGES ?= 1
32 ifeq (1, $(DEBUG))
33 CFLAGS = -ggdb -pedantic -Wall -Wextra -Wfatal-errors -fno-omit-frame-pointer -O0 -DDEBUG
34 endif
36 ifeq (1, $(ENABLE_X11))
37 CFLAGS += -DENABLE_X11
38 LDFLAGS += -L/usr/X11R6/lib -lX11
39 WIDOBJS += \
40 src/widget.o \
41 src/exec.o \
42 src/widgets/button.o \
43 src/widgets/input.o \
44 src/widgets/page.o \
45 src/widgets/label.o \
46 src/widgets/checkbox.o \
47 src/widgets/trans.o
49 ifeq (1, $(ENABLE_CONTROL))
50 CFLAGS += -DENABLE_CONTROL
51 LDFLAGS += -lXtst
52 endif
53 ifeq (1, $(ENABLE_IMAGES))
54 CFLAGS += -DENABLE_IMAGES
55 LDFLAGS += $(shell pkg-config --cflags --libs imlib2)
56 endif
57 endif
59 MAINOBJS += \
60 src/dectypes.o \
61 src/debug.o \
62 src/sourcedriver.o \
63 src/tokenizer.o \
64 src/parser.o \
65 src/evaluator.o \
66 src/main.o \
67 src/syntax.o
69 all: guish
71 guish: $(MAINOBJS) $(WIDOBJS)
72 $(CC) -o guish $(CFLAGS) $(MAINOBJS) $(WIDOBJS) $(LDFLAGS)
74 src/dectypes.o: src/dectypes.c src/dectypes.h src/cutils.h
75 src/debug.o: src/debug.c src/debug.h src/dectypes.h src/tokenizer.h src/evaluator.h
76 src/main.o: src/main.c src/main.h src/cutils.h src/dectypes.h src/parser.h src/evaluator.h src/sourcedriver.h src/tokenizer.h src/syntax.h src/debug.h src/widget.h src/exec.h
77 src/evaluator.o: src/evaluator.c src/evaluator.h src/parser.h src/widgets.h src/main.h src/dectypes.h src/cutils.h src/sourcedriver.h src/tokenizer.h src/syntax.h src/debug.h src/exec.h
78 src/parser.o: src/parser.c src/parser.h src/evaluator.h src/dectypes.h src/cutils.h src/tokenizer.h src/debug.h
79 src/tokenizer.o: src/tokenizer.c src/tokenizer.h src/dectypes.h src/evaluator.h src/main.h src/sourcedriver.h src/debug.h
80 src/sourcedriver.o: src/sourcedriver.c src/sourcedriver.h src/dectypes.h src/tokenizer.h src/main.h src/debug.h
81 src/syntax.o: src/syntax.c src/syntax.h src/dectypes.h
83 src/widget.o: src/widget.c src/widget.h src/widgets.h src/dectypes.h src/syntax.h src/evaluator.h src/debug.h src/main.h
84 src/exec.o: src/exec.c src/exec.h src/widgets.h src/dectypes.h src/tokenizer.h src/sourcedriver.h src/syntax.h src/evaluator.h src/debug.h
85 src/widgets/button.o: src/widgets/button.c src/widgets/button.h src/dectypes.h
86 src/widgets/input.o: src/widgets/input.c src/widgets/input.h src/syntax.h src/dectypes.h src/evaluator.h
87 src/widgets/page.o: src/widgets/page.c src/widgets/page.h src/dectypes.h
88 src/widgets/label.o: src/widgets/label.c src/widgets/label.h src/dectypes.h
89 src/widgets/checkbox.o: src/widgets/checkbox.c src/widgets/checkbox.h src/dectypes.h src/evaluator.h
90 src/widgets/trans.o: src/widgets/trans.c src/widgets/trans.h src/dectypes.h
92 .PHONY: install
93 install: all
94 mkdir -p $(DESTDIR)/$(PREFIX)/bin && \
95 mkdir -p $(DESTDIR)/$(PREFIX)/share/man/man1 && \
96 mkdir -p $(DESTDIR)/$(PREFIX)/share/doc/guish && \
97 cp guish $(DESTDIR)/$(PREFIX)/bin && \
98 chmod 755 $(DESTDIR)/$(PREFIX)/bin/guish && \
99 cp man/guish.1 $(DESTDIR)/$(PREFIX)/share/man/man1 && \
100 cp README.md $(DESTDIR)/$(PREFIX)/share/doc/guish && \
101 cp changelog.md $(DESTDIR)/$(PREFIX)/share/doc/guish && \
102 cp COPYING $(DESTDIR)/$(PREFIX)/share/doc/guish && \
103 cp -R examples $(DESTDIR)/$(PREFIX)/share/doc/guish
105 .PHONY: uninstall
106 uninstall:
107 rm -f $(DESTDIR)/$(PREFIX)/bin/guish \
108 rm -f $(DESTDIR)/$(PREFIX)/share/man/man1/guish.1
110 .PHONY: tests
111 tests:
112 sh tests/unit.sh
113 sh tests/functional.sh
114 sh tests/leaks.sh
116 clean:
117 rm -f src/*.o src/widgets/*.o guish