Files
regexx/Makefile
T

58 lines
1.8 KiB
Makefile
Raw Normal View History

# Makefile for regexx: a single-file C regex interpreter with Python
# `re` semantics. See concept.md for the design and README.md for the
# implementation status.
CC ?= cc
CSTD ?= -std=c11
WARN ?= -Wall -Wextra
OPT ?= -O2
CFLAGS ?= $(CSTD) $(WARN) $(OPT) -g
LDLIBS ?=
PREFIX ?= /usr/local
AR ?= ar
.PHONY: all lib example test check clean install fuzz-smoke
all: lib example
# ---- library -----------------------------------------------------------
libregexx.a: regexx.o
$(AR) rcs $@ $^
regexx.o: regexx.c regexx.h
$(CC) $(CFLAGS) -c regexx.c -o $@
lib: libregexx.a
# ---- example -------------------------------------------------------------
example: rxgrep
rxgrep: examples/rxgrep.c libregexx.a regexx.h
$(CC) $(CFLAGS) -I. -o $@ examples/rxgrep.c libregexx.a $(LDLIBS)
# ---- tests -----------------------------------------------------------------
# tests/generated_tests.c is generated from tests/cases.py using
# CPython's own `re` module as ground truth (concept.md Section 11).
tests/generated_tests.c: tests/cases.py tests/gen.py
python3 tests/gen.py
test: tests/generated_tests.c regexx.c regexx.h tests/harness.c tests/harness.h tests/main.c
$(CC) $(CFLAGS) -I. -o /tmp/regexx_test regexx.c tests/harness.c tests/generated_tests.c tests/main.c $(LDLIBS)
/tmp/regexx_test
# check also runs the suite under AddressSanitizer + UBSan.
check: tests/generated_tests.c
$(CC) $(CSTD) $(WARN) -O0 -g -fsanitize=address,undefined -I. -o /tmp/regexx_test_san \
regexx.c tests/harness.c tests/generated_tests.c tests/main.c $(LDLIBS)
/tmp/regexx_test_san
install: libregexx.a regexx.h
install -d $(DESTDIR)$(PREFIX)/lib $(DESTDIR)$(PREFIX)/include
install -m644 libregexx.a $(DESTDIR)$(PREFIX)/lib/
install -m644 regexx.h $(DESTDIR)$(PREFIX)/include/
clean:
rm -f regexx.o libregexx.a rxgrep tests/generated_tests.c