diff options
| -rw-r--r-- | .gitignore | 9 | ||||
| -rw-r--r-- | GNUmakefile | 8 | ||||
| -rw-r--r-- | Makefile | 84 | ||||
| -rw-r--r-- | common.mk | 30 | ||||
| -rw-r--r-- | dged.nix | 3 | ||||
| -rw-r--r-- | linux.mk | 2 | ||||
| -rw-r--r-- | src/buffer.c | 4 | ||||
| -rw-r--r-- | targets.mk | 47 |
8 files changed, 90 insertions, 97 deletions
@@ -1,9 +1,6 @@ -# obj file dir -/objs/ - -# exe -/dged -/run-tests +# build dirs +/build/ +/obj/ # clangd things /compile_commands.json diff --git a/GNUmakefile b/GNUmakefile deleted file mode 100644 index 6b58971..0000000 --- a/GNUmakefile +++ /dev/null @@ -1,8 +0,0 @@ -# GNU-compatible makefile -include common.mk - -sinclude $(UNAME_S).mk - -include targets.mk - -include $(DEPS) @@ -1,10 +1,88 @@ -# BSD-compatible makefile +# Makefile for bmake +.OBJDIR: ./build +.PHONY: default clean check run debug debug-tests install format -.include "common.mk" +default: dged + +build: + mkdir -p build + +SOURCES = src/binding.c src/buffer.c src/command.c src/display.c \ + src/keyboard.c src/minibuffer.c src/text.c \ + src/utf8.c src/buffers.c src/window.c src/allocator.c src/undo.c \ + src/settings.c src/lang.c + +DGED_SOURCES = $(SOURCES) src/main.c +TEST_SOURCES = test/assert.c test/buffer.c test/text.c test/utf8.c test/main.c \ + test/command.c test/keyboard.c test/fake-reactor.c test/allocator.c \ + test/minibuffer.c test/undo.c test/settings.c + +prefix ?= "/usr" + +.SUFFIXES: +.SUFFIXES: .c .o .d + +UNAME_S != uname -s | tr '[:upper:]' '[:lower:]' + +CFLAGS = -Werror -g -std=c99 -I $(.CURDIR)/src + +DEPS = $(DGED_SOURCES:.c=.d) $(TEST_SOURCES:.c=.d) + +OBJS = $(SOURCES:.c=.o) +TEST_OBJS = $(TEST_SOURCES:.c=.o) + +FILES = $(DEPS) $(DGED_SOURCES:.c=.o) dged libdged.a $(TEST_OBJS) .sinclude "$(UNAME_S).mk" -.include "targets.mk" +# dependency generation +.c.d: + @mkdir -p $(@D) + $(CC) -MM $(CFLAGS) -MT $*.o $< > $@ + @sed -i 's,\($*\)\.o[ :]*,\1.o $@ : ,g' $@ + +.c.o: + @mkdir -p $(@D) + $(CC) $(CFLAGS) -c $< -o $@ + +dged: src/main.o libdged.a + $(CC) $(LDFLAGS) src/main.o libdged.a -o dged + +libdged.a: $(OBJS) $(PLATFORM_OBJS) + $(AR) -rc libdged.a $(OBJS) $(PLATFORM_OBJS) + +run-tests: $(TEST_OBJS) $(OBJS) + $(CC) $(LDFLAGS) $(TEST_OBJS) $(OBJS) -o run-tests + +check: run-tests + clang-format --dry-run --Werror $(DGED_SOURCES:%.c=../%.c) $(TEST_SOURCES:%c=../%c) + ./run-tests + +run: dged + ./dged + +debug: dged + gdb ./dged + +debug-tests: run-tests + gdb ./run-tests + +format: + clang-format -i $(DGED_SOURCES) $(TEST_SOURCES) + +clean: + rm -f $(FILES) + rm -rf $(.CURDIR)/docs + +install: dged + install -d $(prefix)/bin + install -m 755 $(.OBJDIR)/dged $(prefix)/bin/dged + + install -d $(prefix)/share/man/man1 + install -m 644 dged.1 $(prefix)/share/man/man1/dged.1 + +docs: + doxygen $(.CURDIR)/Doxyfile # in this case we need a separate depend target depend: $(DEPS) diff --git a/common.mk b/common.mk deleted file mode 100644 index 18b947a..0000000 --- a/common.mk +++ /dev/null @@ -1,30 +0,0 @@ -.POSIX: -.PHONY: default clean check run debug debug-tests install format - -default: dged - -SOURCES = src/binding.c src/buffer.c src/command.c src/display.c \ - src/keyboard.c src/minibuffer.c src/text.c \ - src/utf8.c src/buffers.c src/window.c src/allocator.c src/undo.c \ - src/settings.c src/lang.c - -DGED_SOURCES = $(SOURCES) src/main.c -TEST_SOURCES = test/assert.c test/buffer.c test/text.c test/utf8.c test/main.c \ - test/command.c test/keyboard.c test/fake-reactor.c test/allocator.c \ - test/minibuffer.c test/undo.c test/settings.c - -prefix != if [ -n "$$prefix" ]; then echo "$$prefix"; else echo "/usr"; fi - -.SUFFIXES: -.SUFFIXES: .c .o .d - -UNAME_S != uname -s | tr '[:upper:]' '[:lower:]' - -CFLAGS = -Werror -g -std=c99 -I ./src - -DEPS = $(DGED_SOURCES:.c=.d) $(TEST_SOURCES:.c=.d) - -OBJS = $(SOURCES:.c=.o) -TEST_OBJS = $(TEST_SOURCES:.c=.o) - -FILES = $(DEPS) $(DGED_SOURCES:.c=.o) dged libdged.a $(TEST_OBJS) @@ -1,6 +1,5 @@ { stdenv , clang-tools -, gnumake , bmake , pkg-config , tree-sitter @@ -15,7 +14,6 @@ stdenv.mkDerivation { doCheck = true; nativeBuildInputs = [ - gnumake bmake pkg-config clang-tools @@ -24,6 +22,7 @@ stdenv.mkDerivation { ]; buildPhase = '' + bmake build bmake dged bmake docs ''; @@ -1,4 +1,4 @@ CFLAGS += -DLINUX -D_XOPEN_SOURCE=700 -PLATFORM_SOURCES += src/reactor-epoll.c +PLATFORM_SOURCES = src/reactor-epoll.c PLATFORM_OBJS = $(PLATFORM_SOURCES:.c=.o) diff --git a/src/buffer.c b/src/buffer.c index f7bc0e3..ef86c32 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -389,6 +389,10 @@ bool maybe_delete_region(struct buffer *buffer) { } void buffer_kill_line(struct buffer *buffer) { + if (text_num_lines(buffer->text) == 0) { + return; + } + uint32_t nchars = text_line_length(buffer->text, buffer->dot.line) - buffer->dot.col; if (nchars == 0) { diff --git a/targets.mk b/targets.mk deleted file mode 100644 index a0b66bd..0000000 --- a/targets.mk +++ /dev/null @@ -1,47 +0,0 @@ -# dependency generation -.c.d: - $(CC) -MM $(CFLAGS) -MT $*.o $< > $@ - @sed -i 's,\($*\)\.o[ :]*,\1.o $@ : ,g' $@ - -.c.o: - $(CC) $(CFLAGS) -c $< -o $@ - - -dged: src/main.o libdged.a - $(CC) $(LDFLAGS) src/main.o libdged.a -o dged - -libdged.a: $(OBJS) $(PLATFORM_OBJS) - $(AR) -rc libdged.a $(OBJS) $(PLATFORM_OBJS) - -run-tests: $(TEST_OBJS) $(OBJS) - $(CC) $(LDFLAGS) $(TEST_OBJS) $(OBJS) -o run-tests - -check: run-tests - clang-format --dry-run --Werror $(DGED_SOURCES) $(TEST_SOURCES) - ./run-tests - -format: - clang-format -i $(DGED_SOURCES) $(TEST_SOURCES) - -run: dged - ./dged - -debug: dged - gdb ./dged - -debug-tests: run-tests - gdb ./run-tests - -clean: - rm -f $(FILES) - rm -rf docs - -install: dged - install -d $(prefix)/bin - install -m 755 dged $(prefix)/bin/dged - - install -d $(prefix)/share/man/man1 - install -m 644 dged.1 $(prefix)/share/man/man1/dged.1 - -docs: - doxygen Doxyfile |
