Initial Creation
This commit is contained in:
parent
8bd3dcbbca
commit
7f21f2436d
6
Makefile
Normal file
6
Makefile
Normal file
@ -0,0 +1,6 @@
|
||||
# lame duck Makefile that exists for the sole purpose of "make clean"
|
||||
|
||||
all:
|
||||
|
||||
clean:
|
||||
@rm -fv *~
|
737
Makefile.common
Normal file
737
Makefile.common
Normal file
@ -0,0 +1,737 @@
|
||||
# -*- Makefile -*-
|
||||
#
|
||||
# Common Makefile for building RPMs
|
||||
# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
|
||||
# Copyright (C) 2004-2005 Red Hat, Inc.
|
||||
# Copyright (C) 2005 Fedora Foundation
|
||||
#
|
||||
# $Id: Makefile.common,v 1.14 2022/06/08 18:44:49 jpp Exp $
|
||||
|
||||
# Define the common dir.
|
||||
# This needs to happen first.
|
||||
define find-common-dir
|
||||
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then echo "$$d"; break ; fi ; done
|
||||
endef
|
||||
COMMON_DIR := $(shell $(find-common-dir))
|
||||
|
||||
# Branch and disttag definitions
|
||||
# These need to happen second.
|
||||
ifndef HEAD_BRANCH
|
||||
HEAD_BRANCH := devel
|
||||
endif
|
||||
BASEDIR := $(shell basename `pwd`)
|
||||
# BRANCH := $(BASEDIR)
|
||||
# Get tag for module - e.g. contribs10 or sme10 from file left by cvs2git conversion script
|
||||
BRANCH := `cat contriborbase`
|
||||
BRANCHINFO = $(shell grep ^$(BRANCH): $(COMMON_DIR)/branches | cut -d: --output-delimiter=" " -f2-)
|
||||
TARGET := $(word 1, $(BRANCHINFO))
|
||||
DIST = $(word 2, $(BRANCHINFO))
|
||||
DISTVAR = $(word 3, $(BRANCHINFO))
|
||||
DISTVAL = $(word 4, $(BRANCHINFO))
|
||||
DISTDEF = $(shell echo $(DIST) | sed -e s/^\\\.//| sed -e s/\\\./_/ )
|
||||
SMEVAL = $(word 5, $(BRANCHINFO))
|
||||
DIST_DEFINES = --define "dist $(DIST)" --define "$(DISTVAR) $(DISTVAL)" --define "$(DISTDEF) 1" --define "sme $(SMEVAL)"
|
||||
|
||||
BUILD_FLAGS ?= $(KOJI_FLAGS)
|
||||
|
||||
LOCALARCH := $(if $(shell grep -i '^BuildArch:.*noarch' $(SPECFILE)), noarch, $(shell uname -m))
|
||||
|
||||
## a base directory where we'll put as much temporary working stuff as we can
|
||||
ifndef WORKDIR
|
||||
WORKDIR := $(shell pwd)
|
||||
endif
|
||||
## of course all this can also be overridden in your RPM macros file,
|
||||
## but this way you can separate your normal RPM setup from your CVS
|
||||
## setup. Override RPM_WITH_DIRS in ~/.cvspkgsrc to avoid the usage of
|
||||
## these variables.
|
||||
SRCRPMDIR ?= $(WORKDIR)
|
||||
BUILDDIR ?= $(WORKDIR)
|
||||
RPMDIR ?= $(WORKDIR)
|
||||
MOCKDIR ?= $(WORKDIR)
|
||||
MOCKCFG ?= smeserver-$(SMEVAL)-$(BUILDARCH)-base
|
||||
## SOURCEDIR is special; it has to match the CVS checkout directory,
|
||||
## because the CVS checkout directory contains the patch files. So it basically
|
||||
## can't be overridden without breaking things. But we leave it a variable
|
||||
## for consistency, and in hopes of convincing it to work sometime.
|
||||
ifndef SOURCEDIR
|
||||
SOURCEDIR := $(shell pwd)
|
||||
endif
|
||||
ifndef SPECDIR
|
||||
SPECDIR := $(shell pwd)
|
||||
endif
|
||||
|
||||
ifndef RPM_DEFINES
|
||||
RPM_DEFINES := --define "_sourcedir $(SOURCEDIR)" \
|
||||
--define "_specdir $(SPECDIR)" \
|
||||
--define "_builddir $(BUILDDIR)" \
|
||||
--define "_srcrpmdir $(SRCRPMDIR)" \
|
||||
--define "_rpmdir $(RPMDIR)" \
|
||||
$(DIST_DEFINES)
|
||||
endif
|
||||
|
||||
# Initialize the variables that we need, but are not defined
|
||||
# the version of the package
|
||||
VER_REL := $(shell rpm $(RPM_DEFINES) $(DIST_DEFINES) -q --qf "%{VERSION} %{RELEASE}\n" --specfile $(SPECFILE)| head -1)
|
||||
ifndef NAME
|
||||
$(error "You can not run this Makefile without having NAME defined")
|
||||
endif
|
||||
ifndef VERSION
|
||||
VERSION := $(word 1, $(VER_REL))
|
||||
endif
|
||||
# the release of the package
|
||||
ifndef RELEASE
|
||||
RELEASE := $(word 2, $(VER_REL))
|
||||
endif
|
||||
# this is used in make patch, maybe make clean eventually.
|
||||
# would be nicer to autodetermine from the spec file...
|
||||
RPM_BUILD_DIR ?= $(BUILDDIR)/$(NAME)-$(VERSION)
|
||||
|
||||
#needed for archivefile rule
|
||||
TREEPATH := $(NAME)-$(VERSION)
|
||||
EXT := $(shell cat $(NAME).spec | grep Source | sed 's/Source: //' | sed -E 's/^([^.]*\.)(.*)$/\2//')
|
||||
TEMPDIR := $(shell mktemp -d)
|
||||
|
||||
|
||||
# default target: just make sure we've got the sources
|
||||
all: sources
|
||||
|
||||
# user specific configuration
|
||||
CVS_EXTRAS_RC := $(shell if test -f $(HOME)/.cvspkgsrc ; then echo $(HOME)/.cvspkgsrc ; fi)
|
||||
ifdef CVS_EXTRAS_RC
|
||||
include $(CVS_EXTRAS_RC)
|
||||
endif
|
||||
|
||||
# The repository and the clients we use for the files
|
||||
REPOSITORY ?= http://buildsys.contribs.org/source
|
||||
UPLOAD_REPOSITORY ?= /build/builds/source
|
||||
|
||||
# We define CURL and WGET in a way that makes if possible to have them
|
||||
# overwritten from the module's Makefiles. Then CLIENT picks CURL, otherwise WGET
|
||||
CURL ?= $(shell if test -f /usr/bin/curl ; then echo "curl -H Pragma: -O -R -S --fail --show-error" ; fi)
|
||||
WGET ?= $(shell if test -f /usr/bin/wget ; then echo "wget -nd -m" ; fi)
|
||||
CLIENT ?= $(if $(CURL),$(CURL),$(if $(WGET),$(WGET)))
|
||||
PLAGUE_CLIENT ?= $(shell which plague-client 2>/dev/null)
|
||||
BUILD_CLIENT ?= $(shell which koji 2>/dev/null)
|
||||
BODHI_CLIENT ?= $(shell which bodhi 2>/dev/null)
|
||||
|
||||
# RPM with all the overrides in place; you can override this in your
|
||||
# .cvspkgsrc also, to use a default rpm setup
|
||||
# the rpm build command line
|
||||
ifndef RPM
|
||||
RPM := rpmbuild
|
||||
endif
|
||||
ifndef RPM_WITH_DIRS
|
||||
RPM_WITH_DIRS = $(RPM) $(RPM_DEFINES)
|
||||
endif
|
||||
|
||||
# CVS-safe version/release -- a package name like 4Suite screws things
|
||||
# up, so we have to remove the leaving digits from the name
|
||||
TAG_NAME := $(shell echo $(NAME) | sed -e s/\\\./_/g -e s/^[0-9]\\\+//g)
|
||||
TAG_VERSION := $(shell echo $(VERSION) | sed s/\\\./_/g)
|
||||
TAG_RELEASE := $(shell echo $(RELEASE) | sed s/\\\./_/g)
|
||||
|
||||
# tag to export, defaulting to current tag in the spec file
|
||||
TAG?=$(TAG_NAME)-$(TAG_VERSION)-$(TAG_RELEASE)
|
||||
|
||||
# where to cvs export temporarily
|
||||
TMPCVS := $(WORKDIR)/cvs-$(TAG)
|
||||
|
||||
# source file basenames
|
||||
SOURCEFILES := $(shell cat sources 2>/dev/null | awk '{ print $$2 }')
|
||||
# full path to source files
|
||||
FULLSOURCEFILES := $(addprefix $(SOURCEDIR)/,$(SOURCEFILES))
|
||||
|
||||
# retrieve the stored md5 sum for a source download
|
||||
define get_sources_md5
|
||||
$(shell cat sources 2>/dev/null | while read m f ; do if test "$$f" = "$@" ; then echo $$m ; break ; fi ; done)
|
||||
endef
|
||||
|
||||
# list the possible targets for valid arches
|
||||
ARCHES = noarch i386 i586 i686 x86_64 # ia64 s390 s390x ppc ppc64 pseries ppc64pseries iseries ppc64iseries athlon alpha alphaev6 sparc sparc64 sparcv9 sparcv9v sparc64v i164 mac sh mips geode
|
||||
|
||||
# for the modules that do different "make prep" depending on what arch we build for
|
||||
PREP_ARCHES = $(addprefix prep-,$(ARCHES))
|
||||
|
||||
## list all our bogus targets
|
||||
.PHONY :: $(ARCHES) commit sources uploadsource upload export check build-check plague koji build cvsurl chain-build test-srpm srpm tag force-tag verrel new clean patch prep compile install install-short compile-short FORCE local scratch-build scratch-build-%
|
||||
|
||||
# The TARGETS define is meant for local module targets that should be
|
||||
# made in addition to the SOURCEFILES whenever needed
|
||||
TARGETS ?=
|
||||
|
||||
# default target - retrieve the sources and make the module specific targets
|
||||
sources: $(SOURCEFILES) $(TARGETS)
|
||||
|
||||
# Retrieve the sources we do not have in CVS
|
||||
$(SOURCEFILES): #FORCE
|
||||
@mkdir -p $(SOURCEDIR)
|
||||
@echo "Downloading $@..."
|
||||
@for i in `find ../ -maxdepth 2 -name "$@"`; do \
|
||||
if test "$$(md5sum $$i | awk '{print $$1}')" = "$(get_sources_md5)" ; then \
|
||||
echo "Copying from $$i" ; \
|
||||
ln $$i $@ ; \
|
||||
break ; \
|
||||
fi ; \
|
||||
done
|
||||
@if [ -z "$(CLIENT)" ]; then echo "Can't download, need curl or wget installed." ; exit 1; fi
|
||||
@if [ ! -e "$@" ] ; then $(CLIENT) $(REPOSITORY)/$(get_sources_md5)/$@ ; fi
|
||||
@if [ ! -e "$@" ] ; then echo "Could not download source file: $@ does not exist" ; exit 1 ; fi
|
||||
@if test "$$(md5sum $@ | awk '{print $$1}')" != "$(get_sources_md5)" ; then \
|
||||
echo "md5sum of the downloaded $@ does not match the one from 'sources' file" ; \
|
||||
echo "Local copy: $$(md5sum $@)" ; \
|
||||
echo "In sources: $$(grep $@ sources)" ; \
|
||||
exit 1 ; \
|
||||
else \
|
||||
ls -l $@ ; \
|
||||
fi
|
||||
|
||||
# Support for uploading stuff into the repository.
|
||||
ifdef FILES
|
||||
|
||||
upload-file = echo -F "name=$(NAME)" -F "md5sum=$${m%%[[:space:]]*}" -F "file=@$$f" $(UPLOAD_REPOSITORY)
|
||||
|
||||
define upload-request
|
||||
echo "Checking : $$b on $(UPLOAD_REPOSITORY)..." ; \
|
||||
if test -f "$(UPLOAD_REPOSITORY)/$${m%%[[:space:]]*}/$$f"; then \
|
||||
echo "This file ($$m) is already uploaded" ; \
|
||||
else \
|
||||
echo "Uploading: $$b to $(UPLOAD_REPOSITORY)..." ; \
|
||||
mkdir -p "$(UPLOAD_REPOSITORY)/$${m%%[[:space:]]*}" || exit 1 ; \
|
||||
ln -f "$$f" "$(UPLOAD_REPOSITORY)/$${m%%[[:space:]]*}/$$f" 2> /dev/null || cp -f "$$f" "$(UPLOAD_REPOSITORY)/$${m%%[[:space:]]*}/$$f" || exit 1 ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# Upload the FILES, adding to the ./sources manifest
|
||||
upload: $(FILES)
|
||||
@if ! test -f ./sources ; then touch ./sources ; fi
|
||||
@if ! test -f ./.cvsignore ; then touch ./.cvsignore ; fi
|
||||
@for f in $(FILES); do \
|
||||
if ! test -s $$f ; then echo "SKIPPING EMPTY FILE: $$f" ; continue ; fi ; \
|
||||
b="$$(basename $$f)" ; \
|
||||
m="$$(cd $$(dirname $$f) && md5sum $$b)" ; \
|
||||
if test "$$m" = "$$(grep $$b sources)" ; then \
|
||||
echo "ERROR: file $$f is already listed in the sources file..." ; \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
chmod +r $$f ; \
|
||||
echo ; $(upload-request) ; echo ; \
|
||||
if test -z "$$(egrep ""[[:space:]]$$b$$"" sources)" ; then \
|
||||
echo "$$m" >> sources ; \
|
||||
else \
|
||||
egrep -v "[[:space:]]$$b$$" sources > sources.new ; \
|
||||
echo "$$m" >> sources.new ; \
|
||||
mv sources.new sources ; \
|
||||
fi ; \
|
||||
if test -z "$$(egrep ""^$$b$$"" .cvsignore)" ; then \
|
||||
echo $$b >> .cvsignore ; \
|
||||
fi \
|
||||
done
|
||||
@if grep "^/sources/" CVS/Entries >/dev/null; then true ; else cvs -Q add sources; fi
|
||||
@echo "Source upload succeeded. Don't forget to commit the new ./sources file"
|
||||
@cvs update sources .cvsignore
|
||||
|
||||
# Upload FILES and recreate the ./sources file to include only these FILES
|
||||
new-source new-sources: $(FILES)
|
||||
@rm -f sources && touch sources
|
||||
@rm -f .cvsignore && touch .cvsignore
|
||||
@for f in $(FILES); do \
|
||||
if ! test -s $$f ; then echo "SKIPPING EMPTY FILE: $$f" ; continue ; fi ; \
|
||||
b="$$(basename $$f)" ; \
|
||||
m="$$(cd $$(dirname $$f) && md5sum $$b)" ; \
|
||||
chmod +r $$f ; \
|
||||
echo ; $(upload-request) ; echo ; \
|
||||
echo "$$m" >> sources ; \
|
||||
echo "$$b" >> .cvsignore ; \
|
||||
done
|
||||
@if grep "^/sources/" CVS/Entries >/dev/null; then true ; else cvs -Q add sources; fi
|
||||
@echo "Source upload succeeded. Don't forget to commit the new ./sources file"
|
||||
@cvs update sources .cvsignore
|
||||
endif
|
||||
|
||||
# allow overriding buildarch so you can do, say, an i386 build on x86_64
|
||||
ifndef BUILDARCH
|
||||
BUILDARCH := $(shell rpm --eval "%{_arch}")
|
||||
endif
|
||||
|
||||
# test build in mock
|
||||
mockbuild : srpm
|
||||
mock $(MOCKARGS) -r $(MOCKCFG) --resultdir=$(MOCKDIR)/$(TAG) rebuild $(SRCRPMDIR)/$(NAME)-$(VERSION)-$(RELEASE).src.rpm
|
||||
|
||||
# check the build with rpmlint
|
||||
lint:
|
||||
@test -e $(NAME)-$(VERSION)-$(RELEASE).src.rpm || (echo "run 'make local' first" ; exit 1 )
|
||||
rpmlint $(NAME)-$(VERSION)-$(RELEASE).src.rpm $(LOCALARCH)/*-$(VERSION)-$(RELEASE).$(LOCALARCH).rpm
|
||||
|
||||
# build for a particular arch
|
||||
$(ARCHES) : sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) --target $@ -ba $(SPECFILE) 2>&1 | tee .build-$(VERSION)-$(RELEASE).log ; exit $${PIPESTATUS[0]}
|
||||
|
||||
# empty target to force checking of md5sums in FULLSOURCEFILES
|
||||
FORCE:
|
||||
|
||||
# build whatever's appropriate for the local architecture
|
||||
local: $(LOCALARCH)
|
||||
|
||||
# attempt to apply all the patches, optionally only for a particular arch
|
||||
ifdef PREPARCH
|
||||
prep: sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) --nodeps -bp --target $(PREPARCH) $(SPECFILE)
|
||||
else
|
||||
prep: sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) --nodeps -bp $(SPECFILE)
|
||||
endif
|
||||
|
||||
# this allows for make prep-i686, make prep-ppc64, etc
|
||||
prep-% : Makefile
|
||||
$(MAKE) prep PREPARCH=$*
|
||||
|
||||
compile: sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) -bc $(SPECFILE)
|
||||
|
||||
install: sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) -bi $(SPECFILE)
|
||||
|
||||
compile-short: sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) --nodeps --short-circuit -bc $(SPECFILE)
|
||||
|
||||
install-short: sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) --nodeps --short-circuit -bi $(SPECFILE)
|
||||
|
||||
CVS_ROOT := $(shell if [ -f CVS/Root ] ; then cat CVS/Root ; fi)
|
||||
CVS_REPOSITORY := $(shell if [ -f CVS/Repository ] ; then cat CVS/Repository ; fi)
|
||||
CVS_URL := cvs://shell.koozali.org/cvs/smecontribs?$(CVS_REPOSITORY)\#$(TAG)
|
||||
|
||||
## create a clean exported copy in $(TMPCVS)
|
||||
export:: sources
|
||||
@mkdir -p $(WORKDIR)
|
||||
/bin/rm -rf $(TMPCVS)
|
||||
@if test -z "$(TAG)" ; then echo "Must specify a tag to check out" ; exit 1; fi
|
||||
@mkdir -p $(TMPCVS)
|
||||
@cd $(TMPCVS) && \
|
||||
cvs -Q -d $(CVS_ROOT) export -r$(TAG) -d $(NAME) $(CVS_REPOSITORY) && \
|
||||
cvs -Q -d $(CVS_ROOT) export -rHEAD common
|
||||
@if [ -n "$(FULLSOURCEFILES)" ]; then ln -f $(FULLSOURCEFILES) $(TMPCVS)/$(NAME) 2> /dev/null || cp -f $(FULLSOURCEFILES) $(TMPCVS)/$(NAME) ; fi
|
||||
@echo "Exported $(TMPCVS)/$(NAME)"
|
||||
|
||||
## build a test-srpm and see if it will -bp on all arches
|
||||
# XXX: I am not sure exactly what this is supposed to really do, since the
|
||||
# query format returns (none) most of the time, and that is not
|
||||
# handled --gafton
|
||||
check: test-srpm
|
||||
@archs=`rpm -qp $(SRCRPMDIR)/$(NAME)-$(VERSION)-$(RELEASE).src.rpm --qf "[%{EXCLUSIVEARCH}\n]" | egrep -v "(i586)|(i686)|(athlon)"` ;\
|
||||
if test -z "$$archs"; then archs=noarch; fi ; \
|
||||
echo "Checking arches: $$archs" ; \
|
||||
for arch in $$archs; do \
|
||||
echo "Checking $$arch..."; \
|
||||
if ! $(RPM_WITH_DIRS) -bp --target $$arch $(SPECFILE); then \
|
||||
echo "*** make prep failed for $$arch"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
done;
|
||||
|
||||
## use this to build an srpm locally
|
||||
ifneq (, $(filter contribs7 contribs8 contribs9, $(BRANCH)))
|
||||
srpm: sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) $(DIST_DEFINES) --define _source_filedigest_algorithm=md5 --nodeps -bs $(SPECFILE)
|
||||
else
|
||||
srpm: sources $(TARGETS)
|
||||
$(RPM_WITH_DIRS) $(DIST_DEFINES) --nodeps -bs $(SPECFILE)
|
||||
endif
|
||||
|
||||
test-srpm: srpm
|
||||
|
||||
# Create the tar file used to transport the source tree
|
||||
archivefile:
|
||||
@echo "Making archive $(TREEPATH).$(EXT)"
|
||||
@echo "TEMPDIR:$(TEMPDIR)"
|
||||
mkdir -p $(TEMPDIR)/$(TREEPATH)
|
||||
cp -r root $(TEMPDIR)/$(TREEPATH)/
|
||||
cp createlinks $(TEMPDIR)/$(TREEPATH)/
|
||||
rm -f $TREEPATH.$EXT*
|
||||
tar -czvf $(TREEPATH).$(EXT) -C $(TEMPDIR)/$(TREEPATH) .
|
||||
find $(TEMPDIR) -delete
|
||||
|
||||
verrel:
|
||||
@echo $(NAME)-$(VERSION)-$(RELEASE)
|
||||
|
||||
# If you build a new version into the tree, first do "make tag",
|
||||
# then "make srpm", then build the package.
|
||||
tag:: $(SPECFILE) $(COMMON_DIR)/branches
|
||||
cvs tag $(TAG_OPTS) -c $(TAG)
|
||||
@echo "Tagged with: $(TAG)"
|
||||
@echo
|
||||
|
||||
force-tag: $(SPECFILE) $(COMMON_DIR)/branches
|
||||
@$(MAKE) tag TAG_OPTS="-F $(TAG_OPTS)"
|
||||
|
||||
define find-user
|
||||
if [ `cat CVS/Root |grep -c [^:]@` -ne 0 ]; then cat CVS/Root |cut -d @ -f 1 | sed 's/:.*://' ; else echo $(USER); fi
|
||||
endef
|
||||
USER := $(shell $(find-user))
|
||||
|
||||
oldbuild: $(COMMON_DIR)/branches
|
||||
@if [ -z "$(TARGET)" -a ! -d CVS ]; then echo "Must be in a branch subdirectory"; exit 1; fi
|
||||
|
||||
@cvs status -v $(SPECFILE) 2>/dev/null | grep -q $(TAG); ret=$$? ;\
|
||||
if [ $$ret -ne 0 ]; then echo "$(SPECFILE) not tagged with tag $(TAG)"; exit 1; fi
|
||||
|
||||
@(pushd $(COMMON_DIR) >/dev/null ;\
|
||||
rm -f tobuild ;\
|
||||
cvs -Q update -C tobuild ;\
|
||||
echo -e "$(USER)\t$(CVS_REPOSITORY)\t$(TAG)\t$(TARGET)" >> tobuild ;\
|
||||
cvs commit -m "request build of $(CVS_REPOSITORY) $(TAG) for $(TARGET)" tobuild ;\
|
||||
popd >/dev/null)
|
||||
|
||||
build-check: $(SPECFILE)
|
||||
@if [ -z "$(TARGET)" -o ! -d CVS ]; then echo "Must be in a branch subdirectory"; exit 1; fi
|
||||
@cvs -f status -v $(SPECFILE) 2>/dev/null | grep -q $(TAG); ret=$$? ;\
|
||||
if [ $$ret -ne 0 ]; then echo "$(SPECFILE) not tagged with tag $(TAG)"; exit 1; fi
|
||||
|
||||
plague: build-check $(COMMON_DIR)/branches
|
||||
@if [ ! -x "$(PLAGUE_CLIENT)" ]; then echo "Must have plague-client installed - see http://fedoraproject.org/wiki/Extras/BuildSystemClientSetup"; exit 1; fi
|
||||
$(PLAGUE_CLIENT) build $(NAME) $(TAG) $(TARGET)
|
||||
|
||||
koji: build-check $(COMMON_DIR)/branches
|
||||
@if [ ! -x "$(BUILD_CLIENT)" ]; then echo "Must have koji installed - see http://fedoraproject.org/wiki/BuildSystemClientSetup"; exit 1; fi
|
||||
$(BUILD_CLIENT) $(SECONDARY_CONFIG) build $(BUILD_FLAGS) $(TARGET) '$(CVS_URL)'
|
||||
|
||||
ifneq (, $(filter devel, $(BRANCH)))
|
||||
build: koji
|
||||
else
|
||||
build: plague
|
||||
endif
|
||||
|
||||
scratch-build: build-check
|
||||
@if [ ! -x "$(BUILD_CLIENT)" ]; then echo "Must have koji installed - see http://fedoraproject.org/wiki/BuildSystemClientSetup"; exit 1; fi
|
||||
$(BUILD_CLIENT) $(SECONDARY_CONFIG) build --scratch $(BUILD_FLAGS) $(TARGET) '$(CVS_URL)'
|
||||
|
||||
|
||||
scratch-build-%: build-check
|
||||
@if [ ! -x "$(BUILD_CLIENT)" ]; then echo "Must have koji installed - see http://fedoraproject.org/wiki/BuildSystemClientSetup"; exit 1; fi
|
||||
$(BUILD_CLIENT) $(SECONDARY_CONFIG) build --scratch --arch-override=$* $(BUILD_FLAGS) $(TARGET) '$(CVS_URL)'
|
||||
|
||||
|
||||
bodhi: build-check $(COMMON_DIR)/branches clog
|
||||
@if [ ! -x "$(BODHI_CLIENT)" ]; then echo "Must have bodhi-client installed"; exit 1; fi
|
||||
@echo -e "\
|
||||
# [ $(NAME)-$(VERSION)-$(RELEASE) ]\n\
|
||||
# type=[S|B|E] (S=security, B=bugfix, E=enhancement) (required)\n\
|
||||
# request=[T|S] (T=testing, S=stable) (default: testing)\n\
|
||||
# bug=123,456\n\
|
||||
# all other text will be considered to be part of the update notes\n\
|
||||
type=" > bodhi.template
|
||||
@grep -iZ '\[SME' clog | xargs -0n1 | sed -n -e 's,[^]]*\[SME[: ]*\([0-9]*\)\],\1 ,igp' | xargs | tr ' ' ',' > $(NAME).bugs
|
||||
@if [ `cat $(NAME).bugs` ]; then echo "bug=`cat $(NAME).bugs`" >> bodhi.template; fi
|
||||
@sed -e '/^#/d' < bodhi.template > bodhi.template.orig
|
||||
@if [ -z "$$EDITOR" ]; then vi bodhi.template; else $$EDITOR bodhi.template; fi
|
||||
@if [ -n "`sed -e '/^#/d' < bodhi.template | diff bodhi.template.orig -`" ]; then \
|
||||
$(BODHI_CLIENT) -v --new --release $(subst -,,$(BRANCH)) \
|
||||
--file bodhi.template $(NAME)-$(VERSION)-$(RELEASE) -u $(BODHI_USER); \
|
||||
else \
|
||||
echo "Bodhi update aborted!"; \
|
||||
fi
|
||||
@rm -f bodhi.template{,.orig} $(NAME).bugs clog
|
||||
|
||||
ifndef $(BODHI_USER)
|
||||
BODHI_USER=$(USER)
|
||||
endif
|
||||
|
||||
ifneq (, $(filter contribs7 contribs8 contribs9, $(BRANCH)))
|
||||
update: bodhi
|
||||
endif
|
||||
|
||||
cvsurl:
|
||||
@echo '$(CVS_URL)'
|
||||
|
||||
chain-build: build-check
|
||||
@if [ -z "$(CHAIN)" ]; then \
|
||||
echo "Missing CHAIN variable, please specify the order of packages to" ; \
|
||||
echo "chain build. For example: make chain-build CHAIN='foo bar'" ; \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
set -e ; \
|
||||
subdir=`basename $$(pwd)` ; \
|
||||
urls="" ; \
|
||||
for component in $(CHAIN) ; do \
|
||||
if [ "$$component" = "$(NAME)" ]; then \
|
||||
echo "$(NAME) must not appear in CHAIN" ; \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
if [ "$$component" = ":" ]; then \
|
||||
urls="$$urls :" ; \
|
||||
continue ; \
|
||||
elif [ -n "$$urls" -a -z "$(findstring :,$(CHAIN))" ]; then \
|
||||
urls="$$urls :" ; \
|
||||
fi ; \
|
||||
rm -rf .tmp-$$$$ ; \
|
||||
mkdir -p .tmp-$$$$ ; \
|
||||
pushd .tmp-$$$$ > /dev/null ; \
|
||||
cvs -f -Q -z 3 -d $(CVS_ROOT) co $$component ; \
|
||||
urls="$$urls `make -s -C $$component/$$subdir cvsurl`" ; \
|
||||
popd > /dev/null ; \
|
||||
rm -rf .tmp-$$$$ ; \
|
||||
done ; \
|
||||
if [ -z "$(findstring :,$(CHAIN))" ]; then \
|
||||
urls="$$urls :" ; \
|
||||
fi ; \
|
||||
urls="$$urls `make -s cvsurl`" ; \
|
||||
$(BUILD_CLIENT) chain-build $(BUILD_FLAGS) $(TARGET) $$urls
|
||||
|
||||
# "make new | less" to see what has changed since the last tag was assigned
|
||||
new:
|
||||
-@cvs diff -u -r$$(cvs log Makefile 2>/dev/null | awk '/^symbolic names:$$/ {getline; sub(/^[ \t]*/, "") ; sub (/:.*$$/, ""); print; exit 0}')
|
||||
|
||||
# mop up, printing out exactly what was mopped.
|
||||
clean ::
|
||||
@echo "Running the %clean script of the rpmbuild..."
|
||||
-@$(RPM_WITH_DIRS) --clean --nodeps $(SPECFILE)
|
||||
@for F in $(FULLSOURCEFILES); do \
|
||||
if test -e $$F ; then \
|
||||
echo "Deleting $$F" ; /bin/rm -f $$F ; \
|
||||
fi; \
|
||||
done
|
||||
@if test -d $(TMPCVS); then \
|
||||
echo "Deleting CVS dir $(TMPCVS)" ; \
|
||||
/bin/rm -rf $(TMPCVS); \
|
||||
fi
|
||||
@if test -e $(SRCRPMDIR)/$(NAME)-$(VERSION)-$(RELEASE).src.rpm ; then \
|
||||
echo "Deleting $(SRCRPMDIR)/$(NAME)-$(VERSION)-$(RELEASE).src.rpm" ; \
|
||||
/bin/rm -f $(SRCRPMDIR)/$(NAME)-$(VERSION)-$(RELEASE).src.rpm ; \
|
||||
fi
|
||||
@rm -fv *~ clog
|
||||
@echo "Fully clean!"
|
||||
|
||||
# To prevent CVS noise due to changing file timestamps, upgrade
|
||||
# to patchutils-0.2.23-3 or later, and add to ~/.cvspkgsrc:
|
||||
# FILTERDIFF := filterdiff --remove-timestamps
|
||||
ifndef FILTERDIFF
|
||||
FILTERDIFF := cat
|
||||
endif
|
||||
|
||||
ifdef CVE
|
||||
PATCHFILE := $(NAME)-$(VERSION)-CVE-$(CVE).patch
|
||||
SUFFIX := cve$(shell echo $(CVE) | sed s/.*-//)
|
||||
else
|
||||
PATCHFILE := $(NAME)-$(VERSION)-$(SUFFIX).patch
|
||||
endif
|
||||
|
||||
patch:
|
||||
@if test -z "$(SUFFIX)"; then echo "Must specify SUFFIX=whatever" ; exit 1; fi
|
||||
(cd $(RPM_BUILD_DIR)/.. && gendiff $(NAME)-$(VERSION) .$(SUFFIX) | $(FILTERDIFF)) > $(PATCHFILE) || true
|
||||
@if ! test -s $(PATCHFILE); then echo "Patch is empty!"; exit 1; fi
|
||||
@echo "Created $(PATCHFILE)"
|
||||
@grep "$(PATCHFILE)" CVS/Entries >&/dev/null || cvs add -ko $(PATCHFILE) || true
|
||||
|
||||
# Recreates the patch file of specified suffix from the current working sources
|
||||
# but keeping any comments at the top of file intact, and backing up the old copy
|
||||
# with a '~' suffix.
|
||||
rediff:
|
||||
@if test -z "$(SUFFIX)"; then echo "Must specify SUFFIX=whatever" ; exit 1; fi
|
||||
@if ! test -f "$(PATCHFILE)"; then echo "$(PATCHFILE) not found"; exit 1; fi
|
||||
@mv -f $(PATCHFILE) $(PATCHFILE)\~
|
||||
@sed '/^--- /,$$d' < $(PATCHFILE)\~ > $(PATCHFILE)
|
||||
@(cd $(RPM_BUILD_DIR)/.. && gendiff $(NAME)-$(VERSION) .$(SUFFIX) | $(FILTERDIFF)) >> $(PATCHFILE) || true
|
||||
|
||||
clog: $(SPECFILE)
|
||||
@sed -n '/^%changelog/,/^$$/{/^%/d;/^$$/d;s/%%/%/g;p}' $(SPECFILE) | tee $@
|
||||
|
||||
commit: clog
|
||||
@cvs commit -F $?
|
||||
@rm -f clog
|
||||
|
||||
help:
|
||||
@echo "Usage: make <target>"
|
||||
@echo "Available targets are:"
|
||||
@echo " help Show this text"
|
||||
@echo " sources Download source files [default]"
|
||||
@echo " upload FILES=<files> Add <files> to CVS"
|
||||
@echo " new-sources FILES=<files> Replace sources in CVS with <files>"
|
||||
@echo " <arch> Local test rpmbuild binary"
|
||||
@echo " local Local test rpmbuild binary"
|
||||
@echo " prep Local test rpmbuild prep"
|
||||
@echo " compile Local test rpmbuild compile"
|
||||
@echo " install Local test rpmbuild install"
|
||||
@echo " compile-short Local test rpmbuild short-circuit compile"
|
||||
@echo " install-short Local test rpmbuild short-circuit install"
|
||||
@echo " lint Run rpmlint against local build output"
|
||||
@echo " export Create clean export in \"cvs-$(TAG)\""
|
||||
@echo " check Check test srpm preps on all archs"
|
||||
@echo " srpm Create a srpm"
|
||||
@echo " tag Tag sources as \"$(TAG)\""
|
||||
@echo " build Request build of \"$(TAG)\" for $(TARGET)"
|
||||
@echo " chain-build Build current package in order with other packages"
|
||||
@echo " example: make chain-build CHAIN='libwidget libgizmo'"
|
||||
@echo " The current package is added to the end of the CHAIN list."
|
||||
@echo " Colons (:) can be used in the CHAIN parameter to define dependency groups."
|
||||
@echo " Packages in a single group will be built in parallel, and all packages"
|
||||
@echo " in a group must build successfully and populate the repository before"
|
||||
@echo " the next group will begin building."
|
||||
@echo " If no groups are defined, packages will be built sequentially."
|
||||
@echo " scratch-build Request scratch build of \"$(TAG)\" for $(TARGET)"
|
||||
@echo " scratch-build-<archs> Request scratch build of \"$(TAG)\" for $(TARGET) and archs <archs>"
|
||||
@echo " examples: make scratch-build-i386,ppc64"
|
||||
@echo " make scratch-build-x86_64"
|
||||
@echo " mockbuild Local test build using mock"
|
||||
@echo " verrel Echo \"$(NAME)-$(VERSION)-$(RELEASE)\""
|
||||
@echo " new Diff against last tag"
|
||||
@echo " clog Make a clog file containing top changelog entry"
|
||||
@echo " commit Commit to CVS using the clog file as the log message"
|
||||
@echo " clean Remove srcs ($(SOURCEFILES)), export dir (cvs-$(TAG)) and srpm ($(NAME)-$(VERSION)-$(RELEASE).src.rpm)"
|
||||
@echo " patch SUFFIX=<suff> Create and add a gendiff patch file"
|
||||
@echo " rediff SUFFIX=<suff> Recreates a gendiff patch file, retaining comments"
|
||||
@echo " unused-patches Print list of patches not referenced by name in specfile"
|
||||
@echo " unused-fedora-patches Print Fedora patches not used by Patch and/or ApplyPatch directives"
|
||||
@echo " gimmespec Print the name of the specfile"
|
||||
@echo " update Submit $(NAME)-$(VERSION)-$(RELEASE) as an update for $(BRANCH)"
|
||||
|
||||
gimmespec:
|
||||
@echo "$(SPECFILE)"
|
||||
|
||||
unused-patches:
|
||||
@for f in *.patch; do if [ -e $$f ]; then grep -q $$f $(SPECFILE) || echo $$f; fi; done
|
||||
|
||||
unused-fedora-patches:
|
||||
@for f in *.patch; do if [ -e $$f ]; then (egrep -q "^Patch[[:digit:]]+:[[:space:]]+$$f" $(SPECFILE) || echo "Unused: $$f") && egrep -q "^ApplyPatch[[:space:]]+$$f" $(SPECFILE) || echo "Unapplied: $$f"; fi; done
|
||||
|
||||
##################### EXPERIMENTAL ##########################
|
||||
# this stuff is very experimental in nature and should not be
|
||||
# relied upon until these targets are moved above this line
|
||||
|
||||
# This section contains some hacks that instrument
|
||||
# download-from-upstream support. You'll have to talk to gafton, he
|
||||
# knows how this shit works.
|
||||
|
||||
# Add to the list of hardcoded upstream files the contents of the
|
||||
# ./upstream file
|
||||
UPSTREAM_FILES += $(shell if test -f ./upstream ; then cat ./upstream ; fi)
|
||||
# extensions for signature files we need to retrieve for verification
|
||||
# Warning: if you update the set of defaults, please make sure to
|
||||
# update/add to the checking rules further down
|
||||
UPSTREAM_CHECKS ?= sign asc sig md5
|
||||
|
||||
# check the signatures for the downloaded upstream stuff
|
||||
UPSTREAM_CHECK_FILES = $(foreach e, $(UPSTREAM_CHECKS), $(addsuffix .$(e), $(UPSTREAM_FILES)))
|
||||
|
||||
# Download a file from a particular host.
|
||||
# First argument contains the url base, the second the filename,
|
||||
# third extra curl options
|
||||
define download-host-file
|
||||
if test ! -e "$(2)" ; then \
|
||||
echo -n "URL: $(1)/$(2) ..." ; \
|
||||
$(CURL) --silent --head $(1)/$(2) && \
|
||||
{ \
|
||||
echo "OK, downloading..." ; \
|
||||
$(CURL) $(3) $(1)/$(2) ; \
|
||||
} || \
|
||||
echo "not found" ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# Download a file, trying each mirror in sequence. Also check for
|
||||
# signatures, if available
|
||||
# First argument contains the file name. We read the list of mirrors
|
||||
# from the ./mirrors file
|
||||
define download-file
|
||||
$(foreach h, $(shell cat mirrors),
|
||||
$(call download-host-file,$(h),$(1))
|
||||
if test -e $(1) ; then \
|
||||
$(foreach e,$(UPSTREAM_CHECKS),$(call download-host-file,$(h),$(1).$(e),--silent) ; ) \
|
||||
fi
|
||||
)
|
||||
if test ! -e $(1) ; then \
|
||||
echo "ERROR: Could not download file: $(1)" ; \
|
||||
exit -1 ; \
|
||||
else \
|
||||
echo "File $(1) available for local use" ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# Download all the UPSTREAM files
|
||||
define download-files
|
||||
$(foreach f, $(UPSTREAM_FILES),
|
||||
$(call download-file,$(f))
|
||||
echo
|
||||
)
|
||||
endef
|
||||
|
||||
# Make sure the signature files we download are properly added
|
||||
define cvs-add-upstream-sigs
|
||||
for s in $(UPSTREAM_CHECK_FILES) ; do \
|
||||
if test -f "$$s" ; then \
|
||||
if ! grep "^/$$s/" CVS/Entries >/dev/null 2>/dev/null ; then \
|
||||
cvs -Q add "$$s" ; \
|
||||
fi ; \
|
||||
fi ; \
|
||||
done
|
||||
endef
|
||||
|
||||
download : upstream mirrors
|
||||
@$(download-files)
|
||||
$(MAKE) download-checks
|
||||
|
||||
download-checks :: import-upstream-gpg
|
||||
download-checks :: $(UPSTREAM_CHECK_FILES)
|
||||
|
||||
# how to check for a gpg signature, given a separate signature file
|
||||
define check-upstream-gpg-sig
|
||||
echo -n "Checking GPG signature on $* from $@ : "
|
||||
if ! test -f $@ ; then \
|
||||
echo "ERROR" ; echo "GPG signature file $@ not found" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
if ! gpg --no-secmem-warning --no-permission-warning -q --verify $@ $* 2>/dev/null ; then \
|
||||
echo "FAILED" ; \
|
||||
exit 1 ; \
|
||||
else \
|
||||
echo "OK" ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# how to check for a md5sum, given a separate .md5 file
|
||||
define check-upstream-md5sum
|
||||
echo -n "Checking md5sum on $* from $@ : "
|
||||
if ! test -f $@ ; then \
|
||||
echo "ERROR" ; echo "md5sum file $@ not found" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
if ! md5sum $* | diff >/dev/null --brief "$@" - ; then \
|
||||
echo "FAILED" ; \
|
||||
exit 1 ; \
|
||||
else \
|
||||
echo "OK" ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# and now the rules, specific to each extension
|
||||
$(addsuffix .sign,$(UPSTREAM_FILES)): %.sign: % FORCE
|
||||
@$(check-upstream-gpg-sig)
|
||||
$(addsuffix .asc,$(UPSTREAM_FILES)): %.asc: % FORCE
|
||||
@$(check-upstream-gpg-sig)
|
||||
$(addsuffix .sig,$(UPSTREAM_FILES)): %.sig: % FORCE
|
||||
@$(check-upstream-gpg-sig)
|
||||
$(addsuffix .md5,$(UPSTREAM_FILES)): %.md5: % FORCE
|
||||
@$(check-upstream-md5sum)
|
||||
|
||||
# We keep all the relevant GPG keys in the upstream-key.gpg so we can
|
||||
# check the signatures...
|
||||
import-upstream-gpg : upstream-key.gpg FORCE
|
||||
mkdir -p $(HOME)/.gnupg
|
||||
gpg --quiet --import --no-secmem-warning --no-permission-warning $< || :
|
||||
|
||||
# A handy target to download the latest and greatest from upstream and
|
||||
# check it into the lookaside cache.
|
||||
# new-base assumes that all the sources are downloaded from upstream, so it uses "make new-source"
|
||||
# rebase uses the standard "make upload"
|
||||
new-base : clean download
|
||||
$(MAKE) new-source FILES="$(UPSTREAM_FILES)"
|
||||
@$(cvs-add-upstream-sigs)
|
||||
@echo "Don't forget to do a 'cvs commit' for your new sources file."
|
||||
|
||||
rebase : clean download
|
||||
$(MAKE) upload FILES="$(UPSTREAM_FILES)"
|
||||
@$(cvs-add-upstream-sigs)
|
||||
@echo "Don't forget to do a 'cvs commit' for your new sources file."
|
||||
|
||||
# there is more stuff to clean, now that we have upstream files
|
||||
clean ::
|
||||
@rm -fv $(UPSTREAM_FILES)
|
5
branches
Normal file
5
branches
Normal file
@ -0,0 +1,5 @@
|
||||
contribs7:contribs7:.el4.sme:rhel:4:7
|
||||
contribs8:contribs8:.el5.sme:rhel:5:8
|
||||
contribs9:contribs9:.el6.sme:rhel:6:9
|
||||
contribs10:contribs10:.el7.sme:rhel:7:10
|
||||
devel:contribs7:.el4.sme:rhel:4:7
|
326
cvs-import.sh
Executable file
326
cvs-import.sh
Executable file
@ -0,0 +1,326 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Import a given src.rpm on a given branch
|
||||
# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
|
||||
# Copyright (C) 2004-2005 Red Hat, Inc.
|
||||
# Copyright (C) 2005 Fedora Foundation
|
||||
#
|
||||
# $Id: cvs-import.sh,v 1.10 2013/02/26 18:51:26 slords Exp $
|
||||
|
||||
shopt -s nocasematch
|
||||
|
||||
# Initial setup
|
||||
CVSTREE=${CVSTREE:=extras}
|
||||
TOPLEVEL=${TOPLEVEL:=rpms}
|
||||
|
||||
# Check that we're being run from a good location
|
||||
MYDIR=$(dirname $0)
|
||||
if [ ! -f ${MYDIR}/CVS/Root ] ; then
|
||||
echo "ERROR: You need to run this script from the 'common' checkout" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# use the CVSROOT from the checkout
|
||||
CVSROOT=$(cat ${MYDIR}/CVS/Root)
|
||||
|
||||
# use the TAG from the checkout
|
||||
TAG=$(sed -n 's@^T@@p' $(pwd)/CVS/Tag 2> /dev/null)
|
||||
|
||||
# We need a writable directory for temporary checkouts and CVS work
|
||||
WORKDIR="/tmp"
|
||||
if test -w $(pwd) ; then
|
||||
WORKDIR="$(pwd)"
|
||||
fi
|
||||
|
||||
[ -f branch ] && BRANCH=$(cat branch)
|
||||
|
||||
# short usage help
|
||||
Usage() {
|
||||
cat <<EOF
|
||||
Usage:
|
||||
|
||||
$0 [-b <branch>] [-t <cvs tag/branch>] [-m <message>] <package>
|
||||
|
||||
Imports a package into the cvs repository. Will use the following defaults:
|
||||
CVSROOT = $CVSROOT
|
||||
BRANCH = ${BRANCH:-devel}
|
||||
TAG = ${TAG}
|
||||
|
||||
The package can also be imported on a PRE-EXISTING branch using the
|
||||
"-b BRANCH" flag. This script can not create new branches for you.
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Parse arguments
|
||||
MESSAGE=
|
||||
while [ -n "$1" ] ; do
|
||||
case "$1" in
|
||||
# import the package on the given branch. If the branch does
|
||||
# not exist, we will branch the HEAD and then we will perform
|
||||
# the import
|
||||
-t | --tag )
|
||||
shift
|
||||
TAG="$1"
|
||||
if [ -z "$TAG" ] ; then
|
||||
echo "ERROR: --tag requires an argument"
|
||||
Usage
|
||||
exit -1
|
||||
fi
|
||||
;;
|
||||
|
||||
-b | --branch )
|
||||
shift
|
||||
BRANCH="$1"
|
||||
if [ -z "$BRANCH" ] ; then
|
||||
echo "ERROR: --branch requires an argument"
|
||||
Usage
|
||||
exit -1
|
||||
fi
|
||||
# protect against moronisms
|
||||
if [ "$BRANCH" = "HEAD" -o "$BRANCH" = "devel" ] ; then
|
||||
BRANCH=
|
||||
fi
|
||||
;;
|
||||
|
||||
-m | --message )
|
||||
shift
|
||||
MESSAGE="$1"
|
||||
;;
|
||||
|
||||
# the always helpful help message
|
||||
-h | --help )
|
||||
Usage
|
||||
exit 0
|
||||
;;
|
||||
|
||||
* )
|
||||
if [ -n "$PACKAGE" ] ; then
|
||||
echo "ERROR: Only one package at a time, please" >&2
|
||||
echo "Already got request for $PACKAGE" >&2
|
||||
exit -1
|
||||
fi
|
||||
PACKAGE="$1"
|
||||
if [ ! -e "$PACKAGE" ] ; then
|
||||
echo "ERROR: Package $PACKAGE does not exist"
|
||||
Usage
|
||||
exit -2
|
||||
fi
|
||||
NVR=$(rpm -qp --qf "%{NAME}-%{VERSION}-%{RELEASE}" $PACKAGE 2>/dev/null)
|
||||
SRCRPM=$(rpm -qp --qf "%{SOURCERPM}" $PACKAGE 2>/dev/null)
|
||||
if [ -z "$NVR" -o "$SRCRPM" != "(none)" ] ; then
|
||||
echo "ERROR: Package $PACKAGE does not look like a source RPM package"
|
||||
Usage
|
||||
exit -3
|
||||
fi
|
||||
# extract NAME VERSION RELEASE, like a 31337 h@x0r
|
||||
RELEASE=${NVR##*-}
|
||||
NAME=${NVR%%-$RELEASE}
|
||||
VERSION=${NAME##*-}
|
||||
NAME=${NAME%%-$VERSION}
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z "$PACKAGE" ] ; then
|
||||
echo "RPM source package required for import"
|
||||
Usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# make sure the PACKAGE is an absolute path, as we'll be changing
|
||||
# directories fairly often in this script
|
||||
PACKAGE="$(cd $(dirname $PACKAGE) && pwd)/$(basename $PACKAGE)"
|
||||
|
||||
# all well
|
||||
export CVSROOT
|
||||
CVS="cvs -d $CVSROOT"
|
||||
|
||||
# Grab a temp dir
|
||||
TMPDIR=$(mktemp -d $WORKDIR/tmpcvsXXXXXX)
|
||||
trap "rm -rf $TMPDIR" 0 9 15
|
||||
|
||||
# A cleanup function that can be called from random places
|
||||
CleanUp() {
|
||||
if [ -n "$LOGFILE" ] ; then
|
||||
rm -f $LOGFILE
|
||||
fi
|
||||
cd ${WORKDIR}
|
||||
rm -rf $TMPDIR
|
||||
echo
|
||||
}
|
||||
|
||||
CreateBranchMakefile() {
|
||||
cat >Makefile <<EOF
|
||||
# Makefile for source rpm: $NAME
|
||||
# \$Id\$
|
||||
NAME := $NAME
|
||||
SPECFILE = \$(firstword \$(wildcard *.spec))
|
||||
|
||||
define find-makefile-common
|
||||
for d in common ../common ../../common ; do if [ -f \$\$d/Makefile.common ] ; then if [ -f \$\$d/CVS/Root -a -w \$\$/Makefile.common ] ; then cd \$\$d ; cvs -Q update ; fi ; echo "\$\$d/Makefile.common" ; break ; fi ; done
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := \$(shell \$(find-makefile-common))
|
||||
|
||||
ifeq (\$(MAKEFILE_COMMON),)
|
||||
# attept a checkout
|
||||
define checkout-makefile-common
|
||||
test -f CVS/Root && { cvs -Q -d \$\$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := \$(shell \$(checkout-makefile-common))
|
||||
endif
|
||||
|
||||
include \$(MAKEFILE_COMMON)
|
||||
EOF
|
||||
}
|
||||
|
||||
# Check out the existing module
|
||||
cd $TMPDIR
|
||||
echo "Checking out module: '$NAME'"
|
||||
$CVS -Q checkout ${TAG:+-r $TAG} $TOPLEVEL/$NAME || { echo "ERROR: \"$NAME\" module does not exist in cvs."; exit 1; }
|
||||
|
||||
# this is our working directory
|
||||
cd $TOPLEVEL/$NAME
|
||||
|
||||
[ -d ${BRANCH} ] || { echo "ERROR: \"$NAME/$BRANCH\" does not exist!"; exit 1; }
|
||||
|
||||
# check if we have imported this entry
|
||||
TAG=$(echo "${NAME##[0-9]}-$VERSION-$RELEASE" | sed -e 's/[$,.:;@]/_/g')
|
||||
LOG_ENTRY="$TAG:${BRANCH:-HEAD}:$(basename $PACKAGE)"
|
||||
if [ -n "$(grep ""^$LOG_ENTRY"" ./${BRANCH}/import.log 2>/dev/null)" ] ; then
|
||||
echo "ERROR: $PACKAGE was already imported on branch ${BRANCH:-HEAD}"
|
||||
CleanUp
|
||||
exit -2
|
||||
fi
|
||||
# Check here as well because back in the old days we used to write it here
|
||||
if [ -n "$(grep ""^$LOG_ENTRY"" ./import.log 2>/dev/null)" ] ; then
|
||||
echo "ERROR: $PACKAGE was already imported on branch ${BRANCH:-HEAD}"
|
||||
CleanUp
|
||||
exit -2
|
||||
fi
|
||||
|
||||
# Now the real import job is starting up
|
||||
BRANCH="${BRANCH:-devel}"
|
||||
|
||||
# Unpack the src.rpm
|
||||
TMP2=$(mktemp -d tmpXXXXXX)
|
||||
pushd $TMP2 >/dev/null
|
||||
echo "Unpacking source package: $(basename $PACKAGE)..."
|
||||
rpm2cpio $PACKAGE | cpio -id --quiet || {
|
||||
echo "This package appears to be corrupt."
|
||||
echo "Skipping import for: $PACKAGE"
|
||||
CleanUp
|
||||
exit -1
|
||||
} >&2
|
||||
popd >/dev/null
|
||||
|
||||
# grab a list of files from the src.rpm
|
||||
FILES=$(rpm -qpl $PACKAGE 2>/dev/null)
|
||||
|
||||
# Remove the files that are no longer present
|
||||
OLDFILES=$(find ${BRANCH} -maxdepth 1 -type f \
|
||||
-not -name branch \
|
||||
-not -name import.log \
|
||||
-not -name sources \
|
||||
-not -name Makefile \
|
||||
-not -name .cvsignore \
|
||||
-print )
|
||||
for f in $OLDFILES ; do
|
||||
if [ ! -f "$TMP2/$(basename $f)" ] ; then
|
||||
cvs -Q delete -f $f
|
||||
echo "R $(basename $f)"
|
||||
fi
|
||||
done
|
||||
|
||||
# Add the new files
|
||||
>${BRANCH}/sources.new
|
||||
>${BRANCH}/.cvsignore.new
|
||||
|
||||
# Now build a list of what needs to be uploaded
|
||||
UPLOADFILES=
|
||||
for _f in $FILES ; do
|
||||
# just to be sure. Who knows when rpm will start returning
|
||||
# pathnames in src.rpm queries
|
||||
f=$(basename ${_f})
|
||||
|
||||
add_file="yes"
|
||||
file_md5=$(cd $TMP2 && md5sum $f)
|
||||
file_size=$(stat --format="%s" $TMP2/$f)
|
||||
|
||||
# if the file exists or it is listed in the sources we don't add it
|
||||
if [ -f ${BRANCH}/$f ] ; then
|
||||
add_file="no"
|
||||
cmp -s $TMP2/$f ${BRANCH}/$f || echo "U $f"
|
||||
elif [ -n "$(grep ""$file_md5"" ${BRANCH}/sources 2>/dev/null)" ] ; then
|
||||
add_file="no"
|
||||
# keep it around...
|
||||
echo "$file_md5" >> ${BRANCH}/sources.new
|
||||
echo "$f" >> ${BRANCH}/.cvsignore.new
|
||||
fi
|
||||
# we catch changed patches this way...
|
||||
mv -f $TMP2/$f ${BRANCH}/$f
|
||||
# we need to add this file
|
||||
pushd ${BRANCH} >/dev/null
|
||||
if [ "$add_file" = "yes" ] ; then
|
||||
case $f in
|
||||
*.tar | *gz | *.bz2 | *.lzma | *.Z | *.zip | *.xz | \
|
||||
*.ttf | *.bin | *.tbz | *.tbz2 | *.pdf | *.rpm | \
|
||||
*.jar | *.war | *.db | *.cpio | *.jisp | *.egg | *.gem )
|
||||
UPLOADFILES="$UPLOADFILES $f"
|
||||
if [ -n "$(grep $f sources 2>/dev/null)" ] ; then
|
||||
# this file existed before with a different md5sum
|
||||
echo "N $f"
|
||||
else
|
||||
echo "L $f"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
cvs -Q add -ko $f
|
||||
echo "A $f"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
popd >/dev/null
|
||||
done
|
||||
# upload the tarballs
|
||||
pushd ${BRANCH} >/dev/null
|
||||
# Re-add the branch Makefile (during resurrection of dead packages).
|
||||
if [ ! -f Makefile ] ; then
|
||||
CreateBranchMakefile
|
||||
cvs -Q add Makefile
|
||||
fi
|
||||
rm -f sources && mv sources.new sources
|
||||
rm -f .cvsignore && mv .cvsignore.new .cvsignore
|
||||
if [ -n "$UPLOADFILES" ] ; then
|
||||
make upload FILES="$UPLOADFILES" || {
|
||||
echo "ERROR: Uploading the source tarballs failed!"
|
||||
exit 9
|
||||
}
|
||||
fi
|
||||
popd >/dev/null
|
||||
|
||||
# We no longer need this
|
||||
rm -rf $TMP2
|
||||
|
||||
# setup finished
|
||||
[ -f ./${BRANCH}/import.log ] || $(touch ./${BRANCH}/import.log; cvs add ./${BRANCH}/import.log)
|
||||
echo "$LOG_ENTRY:$(date +%s)" >> ./${BRANCH}/import.log
|
||||
|
||||
echo "======================================================================="
|
||||
cvs -Q diff -u
|
||||
echo "======================================================================="
|
||||
echo "Please check the above cvs diff."
|
||||
echo "If you want to make any changes before committing, please press Ctrl-C."
|
||||
echo "Otherwise press Enter to proceed to commit."
|
||||
read
|
||||
|
||||
cvs -Q update && \
|
||||
echo "cvs commit..." && \
|
||||
cvs -Q commit ${MESSAGE:+-m "$MESSAGE"} && echo "Commit Complete" && \
|
||||
cd ${BRANCH} && cvs tag ${TAG} && echo "Tagging '${TAG}' complete."
|
||||
|
||||
# Clean up
|
||||
CleanUp
|
Loading…
Reference in New Issue
Block a user