PACKAGE = wlite VERSION = 0.8.1 prefix := /usr/local exec_prefix := $(prefix) libdir := $(exec_prefix)/lib includedir := $(prefix)/include .PHONY: all .PHONY: check .PHONY: install installdirs install-strip uninstall .PHONY: clean distclean maintainer-clean mostlyclean .PHONY: dist ############################################################################### ifdef SMALL CDFLAGS += -DWLITE_EXTENSIONS=0 CDFLAGS += -DWLITE_AMBI_LOCALE=0 CDFLAGS += -DWLITE_ENVIRONMENT=0 endif ifndef LARGE CDFLAGS += -DWLITE_XBMP_CHAR=0 endif ifdef DEBUG CFLAGS = -O0 -g -Wall ifeq "dmalloc" "$(DEBUG)" CDFLAGS += -DDMALLOC_FUNC_CHECK=1 LDFLAGS = -ldmalloc endif ifeq "efence" "$(DEBUG)" LDFLAGS = -lefence endif else CFLAGS = -Os -Wall CDFLAGS += -DNDEBUG endif ifeq "diet" "$(basename $(firstword $(CC)))" FATCC = $(wordlist 2,$(words $(CC)),$(CC)) FATCFLAGS = $(CFLAGS) -std=gnu99 else override CFLAGS += -std=gnu99 FATCC = $(CC) FATCFLAGS = $(CFLAGS) endif override CFLAGS += $(CDFLAGS) libraries = libwlite.a unicodeorg = CaseFolding.txt EastAsianWidth.txt UnicodeData.txt tests = test-wcwidth test-string test-stdlib includes = wlite_config.h wlite_wchar.h wlite_wctype.h wlite_stdlib.h functions = $(wildcard wlite_*.c) sources = to_c.c to_c.h $(functions) $(addsuffix .c,$(tests) $(to_c)) members = wcmp.o $(patsubst %.c,%.o,$(functions) $(c_unidata)) objects = to_c.o wcmp.o $(to_c) $(tests) archives = $(PACKAGE)-$(VERSION).tar.gz makefiles = $(wildcard *[mM]akefile) unidata = $(addsuffix .dat,$(unicodeorg)) c_unidata = $(patsubst %.txt.dat,%.dat.c,$(unidata)) to_c = $(patsubst %.txt.dat,to_c-%,$(unidata)) charset_in = $(wildcard test.*.txt) utf8_out = $(patsubst test.%.txt,%.utf-8.txt,$(charset_in)) .INTERMEDIATE: $(c_unidata) libwlite.a: libwlite.a($(members)) libwlite.a(wcmp.o): wcmp.c $(includes) libwlite.a(wlite_%.o): wlite_%.c $(includes) libwlite.a(CaseFolding.dat.o): CaseFolding.dat.c $(includes) libwlite.a(EastAsianWidth.dat.o): EastAsianWidth.dat.c $(includes) CaseFolding.dat.c: to_c-CaseFolding CaseFolding.txt.dat $(includes) EastAsianWidth.dat.c: to_c-EastAsianWidth EastAsianWidth.txt.dat $(includes) UnicodeData.dat.c: to_c-UnicodeData UnicodeData.txt.dat $(includes) to_c-CaseFolding: to_c-CaseFolding.c wcmp.o to_c.o $(includes) to_c-EastAsianWidth: to_c-EastAsianWidth.c wcmp.o to_c.o $(includes) to_c-UnicodeData: to_c-UnicodeData.c wcmp.o to_c.o $(includes) to_c.o: to_c.c to_c.h $(includes) $(FATCC) $(FATCFLAGS) -c -o $@ $< $(archives): $(unidata) $(sources) $(charset_in) $(includes) $(includes): $(makefiles) test-wcwidth: test-wcwidth.c $(libraries) test-string: test-string.c $(libraries) test-stdlib: test-stdlib.c $(libraries) TAGS tags: $(sources) -etags $(filter %.c,$^) -ctags $(filter %.c,$^) %.h: $(makefiles) sed -e "s/\(\$$package\>\)[^$$]*/\1: $(PACKAGE) /gI" \ -e "s/\(\$$version\>\)[^$$]*/\1: $(VERSION) /gI" $@ > $@.tmp mv $@.tmp $@ %: %.c $(FATCC) $(FATCFLAGS) $(LDFLAGS) -o $@ $(filter %.c %.o %.a,$^) %.dat.c: %.txt.dat cat $(filter %.txt.dat,$^) | \ $(CURDIR)/$(patsubst %.dat.c,to_c-%,$@) > $@ 2> /dev/null %.utf-8.txt: test.%.txt iconv -f $* -t $(subst .,,$(suffix $(basename $@))) < $< > $@ %.exclude: echo $(notdir $(CURDIR))/$@ > $@ for x in $(wildcard $@ RCS .[^.]* *.tar.*); \ do echo $(notdir $(CURDIR))/$${x} >> $@; \ done echo $(notdir $(CURDIR))/$(basename $@).tar >> $@ %.tar: %.exclude tar cv -C .. -X $< -f $@ $(notdir $(CURDIR)) %.tar.bz2: %.tar bzip2 -9 -c $< > $@ %.tar.gz: %.tar gzip -9 -c $< > $@ all: $(libraries) check: $(tests) $(utf8_out) for test in $(filter $(tests),$+); \ do cat $(filter $(utf8_out),$+) | ./$${test}; \ done clean: mostlyclean $(RM) $(libraries) $(utf8_out) dist: maintainer-clean $(MAKE) $(archives) distclean: clean $(RM) $(members) $(c_unidata) maintainer-clean: distclean $(RM) $(archives) TAGS tags $(wildcard core core.*) $(wildcard *.tmp) mostlyclean: $(RM) $(objects) install: installdirs $(includes) $(libraries) install $(filter $(libraries),$^) $(libdir) install -m 644 $(filter $(includes),$^) $(includedir) installdirs: $(libdir) $(includedir) install -d $^ install-strip: install for symbols in $(libraries); do strip -x -g $(libdir)/$${symbols}; done uninstall: for installed in $(libraries); do $(RM) $(libdir)/$${installed}; done for installed in $(includes); do $(RM) $(includedir)/$${installed}; done