+
+.PHONY: clean
+clean:
+ rm -rf $(BUILD_DIR)
+
+.PHONY: clean-cache
+clean-cache:
+ rm -rf $(CACHE_DIR)
+
+.PHONY: images
+images: undercloud overcloud-full overcloud-opendaylight overcloud-onos
+
+.PHONY: rpms
+rpms: common-rpm undercloud-rpm opendaylight-rpm onos-rpm
+
+.PHONY: rpms-check
+rpms-check: release-rpm-check common-rpm-check undercloud-rpm-check opendaylight-rpm-check onos-rpm-check
+
+.PHONY: rpms-clean
+rpms-clean:
+ rm -rf $(BUILD_DIR)/noarch
+ rm -rf $(BUILD_DIR)/BUILDROOT
+
+$(BUILD_DIR)/opnfv-apex-release.tar.gz:
+ mkdir -p $(BUILD_DIR)
+ pushd ../ && git archive --format=tar.gz --prefix=opnfv-apex-release-$(RELRPMVERS)/ HEAD > $(BUILD_DIR)/opnfv-apex-release.tar.gz
+
+.PHONY: release-rpm-check
+release-rpm-check: $(BUILD_DIR)/opnfv-apex-release.tar.gz
+ rpmbuild --clean -bi -bl rpm_specs/opnfv-apex-release.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+.PHONY: release-rpm
+release-rpm: $(BUILD_DIR)/opnfv-apex-release.tar.gz $(RPMREL)
+
+$(RPMREL):
+ @echo "Building the Apex Release RPM"
+ # build the release RPM
+ rpmbuild --clean -ba rpm_specs/opnfv-apex-release.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+$(BUILD_DIR)/opnfv-apex-common.tar.gz:
+ pushd ../ && git archive --format=tar.gz --prefix=opnfv-apex-common-$(RPMVERS)/ HEAD > $(BUILD_DIR)/opnfv-apex-common.tar.gz
+
+.PHONY: common-rpm-check
+common-rpm-check: $(BUILD_DIR)/opnfv-apex-common.tar.gz
+ rpmbuild --clean -bi -bl rpm_specs/opnfv-apex-common.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+.PHONY: common-rpm
+common-rpm: $(BUILD_DIR)/opnfv-apex-common.tar.gz $(RPMCOM)
+
+$(RPMCOM):
+ @echo "Building the Apex Common RPM"
+ # build the common RPM
+ rpmbuild --clean -ba rpm_specs/opnfv-apex-common.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+##################
+# PYTHON TESTS #
+##################
+
+.PHONY: python-tests
+python-tests:
+ # clean previous coverage data
+ rm -rf ../tests/.coverage
+ rm -rf ../tests/htmlcov
+ # run nose tests
+ cd ../tests && PYTHONPATH=../lib/python/ nosetests-3.4 . --with-coverage --cover-package apex --cover-package apex_python_utils --cover-html --cover-min-percentage 90
+
+ # generate reports
+ cd ../tests && coverage3 report --include '*lib/python/*' -m
+
+#######################
+# PYTHON PEP8 CHECK #
+#######################
+
+.PHONY: python-pep8-check
+python-pep8-check:
+ pep8 ../lib/python
+ pep8 ../tests
+
+#############
+# YAMLLINT #
+#############
+
+.PHONY: yamllint
+yamllint:
+ @echo "Running yamllint against all .yaml files"
+ cd ../ && yamllint $(shell cd ../ && git ls-tree -r HEAD --name-only | grep 'yaml$$')
+
+##################
+# NETWORKING-VPP #
+##################
+
+$(BUILD_DIR)/python-networking-vpp.tar.gz:
+ @echo "Preparing the networking-vpp RPM prerequisites"
+ git clone $(NETVPP_REPO) $(BUILD_DIR)/python-networking-vpp-$(NETVPP_VERS)
+ tar czf $(BUILD_DIR)/python-networking-vpp.tar.gz -C $(BUILD_DIR) python-networking-vpp-$(NETVPP_VERS)
+
+.PHONY: networking-vpp-rpm
+networking-vpp-rpm: $(BUILD_DIR)/noarch/python-networking-vpp-*.noarch.rpm
+
+$(BUILD_DIR)/noarch/python-networking-vpp-*.noarch.rpm: $(BUILD_DIR)/python-networking-vpp.tar.gz
+ @echo "Building the Networking VPP RPM"
+ rpmbuild --clean -ba --target noarch rpm_specs/networking-vpp.spec $(RPM_DIR_ARGS) -D 'git .git$(NETVPP_COMMIT)'
+
+###############
+# UNDERCLOUD #
+###############
+
+.PHONY: undercloud
+undercloud: $(BUILD_DIR)/undercloud.qcow2
+
+$(BUILD_DIR)/undercloud.qcow2:
+ @echo "Building the Apex Undercloud Image"
+ @./undercloud.sh
+
+$(BUILD_DIR)/opnfv-apex-undercloud.tar.gz: $(BUILD_DIR)/undercloud.qcow2
+ @echo "Preparing the Apex Undercloud RPM prerequisites"
+ pushd ../ && git archive --format=tar --prefix=opnfv-apex-undercloud-$(RPMVERS)/ HEAD > $(BUILD_DIR)/opnfv-apex-undercloud.tar
+ tar -rf $(BUILD_DIR)/opnfv-apex-undercloud.tar \
+ --xform="s:.*undercloud.qcow2:opnfv-apex-undercloud-$(RPMVERS)/build/undercloud.qcow2:" $(BUILD_DIR)/undercloud.qcow2
+ gzip -f $(BUILD_DIR)/opnfv-apex-undercloud.tar
+
+.PHONY: undercloud-rpm-check
+undercloud-rpm-check: $(BUILD_DIR)/opnfv-apex-undercloud.tar.gz
+ rpmbuild --clean -bi -bl rpm_specs/opnfv-apex-undercloud.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+.PHONY: undercloud-rpm
+undercloud-rpm: $(BUILD_DIR)/opnfv-apex-undercloud.tar.gz $(RPMUDR)
+
+$(RPMUDR):
+ @echo "Building the Apex Undercloud RPM"
+ rpmbuild --clean -ba rpm_specs/opnfv-apex-undercloud.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+###############
+# OVERCLOUD #
+###############
+
+.PHONY: overcloud-full
+overcloud-full: $(BUILD_DIR)/overcloud-full.qcow2
+
+$(BUILD_DIR)/overcloud-full.qcow2: $(BUILD_DIR)/noarch/python-networking-vpp-*.noarch.rpm
+ @echo "Building the Apex Base Overcloud Image"
+ @./overcloud-full.sh
+
+###############
+# ODL #
+###############
+
+.PHONY: overcloud-opendaylight
+overcloud-opendaylight: $(BUILD_DIR)/overcloud-full-opendaylight.qcow2
+
+$(BUILD_DIR)/overcloud-full-opendaylight.qcow2: $(BUILD_DIR)/overcloud-full.qcow2
+ @echo "Building the Apex OpenDaylight Overcloud Image"
+ @./overcloud-opendaylight.sh
+
+$(BUILD_DIR)/opnfv-apex.tar.gz: $(BUILD_DIR)/overcloud-full-opendaylight.qcow2
+ tar -czf $(BUILD_DIR)/opnfv-apex.tar.gz --xform="s:.*overcloud-full-opendaylight.qcow2:opnfv-apex-$(RPMVERS)/build/overcloud-full-opendaylight.qcow2:" $(BUILD_DIR)/overcloud-full-opendaylight.qcow2
+
+.PHONY: opendaylight-rpm-check
+opendaylight-rpm-check: $(BUILD_DIR)/opnfv-apex.tar.gz
+ rpmbuild --clean -bi -bl rpm_specs/opnfv-apex.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+.PHONY: opendaylight-rpm
+opendaylight-rpm: $(BUILD_DIR)/opnfv-apex.tar.gz $(RPMODL)
+
+$(RPMODL):
+ @echo "Building the Apex OpenDaylight RPM"
+ # build the overcloud RPM
+ rpmbuild --clean -ba rpm_specs/opnfv-apex.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+###############
+# ONOS #
+###############
+
+.PHONY: overcloud-onos
+overcloud-onos: $(BUILD_DIR)/overcloud-full-onos.qcow2
+
+$(BUILD_DIR)/overcloud-full-onos.qcow2: $(BUILD_DIR)/overcloud-full.qcow2
+ @echo "Building the Apex ONOS Overcloud Image"
+ @./overcloud-onos.sh
+
+$(BUILD_DIR)/opnfv-apex-onos.tar.gz: $(BUILD_DIR)/overcloud-full-onos.qcow2
+ tar -czf $(BUILD_DIR)/opnfv-apex-onos.tar.gz --xform="s:.*overcloud-full-onos.qcow2:opnfv-apex-onos-$(RPMVERS)/build/overcloud-full-onos.qcow2:" $(BUILD_DIR)/overcloud-full-onos.qcow2
+
+.PHONY: onos-rpm-check
+onos-rpm-check: $(BUILD_DIR)/opnfv-apex-onos.tar.gz
+ rpmbuild --clean -bi -bl rpm_specs/opnfv-apex-onos.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+.PHONY: onos-rpm
+onos-rpm: $(BUILD_DIR)/opnfv-apex-onos.tar.gz $(RPMONO)
+
+$(RPMONO):
+ @echo "Building the Apex ONOS RPM"
+ # build the overcloud RPM
+ rpmbuild --clean -ba rpm_specs/opnfv-apex-onos.spec $(RPM_DIR_ARGS) -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+
+###############
+# ISO #
+###############
+
+$(CENTISO):
+ curl $(CENTDNLD) -z $(CENTISO) -o $(CENTISO) --verbose --silent --location
+
+iso-clean:
+ @rm -Rf $(BUILD_DIR)/centos
+ @rm -Rf $(BUILD_DIR)/release
+ @rm -f $(ISO)