[Groonga-commit] groonga/groonga [master] [yum] update build system.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 10月 24日 (月) 14:12:07 JST


Kouhei Sutou	2011-10-24 05:12:07 +0000 (Mon, 24 Oct 2011)

  New Revision: 42b135eaf5a48af9304677b546b512e4e98c2dc7

  Log:
    [yum] update build system.

  Added files:
    packages/yum/groonga-build-options
  Modified files:
    packages/yum/Makefile.am
    packages/yum/build-in-chroot.sh
    packages/yum/build-repository-rpm.sh
    packages/yum/build-rpm.sh
    packages/yum/sign-rpm.sh
    packages/yum/update-repository.sh

  Modified: packages/yum/Makefile.am (+43 -26)
===================================================================
--- packages/yum/Makefile.am    2011-10-24 04:28:40 +0000 (be63a3c)
+++ packages/yum/Makefile.am    2011-10-24 05:12:07 +0000 (f1721c0)
@@ -1,15 +1,13 @@
+SERVER_PATH = $(RSYNC_PATH)
 DISTRIBUTIONS = fedora centos
 ARCHITECTURES = x86_64
 CHROOT_BASE = /var/lib/chroot
+BASE_URL_PREFIX = http://packages.groonga.org
+HAVE_DEVELOPMENT_BRANCH = no
+USE_RPMFORGE = no
+USE_ATRPMS = no
 
-all:
-
-release: build sign update upload
-
-remove-existing-packages:
-	for distribution in $(DISTRIBUTIONS); do	\
-	  find $${distribution} -name "*.rpm" -delete;	\
-	done
+release: download build sign update upload
 
 ensure-rsync-path:
 	@if test -z "$(RSYNC_PATH)"; then				\
@@ -17,37 +15,56 @@ ensure-rsync-path:
 	  false;							\
 	fi
 
-download: ensure-rsync-path
-	for distribution in $(DISTRIBUTIONS); do			\
-	  rsync -avz $(RSYNC_PATH)/$${distribution}/ $${distribution};	\
-	done
-
 sign:
 	./sign-rpm.sh '$(DISTRIBUTIONS)'
 
 update:
-	./update-repository.sh '$(DISTRIBUTIONS)'
+	./update-repository.sh $(PACKAGE) '$(DISTRIBUTIONS)'
 
 upload: ensure-rsync-path
 	for distribution in $(DISTRIBUTIONS); do		\
 	  rsync -avz --delete --exclude .gitignore		\
-	    $${distribution}/ $(RSYNC_PATH)/$${distribution};	\
+	    $${distribution}/ $(SERVER_PATH)/$${distribution};	\
 	done
 
-build: source build-in-chroot build-repository-rpm
-
-source: ../$(PACKAGE)-$(VERSION).tar.gz
+download: ensure-rsync-path
+	for distribution in $(DISTRIBUTIONS); do		\
+	  (rm -rf $${distribution} &&				\
+	   mkdir -p $${distribution} &&				\
+	   rsync -avz						\
+	     $(SERVER_PATH)/$${distribution}/ $${distribution};	\
+	done
 
-../$(PACKAGE)-$(VERSION).tar.gz:
-	ln -s $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz ../
+build: build-in-chroot build-repository-rpm
 
-build-in-chroot:
+build-in-chroot: source
 	./build-in-chroot.sh			\
-	  $(PACKAGE) $(VERSION) $(CHROOT_BASE)	\
-	  '$(ARCHITECTURES)' '$(DISTRIBUTIONS)'
+	  $(PACKAGE)				\
+	  $(VERSION)				\
+	  $(top_builddir)/$(PACKAGE)		\
+	  ../rpm				\
+	  $(CHROOT_BASE)			\
+	  '$(ARCHITECTURES)'			\
+	  '$(DISTRIBUTIONS)'			\
+	  '$(HAVE_DEVELOPMENT_BRANCH)'		\
+	  '$(USE_RPMFORGE)'			\
+	  '$(USE_ATRPMS)'
 
-build-repository-rpm: RPM-GPG-KEY-groonga
-	./build-repository-rpm.sh $(PACKAGE) '$(DISTRIBUTIONS)'
+build-repository-rpm: RPM-GPG-KEY-$(PACKAGE)
+	./build-repository-rpm.sh		\
+	  $(PACKAGE)				\
+	  '$(PACKAGE_TITLE)'			\
+	  $(BASE_URL_PREFIX)			\
+	  '$(DISTRIBUTIONS)'			\
+	  $(HAVE_DEVELOPMENT_BRANCH)
 
-RPM-GPG-KEY-groonga:
+RPM-GPG-KEY-$(PACKAGE):
 	./gpg-public-key.sh > $@
+
+source: ../$(PACKAGE)-$(VERSION).tar.gz
+
+../$(PACKAGE)-$(VERSION).tar.gz: $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz
+	ln -s $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz ../
+
+$(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz:
+	cd $(abs_top_builddir) && make dist

  Modified: packages/yum/build-in-chroot.sh (+41 -21)
===================================================================
--- packages/yum/build-in-chroot.sh    2011-10-24 04:28:40 +0000 (14b51c4)
+++ packages/yum/build-in-chroot.sh    2011-10-24 05:12:07 +0000 (3f61e88)
@@ -1,16 +1,21 @@
 #!/bin/sh
 
-if [ $# != 5 ]; then
-    echo "Usage: $0 PACKAGE VERSION CHROOT_BASE ARCHITECTURES DISTRIBUTIONS"
-    echo " e.g.: $0 groonga 1.1.1 /var/lib/chroot 'i386 x86_64' 'fedora centos'"
+if [ $# != 10 ]; then
+    echo "Usage: $0 PACKAGE VERSION SOURCE_BASE_NAME SPEC_DIR CHROOT_BASE ARCHITECTURES DISTRIBUTIONS HAVE_DEVELOPMENT_BRANCH USE_RPMFORGE USE_ATRPMS"
+    echo " e.g.: $0 milter-manager 1.1.1 ../milter-manager ../rpm /var/lib/chroot 'i386 x86_64' 'fedora centos' yes no no"
     exit 1
 fi
 
 PACKAGE=$1
 VERSION=$2
-CHROOT_BASE=$3
-ARCHITECTURES=$4
-DISTRIBUTIONS=$5
+SOURCE_BASE_NAME=$3
+SPEC_DIR=$4
+CHROOT_BASE=$5
+ARCHITECTURES=$6
+DISTRIBUTIONS=$7
+HAVE_DEVELOPMENT_BRANCH=$8
+USE_RPMFORGE=$9
+USE_ATRPMS=$10
 
 PATH=/usr/local/sbin:/usr/sbin:$PATH
 
@@ -47,14 +52,11 @@ build_chroot()
         distribution_architecture=$architecture
     else
 	rinse_architecture=$architecture
-	case $distribution_name in
-	    fedora)
-		distribution_architecture=i686
-		;;
-	    *)
-		distribution_architecture=$architecture
-		;;
-	esac
+	if [ "$distribution_name-$distribution_version" = "centos-5" ]; then
+	    distribution_architecture=$architecture
+	else
+	    distribution_architecture=i686
+	fi
     fi
 
     run_sudo mkdir -p ${base_dir}/etc/rpm
@@ -87,26 +89,44 @@ build()
 	run build_chroot $architecture $distribution $distribution_version
     fi
 
-    source_dir=${script_base_dir}/..
     build_user=${PACKAGE}-build
     build_user_dir=${base_dir}/home/${build_user}
     rpm_base_dir=${build_user_dir}/rpm
     rpm_dir=${rpm_base_dir}/RPMS/${architecture}
     srpm_dir=${rpm_base_dir}/SRPMS
     pool_base_dir=${distribution}/${distribution_version}
+    if test "${HAVE_DEVELOPMENT_BRANCH}" = "yes"; then
+	minor_version=$(echo $VERSION | ruby -pe '$_.gsub!(/\A\d+\.(\d+)\..*/, "\\1")')
+	if test $(expr ${minor_version} % 2) -eq 0; then
+	    branch_name=stable
+	else
+	    branch_name=development
+	fi
+	pool_base_dir=${pool_base_dir}/${branch_name}
+    fi
     binary_pool_dir=$pool_base_dir/$architecture/Packages
     source_pool_dir=$pool_base_dir/source/SRPMS
-    run cp $source_dir/${PACKAGE}-${VERSION}.tar.gz \
-	${CHROOT_BASE}/$target/tmp/
-    run cp $source_dir/rpm/${distribution}/${PACKAGE}.spec \
-	${CHROOT_BASE}/$target/tmp/
+    if test -f ${SOURCE_BASE_NAME}-${VERSION}-*.src.rpm; then
+	run cp ${SOURCE_BASE_NAME}-${VERSION}-*.src.rpm \
+	    ${CHROOT_BASE}/$target/tmp/
+    else
+	run cp ${SOURCE_BASE_NAME}-${VERSION}.* \
+	    ${CHROOT_BASE}/$target/tmp/
+	run cp ${SPEC_DIR}/${distribution}/${PACKAGE}.spec \
+	    ${CHROOT_BASE}/$target/tmp/
+    fi
     run echo $PACKAGE > ${CHROOT_BASE}/$target/tmp/build-package
     run echo $VERSION > ${CHROOT_BASE}/$target/tmp/build-version
+    run echo $(basename ${SOURCE_BASE_NAME}) > \
+	${CHROOT_BASE}/$target/tmp/build-source-base-name
     run echo $build_user > ${CHROOT_BASE}/$target/tmp/build-user
     run cp ${script_base_dir}/${PACKAGE}-depended-packages \
 	${CHROOT_BASE}/$target/tmp/depended-packages
-    run cp ${script_base_dir}/build-rpm.sh \
-	${CHROOT_BASE}/$target/tmp/
+    run echo $USE_RPMFORGE > ${CHROOT_BASE}/$target/tmp/build-use-rpmforge
+    run echo $USE_ATRPMS > ${CHROOT_BASE}/$target/tmp/build-use-atrpms
+    run cp ${script_base_dir}/${PACKAGE}-build-options \
+	${CHROOT_BASE}/$target/tmp/build-options
+    run cp ${script_base_dir}/build-rpm.sh ${CHROOT_BASE}/$target/tmp/
     run_sudo rm -rf $rpm_dir $srpm_dir
     run_sudo su -c "chroot ${CHROOT_BASE}/$target /tmp/build-rpm.sh"
     run mkdir -p $binary_pool_dir

  Modified: packages/yum/build-repository-rpm.sh (+30 -9)
===================================================================
--- packages/yum/build-repository-rpm.sh    2011-10-24 04:28:40 +0000 (89f0900)
+++ packages/yum/build-repository-rpm.sh    2011-10-24 05:12:07 +0000 (3f9858d)
@@ -2,14 +2,17 @@
 
 script_base_dir=`dirname $0`
 
-if [ $# != 2 ]; then
-    echo "Usage: $0 PACKAGE DISTRIBUTIONS"
-    echo " e.g.: $0 groonga 'fedora centos'"
+if [ $# != 5 ]; then
+    echo "Usage: $0 PACKAGE PACKAGE_TITLE BASE_URL_PREFIX DISTRIBUTIONS HAVE_DEVELOPMENT_BRANCH"
+    echo " e.g.: $0 milter-manager 'milter manager' http://downloads.sourceforge.net/milter-manager' 'fedora centos' yes"
     exit 1
 fi
 
 PACKAGE=$1
-DISTRIBUTIONS=$2
+PACKAGE_TITLE=$2
+BASE_URL_PREFIX=$3
+DISTRIBUTIONS=$4
+HAVE_DEVELOPMENT_BRANCH=$5
 
 run()
 {
@@ -44,14 +47,32 @@ for distribution in ${DISTRIBUTIONS}; do
 	    ;;
     esac
     repo=${PACKAGE}.repo
-    run cat <<EOR > $repo
-[groonga]
-name=groonga for $distribution_label \$releasever - \$basearch
-baseurl=http://packages.groonga.org/$distribution/\$releasever/\$basearch/
+    if test "$HAVE_DEVELOPMENT_BRANCH" = "yes"; then
+	run cat <<EOR > $repo
+[$PACKAGE]
+name=$PACKAGE_TITLE for $distribution_label \$releasever - \$basearch
+baseurl=$BASE_URL_PREFIX/$distribution/\$releasever/stable/\$basearch/
 gpgcheck=1
 enabled=1
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-groonga
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-$PACKAGE
+
+[$PACKAGE-development]
+name=$PACKAGE_TITLE for $distribution_label \$releasever - development - \$basearch
+baseurl=$BASE_URL_PREFIX/$distribution/\$releasever/development/\$basearch/
+gpgcheck=1
+enabled=0
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-$PACKAGE
+EOR
+    else
+	run cat <<EOR > $repo
+[$PACKAGE]
+name=$PACKAGE_TITLE for $distribution_label \$releasever - \$basearch
+baseurl=$BASE_URL_PREFIX/$distribution/\$releasever/\$basearch/
+gpgcheck=1
+enabled=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-$PACKAGE
 EOR
+    fi
     run tar cfz $rpm_base_dir/SOURCES/${PACKAGE}-repository.tar.gz \
 	-C ${script_base_dir} ${repo} RPM-GPG-KEY-${PACKAGE}
     run cp ${script_base_dir}/${PACKAGE}-repository.spec $rpm_base_dir/SPECS/

  Modified: packages/yum/build-rpm.sh (+71 -11)
===================================================================
--- packages/yum/build-rpm.sh    2011-10-24 04:28:40 +0000 (9b57388)
+++ packages/yum/build-rpm.sh    2011-10-24 05:12:07 +0000 (665e22f)
@@ -3,9 +3,13 @@
 LANG=C
 
 PACKAGE=$(cat /tmp/build-package)
-USER_NAME=$(cat /tmp/build-user)
 VERSION=$(cat /tmp/build-version)
+SOURCE_BASE_NAME=$(cat /tmp/build-source-base-name)
+USER_NAME=$(cat /tmp/build-user)
 DEPENDED_PACKAGES=$(cat /tmp/depended-packages)
+USE_RPMFORGE=$(cat /tmp/build-use-rpmforge)
+USE_ATRPMS=$(cat /tmp/build-use-atrpms)
+BUILD_OPTIONS=$(cat /tmp/build-options)
 BUILD_SCRIPT=/tmp/build-${PACKAGE}.sh
 
 run()
@@ -17,8 +21,14 @@ run()
     fi
 }
 
+yum_options=
+
 distribution=$(cut -d ' ' -f 1 /etc/redhat-release | tr 'A-Z' 'a-z')
-distribution_version=$(cut -d ' ' -f 3 /etc/redhat-release)
+if grep -q Linux /etc/redhat-release; then
+    distribution_version=$(cut -d ' ' -f 4 /etc/redhat-release)
+else
+    distribution_version=$(cut -d ' ' -f 3 /etc/redhat-release)
+fi
 if ! rpm -q ${distribution}-release > /dev/null 2>&1; then
     packages_dir=/var/cache/yum/core/packages
     release_rpm=${distribution}-release-${distribution_version}-*.rpm
@@ -26,11 +36,42 @@ if ! rpm -q ${distribution}-release > /dev/null 2>&1; then
     run rpm -Uvh --force ${packages_dir}/ca-certificates-*.rpm
 fi
 
-if ! id $USER_NAME >/dev/null 2>&1; then
-    run useradd -m $USER_NAME
+if test "$USE_RPMFORGE" = "yes"; then
+    if ! rpm -q rpmforge-release > /dev/null 2>&1; then
+	architecture=$(cut -d '-' -f 1 /etc/rpm/platform)
+	rpmforge_url=http://packages.sw.be/rpmforge-release
+	rpmforge_rpm_base=rpmforge-release-0.5.2-2.el5.rf.${architecture}.rpm
+	wget $rpmforge_url/$rpmforge_rpm_base
+	run rpm -Uvh $rpmforge_rpm_base
+	rm $rpmforge_rpm_base
+	sed -i'' -e 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo
+    fi
+    yum_options="$yum_options --enablerepo=rpmforge"
 fi
 
-run yum update -y
+if test "$USE_ATRPMS" = "yes"; then
+    case "$(cat /etc/redhat-release)" in
+	CentOS*)
+	    repository_label=CentOS
+	    repository_prefix=el
+	    ;;
+	*)
+	    repository_label=Fedora
+	    repository_prefix=f
+	    ;;
+    esac
+    cat <<EOF > /etc/yum.repos.d/atrpms.repo
+[atrpms]
+name=${repository_label} \$releasever - \$basearch - ATrpms
+baseurl=http://dl.atrpms.net/${repository_prefix}\$releasever-\$basearch/atrpms/stable
+gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
+gpgcheck=1
+enabled=0
+EOF
+    yum_options="$yum_options --enablerepo=atrpms"
+fi
+
+run yum update ${yum_options} -y
 if [ "$distribution" = "centos" ] && ! rpm -q mecab-devel > /dev/null; then
     run yum install -y rpm-build wget libtool gcc gcc-c++ make
 
@@ -80,8 +121,12 @@ EOF
 	run rpm -Uvh /home/$USER_NAME/rpm/RPMS/*/*.rpm
     done
 fi
-run yum install -y rpm-build tar ${DEPENDED_PACKAGES}
-run yum clean packages
+run yum install ${yum_options} -y rpm-build tar ${DEPENDED_PACKAGES}
+run yum clean ${yum_options} packages
+
+if ! id $USER_NAME >/dev/null 2>&1; then
+    run useradd -m $USER_NAME
+fi
 
 cat <<EOF > $BUILD_SCRIPT
 #!/bin/sh
@@ -92,19 +137,34 @@ if [ ! -f ~/.rpmmacros ]; then
 EOM
 fi
 
-rm -rf rpm
 mkdir -p rpm/SOURCES
 mkdir -p rpm/SPECS
 mkdir -p rpm/BUILD
 mkdir -p rpm/RPMS
 mkdir -p rpm/SRPMS
 
-cp /tmp/${PACKAGE}-$VERSION.tar.gz rpm/SOURCES/
-cp /tmp/${PACKAGE}.spec rpm/SPECS/
+if test -f /tmp/${SOURCE_BASE_NAME}-$VERSION-*.src.rpm; then
+    if ! rpm -Uvh /tmp/${SOURCE_BASE_NAME}-$VERSION-*.src.rpm; then
+        cd rpm/SOURCES
+        rpm2cpio /tmp/${SOURCE_BASE_NAME}-$VERSION-*.src.rpm | cpio -id
+        if ! yum info tcp_wrappers-devel >/dev/null 2>&1; then
+            sed -i'' -e 's/tcp_wrappers-devel/tcp_wrappers/g' ${PACKAGE}.spec
+        fi
+        if ! yum info libdb-devel >/dev/null 2>&1; then
+            sed -i'' -e 's/libdb-devel/db4-devel/g' ${PACKAGE}.spec
+        fi
+        sed -i'' -e 's/BuildArch: noarch//g' ${PACKAGE}.spec
+        mv ${PACKAGE}.spec ../SPECS/
+        cd
+    fi
+else
+    cp /tmp/${SOURCE_BASE_NAME}-$VERSION.* rpm/SOURCES/
+    cp /tmp/${PACKAGE}.spec rpm/SPECS/
+fi
 
 chmod o+rx . rpm rpm/RPMS rpm/SRPMS
 
-rpmbuild -ba rpm/SPECS/${PACKAGE}.spec
+rpmbuild -ba rpm/SPECS/${PACKAGE}.spec ${BUILD_OPTIONS}
 EOF
 
 run chmod +x $BUILD_SCRIPT

  Added: packages/yum/groonga-build-options (+0 -0) 100644
===================================================================
--- /dev/null
+++ packages/yum/groonga-build-options    2011-10-24 05:12:07 +0000 (e69de29)

  Modified: packages/yum/sign-rpm.sh (+2 -4)
===================================================================
--- packages/yum/sign-rpm.sh    2011-10-24 04:28:40 +0000 (2f23844)
+++ packages/yum/sign-rpm.sh    2011-10-24 05:12:07 +0000 (9fa180b)
@@ -20,8 +20,6 @@ run()
 }
 
 for distribution in ${DISTRIBUTIONS}; do
-    run rpm								\
-	-D "_gpg_name `$script_base_dir/gpg-uid.sh`"			\
-	--resign $script_base_dir/${distribution}/*/*/*/*.rpm &
+    run rpm -D "_gpg_name `$script_base_dir/gpg-uid.sh`" \
+	--resign $script_base_dir/${distribution}/*/*/*/*.rpm
 done
-wait

  Modified: packages/yum/update-repository.sh (+7 -6)
===================================================================
--- packages/yum/update-repository.sh    2011-10-24 04:28:40 +0000 (0f3a175)
+++ packages/yum/update-repository.sh    2011-10-24 05:12:07 +0000 (360a491)
@@ -2,13 +2,14 @@
 
 script_base_dir=`dirname $0`
 
-if [ $# != 1 ]; then
-    echo "Usage: $0 DISTRIBUTIONS"
-    echo " e.g.: $0 'fedora centos'"
+if [ $# != 2 ]; then
+    echo "Usage: $0 GPG_KEY_NAME DISTRIBUTIONS"
+    echo " e.g.: $0 mitler-manager 'fedora centos'"
     exit 1
 fi
 
-DISTRIBUTIONS=$1
+GPG_KEY_NAME=$1
+DISTRIBUTIONS=$2
 
 run()
 {
@@ -21,9 +22,9 @@ run()
 
 for distribution in ${DISTRIBUTIONS}; do
     for dir in $script_base_dir/${distribution}/*/*; do
-	run createrepo $dir
+	test -d $dir &&	run createrepo $dir
     done;
 
     run $script_base_dir/gpg-public-key.sh > \
-	$script_base_dir/${distribution}/RPM-GPG-KEY-groonga;
+	$script_base_dir/${distribution}/RPM-GPG-KEY-${GPG_KEY_NAME};
 done




Groonga-commit メーリングリストの案内
Back to archive index