Makefile 3.51 KB
OBSPROJECT = isv:spb:devel
COPR_PROJECT = softwarepublico/v5
LOCAL_BUILD_DIR = $(CURDIR)/build

# Vagrant environment does not accept links from/to shared folder
ifeq "/vagrant" "$(shell ls -1d /vagrant 2>/dev/null)"
LOCAL_BUILD_DIR = /home/vagrant/rpmbuild
endif

#############################################################################

packages = $(shell basename -s .spec */*.spec)
obsdir = .obs

-include .config.mk

all:
	@echo "Usage:"
	@echo
	@echo '$$ make $${pkg}-build      builds package $${pkg} locally'
	@echo '$$ make $${pkg}-build-src  builds SRPM package $${pkg} locally'
	@echo '$$ make $${pkg}-upload     uploads package $${pkg} to Copr'
	@echo
	@echo '$${pkg} can be one of: $(packages)'
	@echo
	@echo 'Operations on all packages:'
	@echo
	@echo '$$ make build-all          builds all packages locally'
	@echo
	@echo
	@echo 'Working with OBS (deprecated):'
	@echo
	@echo '$$ make $${pkg}-checkout-obs   checkout $${pkg}'
	@echo '$$ make $${pkg}-upload-obs     uploads package $${pkg}'
	@echo '$$ make $${pkg}-diff-obs       diff from OBS to git for package $${pkg}'
	@echo
	@echo Use OBSPROJECT=project:name to control where to upload to.
	@echo '(currently: $(OBSPROJECT))'. Example:
	@echo
	@echo \ \ \ \ $$ make colab-upload-obs OBSPROJECT=isv:spb:v3
	@echo
	@echo 'Operations on all packages:'
	@echo
	@echo '$$ make diff-obs               diff of all packages from OBS to git'
	@echo '$$ make status-obs|st-obs      diffstat of all packages from OBS to git'
	@echo '$$ make checkout-all-obs       checks out all packages from OBS'

# Local
build_packages = $(patsubst %, %-build, $(packages))
build_src_packages = $(patsubst %, %-build-src, $(packages))

# Copr
upload_packages = $(patsubst %, %-upload, $(packages))

# OBS
checkout_packages_obs = $(patsubst %, %-checkout-obs, $(packages))
upload_packages_obs = $(patsubst %, %-upload-obs, $(packages))
diff_packages_obs = $(patsubst %, %-diff-obs, $(packages))

.PHONY: $(build_packages) $(checkout_packages_obs) $(upload_packages_obs) $(diff_packages_obs) copr-cli

### Targets

build-all: $(build_packages)

$(build_packages): %-build : %
	mkdir -p $(LOCAL_BUILD_DIR)/SOURCES
	cp $*/*.tar.* $(LOCAL_BUILD_DIR)/SOURCES/
	cp $*/*.patch $(LOCAL_BUILD_DIR)/SOURCES/ || true
	cd $* && $(BUILD_PREFIX) rpmbuild --define "_topdir $(LOCAL_BUILD_DIR)" -bb $*.spec

$(build_src_packages): %-build-src : %
	mkdir -p $(LOCAL_BUILD_DIR)/SOURCES
	cp $*/*.tar.* $(LOCAL_BUILD_DIR)/SOURCES/
	cp $*/*.patch $(LOCAL_BUILD_DIR)/SOURCES/ || true
	rm -f $(LOCAL_BUILD_DIR)/SRPMS/$*-*.src.rpm
	cd $* && $(BUILD_PREFIX) rpmbuild --define "_topdir $(LOCAL_BUILD_DIR)" -bs $*.spec --nodeps

$(upload_packages): %-upload : %-build-src % copr-cli
	copr-cli build $(COPR_PROJECT) $(LOCAL_BUILD_DIR)/SRPMS/$*-*.src.rpm --nowait

### OBS targets (deprecated)

checkout-all-obs: $(checkout_packages_obs)

$(checkout_packages_obs): %-checkout-obs : %
	mkdir -p $(obsdir)
	[ -d $(obsdir)/$(OBSPROJECT)/$* ] && \
		(cd $(obsdir)/$(OBSPROJECT)/$* && osc update) || \
		(cd $(obsdir) && osc checkout $(OBSPROJECT) $*)

$(upload_packages_obs): %-upload-obs : %-checkout-obs
	$(MAKE) $*-diff-obs
	@printf "Confirm upload? [y/N] "; read confirm; test "$$confirm" = y -o "$$confirm" = Y
	cp $*/* $(obsdir)/$(OBSPROJECT)/$*
	(cd $(obsdir)/$(OBSPROJECT)/$*; osc add *; osc commit -m "update $*")

$(diff_packages_obs): %-diff-obs : %
	@git diff --no-index $(obsdir)/$(OBSPROJECT)/$*/$*.spec $*/$*.spec || true

diff-obs: $(diff_packages_obs)

status-obs st-obs:
	@$(MAKE) diff | diffstat -C

clean:
	rm -rf */*.tar.*
	rm -rf build/
	rm -rf .virtualenv/