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