-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMakefile
66 lines (53 loc) · 2.74 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
define newline
endef
ifdef fortify
FTFYSRC = fortify.c
FTFYHDRS = fortify.h ufortify.h
FTFYFLAG ="-DFORTIFY "
FTFYLINTEXCL = --exclude=fortify.*
endif
SOURCES = src/dintwm.c src/commodity.c $(FTFYSRC)
OBJECTS = $(SOURCES:.c=.o)
CFLAGSSTRICT =-pedantic -std=c11 -ggdb3 $(FTFYFLAG)-O2 -Wall -Wextra -Wformat=2 -Wmissing-include-dirs -Winit-self -Wswitch-default -Wswitch-enum -Wunused-parameter -Wfloat-equal -Wundef -Wshadow -Wlarger-than-1000 -Wunsafe-loop-optimizations -Wbad-function-cast -Wcast-align -Wconversion -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wpacked -Wpadded -Wredundant-decls -Wnested-externs -Wunreachable-code -Winline -Winvalid-pch -Wvolatile-register-var -Wstrict-aliasing=2 -Wstrict-overflow=2 -Wtraditional-conversion -Wwrite-strings -noixemul -save-temps=obj
CC = m68k-amigaos-gcc
CFLAGS =-std=c11 -Ofast -Wall -Wextra -s -fomit-frame-pointer -noixemul
MAINHEADER = include/dintwm.h include/dintwm_shared.h
CONFHEADER = include/commodity.h
EXTHEADERS = include/ketopt.h include/wbar_config.h $(FTFYHDRS)
HEADERS = $(MAINHEADER) $(CONFHEADER) $(EXTHEADERS)
CPPLINTCMD = cpplint
CPPLINTOPTS = --linelength 150 --filter=-whitespace/tab,-whitespace/comments,-whitespace/braces,-whitespace/indent,-readability/casting,-runtime/int,-build/header_guard $(FTFYLINTEXCL)
CPPCHECKCMD = cppcheck
CPPCHECKOPTS = --check-level=exhaustive --enable=warning,style,performance,portability,unusedFunction -DFORTIFY
FLAWCMD = flawfinder
FLAWOPTS = -F
SPLINTCMD = splint
SPLINTARGS = -I $(HOME)/opt/amiga/m68k-amigaos/ndk-include/
PANDOC = awk -v RS='\\[/*.:.*pancut.*panend)' -v ORS= '1;NR==1{printf "Check demos on: https://github.com/RasmusEdgar/dintwm"}' README.md | pandoc -f markdown-smart -t plain --wrap=none | sed 's/~~/|DONE|/g' > readme.txt
TARGET = dintwm
GITVER = $(shell git describe --tags)
VERCMD = sed -i "s/VERGIT/${GITVER}/g" include/dintwm.h
CLRVER = $(shell gawk -i inplace -v RS='//VERCUT.*VERCUT' -v ORS= '1;NR==1{printf "//VERCUT\n#define DINTWM_VERSION \"VERGIT\"\n//VERCUT"}' include/dintwm.h)
ifdef strict
CFLAGS = $(CFLAGSSTRICT)
TEMPS = $(SOURCES:.c=.i) $(SOURCES:.c=.s)
PEXCL = --exclude-path */opt/amiga/* --exclude-path ./include/ketopt.h
endif
.PHONY: setver
setver:
$(VERCMD)
all : $(OBJECTS)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJECTS)
$(PANDOC)
ifdef strict
$(CPPLINTCMD) $(CPPLINTOPTS) $(SOURCES) $(filter-out $(EXTHEADERS),$(HEADERS))
$(CPPCHECKCMD) $(CPPCHECKOPTS) $(filter-out $(FTFYSRC),$(SOURCES))
$(FLAWCMD) $(FLAWOPTS) $(HEADERS) $(filter-out $(FTFYSRC),$(SOURCES))
$(SPLINTCMD) $(SOURCES) $(SPLINTARGS)
endif
dintwm.o : $(MAINHEADER) $(EXTHEADERS)
commodity.o : $(MAINHEADER) $(CONFHEADER)
.PHONY : clean
clean :
-rm dintwm $(OBJECTS) $(TEMPS) $(LOGS)
$(CLRVER)