1# This is a sample Makefile for debuging LilyTerm.
2#
3# Usage:
4#	make clean: delete lilyterm binary files.
5#	make debug: compile lilyeterm_dbg with CLAGS -g.
6#	make dev: compile lilyeterm_dev with CLAGS -g.
7#	make ddev: compile lilyeterm_dev with -DSAFEMODE compile option.
8#	make ut: run a tiny unit testing script with gdb debug information.
9#	make uto: build *.o binary files for using in the unit testing programs.
10#	make utb: build the the unit testing programs only.
11#	make utd: run a tiny unit testing script with full runtime debug information.
12#	make utf: run a tiny unit testing script with glib, gtk, gdb and valgrind debug information.
13#	make geometry: compile lilyeterm_dev with geometry debug information.
14#	make detail: compile lilyeterm_dev with detail runtime debug information.
15#	make full: compile lilyeterm_dev with full runtime debug information.
16#	make memory: compile lilyeterm_dev for memory lack testing.
17#	make data: compile po and $(BINARY).conf files.
18#
19# grep 'g_debug *( *" *[^\!@+\?-]' * | grep -v '\/\/'
20# ([cdfmnpw][aeior][naistgo][sltnucefpd].*\.c:[0-9]*)
21
22include ../.default
23-include ../.config
24
25PKGCONFIG := $(shell whereis "pkg-config" | tr -s ' ' '\n' | grep "bin/""pkg-config""$$" | head -n 1)
26
27VTE ?= ""
28
29ifneq ($(PKGCONFIG), )
30
31ifeq ($(VTE), "vte")
32GTK := $(shell $(PKGCONFIG) --exists 'gtk+-2.0' && $(ECHO) 'gtk+-2.0')
33endif
34ifeq ($(VTE), "vte-2.90")
35GTK := $(shell $(PKGCONFIG) --exists 'gtk+-3.0' && $(ECHO) 'gtk+-3.0')
36endif
37ifeq ($(VTE), "")
38VTE := $(shell $(PKGCONFIG) --exists 'vte' && $(ECHO) 'vte')
39GTK := $(shell $(PKGCONFIG) --exists 'gtk+-2.0' && $(ECHO) 'gtk+-2.0')
40endif
41ifeq ($(VTE), )
42VTE := $(shell $(PKGCONFIG) --exists 'vte-2.90' && $(ECHO) 'vte-2.90')
43GTK := $(shell $(PKGCONFIG) --exists 'gtk+-3.0' && $(ECHO) 'gtk+-3.0')
44endif
45
46endif
47
48BINDIR = $(PREFIX)/bin
49date = `date +%Y-%m-%d`
50CC ?= gcc
51CFLAGS ?= -Wall -Werror -Os
52#CFLAGS = $$CFLAGS -Wall -Wextra -Os -std=c99 \
53#	 -DG_DISABLE_DEPRECATED \
54#	 -DG_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED \
55#	 -DGDK_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_DEPRECATED \
56#	 -DGTK_DISABLE_SINGLE_INCLUDES -DGSEAL_ENABLE
57LDFLAGS += -L$(prefix)/local/lib
58OBJ_PKG_CMD = $(PKGCONFIG) --cflags $(GTK) $(VTE)
59BINARY_PKG_CMD = $(PKGCONFIG) --cflags --libs $(GTK) $(VTE)
60SOURCE_FILES = menu.c profile.c dialog.c pagename.c notebook.c font.c \
61	       property.c window.c misc.c console.c main.c
62OBJ = $(SOURCE_FILES:.c=.o)
63
64AUTHOR_CONVERT = $(shell echo "$(AUTHOR)" | sed -e 's/\([ ()]\)/\\\1/g')
65
66INCLUDES = -DBINARY=\"$(BINARY)\" \
67	   -DPACKAGE=\"$(PACKAGE)\" \
68	   -DBUGREPORT=\"$(BUGREPORT)\" \
69	   -DMAINSITE=\"$(MAINSITE)\" \
70	   -DGITHUBURL=\"$(GITHUBURL)\" \
71	   -DBLOG=\"$(BLOG)\" \
72	   -DWIKI=\"$(WIKI)\" \
73	   -DISSUES=\"$(ISSUES)\" \
74	   -DIRC=\"$(IRC)\" \
75	   -DYEAR=\"$(YEAR)\" \
76	   -DETCDIR=\"$(ETCDIR)\" \
77	   -DLOCALEDIR=\"$(LOCALEDIR)\" \
78	   -DICONDIR=\"$(ICONDIR)\"
79
80ifeq ($(BSD), 1)
81	INCLUDES += -DBSD
82endif
83
84.PHONY: all
85all: default
86ifeq ($(STRIP), Y)
87	@ strip --remove-section=.comment --remove-section=.note $(BINARY)
88endif
89
90.PHONY: default
91default: CFLAGS := $(CFLAGS) -DSAFEMODE
92default: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(AUTHOR_CONVERT)\" -DVERSION=\"$(VERSION)\ \($(date)\)\"
93ifeq ($(DEBUG), Y)
94default: INCLUDES += -DDEBUG -DFATAL
95endif
96default: $(BINARY)
97
98.PHONY: debug
99debug: CFLAGS := $(CFLAGS) -g
100debug: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(AUTHOR_CONVERT)\" -DDEBUG -DFATAL -DVERSION=\"$(VERSION)\ Debug\ Version\ \($(date)\)\"
101debug: BINARY := $(BINARY)_dbg
102debug: $(BINARY)
103
104.PHONY: dev
105dev: develop
106.PHONY: develop
107# develop: CFLAGS := -pedantic -pipe -fno-common -W -Wall -Wcast-align -Wformat=2 -Wpointer-arith -Wundef -Waggregate-return -Wcast-qual -Wmissing-declarations -Wnested-externs -Wstrict-prototypes -O3 -g
108develop: CFLAGS := $(CFLAGS) -g
109develop: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(AUTHOR_CONVERT)\" -DDEBUG -DFATAL -DDEVELOP -DVERSION=\"$(VERSION)\ Develop\ Version\ \($(date)\)\"
110develop: BINARY := $(BINARY)_dev
111develop: $(BINARY)
112
113.PHONY: ddev
114ddev: defensive-develop
115.PHONY: defensive-develop
116defensive-develop: CFLAGS := $(CFLAGS) -g
117defensive-develop: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(AUTHOR_CONVERT)\" -DSAFEMODE -DDEBUG -DFATAL -DDEVELOP -DVERSION=\"$(VERSION)\ Develop\ Version\ \($(date)\)\"
118defensive-develop: BINARY := $(BINARY)_dev
119defensive-develop: $(BINARY)
120
121.PHONY: detail
122detail: CFLAGS := $(CFLAGS) -g
123detail: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(AUTHOR_CONVERT)\" -DGEOMETRY -DDEBUG -DFATAL -DDEVELOP -DDETAIL -DVERSION=\"$(VERSION)\ Develop\ Version\ \($(date)\)\"
124detail: BINARY := $(BINARY)_dev
125detail: $(BINARY)
126
127.PHONY: full
128full: CFLAGS = -Wall -Werror -Wformat -Wformat-security -Werror=format-security -Os -g
129full: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(AUTHOR_CONVERT)\" -DGEOMETRY -DDEBUG -DFATAL -DDEVELOP -DDETAIL -DFULL -DVERSION=\"$(VERSION)\ Develop\ Version\ \($(date)\)\"
130full: BINARY := $(BINARY)_dev
131full: $(BINARY)
132
133.PHONY: geometry
134geometry: CFLAGS := $(CFLAGS) -g
135geometry: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(AUTHOR_CONVERT)\" -DGEOMETRY -DDEBUG -DFATAL -DDEVELOP -DVERSION=\"$(VERSION)\ Develop\ Version\ \($(date)\)\"
136geometry: BINARY := $(BINARY)_dev
137geometry: $(BINARY)
138
139.PHONY: ut
140ut: unit_test
141.PHONY: unit_test
142unit_test: CFLAGS := $(CFLAGS) -g
143unit_test: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(PACKAGE)\" -DSAFEMODE -DDEBUG -DFATAL -DDEVELOP -DUNIT_TEST -DVERSION=\"$(VERSION)_UNIT_TEST_$(date)\"
144unit_test: $(OBJ)
145	@ sh unit_test.sh "$(INCLUDES)" --enable-gdb --test_all
146
147.PHONY: uto
148uto: unit_test_object
149.PHONY: unit_test_object
150unit_test_object: CFLAGS := $(CFLAGS) -g
151unit_test_object: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(PACKAGE)\" -DSAFEMODE -DGEOMETRY -DDEBUG -DFATAL -DDEVELOP -DDETAIL -DFULL -DUNIT_TEST -DVERSION=\"$(VERSION)_UNIT_TEST_$(date)\"
152unit_test_object: $(OBJ)
153
154.PHONY: utb
155utb: unit_test_build
156.PHONY: unit_test_build
157unit_test_build: CFLAGS := $(CFLAGS) -g
158unit_test_build: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(PACKAGE)\" -DSAFEMODE -DGEOMETRY -DDEBUG -DFATAL -DDEVELOP -DDETAIL -DFULL -DUNIT_TEST -DVERSION=\"$(VERSION)_UNIT_TEST_$(date)\"
159unit_test_build: $(OBJ)
160	@ sh unit_test.sh "$(INCLUDES)" --build_program_only
161
162.PHONY: utd
163utd: unit_test_debug
164.PHONY: unit_test_debug
165unit_test_debug: CFLAGS := $(CFLAGS) -g
166unit_test_debug: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(PACKAGE)\" -DSAFEMODE -DGEOMETRY -DDEBUG -DFATAL -DDEVELOP -DDETAIL -DFULL -DUNIT_TEST -DVERSION=\"$(VERSION)_UNIT_TEST_$(date)\"
167unit_test_debug: $(OBJ)
168	@ sh unit_test.sh "$(INCLUDES)" --enable-glib-debugger --enable-gtk-debugger --enable-gdb
169
170.PHONY: utf
171utf: unit_test_full
172.PHONY: unit_test_full
173unit_test_full: CFLAGS := $(CFLAGS) -g
174unit_test_full: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(PACKAGE)\" -DSAFEMODE -DDEBUG -DFATAL -DDEVELOP -DUNIT_TEST -DVERSION=\"$(VERSION)_UNIT_TEST_$(date)\"
175unit_test_full: $(OBJ)
176	@ sh unit_test.sh "$(INCLUDES)" --enable-glib-debugger --enable-gtk-debugger --enable-gdb --enable-valgrind
177
178.PHONY: memory
179memory: CFLAGS = -Wall -Wformat -Wformat-security -Werror=format-security -O2
180memory: INCLUDES := $(INCLUDES) -DAUTHOR=\"$(AUTHOR_CONVERT)\" -DDEBUG -DFATAL -DDEVELOP -DSAFEMODE -DOUT_OF_MEMORY -DVERSION=\"$(VERSION)\ Develop\ Version\ \($(date)\)\"
181memory: BINARY := $(BINARY)_dev
182memory: $(BINARY)
183
184.PHONY: clean
185clean:
186	-@ for FileName in $(BINARY) $(BINARY)_dev $(BINARY)_dbg $(OBJ) unit_test unit_test.[co] gdb_batch gdb.log valgrind.log vgcore.*; \
187	do \
188		if [ -f "$$FileName" ]; then \
189			$(PRINTF) "\033[1;35m** deleting $$FileName...\033[0m\n"; \
190			rm "$$FileName"; \
191		fi; \
192	done
193
194%.o: %.c %.h data.h $(BINARY).h
195	@ $(PRINTF) "\033[1;33m** compiling $@...\033[0m\n"
196	@ $(CC) $(CPPFLAGS) $(CFLAGS) $(INCLUDES) -c $< `$(OBJ_PKG_CMD)`
197
198$(BINARY): $(OBJ)
199	@ $(PRINTF) "\033[1;36m** compiling $(BINARY)...\033[0m\n"
200	@ $(CC) $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) -o $(BINARY) $(OBJ) `$(BINARY_PKG_CMD)`
201
202.PHONY: data
203data: debug
204	@ $(MAKE) -C ../po po
205
206.PHONY: install
207install: $(BINARY)
208	@ install -d $(DESTDIR)/$(BINDIR)
209	@ if [ -f $(BINARY) ]; then \
210		$(PRINTF) "\033[1;33m** installing $(BINARY) to $(DESTDIR)/$(BINDIR)...\033[0m\n" ; \
211		install -m 755 $(BINARY) $(DESTDIR)/$(BINDIR) ; \
212	fi ; \
213
214.PHONY: uninstall
215uninstall:
216	@ - if [ -f $(DESTDIR)/$(BINDIR)/$(BINARY) ]; then \
217		$(PRINTF) "\033[1;35m** deleting $(DESTDIR)/$(BINDIR)/$(BINARY)...\033[0m\n" ; \
218		rm "$(DESTDIR)/$(BINDIR)/$(BINARY)" ; \
219		DirName="$(DESTDIR)/$(BINDIR)" ; \
220		until [ -n "`ls -A $$DirName`" -o "$$DirName" = "$(DESTDIR)/$(PREFIX)" ]; do \
221			$(PRINTF) "\033[1;35m** deleting $$DirName...\033[0m\n" ; \
222			rmdir "$$DirName" ; \
223			DirName=`dirname $$DirName` ; \
224		done \
225	else \
226		$(PRINTF) "\033[1;31m** $(DESTDIR)/$(BINDIR)/$(BINARY) is NOT exist!\033[0m\n" ; \
227	fi
228