# -fPIC generates position independent code (PIC) for shared libraries
CFLAGS = -fPIC -ltiff -ljpeg -lz -lm -pthread

ERLANG_PATH = $(shell erl -eval 'io:format("~s", [lists:concat([code:root_dir(), "/erts-", erlang:system_info(version), "/include"])])' -s init stop -noshell)
CFLAGS += -I$(ERLANG_PATH) -I.

ifeq ($(shell uname),Darwin)
	# dynamiclib produces a dynamic library instead of an executable when linking
	LDFLAGS += -dynamiclib -undefined dynamic_lookup

	# statically link bardecode into the NIF on macOS
	BARDECODE = priv/bardecode.a
else
	# dynamically link to bardecode shared library on Linux, which is compiled with -fPIC
	# NOTE: LD_LIBRARY_PATH is set into Dockerfile
	BARDECODE = -Lpriv -lbardecode
endif

all: bardecode

bardecode:
	$(MIX) compile

priv/ex_bardecode.so: src/bardecode.c src/barcode_linux
	$(CC) $(CFLAGS) -shared $(LDFLAGS) -o $@ src/bardecode.c $(BARDECODE);

barcode_linux.tar.gz:
	curl -O http://bardecode.com/barcode_linux.tar.gz

src/barcode_linux: barcode_linux.tar.gz
	mkdir -p src/barcode_linux
	tar -xvf barcode_linux.tar.gz -C src/barcode_linux --strip-components=1
	cd src/barcode_linux && ./configure.sh
	cp src/barcode_linux/arch/lib/* priv/

clean:
	$(RM) priv/ex_bardecode.so
	$(RM) -rf src/barcode_linux
	$(RM) barcode_linux.tar.gz

.PHONY: all bardecode clean
