1ifeq ($(shell uname),Darwin) 2 LIBTOOL ?= glibtool 3else 4 LIBTOOL ?= libtool 5endif 6 7ifneq ($(VERBOSE),1) 8 LIBTOOL +=--quiet 9endif 10 11override CFLAGS +=-Wall -Iinclude -std=c99 -Wpedantic -DINLINE="" 12 13ifeq ($(shell uname),SunOS) 14 override CFLAGS +=-D__EXTENSIONS__ -D_XPG6 -D__XOPEN_OR_POSIX 15endif 16 17ifeq ($(DEBUG),1) 18 override CFLAGS +=-ggdb -DDEBUG 19endif 20 21ifeq ($(PROFILE),1) 22 override CFLAGS +=-pg 23 override LDFLAGS+=-pg 24endif 25 26CFILES=$(sort $(wildcard src/*.c)) 27HFILES=$(sort $(wildcard include/*.h)) 28OBJECTS=$(CFILES:.c=.lo) 29LIBRARY=libvterm.la 30 31BINFILES_SRC=$(sort $(wildcard bin/*.c)) 32BINFILES=$(BINFILES_SRC:.c=) 33 34TBLFILES=$(sort $(wildcard src/encoding/*.tbl)) 35INCFILES=$(TBLFILES:.tbl=.inc) 36 37HFILES_INT=$(sort $(wildcard src/*.h)) $(HFILES) 38 39VERSION_MAJOR=0 40VERSION_MINOR=0 41 42VERSION_CURRENT=0 43VERSION_REVISION=0 44VERSION_AGE=0 45 46VERSION=0 47 48PREFIX=/usr/local 49BINDIR=$(PREFIX)/bin 50LIBDIR=$(PREFIX)/lib 51INCDIR=$(PREFIX)/include 52MANDIR=$(PREFIX)/share/man 53MAN3DIR=$(MANDIR)/man3 54 55# Uncomment to check for memory access errors with valgrind. 56# VALGRIND=1 57 58all: $(LIBRARY) $(BINFILES) 59 60$(LIBRARY): $(OBJECTS) 61 $(LIBTOOL) --mode=link --tag=CC $(CC) -rpath $(LIBDIR) -version-info $(VERSION_CURRENT):$(VERSION_REVISION):$(VERSION_AGE) -o $@ $^ $(LDFLAGS) 62 63src/%.lo: src/%.c $(HFILES_INT) 64 $(LIBTOOL) --mode=compile --tag=CC $(CC) $(CFLAGS) -o $@ -c $< 65 66src/encoding/%.inc: src/encoding/%.tbl 67 perl -CSD tbl2inc_c.pl $< >$@ 68 69src/encoding.lo: $(INCFILES) 70 71bin/%: bin/%.c $(LIBRARY) 72 $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) -o $@ $< -lvterm $(LDFLAGS) 73 74t/harness.lo: t/harness.c $(HFILES) 75 $(LIBTOOL) --mode=compile --tag=CC $(CC) $(CFLAGS) -o $@ -c $< 76 77t/harness: t/harness.lo $(LIBRARY) 78 $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) 79 80.PHONY: test 81test: $(LIBRARY) t/harness 82 for T in `ls t/[0-9]*.test`; do echo "** $$T **"; perl t/run-test.pl $$T $(if $(VALGRIND),--valgrind) || exit 1; done 83 84.PHONY: clean 85clean: 86 $(LIBTOOL) --mode=clean rm -f $(OBJECTS) $(INCFILES) 87 $(LIBTOOL) --mode=clean rm -f t/harness.lo t/harness 88 $(LIBTOOL) --mode=clean rm -f $(LIBRARY) $(BINFILES) 89 90.PHONY: install 91install: install-inc install-lib install-bin 92 93install-inc: 94 install -d $(DESTDIR)$(INCDIR) 95 install -m644 $(HFILES) $(DESTDIR)$(INCDIR) 96 install -d $(DESTDIR)$(LIBDIR)/pkgconfig 97 sed -e "s,@PREFIX@,$(PREFIX)," -e "s,@LIBDIR@,$(LIBDIR)," -e "s,@VERSION@,$(VERSION)," <vterm.pc.in >$(DESTDIR)$(LIBDIR)/pkgconfig/vterm.pc 98 99install-lib: $(LIBRARY) 100 install -d $(DESTDIR)$(LIBDIR) 101 $(LIBTOOL) --mode=install install $(LIBRARY) $(DESTDIR)$(LIBDIR)/$(LIBRARY) 102 $(LIBTOOL) --mode=finish $(DESTDIR)$(LIBDIR) 103 104install-bin: $(BINFILES) 105 install -d $(DESTDIR)$(BINDIR) 106 $(LIBTOOL) --mode=install install $(BINFILES) $(DESTDIR)$(BINDIR)/ 107 108# DIST CUT 109 110VERSION=$(VERSION_MAJOR).$(VERSION_MINOR) 111 112DISTDIR=libvterm-$(VERSION) 113 114distdir: $(INCFILES) 115 mkdir __distdir 116 cp LICENSE __distdir 117 mkdir __distdir/src 118 cp src/*.c src/*.h __distdir/src 119 mkdir __distdir/src/encoding 120 cp src/encoding/*.inc __distdir/src/encoding 121 mkdir __distdir/include 122 cp include/*.h __distdir/include 123 mkdir __distdir/bin 124 cp bin/*.c __distdir/bin 125 mkdir __distdir/t 126 cp t/*.test t/harness.c t/run-test.pl __distdir/t 127 sed "s,@VERSION@,$(VERSION)," <vterm.pc.in >__distdir/vterm.pc.in 128 sed "/^# DIST CUT/Q" <Makefile >__distdir/Makefile 129 mv __distdir $(DISTDIR) 130 131TARBALL=$(DISTDIR).tar.gz 132 133dist: distdir 134 tar -czf $(TARBALL) $(DISTDIR) 135 rm -rf $(DISTDIR) 136 137dist+bzr: 138 $(MAKE) dist VERSION=$(VERSION)+bzr`bzr revno` 139 140distdir+bzr: 141 $(MAKE) distdir VERSION=$(VERSION)+bzr`bzr revno` 142