#$Id$
#Copyright (c) 2004-2019 Pierre Pronchery <khorben@defora.org>
#This file is part of the DeforaOS Project



#variables
PACKAGE	= DeforaOS
VERSION	= 0.0.0
VENDOR	= DeforaOS
SUBDIRS	= System/src Apps Library
PREFIX	= /usr/local
DEVNULL	= /dev/null
EXEEXT	=
TGZEXT	= .tar.gz
#executables
BUILDSH	= ./build.sh -v
CONFIGURE= ./Apps/Devel/src/configure/configure-git/src/configure$(EXEEXT)
RM	= rm -f
TAR	= tar
MKDIR	= mkdir -m 0755 -p


all:
	@if [ ! -x "$(CONFIGURE)" ]; then $(MAKE) bootstrap; else $(MAKE) subdirs; fi

subdirs:
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		([ -d "$(OBJDIR)$$i" ] || $(MKDIR) -- "$(OBJDIR)$$i") && \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/"; \
		else $(MAKE); fi) || exit; done

bootstrap:
	$(BUILDSH) -O MAKE="$(MAKE)" -O PREFIX="$(PREFIX)" bootstrap

build:
	for subdir in $(SUBDIRS); do (cd $$subdir && $(MAKE) build) || break; done

configure:
	for subdir in $(SUBDIRS); do (cd $$subdir && $(MAKE) configure) || break; done

download:
	for subdir in $(SUBDIRS); do (cd $$subdir && $(MAKE) download) || break; done

extract:
	for subdir in $(SUBDIRS); do (cd $$subdir && $(MAKE) extract) || break; done

patch:
	for subdir in $(SUBDIRS); do (cd $$subdir && $(MAKE) patch) || break; done

tests:
	for subdir in $(SUBDIRS); do (cd $$subdir && $(MAKE) tests) || break; done

clean:
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/" clean; \
		else $(MAKE) clean; fi) || exit; done

distclean:
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/" distclean; \
		else $(MAKE) distclean; fi) || exit; done

dist:
	#XXX hack to bootstrap only configure
	$(BUILDSH) -O MAKE="$(MAKE)" bootstrap < "$(DEVNULL)"
	$(CONFIGURE) -v
	$(MAKE) dist

distcheck: dist
	$(TAR) -xzvf $(OBJDIR)$(PACKAGE)-$(VERSION)$(TGZEXT)
	$(MKDIR) -- $(PACKAGE)-$(VERSION)/objdir
	$(MKDIR) -- $(PACKAGE)-$(VERSION)/destdir
	cd "$(PACKAGE)-$(VERSION)" && $(MAKE) OBJDIR="$$PWD/objdir/"
	cd "$(PACKAGE)-$(VERSION)" && $(MAKE) OBJDIR="$$PWD/objdir/" DESTDIR="$$PWD/destdir" install
	cd "$(PACKAGE)-$(VERSION)" && $(MAKE) OBJDIR="$$PWD/objdir/" DESTDIR="$$PWD/destdir" uninstall
	cd "$(PACKAGE)-$(VERSION)" && $(MAKE) OBJDIR="$$PWD/objdir/" distclean
	cd "$(PACKAGE)-$(VERSION)" && $(MAKE) dist
	$(RM) -r -- $(PACKAGE)-$(VERSION)

install: all
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/" install; \
		else $(MAKE) install; fi) || exit; done

uninstall:
	@for i in $(SUBDIRS); do (cd "$$i" && \
		if [ -n "$(OBJDIR)" ]; then \
		$(MAKE) OBJDIR="$(OBJDIR)$$i/" uninstall; \
		else $(MAKE) uninstall; fi) || exit; done

.PHONY: all subdirs clean distclean dist distcheck install uninstall bootstrap build configure download extract patch tests
