#!/bin/sh # # remove old directory # RemoveOldDir() { rm -rf ${BUILDDIR}/${PKGDIR} } # # check documentation # CheckDocumentation() { DOCFILES= for FILE in AUTHORS COPYING ChangeLog Changes HACKING LICENSE MAINTAINERS NEWS README THANKS TODO do if [ -f ${BUILDDIR}/${PKGDIR}/${FILE} ]; then echo "Found: ${FILE}" DOCFILES="${DOCFILES} ${FILE}" fi done } # # check gettextize # CheckGettexize() { if [ -d ${BUILDDIR}/${PKGDIR}/po ];then GETTEXTIZE=yes else GETTEXTIZE=no fi } # # check license # CheckLicense() { LICENSE= if [ -f ${BUILDDIR}/${PKGDIR}/COPYING ]; then MD5SUM=`md5sum ${BUILDDIR}/${PKGDIR}/COPYING` LICENSE=`grep ${MD5SUM} @PKGDATADIR@/licences-md5sum.dat | cut -f2` elif [ "${PKGTYPE}" = "Perl" ]; then LICENSE="Artistic or GPL" fi if [ "x${LICENSE}" = "x" ]; then LICENSE="FIXEME" fi } # # check package type # CheckPkgType() { if [ -f ${BUILDDIR}/${PKGDIR}/Makefile.PL ]; then PKGTYPE=Perl NAME="perl-%{pkgname}" LINKTARGET=$(dirname `rpm -E '%_sourcedir'`)/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"` if [ ! -r ${LINKTARGET} ]; then ln -sv ${SOURCEDIR} ${LINKTARGET} fi elif [ -f ${BUILDDIR}/${PKGDIR}/setup.py ]; then PKGTYPE=Python NAME=$PKGNAME elif [ -f ${BUILDDIR}/${PKGDIR}/configure ]; then PKGTYPE=autotoolize NAME=$PKGNAME else echo "Unknown package type." 1>&2 exit 1 fi echo "パッケージは ${PKGTYPE} パッケージであると認識ました。" # replace SOURCE if [ ${NAME} = ${PKGNAME} ]; then SOURCE=`echo ${SOURCE} | sed -e "s/${PKGNAME}/%{name}/g" -e "s/${PKGVERSION}/%{version}/g"` else SOURCE=`echo ${SOURCE} | sed -e "s/${PKGNAME}/%{pkgname}/g" -e "s/${PKGVERSION}/%{version}/g"` fi } # # check package # CheckPackage() { case $SUFFIX in .tar.gz) PKGDIR=$(basename `tar ztf ${PKGSOURCE} | head -1`) RemoveOldDir (cd $BUILDDIR && tar zxf ${PKGSOURCE}) ;; .tar.bz2) PKGDIR=$(basename `tar jtf ${PKGSOURCE} | head -1`) RemoveOldDir (cd $BUILDDIR && tar jxf ${PKGSOURCE}) ;; *.tar.xz) PKGDIR=$(basename `tar Jtf ${PKGSOURCE} | head -1`) RemoveOldDir (cd $BUILDDIR && tar Jxf ${PKGSOURCE}) ;; *) echo "Unknown format." 1>&2 exit 1 ;; esac echo "パッケージを ${BUILDDIR}/${PKGDIR} に展開しました。" CheckPkgType CheckDocumentation CheckGettexize CheckLicense } # # check scheme # CheckScheme() { case $ARCHIVE in http://* | https://* | ftp://*) if wget -P $SOURCEDIR -nc $ARCHIVE ;then # download SOURCE=$ARCHIVE else exit 1 # exit when failed download fi ;; *) if [ -f $ARCHIVE ];then mkdir -p $SOURCEDIR echo "move $ARCHIVE to $SOURCEDIR." mv $ARCHIVE $SOURCEDIR SOURCE=`basename $ARCHIVE` else echo "$ARCHIVE is not file." 1>&2 exit 1 fi ;; esac } # # check suffix # CheckSuffix() { case $ARCHIVE in *.tar.gz) BASENAME=`basename $ARCHIVE .tar.gz` SUFFIX=".tar.gz" ;; *.tar.bz2) BASENAME=`basename $ARCHIVE .tar.bz2` SUFFIX=".tar.bz2" ;; *.tar.xz) BASENAME=`basename $ARCHIVE .tar.xz` SUFFIX=".tar.xz" ;; *.zip) BASENAME=`basename $ARCHIVE .zip` SUFFIX=".zip" ;; *) echo "Unknown format." 1>&2 exit 1 ;; esac } # # output basic information # OutputBasicInfo() { if [ $NAME != $PKGNAME ];then echo "%define pkgname $PKGNAME" > $SPECFILE echo >> $SPECFILE else echo > $SPECFILE fi cat >> $SPECFILE << EOL # Basic Information Name: $NAME Version: $PKGVERSION Release: 1%{?_dist_release} # License は、COPYING などのファイルを参考に適切なものに変更してください。 License: $LICENSE # Group は、/usr/share/doc/rpm-`rpm --version | awk '{ print $3 }'`/GROUPS_for_vine.txt を参照して適切なものに変更してください。 Group: FIXME Source0: $SOURCE BuildRoot: %{_tmppath}/%{name}-%{version}-root Vendor: Project Vine Distribution: Vine Linux Packager: $TRACKID Summary: FIXME Summary(ja): ここに日本語で概要を記述してください # Dependency # 以下に依存関係を記述してください。 %description FIXME %description -l ja ここに日本語で詳細を記述してください。 EOL } # # Output prep section # OutputPrep() { echo '%prep' >> $SPECFILE if [ "${PKGNAME}-${PKGVERSION}" != "${PKGDIR}" ]; then SETUPOPT=" -n ${PKGDIR}" fi # setup corresponding to suffix case $SUFFIX in .tar.gz | .tar.bz2 | .tar.xz) echo "%setup -q${SETUPOPT}" >> $SPECFILE ;; .zip) echo "%setup -T %{name}-%{version}" >> $SPECFILE echo 'unzip -xq %{SOURCE0}' >> $SPECFILE ;; esac echo '' >> $SPECFILE } # # Output build section # OutputBuild() { echo '%build' >> $SPECFILE case ${PKGTYPE} in Perl) echo 'make Makefile.PL' >> $SPECFILE echo '%{__make}' >> $SPECFILE ;; Python) echo '%{__python} setup.py build' >> $SPECFILE ;; autotoolize) echo '%configure' >> $SPECFILE echo '%{__make} %{?_smp_mflags}' >> $SPECFILE ;; esac echo '' >> $SPECFILE } # # Output install section # OutputInstall() { cat >> $SPECFILE << EOL %install %{__rm} -rf \${RPM_BUILD_ROOT} EOL case ${PKGTYPE} in Python) echo "%{__python} setup.py install --root=${RPM_BUILD_ROOT}" >> $SPECFILE ;; Perl|autotoolize) echo "%{__make} install DESTDIR=\${RPM_BUILD_ROOT}" >> $SPECFILE ;; esac if [ "${GETTEXTIZE}" = "yes" ]; then echo >> $SPECFILE echo "%find_lang %{name}" >> $SPECFILE echo >> $SPECFILE fi cat >> $SPECFILE << EOL %clean %{__rm} -rf \${RPM_BUILD_ROOT} EOL } # # Output file list # OutputFileList() { if [ "${GETTEXTIZE}" = "yes" ]; then echo "%files -f %{name}.lang" >> $SPECFILE else echo "%files" >> $SPECFILE fi # ToDo: check file exists cat >> $SPECFILE << EOL %defattr(-,root,root) EOL if [ "x${DOCFILES}" != "x" ]; then echo "%doc${DOCFILES}" >> $SPECFILE fi echo >> $SPECFILE } # # Output ChangeLog # OutputChangeLog() { cat >> $SPECFILE << EOL %changelog * `LANG=C LANGUAGE=C LC_ALL=C date '+%a %b %d %Y'` $FULLNAME <$EMAIL> $PKGVERSION-1 - initial build for Vine Linux EOL } # # main # # check arguments if [ -z "$*" ]; then echo "Usage: `basename $0` source-archive" exit 1 fi ARCHIVE=$1 # load configuration if [ -f $HOME/.config/vine-rpm-helper/mkrpmspec.conf ]; then source $HOME/.config/vine-rpm-helper/mkrpmspec.conf else TRACKID="FIXME" FULLNAME="Your Name" EMAIL="name@yours.example.com" fi CheckSuffix PKGNAME=`echo $BASENAME | sed -e 's/-[0-9][0-9.]*.*//'` PKGVERSION=`echo $BASENAME | sed -e 's/^.*-\([0-9][0-9.]*.*\)/\1/'` SOURCE=`echo $SOURCE | sed -e "s/$PKGNAME/%{name}/g" | sed -e "s/$PKGVERSION/%{version}/g"` SOURCEDIR=`rpm -E '%_sourcedir' | sed -e "s|%{name}|${PKGNAME}|"` PKGSOURCE=${SOURCEDIR}/`basename ${ARCHIVE}` BUILDDIR=`rpm -E '%_builddir'` CheckScheme CheckPackage SPECDIR=`rpm -E '%_specdir'`/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"` mkdir -p ${SPECDIR} SPECFILE=${SPECDIR}/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`-vl.spec # Backup spec file if [ -f ${SPECFILE} ]; then cp -v ${SPECFILE}{,.`LANG=C LANGUAGE=C LC_ALL=C date '+%Y%m%d%H%M%S'`} fi # Output SPEC file. OutputBasicInfo OutputPrep OutputBuild OutputInstall OutputFileList OutputChangeLog # Output result echo "made $SPECFILE"