LIBNAME := $(shell basename $$(pwd))
MAJOR := 1
MINOR := 0.0

UNAME_S := $(shell uname -s)

ifeq ($(UNAME_S),Darwin)
	LINKERNAME := $(LIBNAME).dylib
	SONAME := $(LIBNAME).$(MAJOR).dylib
	REALNAME := $(LINKERNAME)
else
	LINKERNAME := $(LIBNAME).so
	SONAME := $(LINKERNAME).$(MAJOR)
	REALNAME := $(SONAME).$(MINOR)
endif

PREFIX ?= ../..
LIBDIR ?= $(PREFIX)/plugins

SRCS := $(wildcard *.cpp)
OBJS := $(subst .cpp,.o,$(SRCS))
DEPS := $(subst .cpp,.d,$(SRCS))
HDRS := $(filter-out $(LIBNAME).hpp,$(wildcard *.hpp))

CXX ?= g++

CXXFLAGS += -Wshadow -Wall -Wpedantic -Wextra -g -std=c++17 -fPIC
ifeq ($(DEBUG),1)
	CXXFLAGS += -D DEBUG -O0
else
	CXXFLAGS += -D NDEBUG -O3
endif

LDLIBS := -lcairo -lscscreensaver

RM := /bin/rm -f
INSTALL := /usr/bin/install -c

.PHONY: all clean install

all: $(REALNAME)

$(REALNAME): $(OBJS) $(DEPS)
ifeq ($(UNAME_S),Darwin)
	$(CXX) -dynamiclib -o $(REALNAME) -current_version $(MAJOR) -compatibility_version $(MINOR) $(LDFLAGS) $(LDLIBS) $(OBJS)
else
	$(CXX) -g -shared -Wl,-soname,$(SONAME) -o $(REALNAME) $(LDFLAGS) $(LDLIBS) $(OBJS)
endif

%.o: %.cpp %.d Makefile
	$(CXX) $(CXXFLAGS) -MMD -MP -MT $@ -MF $*.d -c $<

-include *.d

%.d: ;

clean:
	$(RM) $(OBJS) $(DEPS) $(REALNAME)

install: $(REALNAME)
	$(INSTALL) -d $(LIBDIR)
	$(INSTALL) -m 644 $(REALNAME) $(LIBDIR)/$(LIBNAME).saver