##
##  Makefile -- OpenPKG Framework Developer Procedures
##  Copyright (c) 2000-2012 OpenPKG GmbH <http://openpkg.com/>
##
##  This software is property of the OpenPKG GmbH, DE MUC HRB 160208.
##  All rights reserved. Licenses which grant limited permission to use,
##  copy, modify and distribute this software are available from the
##  OpenPKG GmbH.
##
##  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
##  SUCH DAMAGE.
##

PATH      = /usr/opkg/bin:/usr/opkg/sbin:/bin:/sbin:/usr/bin:/usr/sbin
PREFIX    = /openpkg
USER      = openpkg
GROUP     = openpkg
TAG       = openpkg

SH        = /bin/sh
RPM       = $(PREFIX)/bin/openpkg rpm
SUDO      = sudo
SCP       = scp
RSYNC     = rsync
RSYNC_REM = /v/openpkg/sw/bin/rsync
MTN       = mtn

UPLOAD1   = openpkg@experimental.openpkg.org:/v/openpkg/download/data/framework/release/source/
UPLOAD2   = openpkg@experimental.openpkg.org:/v/openpkg/download/data/components/cache/openpkg/

all:
	@echo "Individual Steps:"
	@echo "  $(MAKE) fetch-sh         fetch third-party distribution files (standalone)"
	@echo "  $(MAKE) fetch-rpm        fetch third-party distribution files (requires $(PREFIX))"
	@echo "  $(MAKE) build-src-sh     build   SOURCE SHELL package (standalone)"
	@echo "  $(MAKE) build-bin-sh     build   BINARY SHELL package (standalone)"
	@echo "  $(MAKE) build-src-rpm    build   SOURCE RPM   package (requires $(PREFIX))"
	@echo "  $(MAKE) build-bin-rpm    build   BINARY RPM   package (requires $(PREFIX))"
	@echo "  $(MAKE) install-bin-sh   install BINARY SHELL package (requires $(PREFIX))"
	@echo "  $(MAKE) install-bin-rpm  install BINARY RPM   package (requires $(PREFIX))"
	@echo "  $(MAKE) uninstall        uninstall entire instance under $(PREFIX)"
	@echo "  $(MAKE) upload-dst       upload latest DISTRIBUTION files"
	@echo "  $(MAKE) upload-pkg       upload latest SOURCE SHELL+RPM packages"
	@echo "  $(MAKE) upload-src       upload latest SOURCE repository revisions"
	@echo "  $(MAKE) clean            remove temporary files"
	@echo ""
	@echo "All-In-One Steps:"
	@echo "  $(MAKE) bootstrap        BOOTSTRAP instance under $(PREFIX) from scratch"
	@echo "  $(MAKE) update           UPDATE    instance under $(PREFIX)"
	@echo "  $(MAKE) upload           upload all results"

##
##  Individual Steps
##

fetch-sh:
	@echo "++ fetching third-party distribution files (manually)"; \
	eval `egrep '^%define *V_.*' openpkg.spec | \
	    sed -e 's%^.*\(V_[a-z][a-zA-Z0-9_]*\) *\([^ ][^ ]*\).*$$%\1="\2";%'`; \
	for url in \
	    `egrep '^Source[0-9][0-9]*: *(http|ftp)://' openpkg.spec | \
	    sed -e 's;^Source[0-9][0-9]*: *;;' -e 's;%{\(V_[a-z][a-zA-Z0-9_]*\)};$${\1};g'`; do \
	    eval "url=\"$$url\""; \
	    file=`echo "$$url" | sed -e 's;^.*/\([^/]*\)$$;../dst/\1;'`; \
	    if [ ! -f $$file ]; then \
			echo "-- downloading $$url"; \
			if [ ".`(which curl) 2>/dev/null | egrep '^/'`" != . ]; then \
				curl -s -L -o "$$file" "$$url" || true; \
			elif [ ".`(which wget) 2>/dev/null | egrep '^/'`" != . ]; then \
				wget -q -O "$$file" "$$url" || true; \
			elif [ ".`(which fetch) 2>/dev/null | egrep '^/'`" != . ]; then \
				fetch -o "$$file" "$$url" || true; \
			elif [ ".`(which lwp-download) 2>/dev/null | egrep '^/'`" != . ]; then \
				lwp-download "$$url" "$$file" || true; \
			else \
				echo "ERROR: sorry, no download tool found in \$$PATH (\"curl\", \"wget\", \"fetch\", \"lwp-download\")" 1>&2; \
				exit 1; \
			fi; \
			if [ ! -f "$$file" ]; then \
				echo "ERROR: failed to download \"$$url\"" 1>&2; \
				exit 1; \
			fi; \
	    fi; \
	done

fetch-rpm:
	@echo "++ fetching third-party distribution files (via RPM)"; \
	PATH="$(PATH)" $(RPM) -bf *.spec

build-src-sh:
	@echo "++ building SOURCE SHELL package"; \
	PATH="$(PATH)" $(SH) openpkg.boot -s

build-bin-sh:
	@echo "++ building BINARY SHELL package"; \
	cd ../pkg && TMPDIR="`cd ../tmp && pwd`" && export TMPDIR && \
	PATH="$(PATH)" $(SH) openpkg-*-`date '+%Y%m%d'`.src.sh \
	    --prefix=$(PREFIX) \
	    --user=$(USER) \
	    --group=$(GROUP) \
	    --tag=$(TAG)

build-src-rpm:
	@echo "++ building SOURCE RPM package"; \
	PATH="$(PATH)" $(RPM) -bs openpkg.spec

build-bin-rpm:
	@echo "++ building BINARY RPM package"; \
	PATH="$(PATH)" $(RPM) -bb openpkg.spec

install-bin-sh:
	@echo "++ installing BINARY SHELL package"; \
	d=`cd ../pkg && pwd` && cd / && PATH="$(PATH)" $(SUDO) $(SH) $$d/openpkg-*-`date '+%Y%m%d'`.*-*-*.sh

install-bin-rpm:
	@echo "++ installing BINARY RPM package"; \
	d=`cd ../pkg && pwd` && cd / && PATH="$(PATH)" $(SUDO) $(RPM) -Uvh --replacepkgs $$d/openpkg-*-`date '+%Y%m%d'`.*-*-*.rpm

uninstall:
	-@echo "++ uninstalling ENTIRE instance"; \
	cd /; $(RPM) -qa | grep -v '^openpkg-[0-9]' | xargs $(SUDO) $(RPM) -e; \
	$(SUDO) $(RPM) -e openpkg

upload-dst:
	@echo "++ uploading vendor DISTRIBUTION files:"; \
	$(RSYNC) -raH --delete -v --progress --rsync-path=$(RSYNC_REM) ../dst/ $(UPLOAD2)

upload-pkg:
	@echo "++ uploading SOURCE SHELL/RPM package(s):"; \
	$(RSYNC) -raH --delete -v --progress --rsync-path=$(RSYNC_REM) ../pkg/*.src.* $(UPLOAD1)

upload-src:
	@echo "++ uploading SOURCE repository revision(s):"; \
	$(MTN) sync

clean:
	-rm -rf ../tmp/*

pod2man:
	pod2man --section=1 --center="OpenPKG" --release="OPENPKG(8)"    --date="OpenPKG" --quotes=none openpkg.pod    >openpkg.1
	pod2man --section=8 --center="OpenPKG" --release="RC(8)"         --date="OpenPKG" --quotes=none rc.pod         >rc.8
	pod2man --section=8 --center="OpenPKG" --release="RPMTOOL(8)"    --date="OpenPKG" --quotes=none rpmtool.pod    >rpmtool.8
	pod2man --section=8 --center="OpenPKG" --release="LSYNC(8)"      --date="OpenPKG" --quotes=none lsync.pod      >lsync.8
	pod2man --section=8 --center="OpenPKG" --release="RPM-CONFIG(8)" --date="OpenPKG" --quotes=none rpm-config.pod >rpm-config.8
	pod2man --section=8 --center="OpenPKG" --release="UUID(8)"       --date="OpenPKG" --quotes=none uuid.pod       >uuid.8
	pod2man --section=8 --center="OpenPKG" --release="RELEASE(8)"    --date="OpenPKG" --quotes=none release.pod    >release.8
	pod2man --section=8 --center="OpenPKG" --release="BUILD(8)"      --date="OpenPKG" --quotes=none build.pod      >build.8
	pod2man --section=8 --center="OpenPKG" --release="INDEX(8)"      --date="OpenPKG" --quotes=none index.pod      >index.8
	pod2man --section=8 --center="OpenPKG" --release="SEARCH(8)"     --date="OpenPKG" --quotes=none search.pod     >search.8
	pod2man --section=8 --center="OpenPKG" --release="MIRROR(8)"     --date="OpenPKG" --quotes=none mirror.pod     >mirror.8
	pod2man --section=8 --center="OpenPKG" --release="MAKEPROXY(8)"  --date="OpenPKG" --quotes=none makeproxy.pod  >makeproxy.8
	pod2man --section=8 --center="OpenPKG" --release="REGISTER(8)"   --date="OpenPKG" --quotes=none register.pod   >register.8
	pod2man --section=8 --center="OpenPKG" --release="LICENSE(8)"    --date="OpenPKG" --quotes=none license.pod    >license.8
	pod2man --section=8 --center="OpenPKG" --release="DEV(8)"        --date="OpenPKG" --quotes=none dev.pod        >dev.8
	pod2man --section=8 --center="OpenPKG" --release="SEA(8)"        --date="OpenPKG" --quotes=none sea.pod        >sea.8
	pod2man --section=8 --center="OpenPKG" --release="STACK(8)"      --date="OpenPKG" --quotes=none stack.pod      >stack.8

##
##  All-In-One Steps
##

bootstrap: build-src-sh build-bin-sh install-bin-sh

update: build-bin-rpm install-bin-rpm

upload: build-src-sh build-src-rpm upload-pkg upload-src

