vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

Makefile

(6610B)


      1 -include config.mk
      2 
      3 REGEX_SRC ?= text-regex.c
      4 
      5 SRC = array.c \
      6 	buffer.c \
      7 	event-basic.c \
      8 	libutf.c \
      9 	main.c \
     10 	map.c \
     11 	sam.c \
     12 	text-common.c \
     13 	text-io.c \
     14 	text-iterator.c \
     15 	text-motions.c \
     16 	text-objects.c \
     17 	text-util.c \
     18 	text.c \
     19 	ui-terminal.c \
     20 	view.c \
     21 	vis-lua.c \
     22 	vis-marks.c \
     23 	vis-modes.c \
     24 	vis-motions.c \
     25 	vis-operators.c \
     26 	vis-prompt.c \
     27 	vis-registers.c \
     28 	vis-subprocess.c \
     29 	vis-text-objects.c \
     30 	vis.c \
     31 	$(REGEX_SRC)
     32 OBJ = $(SRC:%.c=obj/%.o)
     33 
     34 ELF = vis vis-menu vis-digraph
     35 EXECUTABLES = $(ELF) vis-clipboard vis-complete vis-open
     36 
     37 MANUALS = $(EXECUTABLES:=.1)
     38 
     39 DOCUMENTATION = LICENSE README.md
     40 
     41 VERSION = $(shell git describe --always --dirty 2>/dev/null || echo "v0.9-git")
     42 
     43 CONFIG_HELP ?= 1
     44 CONFIG_CURSES ?= 1
     45 CONFIG_LUA ?= 1
     46 CONFIG_LPEG ?= 0
     47 CONFIG_TRE ?= 0
     48 CONFIG_ACL ?= 0
     49 CONFIG_SELINUX ?= 0
     50 
     51 CFLAGS_STD ?= -std=c99 -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700 -DNDEBUG -MMD
     52 CFLAGS_STD += -DVERSION=\"${VERSION}\"
     53 LDFLAGS_STD ?= -lc
     54 
     55 CFLAGS_LIBC ?= -DHAVE_MEMRCHR=0
     56 
     57 CFLAGS_VIS = $(CFLAGS_AUTO) $(CFLAGS_TERMKEY) $(CFLAGS_CURSES) $(CFLAGS_ACL) \
     58 	$(CFLAGS_SELINUX) $(CFLAGS_TRE) $(CFLAGS_LUA) $(CFLAGS_LPEG) $(CFLAGS_STD) \
     59 	$(CFLAGS_LIBC)
     60 
     61 CFLAGS_VIS += -DVIS_PATH=\"${SHAREPREFIX}/vis\"
     62 CFLAGS_VIS += -DCONFIG_HELP=${CONFIG_HELP}
     63 CFLAGS_VIS += -DCONFIG_CURSES=${CONFIG_CURSES}
     64 CFLAGS_VIS += -DCONFIG_LUA=${CONFIG_LUA}
     65 CFLAGS_VIS += -DCONFIG_LPEG=${CONFIG_LPEG}
     66 CFLAGS_VIS += -DCONFIG_TRE=${CONFIG_TRE}
     67 CFLAGS_VIS += -DCONFIG_SELINUX=${CONFIG_SELINUX}
     68 CFLAGS_VIS += -DCONFIG_ACL=${CONFIG_ACL}
     69 
     70 LDFLAGS_VIS = $(LDFLAGS_AUTO) $(LDFLAGS_TERMKEY) $(LDFLAGS_CURSES) $(LDFLAGS_ACL) \
     71 	$(LDFLAGS_SELINUX) $(LDFLAGS_TRE) $(LDFLAGS_LUA) $(LDFLAGS_LPEG) $(LDFLAGS_STD)
     72 
     73 STRIP?=strip
     74 TAR?=tar
     75 DOCKER?=docker
     76 
     77 all: $(ELF)
     78 
     79 config.h:
     80 	cp config.def.h config.h
     81 
     82 config.mk:
     83 	@touch $@
     84 
     85 obj/.tstamp:
     86 	mkdir obj
     87 	touch obj/.tstamp
     88 
     89 obj/main.o: config.h
     90 
     91 $(OBJ): config.mk obj/.tstamp
     92 	${CC} ${CFLAGS} ${CFLAGS_VIS} ${CFLAGS_EXTRA} -o $@ -c $(@:obj/%.o=%.c)
     93 
     94 -include obj/*.d
     95 
     96 vis: ${OBJ}
     97 	${CC} -o $@ ${OBJ} ${LDFLAGS} ${LDFLAGS_VIS} ${LDFLAGS_EXTRA}
     98 
     99 vis-menu: vis-menu.c
    100 	${CC} ${CFLAGS} ${CFLAGS_AUTO} ${CFLAGS_STD} ${CFLAGS_EXTRA} $< ${LDFLAGS} ${LDFLAGS_STD} ${LDFLAGS_AUTO} ${LDFLAGS_EXTRA} -o $@
    101 
    102 vis-digraph: vis-digraph.c
    103 	${CC} ${CFLAGS} ${CFLAGS_AUTO} ${CFLAGS_STD} ${CFLAGS_EXTRA} $< ${LDFLAGS} ${LDFLAGS_STD} ${LDFLAGS_AUTO} ${LDFLAGS_EXTRA} -o $@
    104 
    105 vis-single-payload.inc: $(EXECUTABLES) lua/*
    106 	for e in $(ELF); do \
    107 		${STRIP} "$$e"; \
    108 	done
    109 	echo '#ifndef VIS_SINGLE_PAYLOAD_H' > $@
    110 	echo '#define VIS_SINGLE_PAYLOAD_H' >> $@
    111 	echo 'static unsigned char vis_single_payload[] = {' >> $@
    112 	$(TAR) --mtime='2014-07-15 01:23Z' --owner=0 --group=0 --numeric-owner --mode='a+rX-w' -c \
    113 		$(EXECUTABLES) $$(find lua -name '*.lua' | LC_ALL=C sort) | xz -T 1 | \
    114 		od -t x1 -A n -v | sed 's/\([0-9a-f]\{2\}\)/0x\1,/g' >> $@
    115 	echo '};' >> $@
    116 	echo '#endif' >> $@
    117 
    118 vis-single: vis-single.c vis-single-payload.inc
    119 	${CC} ${CFLAGS} ${CFLAGS_AUTO} ${CFLAGS_STD} ${CFLAGS_EXTRA} $< ${LDFLAGS} ${LDFLAGS_STD} ${LDFLAGS_AUTO} -luntar -llzma -o $@
    120 	${STRIP} $@
    121 
    122 docker-kill:
    123 	-$(DOCKER) kill vis && $(DOCKER) wait vis
    124 
    125 docker: docker-kill clean
    126 	$(DOCKER) build -t vis .
    127 	$(DOCKER) run --rm -d --name vis vis tail -f /dev/null
    128 	$(DOCKER) exec vis apk update
    129 	$(DOCKER) exec vis apk upgrade
    130 	$(DOCKER) cp . vis:/build/vis
    131 	$(DOCKER) exec -w /build/vis vis ./configure CC='cc --static' \
    132 		--enable-acl \
    133 		--enable-lua \
    134 		--enable-lpeg-static
    135 	$(DOCKER) exec -w /build/vis vis make VERSION="$(VERSION)" clean vis-single
    136 	$(DOCKER) cp vis:/build/vis/vis-single vis
    137 	$(DOCKER) kill vis
    138 
    139 docker-clean: docker-kill clean
    140 	-$(DOCKER) image rm vis
    141 
    142 debug: clean
    143 	@$(MAKE) CFLAGS_EXTRA='${CFLAGS_EXTRA} ${CFLAGS_DEBUG}'
    144 
    145 profile: clean
    146 	@$(MAKE) CFLAGS_AUTO='' LDFLAGS_AUTO='' CFLAGS_EXTRA='-pg -O2'
    147 
    148 coverage: clean
    149 	@$(MAKE) CFLAGS_EXTRA='--coverage' LDFLAGS_EXTRA='--coverage'
    150 
    151 test:
    152 	@$(MAKE) -C test
    153 
    154 testclean:
    155 	@echo cleaning the test artifacts
    156 	[ ! -e test/Makefile ] || $(MAKE) -C test clean
    157 
    158 clean:
    159 	@echo cleaning
    160 	@rm -rf obj
    161 	@rm -f $(ELF) vis-single vis-single-payload.inc vis-*.tar.gz *.gcov *.gcda *.gcno *.d
    162 
    163 distclean: clean testclean
    164 	@echo cleaning build configuration
    165 	@rm -f config.h config.mk
    166 
    167 dist: distclean
    168 	@echo creating dist tarball
    169 	@git archive --prefix=vis-${VERSION}/ -o vis-${VERSION}.tar.gz HEAD
    170 
    171 man:
    172 	@for m in ${MANUALS}; do \
    173 		echo "Generating $$m"; \
    174 		sed -e "s/VERSION/${VERSION}/" "man/$$m" | mandoc -W warning -T utf8 -T html -O man=%N.%S.html -O style=mandoc.css 1> "man/$$m.html" || true; \
    175 	done
    176 
    177 luadoc:
    178 	@cd lua/doc && ldoc . && sed -e "s/RELEASE/${VERSION}/" -i index.html
    179 
    180 luadoc-all:
    181 	@cd lua/doc && ldoc -a . && sed -e "s/RELEASE/${VERSION}/" -i index.html
    182 
    183 luacheck:
    184 	@luacheck --config .luacheckrc lua test/lua | less -RFX
    185 
    186 install: $(ELF)
    187 	@echo installing executable files to ${DESTDIR}${PREFIX}/bin
    188 	@mkdir -p ${DESTDIR}${PREFIX}/bin
    189 	@for e in ${EXECUTABLES}; do \
    190 		cp -f "$$e" ${DESTDIR}${PREFIX}/bin && \
    191 		chmod 755 ${DESTDIR}${PREFIX}/bin/"$$e"; \
    192 	done
    193 	@test ${CONFIG_LUA} -eq 0 || { \
    194 		echo installing support files to ${DESTDIR}${SHAREPREFIX}/vis; \
    195 		mkdir -p ${DESTDIR}${SHAREPREFIX}/vis; \
    196 		cp -r lua/* ${DESTDIR}${SHAREPREFIX}/vis; \
    197 		rm -rf "${DESTDIR}${SHAREPREFIX}/vis/doc"; \
    198 	}
    199 	@echo installing documentation to ${DESTDIR}${DOCPREFIX}/vis
    200 	@mkdir -p ${DESTDIR}${DOCPREFIX}/vis
    201 	@for d in ${DOCUMENTATION}; do \
    202 		cp "$$d" ${DESTDIR}${DOCPREFIX}/vis && \
    203 		chmod 644 "${DESTDIR}${DOCPREFIX}/vis/$$d"; \
    204 	done
    205 	@echo installing manual pages to ${DESTDIR}${MANPREFIX}/man1
    206 	@mkdir -p ${DESTDIR}${MANPREFIX}/man1
    207 	@for m in ${MANUALS}; do \
    208 		sed -e "s/VERSION/${VERSION}/" < "man/$$m" >  "${DESTDIR}${MANPREFIX}/man1/$$m" && \
    209 		chmod 644 "${DESTDIR}${MANPREFIX}/man1/$$m"; \
    210 	done
    211 
    212 install-strip: install
    213 	@echo stripping executables
    214 	@for e in $(ELF); do \
    215 		${STRIP} ${DESTDIR}${PREFIX}/bin/"$$e"; \
    216 	done
    217 
    218 uninstall:
    219 	@echo removing executable file from ${DESTDIR}${PREFIX}/bin
    220 	@for e in ${EXECUTABLES}; do \
    221 		rm -f ${DESTDIR}${PREFIX}/bin/"$$e"; \
    222 	done
    223 	@echo removing documentation from ${DESTDIR}${DOCPREFIX}/vis
    224 	@for d in ${DOCUMENTATION}; do \
    225 		rm -f ${DESTDIR}${DOCPREFIX}/vis/"$$d"; \
    226 	done
    227 	@echo removing manual pages from ${DESTDIR}${MANPREFIX}/man1
    228 	@for m in ${MANUALS}; do \
    229 		rm -f ${DESTDIR}${MANPREFIX}/man1/"$$m"; \
    230 	done
    231 	@echo removing support files from ${DESTDIR}${SHAREPREFIX}/vis
    232 	@rm -rf ${DESTDIR}${SHAREPREFIX}/vis
    233 
    234 .PHONY: all clean testclean dist distclean install install-strip uninstall debug profile coverage test test-update luadoc luadoc-all luacheck man docker-kill docker docker-clean