so = libpublic.so
solinkname = -lpublic

install_target = /usr/local

srcs = $(wildcard src/*.c)
objs = $(patsubst %.c,%.o,$(srcs))

includes = include/public.h
installed_includes = $(addprefix $(install_target)/,$(includes))

cc = gcc
cflags = -c -g -O3 -fPIC -Wall -Wextra -Wfatal-errors -pedantic-errors
privateincludedirs = -Isrc
publicincludedirs = -Iinclude
ldflags = -shared -Wl,-soname,$(so)


all: $(so)

$(so): $(objs)
	$(cc) $(ldflags) $(objs) -o $(so)

%.o:%.c
	$(cc) $(cflags) $(privateincludedirs) -c -o $@ $<

clean:
	rm -f *.o src/*.o *.so test

install:
	cp -v $(includes) $(install_target)/include
	cp -v $(so) $(install_target)/lib

uninstall:
	rm -vf $(install_target)/lib/$(so)
	rm -vf $(installed_includes)

test:
	$(cc) $(publicincludedirs) $(cflags) test.c
	$(cc) -L. -o test test.o $(solinkname)
	LD_LIBRARY_PATH=. ./test
