DESTDIR=
PREFIX=/usr
INSTALLWATCH=installwatch-0.6.3
DIST=bpkg Makefile README COPYING $(INSTALLWATCH).tgz
OS=$(shell ./bpkg --detect-os)

.PHONY: $(OS)-build $(OS)-pre-install $(OS)-install real-install all install

all: $(OS)-build

install: all $(OS)-pre-install
	@if ! ./bpkg --install-with='make install-raw' --package=bpkg-`./bpkg --version`; then \
		echo; \
		echo "BPKG failed to self-package. You can manually install with"; \
		echo; \
		echo "  make install-raw"; \
		echo; \
		echo "Or rectify the problem and run 'make install' again."; \
		echo; \
		exit 1; \
	fi
	@cat README

install-raw: all $(OS)-install
	mkdir -p $(DESTDIR)$(PREFIX)/bin
	install -m755 bpkg $(DESTDIR)$(PREFIX)/bin

$(INSTALLWATCH): $(INSTALLWATCH).tgz
	rm -rf $(INSTALLWATCH)
	gzip -dc $(INSTALLWATCH).tgz | tar xf -

dist:
	@version=`./bpkg --version`; \
		rm -rf bpkg-$$version; \
		mkdir bpkg-$$version; \
		cp $(DIST) bpkg-$$version; \
		tar cfz bpkg-$$version.tar.gz bpkg-$$version; \
		rm -rf bpkg-$$version

clean:
	rm -rf $(INSTALLWATCH)

unknown-build:
	@echo "FATAL: Unknown operating system/distribution. Need detection and"
	@echo "       backend code in bpkg."
	@exit 1

unknown-install:
	@echo "FATAL: Unknown operating system/distribution. Need detection and"
	@echo "       backend code in bpkg."
	@exit 1

install-installwatch:
	$(MAKE) -C $(INSTALLWATCH) PREFIX=$(PREFIX) BINDIR=$(DESTDIR)$(PREFIX)/bin LIBDIR=$(DESTDIR)$(PREFIX)/lib install

# Arch
arch-pre-install:
	@if ! pacman -Q installwatch > /dev/null 2>&1; then \
		echo "Installwatch is required by bpkg, attempting to install"; \
		pacman -S installwatch; \
		pacman -Q installwatch > /dev/null 2>&1 || exit 1; \
	fi

# Gentoo
gentoo-build: $(INSTALLWATCH)
	$(MAKE) -C $(INSTALLWATCH) PREFIX=/usr

gentoo-pre-install: install-installwatch

gentoo-install: gentoo-pre-install

# Slackware
slackware-build:
	@if ! ls /var/log/packages/checkinstall* > /dev/null 2>&1; then \
		$(MAKE) $(INSTALLWATCH); \
		$(MAKE) -C $(INSTALLWATCH) PREFIX=/usr; \
		echo; \
		echo "Installwatch has been compiled and will be installed, however Slackware includes"; \
		echo "'checkinstall' which bundles installwatch. You can install this package instead,"; \
		echo "if so desired."; \
		echo; \
	fi

slackware-pre-install:
	@ls /var/log/packages/checkinstall* > /dev/null 2>&1 || $(MAKE) install-installwatch

slackware-install: slackware-pre-install
