blob: 611eb5d6143ea25316b05937b8f2dbe10e8cdf9c [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Implicit targets
SHELL := /bin/bash
# Download
$(BUILD_DIR)/%/.download:
mkdir -p $(@D)
mkdir -p $(DL_DIR)
[ -z "$($(PKG)_TARBALL_SRC)" -o -f $($(PKG)_DOWNLOAD_DST) ] || (cd $(DL_DIR) && curl --retry 5 -# -L -k -o $($(PKG)_TARBALL_DST) $($(PKG)_DOWNLOAD_URL))
touch $@
# Untar and patch
$(BUILD_DIR)/%/.tar:
-rm -rf $(PKG_BUILD_DIR)/tar/
mkdir -p $(PKG_BUILD_DIR)/tar/$($(PKG)_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP)
if [ -n "$($(PKG)_TARBALL_SRC)" ]; then \
cp $($(PKG)_DOWNLOAD_DST) $(PKG_BUILD_DIR)/tar/$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP).orig.tar.gz ;\
tar -C $(PKG_BUILD_DIR)/tar/$($(PKG)_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP) \
--strip-components 1 -xzvf $(PKG_BUILD_DIR)/tar/$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP).orig.tar.gz; \
fi
if [ -f $(BASE_DIR)/bigtop-packages/src/common/$($(PKG)_NAME)/series ]; then \
PATCHES="`cat $(BASE_DIR)/bigtop-packages/src/common/$($(PKG)_NAME)/series`" ;\
elif [ -f $(BASE_DIR)/bigtop-packages/src/common/$($(PKG)_NAME)/patch ]; then \
PATCHES="patch" ;\
else \
PATCHES="/dev/null" ;\
fi ; (cd $(BASE_DIR)/bigtop-packages/src/common/$($(PKG)_NAME); cat $$PATCHES)| \
(cd $(PKG_BUILD_DIR)/tar/$($(PKG)_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP) ; patch -p0)
tar -C $(PKG_BUILD_DIR)/tar -czf $(PKG_BUILD_DIR)/tar/$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP).patched.tar.gz \
$($(PKG)_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP)
touch $@
# Make source RPMs
$(BUILD_DIR)/%/.srpm:
-rm -rf $(PKG_BUILD_DIR)/rpm/
mkdir -p $(PKG_BUILD_DIR)/rpm/
cp -r $(BASE_DIR)/bigtop-packages/src/rpm/$($(PKG)_NAME)/* $(PKG_BUILD_DIR)/rpm/
mkdir -p $(PKG_BUILD_DIR)/rpm/{INSTALL,SOURCES,BUILD,SRPMS}
[ -z "$($(PKG)_TARBALL_SRC)" ] || cp $($(PKG)_DOWNLOAD_DST) $(PKG_BUILD_DIR)/rpm/SOURCES
[ -d $(BASE_DIR)/bigtop-packages/src/common/$($(PKG)_NAME) ] && cp -r $(BASE_DIR)/bigtop-packages/src/common/$($(PKG)_NAME)/* $(PKG_BUILD_DIR)/rpm/SOURCES
PKG_NAME_FOR_PKG=$(subst -,_,$($(PKG)_NAME)); \
rpmbuild --define "_topdir $(PKG_BUILD_DIR)/rpm/" \
--define "$${PKG_NAME_FOR_PKG}_base_version $($(PKG)_BASE_VERSION)" \
--define "$${PKG_NAME_FOR_PKG}_version $($(PKG)_PKG_VERSION)$(BIGTOP_BUILD_STAMP)" \
--define "$${PKG_NAME_FOR_PKG}_release $($(PKG)_RELEASE_VERSION)" \
-bs \
--nodeps \
--buildroot="$(PKG_BUILD_DIR)/rpm/INSTALL" \
$(PKG_BUILD_DIR)/rpm/SPECS/$($(PKG)_NAME).spec
mkdir -p $($(PKG)_OUTPUT_DIR)/
cp $(PKG_BUILD_DIR)/rpm/SRPMS/$($(PKG)_PKG_NAME)-$($(PKG)_PKG_VERSION)$(BIGTOP_BUILD_STAMP)-$($(PKG)_RELEASE_VERSION).src.rpm \
$($(PKG)_OUTPUT_DIR)/
touch $@
# Make binary RPMs
$(BUILD_DIR)/%/.rpm: SRCRPM=$($(PKG)_OUTPUT_DIR)/$($(PKG)_PKG_NAME)-$($(PKG)_PKG_VERSION)$(BIGTOP_BUILD_STAMP)-$($(PKG)_RELEASE_VERSION).src.rpm
$(BUILD_DIR)/%/.rpm:
rpmbuild --define "_topdir $(PKG_BUILD_DIR)/rpm/" \
--define "$($(PKG)_NAME)_base_version $($(PKG)_BASE_VERSION)" \
--define "$($(PKG)_NAME)_version $($(PKG)_PKG_VERSION)$(BIGTOP_BUILD_STAMP)" \
--define "$($(PKG)_NAME)_release $($(PKG)_RELEASE_VERSION)" \
--rebuild $(SRCRPM)
cp -r $(PKG_BUILD_DIR)/rpm/RPMS/*/* $($(PKG)_OUTPUT_DIR)/
touch $@
# Make yum repo
$(BUILD_DIR)/%/.yum: $(BUILD_DIR)/%/.rpm
createrepo -o $(OUTPUT_DIR) $(OUTPUT_DIR)
touch $@
# Make source DEBs
$(BUILD_DIR)/%/.sdeb:
-rm -rf $(PKG_BUILD_DIR)/deb/
mkdir -p $(PKG_BUILD_DIR)/deb/$($(PKG)_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP)
# Only expands the tar if there is a source artifact
if [ -n "$($(PKG)_TARBALL_SRC)" ]; then \
cp $($(PKG)_DOWNLOAD_DST) $(PKG_BUILD_DIR)/deb/$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP).orig.tar.gz ;\
cd $(PKG_BUILD_DIR)/deb/$($(PKG)_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP) && \
tar --strip-components 1 -xvf ../$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP).orig.tar.gz;\
else \
tar -czf $(PKG_BUILD_DIR)/deb/$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP).orig.tar.gz LICENSE ;\
fi
cd $(PKG_BUILD_DIR)/deb/$($(PKG)_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP) && \
cp -r $(BASE_DIR)/bigtop-packages/src/deb/$($(PKG)_NAME) debian && \
cp -r $(BASE_DIR)/bigtop-packages/src/common/$($(PKG)_NAME)/* debian && \
echo -e "version=$(PKG_PKG_VERSION)\ngit.hash=deadbeaf" >> debian/build.properties && \
(echo -e "$($(PKG)_PKG_NAME) ($(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP)-$($(PKG)_RELEASE)) stable; urgency=low\n" && \
echo " Clean build" && \
echo " -- Bigtop <bigtop-dev@incubator.apache.org> "`date +'%a, %d %b %Y %T %z'`) > debian/changelog && \
find debian -name "*.[ex,EX,~]" | xargs rm -f && \
dpkg-buildpackage -uc -us -sa -S
mkdir -p $($(PKG)_OUTPUT_DIR)/
for file in $($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP)-$($(PKG)_RELEASE).dsc \
$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP)-$($(PKG)_RELEASE).diff.gz \
$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP)-$($(PKG)_RELEASE)_source.changes \
$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP).orig.tar.gz ; \
do [ -e $(PKG_BUILD_DIR)/deb/$$file ] && cp $(PKG_BUILD_DIR)/deb/$$file $($(PKG)_OUTPUT_DIR); \
done
touch $@
$(BUILD_DIR)/%/.deb: SRCDEB=$($(PKG)_PKG_NAME)_$($(PKG)_PKG_VERSION)$(BIGTOP_BUILD_STAMP)-$($(PKG)_RELEASE).dsc
$(BUILD_DIR)/%/.deb:
cd $($(PKG)_OUTPUT_DIR) && \
dpkg-source -x $(SRCDEB) && \
cd $($(PKG)_PKG_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP) && \
debuild \
--preserve-envvar PATH \
--preserve-envvar JAVA32_HOME \
--preserve-envvar JAVA64_HOME \
--preserve-envvar JAVA5_HOME \
--preserve-envvar FORREST_HOME \
--preserve-envvar MAVEN3_HOME \
--preserve-envvar MAVEN_OPTS \
--preserve-envvar JAVA_HOME \
--set-envvar=$(PKG)_BASE_VERSION=$($(PKG)_BASE_VERSION) \
--set-envvar=$(PKG)_VERSION=$($(PKG)_PKG_VERSION)$(BIGTOP_BUILD_STAMP) \
--set-envvar=$(PKG)_RELEASE=$($(PKG)_RELEASE_VERSION) \
-uc -us -b
rm -rf $($(PKG)_OUTPUT_DIR)/$($(PKG)_PKG_NAME)-$(PKG_PKG_VERSION)$(BIGTOP_BUILD_STAMP)
touch $@
# Make apt repo
$(BUILD_DIR)/%/.apt: $(BUILD_DIR)/%/.deb
-mkdir -p $(OUTPUT_DIR)/apt/conf
cp $(REPO_DIR)/apt/distributions $(OUTPUT_DIR)/apt/conf
for i in $($(PKG)_OUTPUT_DIR)/$($(PKG)_PKG_NAME)_$(PKG_PKG_VERSION)*.changes ; do reprepro -Vb $(OUTPUT_DIR)/apt include bigtop $$i ; done
touch $@
# Package make function
# $1 is the target prefix, $2 is the variable prefix
define PACKAGE
# The default PKG_NAME will be the target prefix
$(2)_NAME ?= $(1)
# For deb packages, the name of the package itself
$(2)_PKG_NAME ?= $$($(2)_NAME)
# The default PKG_RELEASE will be 1 unless specified
$(2)_RELEASE ?= 1
$(2)_BUILD_DIR = $(BUILD_DIR)/$(1)/
$(2)_OUTPUT_DIR = $(OUTPUT_DIR)/$(1)
$(2)_SOURCE_DIR = $$($(2)_BUILD_DIR)/source
# Download source URL and destination path
$(2)_DOWNLOAD_URL = $($(2)_SITE)/$($(2)_TARBALL_SRC)
$(2)_DOWNLOAD_DST = $(DL_DIR)/$($(2)_TARBALL_DST)
# Define the file stamps
$(2)_TARGET_DL = $$($(2)_BUILD_DIR)/.download
$(2)_TARGET_TAR = $$($(2)_BUILD_DIR)/.tar
$(2)_TARGET_SRPM = $$($(2)_BUILD_DIR)/.srpm
$(2)_TARGET_RPM = $$($(2)_BUILD_DIR)/.rpm
$(2)_TARGET_YUM = $$($(2)_BUILD_DIR)/.yum
$(2)_TARGET_SDEB = $$($(2)_BUILD_DIR)/.sdeb
$(2)_TARGET_DEB = $$($(2)_BUILD_DIR)/.deb
$(2)_TARGET_APT = $$($(2)_BUILD_DIR)/.apt
$(2)_TARGET_RELNOTES = $$($(2)_BUILD_DIR)/.relnotes
# We download target when the source is not in the download directory
$(1)-download: $$($(2)_TARGET_DL)
# Make a patched tarball (patch could be null)
$(1)-tar: $(1)-download $$($(2)_TARGET_TAR)
# To make srpms, we need to build the package
$(1)-srpm: $(1)-download $$($(2)_TARGET_SRPM)
# To make binary rpms, we need to build source RPMs
$(1)-rpm: $(1)-srpm $$($(2)_TARGET_RPM)
# To make a yum/zypper repo, we need to build binary RPMs
$(1)-yum: $(1)-rpm $$($(2)_TARGET_YUM)
# To make sdebs, we need to build the package
$(1)-sdeb: $(1)-download $$($(2)_TARGET_SDEB)
# To make debs, we need to make source packages
$(1)-deb: $(1)-sdeb $$($(2)_TARGET_DEB)
# To make an apt repo, we need to build binary DEBs
$(1)-apt: $(1)-deb $$($(2)_TARGET_APT)
####
# Helper targets -version -help etc
$(1)-version:
@echo "Base: $$($(2)_BASE_VERSION)"
$(1)-help:
@echo " $(1) [$(1)-version, $(1)-info, $(1)-relnotes,"
@echo " $(1)-srpm, $(1)-rpm]"
@echo " $(1)-sdeb, $(1)-deb]"
$(1)-clean:
rm -rf $(BUILD_DIR)/$(1)
$(1)-info:
@echo "Info for package $(1)"
@echo " Will download from URL: $$($(2)_DOWNLOAD_URL)"
@echo " To destination file: $$($(2)_DOWNLOAD_DST)"
@echo " Then unpack into $$($(2)_SOURCE_DIR)"
@echo
@echo "Patches:"
@echo " BASE_REF: $$($(2)_BASE_REF)"
@echo " BUILD_REF: $$($(2)_BUILD_REF)"
@echo
@echo "Version: $$($(2)_BASE_VERSION)"
@echo
@echo "Stamp status:"
@for mystamp in DL PREP PATCH BUILD SRPM RPM SDEB DEB RELNOTES;\
do echo -n " $$$$mystamp: " ; \
([ -f $($(1)_$$$$mystamp) ] && echo present || echo not present) ; \
done
# Implicit rules with PKG variable
$$($(2)_TARGET_DL): PKG=$(2)
$$($(2)_TARGET_TAR) $$($(2)_TARGET_APT) $$($(2)_TARGET_RPM) $$($(2)_TARGET_SRPM) $$($(2)_TARGET_SDEB) $$($(2)_TARGET_DEB): PKG=$(2)
$$($(2)_TARGET_TAR) $$($(2)_TARGET_RPM) $$($(2)_TARGET_SRPM) $$($(2)_TARGET_SDEB) $$($(2)_TARGET_DEB): PKG_BASE_VERSION=$$($(2)_BASE_VERSION)
$$($(2)_TARGET_TAR) $$($(2)_TARGET_APT) $$($(2)_TARGET_RPM) $$($(2)_TARGET_SRPM) $$($(2)_TARGET_SDEB) $$($(2)_TARGET_DEB): PKG_PKG_VERSION=$$($(2)_PKG_VERSION)
$$($(2)_TARGET_TAR) $$($(2)_TARGET_RPM) $$($(2)_TARGET_SRPM) $$($(2)_TARGET_SDEB) $$($(2)_TARGET_DEB): PKG_SOURCE_DIR=$$($(2)_SOURCE_DIR)
$$($(2)_TARGET_TAR) $$($(2)_TARGET_RPM) $$($(2)_TARGET_SRPM) $$($(2)_TARGET_SDEB) $$($(2)_TARGET_DEB): PKG_BUILD_DIR=$$($(2)_BUILD_DIR)
TARGETS += $(1)
TARGETS_HELP += $(1)-help
TARGETS_CLEAN += $(1)-clean
TARGETS_SRPM += $(1)-srpm
TARGETS_RPM += $(1)-rpm
TARGETS_SDEB += $(1)-sdeb
TARGETS_DEB += $(1)-deb
TARGETS_YUM += $(1)-yum
TARGETS_APT += $(1)-apt
endef