PKG_CONFIG ?= pkg-config
CXXFLAGS := -std=gnu++14 -O2 -Wall -I. -g $(shell $(PKG_CONFIG) libusb-1.0 --cflags) -pthread
LDFLAGS := $(shell $(PKG_CONFIG) libusb-1.0 --libs) -pthread
AR := ar
LN := ln
RANLIB := ranlib
INSTALL := install
PREFIX := /usr/local
LIB := libbmusb.a
SODEV := libbmusb.so
SONAME := libbmusb.so.6
SOLIB := libbmusb.so.6.0.1

all: $(LIB) $(SOLIB) main bmusb-v4l2proxy

%.pic.o : %.cpp
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -fPIC -o $@ -c $^

main: bmusb.o main.o
	$(CXX) -o $@ $^ $(LDFLAGS)

bmusb-v4l2proxy: bmusb.o v4l2proxy.o
	$(CXX) -o $@ $^ $(LDFLAGS)

# Static library.
$(LIB): bmusb.o fake_capture.o
	$(AR) rc $@ $^
	$(RANLIB) $@

# Shared library.
$(SOLIB): bmusb.pic.o fake_capture.pic.o
	$(CXX) -shared -Wl,-soname,$(SONAME) -o $@ $^ $(LDFLAGS)

clean:
	$(RM) bmusb.o main.o v4l2proxy.o fake_capture.o bmusb.pic.o fake_capture.pic.o $(LIB) $(SOLIB) main bmusb-v4l2proxy

install: all
	$(INSTALL) -m 755 -o root -g root -d \
		$(DESTDIR)$(PREFIX)/lib \
		$(DESTDIR)$(PREFIX)/lib/pkgconfig \
		$(DESTDIR)$(PREFIX)/include/bmusb \
		$(DESTDIR)/lib/udev/rules.d
	$(INSTALL) -m 755 -o root -g root $(LIB) $(SOLIB) $(DESTDIR)$(PREFIX)/lib
	$(LN) -sf $(SOLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
	$(LN) -sf $(SOLIB) $(DESTDIR)$(PREFIX)/lib/$(SODEV)
	$(INSTALL) -m 755 -o root -g root bmusb/bmusb.h bmusb/fake_capture.h $(DESTDIR)$(PREFIX)/include/bmusb
	$(INSTALL) -m 644 -o root -g root bmusb.pc $(DESTDIR)$(PREFIX)/lib/pkgconfig
	$(INSTALL) -m 644 -o root -g root 70-bmusb.rules $(DESTDIR)/lib/udev/rules.d

