File: Makefile

package info (click to toggle)
vfu 5.09-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,552 kB
  • sloc: cpp: 16,739; ansic: 2,605; perl: 678; makefile: 349; sh: 75
file content (142 lines) | stat: -rw-r--r-- 3,267 bytes parent folder | download | duplicates (2)
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
# use this to disable flto optimizations:
#   make NO_FLTO=1
# and this to enable verbose mode:
#   make V=1

AR?=gcc-ar
STRIP?=strip
RANLIB?=ranlib
PKG_CONFIG?=pkg-config

PCRE08_CC?=$(shell $(PKG_CONFIG) --cflags libpcre2-8)
PCRE08_LD?=$(shell $(PKG_CONFIG) --libs libpcre2-8)
PCRE32_CC?=$(shell $(PKG_CONFIG) --cflags libpcre2-32)
PCRE32_LD?=$(shell $(PKG_CONFIG) --libs libpcre2-32)
YASCREEN_CC?=$(shell $(PKG_CONFIG) --cflags yascreen)
YASCREEN_LD?=$(shell $(PKG_CONFIG) --libs yascreen)
NCURSES_CC?=$(shell $(PKG_CONFIG) --cflags ncursesw)
NCURSES_LD?=$(shell $(PKG_CONFIG) --libs ncursesw)

ALIBS:=libvslib.a libvscon.a libvscony.a
ifeq ($(YASCREEN_LD),)
	ALIBS:=$(filter-out libvscony.a,$(ALIBS))
endif
ifeq ($(NCURSES_LD),)
	ALIBS:=$(filter-out libvscon.a,$(ALIBS))
endif

all: $(ALIBS) t/test

SRCS:=\
	ansiterm.cpp \
	clusters.cpp \
	conmenu.cpp \
	dlog.cpp \
	eval.cpp \
	form_in.cpp \
	getopt2.cpp \
	scroll.cpp \
	unicon.cpp \
	vscrc.cpp \
	vslib.cpp \
	vsuti.cpp \
	t/test.cpp
OBJS:=$(SRCS:.cpp=.o)
DEPS:=$(OBJS:.o=.d) $(OBJS:.o=.y.d)

ifndef NO_FLTO
CXXFLAGS?=-O3 -fno-stack-protector -mno-stackrealign
CXXFLAGS+=-flto=auto
else
CXXFLAGS?=-O3 -fno-stack-protector -mno-stackrealign
endif

# some architectures do not have -mno-stackrealign
HAVESREA:=$(shell if $(CXX) -mno-stackrealign -xc -c /dev/null -o /dev/null >/dev/null 2>/dev/null;then echo yes;else echo no;fi)
# old comiplers do not have -Wdate-time
HAVEWDTI:=$(shell if $(CXX) -Wdate-time -xc -c /dev/null -o /dev/null >/dev/null 2>/dev/null;then echo yes;else echo no;fi)

MYCXXFLAGS:=$(CPPFLAGS) $(CXXFLAGS) $(PCRE08_CC) $(PCRE32_CC) $(YASCREEN_CC) $(NCURSES_CC) -Wall -Wextra -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIE -I. -I../vstring
ifeq ("$(HAVESREA)","no")
MYCXXFLAGS:=$(filter-out -mno-stackrealign,$(MYCXXFLAGS))
endif
ifeq ("$(HAVEWDTI)","no")
MYCXXFLAGS:=$(filter-out -Wdate-time,$(MYCXXFLAGS))
endif

MYLDFLAGS:=$(MYCXXFLAGS) $(LDFLAGS) -fPIE -pie
MYLIBS:=$(LIBS) $(PCRE08_LD) $(PCRE32_LD)

ifeq ("$(V)","1")
Q:=
E:=@true
else
Q:=@
E:=@echo
endif

%.o: %.cpp
	$(E) DE $@
	$(Q)$(CXX) $(MYCXXFLAGS) -D_UNICON_USE_CURSES_ -MM -MT $@ -MF $(patsubst %.o,%.d,$@) $<
	$(E) CXX $@
	$(Q)$(CXX) $(MYCXXFLAGS) -D_UNICON_USE_CURSES_ -c -o $@ $<

%.y.o: %.cpp
	$(E) DE $@
	$(Q)$(CXX) $(MYCXXFLAGS) -D_UNICON_USE_YASCREEN_ -MM -MT $@ -MF $(patsubst %.o,%.d,$@) $<
	$(E) CXX $@
	$(Q)$(CXX) $(MYCXXFLAGS) -D_UNICON_USE_YASCREEN_ -c -o $@ $<

VSLIBOBJ:=\
	clusters.o \
	dlog.o \
	eval.o \
	getopt2.o \
	scroll.o \
	vslib.o \
	vsuti.o \
	vscrc.o

libvslib.a: $(VSLIBOBJ)
	$(Q)rm -f $@
	$(E) AR $@
	$(Q)$(AR) rv $@ $+
	$(E) RANLIB $@
	$(Q)$(RANLIB) $@

VSCONOBJ:=\
	conmenu.o \
	form_in.o \
	unicon.o

VSCONYOBJ:=$(VSCONOBJ:.o=.y.o)

libvscon.a: $(VSCONOBJ)
	$(Q)rm -f $@
	$(E) AR $@
	$(Q)$(AR) rv $@ $+
	$(E) RANLIB $@
	$(Q)$(RANLIB) $@

libvscony.a: $(VSCONYOBJ)
	$(Q)rm -f $@
	$(E) AR $@
	$(Q)$(AR) rv $@ $+
	$(E) RANLIB $@
	$(Q)$(RANLIB) $@

t/test: t/test.o ../vstring/libvstring.a libvslib.a
	$(E) LD $@
	$(Q)$(CXX) -o $@ $(MYLDFLAGS) $< $(MYLIBS) -L../vstring -lvstring -L. -lvslib

clean:
	$(E) CLEAN
	$(Q) rm -f *.a *.o *.d t/test t/*.o

re:
	$(Q)$(MAKE) --no-print-directory clean
	$(Q)$(MAKE) --no-print-directory -j

-include $(DEPS)

.PHONY: all clean re