tree-sitter implementation for the confindent configuration language
at main 3.4 kB view raw
1ifeq ($(OS),Windows_NT) 2$(error Windows is not supported) 3endif 4 5LANGUAGE_NAME := tree-sitter-confindent 6HOMEPAGE_URL := https://tangled.org/@nove.dev/tree-sitter-confindent 7VERSION := 0.1.0 8 9# repository 10SRC_DIR := src 11 12TS ?= tree-sitter 13 14# install directory layout 15PREFIX ?= /usr/local 16DATADIR ?= $(PREFIX)/share 17INCLUDEDIR ?= $(PREFIX)/include 18LIBDIR ?= $(PREFIX)/lib 19PCLIBDIR ?= $(LIBDIR)/pkgconfig 20 21# source/object files 22PARSER := $(SRC_DIR)/parser.c 23EXTRAS := $(filter-out $(PARSER),$(wildcard $(SRC_DIR)/*.c)) 24OBJS := $(patsubst %.c,%.o,$(PARSER) $(EXTRAS)) 25 26# flags 27ARFLAGS ?= rcs 28override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC 29 30# ABI versioning 31SONAME_MAJOR = $(shell sed -n 's/\#define LANGUAGE_VERSION //p' $(PARSER)) 32SONAME_MINOR = $(word 1,$(subst ., ,$(VERSION))) 33 34# OS-specific bits 35ifeq ($(shell uname),Darwin) 36 SOEXT = dylib 37 SOEXTVER_MAJOR = $(SONAME_MAJOR).$(SOEXT) 38 SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).$(SOEXT) 39 LINKSHARED = -dynamiclib -Wl,-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SOEXTVER),-rpath,@executable_path/../Frameworks 40else 41 SOEXT = so 42 SOEXTVER_MAJOR = $(SOEXT).$(SONAME_MAJOR) 43 SOEXTVER = $(SOEXT).$(SONAME_MAJOR).$(SONAME_MINOR) 44 LINKSHARED = -shared -Wl,-soname,lib$(LANGUAGE_NAME).$(SOEXTVER) 45endif 46ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),) 47 PCLIBDIR := $(PREFIX)/libdata/pkgconfig 48endif 49 50all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc 51 52lib$(LANGUAGE_NAME).a: $(OBJS) 53 $(AR) $(ARFLAGS) $@ $^ 54 55lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS) 56 $(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@ 57ifneq ($(STRIP),) 58 $(STRIP) $@ 59endif 60 61$(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in 62 sed -e 's|@PROJECT_VERSION@|$(VERSION)|' \ 63 -e 's|@CMAKE_INSTALL_LIBDIR@|$(LIBDIR:$(PREFIX)/%=%)|' \ 64 -e 's|@CMAKE_INSTALL_INCLUDEDIR@|$(INCLUDEDIR:$(PREFIX)/%=%)|' \ 65 -e 's|@PROJECT_DESCRIPTION@|$(DESCRIPTION)|' \ 66 -e 's|@PROJECT_HOMEPAGE_URL@|$(HOMEPAGE_URL)|' \ 67 -e 's|@CMAKE_INSTALL_PREFIX@|$(PREFIX)|' $< > $@ 68 69$(PARSER): $(SRC_DIR)/grammar.json 70 $(TS) generate $^ 71 72install: all 73 install -d '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/confindent '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)' 74 install -m644 bindings/c/tree_sitter/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h 75 install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc 76 install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a 77 install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) 78 ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) 79 ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) 80 install -m644 queries/*.scm '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/confindent 81 82uninstall: 83 $(RM) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a \ 84 '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) \ 85 '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) \ 86 '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) \ 87 '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h \ 88 '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc 89 $(RM) -r '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/confindent 90 91clean: 92 $(RM) $(OBJS) $(LANGUAGE_NAME).pc lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) 93 94test: 95 $(TS) test 96 97.PHONY: all install uninstall clean test