jw-pkg/make/pkg-dist.mk

335 lines
11 KiB
Makefile
Raw Permalink Normal View History

PKG_PROJECT ?= $(FLAVOUR_PREFIX)$(PROJECT)
ifeq ($(filter pkg-%,$(MAKECMDGOALS)),)
# also to be used from proj.mk, typically
BUILD_PROJECT_PACKAGE = false
endif
PKG_VERSION ?= $(DIST_VERSION)
ifneq ($(BUILD_PROJECT_PACKAGE),false)
UPLOAD_SH = $(JWB_SCRIPT_DIR)/upload.sh
LOCAL_MKSPEC_SH ?= $(TOPDIR)/make/mkspec.sh
MKSPEC_SH ?= $(JWB_SCRIPT_DIR)/mkspec-wrapper.sh $(LOCAL_MKSPEC_SH)
FTP_SRC_GROUP ?= $(shell id -g)
FTP_SRC_USER ?= $(shell whoami)
FTP_RUN_GROUP ?= $(shell id -g)
FTP_RUN_USER ?= $(shell whoami)
FTP_DEV_GROUP ?= $(shell id -g)
FTP_DEV_USER ?= $(shell whoami)
FTP_HOST ?= pkg.janware.com
FTP_FILE_MODE ?= 644
FTP_DIR_MODE ?= 755
FTP_HOST_LOGIN ?= root
RELEASES_FILE = $(TOPDIR)/RELEASES$(FLAVOUR_SUFFIX)
RELEASES ?= $(shell $(PKG_SH_EXE) version \
-p $(OS_NAME_VERSION)/$(PKG_ARCH) $(RELEASES_FILE) read | $(SED) 's/-dev//')
PKG_CHECK_VCS_SYNC_BEFORE_RELEASE ?= true
HASH = $(shell $(cvs_files) -z | \
grep -vz "CHANGES\|VERSION\|HASH\|MD5SUMS\|RELEASES" | \
xargs -0 md5sum | md5sum | $(SED) 's/ .*//')
LOCAL_REPO ?= /srv/dav/pub/local/packages/suse/$(OS_NAME_VERSION)
PACKAGE_VCS_FILES ?= false
ifeq ($(PACKAGE_VCS_FILES),true)
PKG_SH_BUILD_OPTS += --include-vcs-files
endif
include $(JWBDIR)/make/tag-defs.mk
2002-07-10 12:24:05 +00:00
DIST_DIR = dist
DIST_SRC_DIR = $(DIST_DIR)/src/$(PKG_PROJECT)-$(PKG_VERSION)
DIST_PCKG_DIR = $(DIST_DIR)/pckg
2002-07-01 18:26:01 +00:00
UPLOAD_SRC_DIR = $(DIST_PCKG_DIR)
PCKG_TAR ?= $(PKG_PROJECT)-$(PKG_VERSION).tar.gz
ifeq ($(PKG_FORMAT),debian)
# too bad: debian Requires: somepkg = 1.2.3 isn't satisfied by somepkg-1.2.3-5
PROJ_QUERY_PKG_REQUIRES_EXTRA_ARGS = --syntax debian
PKG_RUN_X86 ?= $(PKG_PROJECT)-run_$(PKG_VERSION)_$(PKG_ARCH).deb
ifeq ($(CREATE_DEVEL),true)
PKG_DEVEL_X86 ?= $(PKG_PROJECT)-devel_$(PKG_VERSION)_$(PKG_ARCH).deb
endif
else
PKG_RUN_X86 ?= $(PKG_PROJECT)-run-$(PKG_VERSION).$(PKG_ARCH).rpm
ifeq ($(CREATE_DEVEL),true)
PKG_DEVEL_X86 ?= $(PKG_PROJECT)-devel-$(PKG_VERSION).$(PKG_ARCH).rpm
endif
endif
DIST_FILES = $(shell echo $(REMOTE_TARGETS) | $(SED) 's/\b.*\///g; s/:.*\b//g')
GENERATED = $(sort $(shell find . -name '*.in' | \
2012-02-04 10:59:02 +00:00
$(SED) "s/\.in$$//; s%$(DIST_SRC_DIR)%%; s%^[./]*%%"))
ifeq ($(PKG_FORMAT),debian)
PKG_DIR_BINARY = $(TOPDIR)/dist/src
else
ifeq ($(BUILD_USER),root)
PKG_DIR_BUILD = /usr/src/packages
else
PKG_DIR_BUILD = $(HOME)/rpmbuild
endif
PKG_DIR_BINARY = $(PKG_DIR_BUILD)/RPMS/$(PKG_ARCH)
endif
DIST_DIRS = $(DIST_SRC_DIR) $(DIST_PCKG_DIR)
BINARY_PKG = $(DIST_PCKG_DIR)/$(PKG_RUN_X86)
ifeq ($(CREATE_DEVEL),true)
BINARY_PKG += $(DIST_PCKG_DIR)/$(PKG_DEVEL_X86)
endif
PKG_REQUIRES_BUILD += $(call proj_query, pkg-requires --dont-expand-version-macros $(PROJ_QUERY_PKG_REQUIRES_EXTRA_ARGS) build $(PROJECT))
PKG_REQUIRES_RUN += $(call proj_query, pkg-requires --dont-expand-version-macros $(PROJ_QUERY_PKG_REQUIRES_EXTRA_ARGS) run $(PROJECT))
PKG_REQUIRES_DEVEL += $(call proj_query, pkg-requires --dont-expand-version-macros $(PROJ_QUERY_PKG_REQUIRES_EXTRA_ARGS) devel $(PROJECT))
PKG_CONFLICTS_RUN += $(call proj_query, pkg-conflicts --dont-expand-version-macros $(PROJ_QUERY_PKG_CONFLICTS_EXTRA_ARGS) run $(PROJECT))
PKG_CONFLICTS_DEVEL += $(call proj_query, pkg-conflicts --dont-expand-version-macros $(PROJ_QUERY_PKG_CONFLICTS_EXTRA_ARGS) devel $(PROJECT))
PKG_PROVIDES_RUN += $(call proj_query, pkg-provides --dont-expand-version-macros $(PROJ_QUERY_PKG_PROVIDES_EXTRA_ARGS) run $(PROJECT))
PKG_PROVIDES_DEVEL += $(call proj_query, pkg-provides --dont-expand-version-macros $(PROJ_QUERY_PKG_PROVIDES_EXTRA_ARGS) devel $(PROJECT))
PKG_UPLOAD_OS_NAME = $(shell echo $(OS_NAME_VERSION) | sed 's/-.*//')
PKG_UPLOAD_OS_VERSION = $(shell echo $(OS_NAME_VERSION) | sed 's/[^-]\+-//')
PKG_UPLOAD_URLPREFIX ?= rsync_ssh://root@pkg.janware.com:/srv/dav/pub/packages/linux/$(PKG_UPLOAD_OS_NAME)/$(PKG_UPLOAD_OS_VERSION)
PKG_UPLOAD_USER ?= $(shell id -un)
PKG_UPLOAD_GROUP ?= $(shell id -gn)
PKG_UPLOAD_FILE_ATTRIB ?= 644:755:$(PKG_UPLOAD_USER).$(PKG_UPLOAD_GROUP)
unexport PKG_VERSION VERSION DIST_SRC_DIR
include $(JWBDIR)/make/tag-rules.mk
include $(JWBDIR)/make/upload-rules.mk
PKG_SH = $(PKG_SH_EXE) \
-N $(PKG_PROJECT) -P $(PROJECT) \
-R "$(PKG_REQUIRES_RUN)" -D "$(PKG_REQUIRES_DEVEL)" \
-X "$(PKG_CONFLICTS_RUN)" -Y "$(PKG_CONFLICTS_DEVEL)" \
--provides-run "$(PKG_PROVIDES_RUN)" --provides-devel "$(PKG_PROVIDES_DEVEL)" \
-m $(JWB_SCRIPT_DIR) -a $(PKG_ARCH) -p $(DIST_PCKG_DIR) -F $(PKG_FORMAT) \
-B $(PKG_UPLOAD_URLPREFIX) -A $(PKG_UPLOAD_FILE_ATTRIB)
all:
install:
clean: pkg-clean
distclean: pkg-clean
pkg-tgz: $(DIST_PCKG_DIR)/$(PCKG_TAR)
ftag: ftag.dist
pkg-upload-stable: pkg-upload-STABLE.dist
pkg-upload-rc: pkg-upload-RC.dist
2007-08-23 17:55:13 +00:00
pkg-clean: clean.rpm
pkg-uninstall: config pkguninstall.dist
pkg-build: pkg-build.dist
pkg-install: config pkg-build pkginstall.dist
pkg-build-install: pkg-build pkg-install
pkg-reinstall: pkg-uninstall pkg-install
pkg-rebuild: pkg-clean pkg-build
pkg-update: pkgupdate.dist
pkg-upload-local: pkg-upload-local.dist
clean.rpm:
$(RM) -rf $(DIST_DIR) *.dist make/.cache-project.mk
pkg-build.dist: $(VERSION_FILE)
$(PKG_SH) build $(PKG_SH_BUILD_OPTS)
touch $@
pkg-update-local-repo:
for a in src i386 i586 i686 x86_64; do \
if ls dist/*/*.$$a.rpm >/dev/null 2>&1; then \
sudo install -m 644 dist/pckg/*.$$a.rpm $(LOCAL_REPO)/rpm/$$a/ ;\
fi ;\
done
sudo sh $(LOCAL_REPO)/update.sh
src-dir.dist:
2002-07-01 18:26:01 +00:00
mkdir -p $(DIST_SRC_DIR)
touch $@
pkginstall.dist: pkg-build.dist
$(Q)set -e; for p in $(BINARY_PKG); do \
if ! $(RPM) -q `basename $$p | $(SED) "s/[._]$(PKG_ARCH)\.$(PKG_SUFFIX)//; s/_\([0-9.-]\+\)$$/-\1/"` > /dev/null 2>&1 ; then \
echo + installing $$p ;\
sudo $(RPM) -U $$(realpath $$p); \
fi; \
done
2004-11-29 21:56:13 +00:00
touch $@
pkguninstall.dist:
$(Q)set -e; for s in devel run; do \
if $(RPM) -q $(PKG_PROJECT)-$$s > /dev/null 2>&1 ; then \
echo + removing $(PKG_PROJECT)-$$s ;\
sudo $(RPM) -e $(PKG_PROJECT)-$$s --nodeps --allmatches; \
fi; \
done
$(RM) -f pkginstall.dist
upload-%.dist: %_$(PROJECT_CAPNAME)_RPM_RUN_I386
cvs commit $<
$(UPLOAD_SH) $< $(REMOTE_TARGET_PREFIX)$(PCKG_ROOT)/$<:640:750:$(FTP_RUN_USER).$(FTP_RUN_GROUP)
touch $@
update-repo.dist: upload.dist
2007-12-19 20:52:10 +00:00
$(CVS_RSH) -l root $(FTP_HOST) $(UPDATE_REPO_SH)
touch $@
# ------ hash stuff
ifeq ($(wildcard $(TOPDIR)/.git),)
SCM_COMMIT = cvs commit
SCM_ADD = cvs add
SCM_PUSH =
SCM_PULL = cvs update -dP
define check_scm_sync
echo + checking cvs ;\
$(SCM_PULL) ;\
cvs status > cvs_status.tmp 2>&1 ;\
if [ $$? != 0 ]; then \
2012-02-04 11:06:22 +00:00
$(CAT) cvs_status.tmp ;\
echo -e "\n======== cvs status failed, giving up." >&2 ;\
exit 1 ;\
fi ;\
if grep -qi "locally modified" cvs_status.tmp; then \
echo + cvs copy has locally modified files, giving up >&2 ;\
exit 1 ;\
fi ;\
if grep -qi "needs" cvs_status.tmp; then \
echo + cvs copy is out-of-date, giving up >&2 ;\
exit 1 ;\
fi
endef
else
SCM_COMMIT = git commit
SCM_ADD = git add
SCM_PUSH = git push
SCM_PULL = make git-get-maintainer
define check_scm_sync
echo + checking git ;\
$(SCM_PULL) || {\
echo "$(SCM_PULL) failed, giving up" ;\
exit 1 ;\
} ;\
git status -s > git_status.tmp 2>&1 ;\
if [ $$? != 0 ]; then \
$(CAT) git_status.tmp ;\
echo -e "\n======== git status failed, giving up." >&2 ;\
exit 1 ;\
fi ;\
if grep -qi "^ *M " git_status.tmp; then \
echo + git copy has locally modified files, giving up >&2 ;\
exit 1 ;\
fi
endef
endif
define increase_build_number
if [ "$(PKG_CHECK_VCS_SYNC_BEFORE_RELEASE)" = true ]; then \
$(check_scm_sync) ;\
fi ;\
if [ "$(RELEASES)" != "$(PKG_VERSION)" ]; then \
echo "+ no need to increase build number of $(PKG_VERSION), last rpm has $(RELEASES)" ;\
exit 0 ;\
fi ;\
2007-08-28 16:16:34 +00:00
echo -n "+ increasing build number to " ;\
echo $(MAJOR_MINOR_RELEASE)-$(shell expr $(BUILD_NUMBER) + 1)-dev | tee VERSION ;\
echo $(HASH) > HASH ;\
if ! /bin/bash $(JWB_SCRIPT_DIR)/scm.sh ls-files | grep -q '^HASH$$'; then \
$(SCM_ADD) HASH ;\
fi ;\
$(SCM_COMMIT) -m "$(MAJOR_MINOR_RELEASE)-$(shell expr $(BUILD_NUMBER) + 1)-dev" HASH VERSION
$(SCM_PUSH)
endef
define check_reinstall_old
(true $(addprefix && test -f ,$(DIST_PCKG_RPM)) && make pkg-uninstall && make pkg-install)
endef
md5:
echo $(HASH) > HASH
pkg-next-build:
$(Q)$(increase_build_number)
try-reinstall:
$(check_reinstall_old)
pkg-update-release:
$(Q)if [ "`$(CAT) HASH`" != "$(HASH)" ]; then \
echo + source was modified ;\
$(increase_build_number) ;\
elif ! $(check_reinstall_old); then \
echo "+ old rpm is uninstallable" ;\
$(increase_build_number) ;\
fi
pkg-check-release:
$(Q)if [ "`$(CAT) HASH`" != "$(HASH)" ]; then \
echo + source was modified ;\
else \
echo + source is unmodified ;\
fi
pkg-release: pkg-release-reinstall
pkg-rebuild-reinstall: pkg-clean pkg-build pkg-reinstall
pkg-release-update-version:
$(PKG_SH) update-version
pkg-release-reinstall: get-maintainer get-official pkg-release-update-version
$(PKG_SH) release $(PKG_SH_BUILD_OPTS)
ifneq ($(TARGET_HOST),)
pkg-remote-install:
scp $(addprefix dist/pckg/,$(PKG_RUN_X86) $(PKG_DEVEL_X86)) root@$(TARGET_HOST):/tmp/
ssh -l root $(TARGET_HOST) rpm -U --force $(addprefix /tmp/,$(PKG_RUN_X86) $(PKG_DEVEL_X86))
pkg-remote-install-run:
scp $(addprefix dist/pckg/,$(PKG_RUN_X86)) root@$(TARGET_HOST):/tmp/
ssh -l root $(TARGET_HOST) rpm -U --force $(addprefix /tmp/,$(PKG_RUN_X86))
ssh-remote:
ssh -l root $(TARGET_HOST)
endif
pkg-requires:
@echo "PKG_REQUIRES_BUILD = $(PKG_REQUIRES_BUILD)"
@echo "PKG_REQUIRES_RUN = $(PKG_REQUIRES_RUN)"
@echo "PKG_REQUIRES_DEVEL = $(PKG_REQUIRES_DEVEL)"
@echo "PKG_CONFLICTS_RUN = $(PKG_CONFLICTS_RUN)"
@echo "PKG_CONFLICTS_DEVEL = $(PKG_CONFLICTS_DEVEL)"
@echo "PKG_PROVIDES_RUN = $(PKG_PROVIDES_RUN)"
@echo "PKG_PROVIDES_DEVEL = $(PKG_PROVIDES_DEVEL)"
else # ifneq ($(BUILD_PROJECT_PACKAGE),false)
pkg-build \
pkg-check-release \
pkg-clean \
pkg-install \
pkg-next-build \
pkg-rebuild \
pkg-rebuild-reinstall \
pkg-reinstall \
pkg-release \
pkg-release-reinstall \
pkg-remote-install \
pkg-remote-install-run \
pkg-uninstall \
pkg-update \
pkg-update-local-repo \
pkg-update-release \
pkg-upload-local \
pkg-upload-local.dist \
pkg-upload-rc \
pkg-upload-stable:
@echo "This project doesn't support building packages, ignoring request to $(patsubst pkg-%,%,$@)."
endif # ifneq ($(BUILD_PROJECT_PACKAGE),false)
echo: echo-pkg
echo-dist:
@echo "TARGET_HOST = $(TARGET_HOST)"