summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2023-04-04 23:48:47 +0200
committerAlbert Cervin <albert@acervin.com>2023-04-04 23:48:47 +0200
commit0006d8b9f261960074b92dde98e49872ba5673fb (patch)
tree0a16c22f04bfa73d13bf561338c4293651c3a54d
parent0e61e64b4e1036f2bf107efb01bea1017893d5e6 (diff)
downloaddged-0006d8b9f261960074b92dde98e49872ba5673fb.tar.gz
dged-0006d8b9f261960074b92dde98e49872ba5673fb.tar.xz
dged-0006d8b9f261960074b92dde98e49872ba5673fb.zip
Revamp makefiles
Now only supports BSD make.
-rw-r--r--.gitignore9
-rw-r--r--GNUmakefile8
-rw-r--r--Makefile84
-rw-r--r--common.mk30
-rw-r--r--dged.nix3
-rw-r--r--linux.mk2
-rw-r--r--src/buffer.c4
-rw-r--r--targets.mk47
8 files changed, 90 insertions, 97 deletions
diff --git a/.gitignore b/.gitignore
index 9561abe..be788a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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)
diff --git a/Makefile b/Makefile
index 2e50ae6..6ba7cca 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
diff --git a/dged.nix b/dged.nix
index 2a35689..3c090fb 100644
--- a/dged.nix
+++ b/dged.nix
@@ -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
'';
diff --git a/linux.mk b/linux.mk
index e6534df..12395b0 100644
--- a/linux.mk
+++ b/linux.mk
@@ -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