source: projects/vine-rpm-helper/trunk/mkrpmspec.in @ 5126

Revision 5126, 9.4 KB checked in by yasumichi, 13 years ago (diff)

fixed prep section when source is zip archive.

RevLine 
[995]1#!/bin/sh
2
[4928]3# Directory
4prefix=@prefix@
5datarootdir=@datarootdir@
6datadir=@datadir@
[4939]7exec_prefix=@exec_prefix@
8libdir=@libdir@
9pluginsdir=${libdir}/vine-rpm-helper
[4928]10
11# Enable NLS
12export TEXTDOMAIN=vine-rpm-helper
13export TEXTDOMAINDIR=@localedir@
14
[4929]15. gettext.sh
16
[4968]17MYNAME=`basename $0`
18MYVERSION=@PACKAGE_VERSION@
19
[1009]20#
[4968]21# Usage
22#
23print_usage()
24{
25        echo "`eval_gettext "\\\${MYNAME} download software package and create spec file template."`"
26        echo
[4972]27        echo "`eval_gettext "Usage: \\\${MYNAME} [OPTION]... ARCHIVE"`"
[4968]28        echo
29        echo "`eval_gettext "      --pkgname=NAME        overwrite package name"`"
30        echo "`eval_gettext "      --pkgversion=VERSION  overwrite package version"`"
31        echo "`eval_gettext "      --help                display help and exit"`"
32        echo "`eval_gettext "      --version             output version information and exit"`"
33}
34
35#
36# Version
37#
38print_version()
39{
40        echo "`eval_gettext "\\\${MYNAME} \\\${MYVERSION}"`"
41        echo
42        echo "`eval_gettext "Copyright (C) 2011 Project Vine."`"
43        echo "`eval_gettext "This is free software; see the source for copying conditions.  There is NO"`"
44        echo "`eval_gettext "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."`"
45        echo
46        echo "`eval_gettext "Written by Yasumichi Akahoshi <yasumichi@vinelinux.org>"`"
47}
48
49#
[4879]50# remove old directory
51#
52RemoveOldDir()
53{
[4954]54        if [ -n "${PKGDIR}" ]; then
55                rm -rf ${BUILDDIR}/${PKGDIR}
56        fi
[4879]57}
58
59#
[4885]60# check documentation
61#
62CheckDocumentation()
63{
64        DOCFILES=
[4886]65        for FILE in AUTHORS COPYING ChangeLog Changes HACKING LICENSE MAINTAINERS NEWS README THANKS TODO
[4885]66        do
67                if [ -f ${BUILDDIR}/${PKGDIR}/${FILE} ]; then
[4946]68                        echo "`eval_gettext "Found documentation: \\\${FILE}"`"
[4885]69                        DOCFILES="${DOCFILES} ${FILE}"
70                fi
71        done
72}
73
74#
[4880]75# check gettextize
76#
77CheckGettexize()
78{
79        if [ -d ${BUILDDIR}/${PKGDIR}/po ];then
80                GETTEXTIZE=yes
81        else
82                GETTEXTIZE=no
83        fi
84}
85
86#
[4894]87# check license
88#
89CheckLicense()
90{
91        LICENSE=
92        if [ -f ${BUILDDIR}/${PKGDIR}/COPYING ]; then
93                MD5SUM=`md5sum ${BUILDDIR}/${PKGDIR}/COPYING`
94                LICENSE=`grep ${MD5SUM} @PKGDATADIR@/licences-md5sum.dat | cut -f2`
[4895]95        elif [ "${PKGTYPE}" = "Perl" ]; then
96                LICENSE="Artistic or GPL"
[4894]97        fi
98
99        if [ "x${LICENSE}" = "x" ]; then
100                LICENSE="FIXEME"
101        fi
102}
103
104#
[4879]105# check package type
106#
107CheckPkgType()
108{
109        if [ -f ${BUILDDIR}/${PKGDIR}/Makefile.PL ]; then
110                PKGTYPE=Perl
[4888]111                NAME="perl-%{pkgname}"
112                LINKTARGET=$(dirname `rpm -E '%_sourcedir'`)/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`
113                if [ ! -r ${LINKTARGET} ]; then
114                        ln -sv ${SOURCEDIR} ${LINKTARGET}
115                fi
[4879]116        elif [ -f ${BUILDDIR}/${PKGDIR}/setup.py ]; then
117                PKGTYPE=Python
[4904]118                NAME=${PKGNAME}
[4879]119        elif [ -f ${BUILDDIR}/${PKGDIR}/configure ]; then
120                PKGTYPE=autotoolize
[4904]121                NAME=${PKGNAME}
[4879]122        else
[4925]123                echo "`eval_gettext "Unknown package type."`" 1>&2
[4879]124                exit 1
125        fi
[4927]126        echo "`eval_gettext "Detect package type is \\\${PKGTYPE}."`"
[4889]127
128        # replace SOURCE
129        if [ ${NAME} = ${PKGNAME} ]; then
[5008]130                SOURCE0=`echo ${SOURCE0} | sed -e "s/${PKGNAME}/%{name}/g" -e "s/${PKGVERSION}/%{version}/g"`
[4889]131        else
[5008]132                SOURCE0=`echo ${SOURCE0} | sed -e "s/${PKGNAME}/%{pkgname}/g" -e "s/${PKGVERSION}/%{version}/g"`
[4889]133        fi
[4879]134}
135
136#
137# check package
138#
139CheckPackage()
140{
[4929]141        if [ ! -f ${PKGSOURCE} ]; then
142                echo "`eval_gettext "Can't find \\\${PKGSOURCE}"`" 1>&2
143                exit
144        fi
[4955]145
[5120]146        PKGDIR=`eval ${LIST_CMD} ${PKGSOURCE} ${ADD_OPT} | head -1 | cut -d'/' -f1`
147        if [ -z "${PKGDIR}" ]; then
[4955]148                echo "`eval_gettext "\\\${PKGSOURCE} is invalid archive."`" 1>&2
149                file ${PKGSOURCE} 1>&2
150                exit 1
151        fi
152
153        RemoveOldDir
[4956]154        (cd ${BUILDDIR} && eval ${EXT_CMD} ${PKGSOURCE} ${ADD_OPT})
[4955]155
[4928]156        echo "`eval_gettext "Extracted package to \\\${BUILDDIR}/\\\${PKGDIR}"`"
[4887]157        CheckPkgType
[4885]158        CheckDocumentation
[4880]159        CheckGettexize
[4894]160        CheckLicense
[4879]161}
162
163#
[995]164# check scheme
[1009]165#
[995]166CheckScheme()
167{
[4904]168        case ${ARCHIVE} in
[4705]169                http://* | https://* | ftp://*)
[5008]170                        if wget -P ${SOURCEDIR} -nc ${ARCHIVE} ;then    # download
171                                SOURCE0=${ARCHIVE}
[995]172                        else
173                                exit 1                  # exit when failed download
174                        fi
175                        ;;
176                *)
[4904]177                        if [ -f ${ARCHIVE} ];then
[5008]178                                mkdir -pv ${SOURCEDIR}
179                                echo "move ${ARCHIVE} to ${SOURCEDIR}."
180                                mv ${ARCHIVE} ${SOURCEDIR}
181                                SOURCE0=`basename ${ARCHIVE}`
[995]182                        else
[4904]183                                echo "${ARCHIVE} is not file." 1>&2
[995]184                                exit 1
185                        fi
186                        ;;
187        esac
188}
189
[1009]190#
[4955]191# check packing type
[1009]192#
[4955]193CheckPackType()
[995]194{
[4904]195        case ${ARCHIVE} in
[4956]196                *.tar.bz2)
197                        BASENAME=`basename ${ARCHIVE} .tar.bz2`
198                        PACKTYPE="bzip2"
199                        ;;
200                *.tbz)
201                        BASENAME=`basename ${ARCHIVE} .tbz`
202                        PACKTYPE="bzip2"
203                        ;;
[995]204                *.tar.gz)
[4904]205                        BASENAME=`basename ${ARCHIVE} .tar.gz`
[4955]206                        PACKTYPE="gzip"
[995]207                        ;;
[4956]208                *.tgz)
209                        BASENAME=`basename ${ARCHIVE} .tgz`
210                        PACKTYPE="gzip"
[995]211                        ;;
[4956]212                *.tar.lzma)
213                        BASENAME=`basename ${ARCHIVE} .tar.lzma`
214                        PACKTYPE="lzma"
215                        ;;
216                *.tlz)
217                        BASENAME=`basename ${ARCHIVE} .tlz`
218                        PACKTYPE="lzma"
219                        ;;
[4763]220                *.tar.xz)
[4904]221                        BASENAME=`basename ${ARCHIVE} .tar.xz`
[4955]222                        PACKTYPE="xz"
[4763]223                        ;;
[4956]224                *.txz)
225                        BASENAME=`basename ${ARCHIVE} .txz`
226                        PACKTYPE="xz"
227                        ;;
[995]228                *.zip)
[4904]229                        BASENAME=`basename ${ARCHIVE} .zip`
[4955]230                        PACKTYPE="zip"
[995]231                        ;;
232                *)
233                        echo "Unknown format." 1>&2
234                        exit 1
235                        ;;
236        esac
[4957]237
238        # load plugin
239        if [ -f ${pluginsdir}/${PACKTYPE} ]; then
240                source ${pluginsdir}/${PACKTYPE}
[4955]241        else
[4958]242                echo "`eval_gettext "Can't find \\\${pluginsdir}/\\\${PACKTYPE}"`" 1>&2
[4955]243                exit 1
244        fi
[995]245}
246
[1009]247#
248# output basic information
249#
250OutputBasicInfo()
251{
[4904]252        if [ $NAME != ${PKGNAME} ];then
253                echo "%define   pkgname ${PKGNAME}" > ${SPECFILE}
254                echo >> ${SPECFILE}
[4888]255        else
[4904]256                echo > ${SPECFILE}
[4888]257        fi
258
[4904]259cat >> ${SPECFILE} << EOL
[1009]260# Basic Information
[4904]261Name:           ${NAME}
262Version:        ${PKGVERSION}
[1009]263Release:        1%{?_dist_release}
[4944]264EOL
265
266        echo "`eval_gettext "# Please refer to COPYING etc. and correct License."`" >> ${SPECFILE}
267        echo "License:  ${LICENSE}" >> ${SPECFILE}
268        GROUPS4VINE=/usr/share/doc/rpm-`rpm --version | awk '{ print $3 }'`/GROUPS_for_vine.txt
269        echo "`eval_gettext "# Please refer to \\\${GROUPS4VINE} and correct Group."`" >> ${SPECFILE}
270        echo "Group:            FIXME" >> ${SPECFILE}
271
272cat >> ${SPECFILE} << EOL
[5008]273Source0:        ${SOURCE0}
[4820]274BuildRoot:      %{_tmppath}/%{name}-%{version}-root
[1009]275
[4820]276Vendor:         Project Vine
277Distribution:   Vine Linux
[4904]278Packager:       ${TRACKID}
[1009]279
[4895]280Summary:        FIXME
[4909]281EOL
[1209]282
[4944]283        case ${LANG} in
284        ja_JP*)
285                echo "`eval_gettext "Summary(ja):       Describe summary here in Japanese."`" >> ${SPECFILE}
286                ;;
287        esac
288        echo >> ${SPECFILE}
289
[4909]290        OutputDependency
291
292cat >> ${SPECFILE} << EOL
[1009]293%description
[4895]294FIXME
[1009]295
[4944]296EOL
[1009]297
[4944]298        case ${LANG} in
299        ja_JP*)
300                echo "%description -l ja" >> ${SPECFILE}
301                echo "`eval_gettext "describe description here in Japanese."`" >> ${SPECFILE}
302                echo >> ${SPECFILE}
303                ;;
304        esac
[1009]305}
306
307#
308# Output prep section
309#
310OutputPrep()
311{
[4904]312        echo '%prep' >> ${SPECFILE}
[1009]313
[4900]314        if [ "${NAME}-${PKGVERSION}" != "${PKGDIR}" ]; then
[4879]315                SETUPOPT=" -n ${PKGDIR}"
316        fi
[1009]317        # setup corresponding to suffix
[4955]318        case ${PACKTYPE} in
[4956]319                bzip2 | gzip | lzma | xz)
[4904]320                        echo "%setup -q${SETUPOPT}" >> ${SPECFILE}
[1009]321                        ;;
[4955]322                zip)
[5126]323                        echo "rm -rf %{_builddir}/${PKGDIR}" >> ${SPECFILE}
[4904]324                        echo 'unzip -xq %{SOURCE0}' >> ${SPECFILE}
[5126]325                        echo "%setup -D -T %{name}-%{version}" >> ${SPECFILE}
[1009]326                        ;;     
327        esac
328
[4904]329        echo '' >> ${SPECFILE}
[1009]330}
331
332#
[4938]333# Output clean section
334#
335OutputClean()
336{
[4904]337cat >> ${SPECFILE} << EOL
[4885]338
[1009]339%clean
[1180]340%{__rm} -rf \${RPM_BUILD_ROOT}
[1009]341
342
343EOL
344}
345
346#
347# Output file list
348#
349OutputFileList()
350{
[4880]351        if [ "${GETTEXTIZE}" = "yes" ]; then
[4904]352                echo "%files -f %{name}.lang" >> ${SPECFILE}
[4903]353        elif [ "${PKGTYPE}" = "Perl" ]; then
[4904]354                echo "%files -f %{name}.files" >> ${SPECFILE}
[4880]355        else
[4904]356                echo "%files" >> ${SPECFILE}
[4880]357        fi
358
[1009]359# ToDo: check file exists
[4904]360cat >> ${SPECFILE} << EOL
[1009]361%defattr(-,root,root)
[4885]362EOL
[1009]363
[4885]364        if [ "x${DOCFILES}" != "x" ]; then
[4904]365                echo "%doc${DOCFILES}" >> ${SPECFILE}
[4885]366        fi
367
[4904]368        echo >> ${SPECFILE}
[1009]369}
370
371#
372# Output ChangeLog
373#
374OutputChangeLog()
375{
[4904]376cat >> ${SPECFILE} << EOL
[1009]377%changelog
[4884]378* `LANG=C LANGUAGE=C LC_ALL=C date '+%a %b %d %Y'` $FULLNAME <$EMAIL> $PKGVERSION-1
[1009]379- initial build for Vine Linux
380EOL
381}
382
383#
384# main
385#
386
[4968]387#
388# parse arguments.
389#
[995]390if [ -z "$*" ]; then
[4968]391        print_usage
[995]392        exit 1
393fi
394
[4968]395while [ ! -z "$*" ]
396do
397        case $1 in
398                --pkgname=*)
399                        PKGNAME=`echo $1 | sed -e 's/--pkgname=//'`
400                        ;;
401                --pkgversion=*)
402                        PKGVERSION=`echo $1 | sed -e 's/--pkgversion=//'`
403                        ;;
404                --help)
405                        print_usage
406                        exit
407                        ;;
408                --version)
409                        print_version
410                        exit
411                        ;;
412                -*)
413                        OPTION=`echo $1 | sed -e 's/=.*//'`
414                        echo "`eval_gettext "Unknown option: \\\${OPTION}"`" >&2
415                        echo >&2
416                        print_usage
417                        exit 1
418                        ;;
419                *)
420                        if [ -z "${ARCHIVE}" ]; then
421                                ARCHIVE=$1
422                        else
423                                echo "`eval_gettext "Too many arguments."`" >&2
424                                echo >&2
425                                print_usage
426                                exit 1
427                        fi
428                        ;;
429        esac
430        shift
431done
[995]432
[4884]433# load configuration
434if [ -f $HOME/.config/vine-rpm-helper/mkrpmspec.conf ]; then
435        source $HOME/.config/vine-rpm-helper/mkrpmspec.conf
436else
437        TRACKID="FIXME"
438        FULLNAME="Your Name"
439        EMAIL="name@yours.example.com"
440fi
441
[4955]442CheckPackType
[995]443
[4968]444if [ -z "${PKGNAME}" ]; then
445        PKGNAME=`echo ${BASENAME} | sed -e 's/-[0-9][0-9.]*.*//'`
446fi
447if [ -z "${PKGVERSION}" ]; then
448        PKGVERSION=`echo ${BASENAME} | sed -e 's/^.*-\([0-9][0-9.]*.*\)/\1/'`
449fi
[4600]450SOURCEDIR=`rpm -E '%_sourcedir' | sed -e "s|%{name}|${PKGNAME}|"`
[4879]451PKGSOURCE=${SOURCEDIR}/`basename ${ARCHIVE}`
452BUILDDIR=`rpm -E '%_builddir'`
[995]453
[4600]454CheckScheme
455
[4888]456CheckPackage
457
458SPECDIR=`rpm -E '%_specdir'`/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`
[4923]459mkdir -pv ${SPECDIR}
[4888]460SPECFILE=${SPECDIR}/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`-vl.spec
[995]461
[4897]462# Backup spec file
463if [ -f ${SPECFILE} ]; then
464        cp -v ${SPECFILE}{,.`LANG=C LANGUAGE=C LC_ALL=C date '+%Y%m%d%H%M%S'`}
465fi
466
[4939]467# Load plugins
468if [ -f ${pluginsdir}/${PKGTYPE} ]; then
469        source ${pluginsdir}/${PKGTYPE}
470else
471        echo "`eval_gettext "Can't find \\\${pluginsdir}/\\\${PKGTYPE}"`" 1>&2
472        exit 1
473fi
474
[995]475# Output SPEC file.
[1009]476OutputBasicInfo
477OutputPrep
478OutputBuild
479OutputInstall
[4939]480
481if [ "${GETTEXTIZE}" = "yes" ]; then
482        echo >> ${SPECFILE}
483        echo "%find_lang %{name}" >> ${SPECFILE}
484        echo >> ${SPECFILE}
485fi
486
[4938]487OutputClean
[1009]488OutputFileList
489OutputChangeLog
[995]490
[1009]491# Output result
[4944]492echo "`eval_gettext "Created \\\${SPECFILE}"`"
Note: See TracBrowser for help on using the repository browser.