# .SILENT:

DEPENDFILE=.depend
VERSION=0.1

PREFIX=/usr/local
DATAPREFIX=/var/lib
RUNPID=/var/run/miniwebcam.pid
ETCPREFIX=/etc
DEFAULT_SERVERPORT=20010
ARCH=$(shell uname -m)
CXX=g++
CXXFLAGS= -ggdb -fPIC -Wall  -std=c++11 -I/usr/local/include
LDFLAGS= -lUDPTCPNetwork -L/usr/local/lib -ljpeg -larchive
OBJFILES= webserver.o configuration.o main.o inmemoryfile.o inmemorytar.o \
		  convert.o debayer.o videoframe.o \
		  video.o videodevice_v4l2.o videodevice_dump.o 
all: dep miniwebcam

assets.obj:
	tar cvf assets.tar www/*
ifeq ($(ARCH), x86_64)
	objcopy -I binary -O elf64-x86-64 -B i386:x86-64 assets.tar assets.obj
else ifeq ($(ARCH), aarch64)
	objcopy -I binary -O elf64-littleaarch64 -B aarch64 assets.tar assets.obj
else
	$(error Unbekannte Architektur: $(ARCH))
endif
	rm -rf assets.tar

miniwebcam: $(OBJFILES) assets.obj
	$(CXX) $(OBJFILES) -o $@ assets.obj -L./ -I./ $(LDFLAGS)
	rm -rf assets.obj

install: miniwebcam
	cp -rf miniwebcam $(PREFIX)/bin

uninstall:
	rm -rf $(PREFIX)/bin/miniwebcam

config:
	echo "#ifndef _CONFIG_H_" > config.h
	echo "#define _CONFIG_H_" >> config.h
	echo "" >> config.h
	echo "#define VERSION \"$(VERSION)\"" >> config.h
	echo "" >> config.h
	echo "#define PREFIX \"$(PREFIX)\"" >> config.h
	echo "#define RUNPID \"$(RUNPID)\"" >> config.h
	echo "#define ETCPREFIX \"$(ETCPREFIX)\"" >> config.h
	echo "" >> config.h
	echo "#define DEFAULT_SERVERPORT \""$(DEFUALT_SERVERPORT)"\"" >> config.h
	echo "" >> config.h
	echo "#endif" >> config.h
	echo "" >> config.h
	
rebuild: clean all

dep:
	$(CXX) -MM `ls *.cc` $(CXXFLAGS) > $(DEPENDFILE)

keygen:
	openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ssl-key.pem -out ssl-cert.pem

clean:
	rm *.obj -rf
	rm *.tar -rf
	rm *.s -rf
	rm *.o -rf
	rm *.oo -rf
	rm *~ -rf
	rm -rf .depend
	rm -rf *.so
	rm -rf *.so.*
	rm -rf miniwebcam
	rm -rf config.h
	rm -rf Makefile.rules
	rm -rf ssl-key.pem
	rm -rf ssl-cert.pem

cleanall: clean

source: cleanall

help:
	echo "   config    to create a new config.h file"
	echo "   keygen    generate a key and a self-signed certificate"

-include $(DEPENDFILE)
