summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GNUmakefile6
-rw-r--r--Makefile57
-rw-r--r--common.mk64
-rw-r--r--dged.nix2
-rw-r--r--flake.lock8
-rw-r--r--flake.nix2
-rw-r--r--linux.mk1
7 files changed, 89 insertions, 51 deletions
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..706626d
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,6 @@
+# GNU-compatible makefile
+include common.mk
+
+include $(UNAME_S).mk
+
+include $(DEPS)
diff --git a/Makefile b/Makefile
index fe8ac93..2e61bd1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,50 +1,15 @@
-.PHONY: default clean check run debug debug-tests
+# BSD-compatible makefile
-default: dged
+.include "common.mk"
-headers != find src/ -type f -name '*.h'
-srcs != find src/ -type f -name '*.c' ! -name 'main.c'
+.include "$(UNAME_S).mk"
-test_headers != find test/ -type f -name '*.h'
-test_srcs != find test/ -type f -name '*.c'
+# in this case we need a separate depend target
+depend: $(DEPS)
+ @:
-objs-path = objs
-objs = $(patsubst %.c,$(objs-path)/%.o, $(srcs))
-test_objs = $(patsubst %.c,$(objs-path)/test/%.o, $(test_srcs))
-
-UNAME_S != uname -s
-
-CFLAGS = -Werror -g -std=c99
-
-ifeq ($(UNAME_S),Linux)
- DEFINES += -DLINUX -D_XOPEN_SOURCE=700
-endif
-
-$(objs-path)/test/%.o: %.c $(headers)
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS) $(DEFINES) -I ./src -I ./test -c $< -o $@
-
-$(objs-path)/%.o: %.c $(headers)
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS) $(DEFINES) -I ./src -c $< -o $@
-
-dged: $(objs) $(objs-path)/src/main.o
- $(CC) $(LDFLAGS) $(objs) $(objs-path)/src/main.o -o dged
-
-run-tests: $(test_objs) $(objs)
- $(CC) $(LDFLAGS) $(test_objs) $(objs) -o run-tests
-
-check: run-tests
- ./run-tests
-
-run: dged
- ./dged
-
-debug: dged
- gdb ./dged
-
-debug-tests: run-tests
- gdb ./run-tests
-
-clean:
- rm -rf $(objs-path) dged run-tests
+.if !(make(clean))
+. for o in ${DEPS}
+. sinclude "$o"
+. endfor
+.endif
diff --git a/common.mk b/common.mk
new file mode 100644
index 0000000..fcc2cac
--- /dev/null
+++ b/common.mk
@@ -0,0 +1,64 @@
+.POSIX:
+.PHONY: default clean check run debug debug-tests
+
+default: dged
+
+SOURCES = src/binding.c src/buffer.c src/command.c src/display.c \
+ src/keyboard.c src/minibuffer.c src/reactor.c src/text.c \
+ src/utf8.c
+
+DGED_SOURCES = $(SOURCES) src/main.c
+TEST_SOURCES = test/assert.c test/buffer.c test/text.c test/utf8.c test/main.c
+
+.SUFFIXES:
+.SUFFIXES: .c .o .d
+
+UNAME_S != uname -s | tr '[:upper:]' '[:lower:]'
+
+CFLAGS = -Werror -g -std=c99 -I ./src
+
+# dependency generation
+.c.d:
+ $(CC) -MM $(CFLAGS) -MT $*.o $< > $@
+ @sed -i 's,\($*\)\.o[ :]*,\1.o $@ : ,g' $@
+
+.c.o:
+ $(CC) $(CFLAGS) -c $< -o $@
+
+DEPS = $(DGED_SOURCES:.c=.d) $(TEST_SOURCES:.c=.d)
+FILES += $(DEPS)
+
+OBJS = $(SOURCES:.c=.o)
+FILES += $(DGED_SOURCES:.c=.o)
+
+dged: src/main.o libdged.a
+ $(CC) $(LDFLAGS) src/main.o libdged.a -o dged
+
+FILES += dged
+
+libdged.a: $(OBJS)
+ $(AR) -rc libdged.a $(OBJS)
+
+FILES += libdged.a
+
+TEST_OBJS = $(TEST_SOURCES:.c=.o)
+
+run-tests: $(TEST_OBJS) libdged.a
+ $(CC) $(LDFLAGS) $(TEST_OBJS) libdged.a -o run-tests
+
+FILES += $(TEST_OBJS)
+
+check: run-tests
+ ./run-tests
+
+run: dged
+ ./dged
+
+debug: dged
+ gdb ./dged
+
+debug-tests: run-tests
+ gdb ./run-tests
+
+clean:
+ rm -f $(FILES)
diff --git a/dged.nix b/dged.nix
index e443d63..1b05425 100644
--- a/dged.nix
+++ b/dged.nix
@@ -1,6 +1,7 @@
{ stdenv
, clang-tools
, gnumake
+, bmake
, pkg-config
, tree-sitter
, bear
@@ -12,6 +13,7 @@ stdenv.mkDerivation {
nativeBuildInputs = [
gnumake
+ bmake
pkg-config
clang-tools
bear
diff --git a/flake.lock b/flake.lock
index 8c664f7..0f2dc3b 100644
--- a/flake.lock
+++ b/flake.lock
@@ -17,16 +17,16 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1667318659,
- "narHash": "sha256-mRXqCdlnxPgm3Wk7mNAOanl7B3Q3U5scYTEiyYmNEOE=",
+ "lastModified": 1670372410,
+ "narHash": "sha256-BDiOUkuqgq5DP+E5xfTzIFYYyMb8DpSLYmeaOBeZ0vg=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "b3a8f7ed267e0a7ed100eb7d716c9137ff120fe3",
+ "rev": "5528350186a9e826588cee1329640899ca44a0cf",
"type": "github"
},
"original": {
"id": "nixpkgs",
- "ref": "nixos-22.05",
+ "ref": "nixos-22.11",
"type": "indirect"
}
},
diff --git a/flake.nix b/flake.nix
index e8486e0..49f1574 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,7 +1,7 @@
{
description = "An editor for datagubbar";
- inputs.nixpkgs.url = "nixpkgs/nixos-22.05";
+ inputs.nixpkgs.url = "nixpkgs/nixos-22.11";
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs, flake-utils }:
diff --git a/linux.mk b/linux.mk
new file mode 100644
index 0000000..3db7a1f
--- /dev/null
+++ b/linux.mk
@@ -0,0 +1 @@
+CFLAGS += -DLINUX -D_XOPEN_SOURCE=700