diff --git a/Makefile b/Makefile index a9783845..62db1c91 100644 --- a/Makefile +++ b/Makefile @@ -18,15 +18,19 @@ endif OBJ := $(SRC:.c=.o) # define default flags, and override to append mandatory flags -override CFLAGS := -O3 -std=gnu11 -fPIC -fvisibility=hidden -Wall -Wextra -Wshadow -pedantic $(CFLAGS) +ARFLAGS := rcs +CFLAGS := -O3 -Wall -Wextra -Wshadow -pedantic +override CFLAGS += -std=c11 -fPIC -fvisibility=hidden override CFLAGS += -Ilib/src -Ilib/src/wasm -Ilib/include # ABI versioning -SONAME_MAJOR := 0 -SONAME_MINOR := 0 +SONAME_MAJOR := $(word 1,$(subst ., ,$(VERSION))) +SONAME_MINOR := $(word 2,$(subst ., ,$(VERSION))) # OS-specific bits -ifeq ($(shell uname),Darwin) +ifeq ($(OS),Windows_NT) + $(error "Windows is not supported") +else ifeq ($(shell uname),Darwin) SOEXT = dylib SOEXTVER_MAJOR = $(SONAME_MAJOR).dylib SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).dylib @@ -37,43 +41,38 @@ else SOEXTVER = so.$(SONAME_MAJOR).$(SONAME_MINOR) LINKSHARED += -shared -Wl,-soname,libtree-sitter.so.$(SONAME_MAJOR) endif -ifneq (,$(filter $(shell uname),FreeBSD NetBSD DragonFly)) +ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),) PCLIBDIR := $(PREFIX)/libdata/pkgconfig endif -all: libtree-sitter.a libtree-sitter.$(SOEXTVER) +all: libtree-sitter.a libtree-sitter.$(SOEXT) tree-sitter.pc libtree-sitter.a: $(OBJ) - $(AR) rcs $@ $^ + $(AR) $(ARFLAGS) $@ $^ -libtree-sitter.$(SOEXTVER): $(OBJ) +libtree-sitter.$(SOEXT): $(OBJ) $(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@ - ln -sf $@ libtree-sitter.$(SOEXT) - ln -sf $@ libtree-sitter.$(SOEXTVER_MAJOR) ifneq ($(STRIP),) $(STRIP) $@ endif -install: all - sed -e 's|@LIBDIR@|$(LIBDIR)|;s|@INCLUDEDIR@|$(INCLUDEDIR)|;s|@VERSION@|$(VERSION)|' \ - -e 's|=$(PREFIX)|=$${prefix}|' \ - -e 's|@PREFIX@|$(PREFIX)|' \ - tree-sitter.pc.in > tree-sitter.pc - - install -d '$(DESTDIR)$(LIBDIR)' - install -m644 libtree-sitter.a '$(DESTDIR)$(LIBDIR)'/ - install -m755 libtree-sitter.$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/ - ln -sf libtree-sitter.$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXTVER_MAJOR) - ln -sf libtree-sitter.$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXT) - - install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter - install -m644 lib/include/tree_sitter/api.h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/ - - install -d '$(DESTDIR)$(PCLIBDIR)' - install -m644 tree-sitter.pc '$(DESTDIR)$(PCLIBDIR)'/ +tree-sitter.pc: tree-sitter.pc.in + sed -e 's|@VERSION@|$(VERSION)|' \ + -e 's|@LIBDIR@|$(LIBDIR)|' \ + -e 's|@INCLUDEDIR@|$(INCLUDEDIR)|' \ + -e 's|=$(PREFIX)|=$${prefix}|' \ + -e 's|@PREFIX@|$(PREFIX)|' $< > $@ clean: - rm -f lib/src/*.o libtree-sitter.a libtree-sitter.$(SOEXT) libtree-sitter.$(SOEXTVER_MAJOR) libtree-sitter.$(SOEXTVER) + $(RM) $(OBJ) tree-sitter.pc libtree-sitter.a libtree-sitter.$(SOEXT) + +install: all + install -Dm644 lib/include/tree_sitter/api.h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/api.h + install -Dm644 tree-sitter.pc '$(DESTDIR)$(PCLIBDIR)'/tree-sitter.pc + install -Dm644 libtree-sitter.a '$(DESTDIR)$(LIBDIR)'/libtree-sitter.a + install -m755 libtree-sitter.$(SOEXT) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXTVER) + ln -sf libtree-sitter.$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXTVER_MAJOR) + ln -sf libtree-sitter.$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/libtree-sitter.$(SOEXT) .PHONY: all install clean diff --git a/Package.swift b/Package.swift index 7966e529..dde22274 100644 --- a/Package.swift +++ b/Package.swift @@ -11,6 +11,7 @@ let package = Package( name: "TreeSitter", targets: ["TreeSitter"]), ], + cLanguageStandard: .c11, targets: [ .target(name: "TreeSitter", path: "lib", diff --git a/build.zig b/build.zig index 8b6a7c33..ed44706a 100644 --- a/build.zig +++ b/build.zig @@ -8,7 +8,7 @@ pub fn build(b: *std.Build) void { }); lib.linkLibC(); - lib.addCSourceFile(.{ .file = .{ .path = "lib/src/lib.c" }, .flags = &.{} }); + lib.addCSourceFile(.{ .file = .{ .path = "lib/src/lib.c" }, .flags = &.{"-std=c11"} }); lib.addIncludePath(.{ .path = "lib/include" }); lib.addIncludePath(.{ .path = "lib/src" }); diff --git a/cli/loader/src/lib.rs b/cli/loader/src/lib.rs index d3d83733..8abc419c 100644 --- a/cli/loader/src/lib.rs +++ b/cli/loader/src/lib.rs @@ -587,7 +587,7 @@ impl Loader { if let Some(scanner_path) = scanner_path.as_ref() { if scanner_path.extension() == Some("c".as_ref()) { - command.arg("-xc").arg("-std=c99").arg(scanner_path); + command.arg("-xc").arg("-std=c11").arg(scanner_path); } else { eprintln!("Warning: Using a C++ scanner is now deprecated. Please migrate your scanner code to C, as C++ support will be removed in the near future."); command.arg(scanner_path); diff --git a/cli/src/generate/templates/makefile b/cli/src/generate/templates/makefile index aec4f8e9..cb67f31b 100644 --- a/cli/src/generate/templates/makefile +++ b/cli/src/generate/templates/makefile @@ -30,7 +30,7 @@ OBJS := $(patsubst %.c,%.o,$(wildcard $(SRC_DIR)/*.c)) # flags ARFLAGS := rcs -override CFLAGS += -I$(SRC_DIR) -std=c11 +override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC # OS-specific bits ifeq ($(shell uname),Darwin) @@ -60,14 +60,11 @@ endif all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc -$(SRC_DIR)/%.o: $(SRC_DIR)/%.c - $(CC) -c $^ -o $@ - lib$(LANGUAGE_NAME).a: $(OBJS) $(AR) $(ARFLAGS) $@ $^ lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS) - $(CC) -fPIC $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@ + $(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@ $(LANGUAGE_NAME).pc: sed > $@ bindings/c/$(LANGUAGE_NAME).pc.in \ diff --git a/lib/binding_rust/build.rs b/lib/binding_rust/build.rs index 3e7d3642..28544897 100644 --- a/lib/binding_rust/build.rs +++ b/lib/binding_rust/build.rs @@ -47,7 +47,7 @@ fn main() { } config - .flag_if_supported("-std=c99") + .flag_if_supported("-std=c11") .flag_if_supported("-fvisibility=hidden") .flag_if_supported("-Wshadow") .flag_if_supported("-Wno-unused-parameter") diff --git a/lib/compile_flags.txt b/lib/compile_flags.txt index f6a5774a..3f08438f 100644 --- a/lib/compile_flags.txt +++ b/lib/compile_flags.txt @@ -1,4 +1,4 @@ --std=c99 +-std=c11 -Isrc/wasm -Iinclude --D TREE_SITTER_FEATURE_WASM \ No newline at end of file +-D TREE_SITTER_FEATURE_WASM diff --git a/lib/src/parser.c b/lib/src/parser.c index 54e3b0a8..084797f9 100644 --- a/lib/src/parser.c +++ b/lib/src/parser.c @@ -1,3 +1,5 @@ +#define _POSIX_C_SOURCE 200112L + #include #include #include diff --git a/lib/src/tree.c b/lib/src/tree.c index 347ded38..20bbab48 100644 --- a/lib/src/tree.c +++ b/lib/src/tree.c @@ -1,3 +1,5 @@ +#define _POSIX_C_SOURCE 200112L + #include "tree_sitter/api.h" #include "./array.h" #include "./get_changed_ranges.h" diff --git a/script/build-fuzzers b/script/build-fuzzers index 1d07cba7..b54875e7 100755 --- a/script/build-fuzzers +++ b/script/build-fuzzers @@ -42,7 +42,7 @@ for lang in ${languages[@]}; do $CXX $CXXFLAGS -g -O1 "-I${lang_dir}/src" -c "${lang_scanner}.cc" -o "${lang_scanner}.o" objects+=("${lang_scanner}.o") elif [ -e "${lang_scanner}.c" ]; then - $CC $CFLAGS -std=c99 -g -O1 "-I${lang_dir}/src" -c "${lang_scanner}.c" -o "${lang_scanner}.o" + $CC $CFLAGS -std=c11 -g -O1 "-I${lang_dir}/src" -c "${lang_scanner}.c" -o "${lang_scanner}.o" objects+=("${lang_scanner}.o") fi diff --git a/script/build-wasm b/script/build-wasm index b400afa1..c96677fb 100755 --- a/script/build-wasm +++ b/script/build-wasm @@ -122,7 +122,7 @@ $emcc \ -s EXPORTED_RUNTIME_METHODS=$runtime_methods \ $emscripten_flags \ -fno-exceptions \ - -std=c99 \ + -std=c11 \ -D 'fprintf(...)=' \ -D NDEBUG= \ -I ${src_dir} \