During a topdir "make all", caching variables is currently not the first thing that happens. Instead, variables are cached as soon as a project recurses into the make subdirectory. That was necessary, because some makefiles were regenerated in the make subdirectory by autoconf, potentially contributing variables that needed to be cached. As of now, autoconf is long gone and this is no longer true. And for some variables, the two step process becomes involved, notably for PYTHONPATH, which coding agents would like to look at from the topdir very early on. This commit moves the .project-cache.mk creation to topdir.mk, and .projects-cache.mk creation to jw-pkg/Makefile to address that. Signed-off-by: Jan Lindemann <jan@janware.com>
335 lines
11 KiB
Makefile
335 lines
11 KiB
Makefile
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
|
|
|
|
DIST_DIR = dist
|
|
DIST_SRC_DIR = $(DIST_DIR)/src/$(PKG_PROJECT)-$(PKG_VERSION)
|
|
DIST_PCKG_DIR = $(DIST_DIR)/pckg
|
|
|
|
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' | \
|
|
$(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
|
|
|
|
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
|
|
|
|
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:
|
|
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
|
|
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
|
|
$(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 \
|
|
$(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 ;\
|
|
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 get-pub 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)"
|
|
|