PREFIX ?= /usr/local
DESTDIR ?=
CARGO ?= cargo
CC ?= cc
INSTALL ?= install

BINDIR = $(DESTDIR)$(PREFIX)/bin
LIBDIR = $(DESTDIR)$(PREFIX)/lib
INCLUDEDIR = $(DESTDIR)$(PREFIX)/include
MANDIR = $(DESTDIR)$(PREFIX)/share/man/man1

.PHONY: all build test check install uninstall clean

all: build

build:
	$(CARGO) build --release --workspace

test:
	$(CARGO) test --workspace

check:
	$(CARGO) fmt --all -- --check
	$(CARGO) clippy --workspace --all-targets -- -D warnings
	$(CARGO) test --workspace
	$(CC) -std=gnu11 -Wall -Wextra -Werror -Wno-unused-variable -Wno-unused-function -DCDDA_TEST -Iinclude -c tests/capi_compile.c -o target/capi_compile.o

install: build
	$(INSTALL) -d -m 0755 $(BINDIR)
	$(INSTALL) -m 0755 target/release/cdrustanoia $(BINDIR)/cdrustanoia
	ln -sf cdrustanoia $(BINDIR)/cdparanoia
	$(INSTALL) -d -m 0755 $(MANDIR)
	$(INSTALL) -m 0644 man/cdparanoia.1 $(MANDIR)/cdparanoia.1
	$(INSTALL) -m 0644 man/cdrustanoia.1 $(MANDIR)/cdrustanoia.1
	$(INSTALL) -d -m 0755 $(INCLUDEDIR)
	$(INSTALL) -m 0644 include/cdda_interface.h $(INCLUDEDIR)/cdda_interface.h
	$(INSTALL) -m 0644 include/cdda_paranoia.h $(INCLUDEDIR)/cdda_paranoia.h
	$(INSTALL) -m 0644 include/utils.h $(INCLUDEDIR)/utils.h
	$(INSTALL) -d -m 0755 $(LIBDIR)
	$(INSTALL) -m 0755 target/release/libcdda_interface.so $(LIBDIR)/libcdda_interface.so.0.10.2
	$(INSTALL) -m 0755 target/release/libcdda_paranoia.so $(LIBDIR)/libcdda_paranoia.so.0.10.2
	ln -sf libcdda_interface.so.0.10.2 $(LIBDIR)/libcdda_interface.so.0
	ln -sf libcdda_interface.so.0 $(LIBDIR)/libcdda_interface.so
	ln -sf libcdda_paranoia.so.0.10.2 $(LIBDIR)/libcdda_paranoia.so.0
	ln -sf libcdda_paranoia.so.0 $(LIBDIR)/libcdda_paranoia.so
	$(INSTALL) -m 0644 target/release/libcdda_interface.a $(LIBDIR)/libcdda_interface.a
	$(INSTALL) -m 0644 target/release/libcdda_paranoia.a $(LIBDIR)/libcdda_paranoia.a

uninstall:
	rm -f $(BINDIR)/cdrustanoia $(BINDIR)/cdparanoia
	rm -f $(MANDIR)/cdparanoia.1 $(MANDIR)/cdrustanoia.1
	rm -f $(INCLUDEDIR)/cdda_interface.h $(INCLUDEDIR)/cdda_paranoia.h $(INCLUDEDIR)/utils.h
	rm -f $(LIBDIR)/libcdda_interface.so* $(LIBDIR)/libcdda_paranoia.so*
	rm -f $(LIBDIR)/libcdda_interface.a $(LIBDIR)/libcdda_paranoia.a

clean:
	$(CARGO) clean
