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

Revision 6900, 10.2 KB checked in by yasumichi, 12 years ago (diff)

fixed ticket id 2451

 http://mantis.vinelinux.org/view.php?id=2451

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`
[5172]95        elif [ "${PKGTYPE}" = "Python" -a -f ${BUILDDIR}/${PKGDIR}/PKG-INFO ]; then
96                LICENSE=`grep 'License:' ${BUILDDIR}/${PKGDIR}/PKG-INFO | sed -e 's/License: *//'`
[4895]97        elif [ "${PKGTYPE}" = "Perl" ]; then
98                LICENSE="Artistic or GPL"
[4894]99        fi
100
101        if [ "x${LICENSE}" = "x" ]; then
102                LICENSE="FIXEME"
[5173]103        else
104                echo "`eval_gettext "Detect License: \\\${LICENSE}"`"
[4894]105        fi
106}
107
108#
[4879]109# check package type
110#
111CheckPkgType()
112{
[6897]113        while read line
114        do
115                CHKFILE=`echo ${line} | cut -d',' -f1`
116                PKGTYPE=`echo ${line} | cut -d',' -f2`
117                PKG_PREFIX=`echo ${line} | cut -d',' -f3`
118                if [ -f ${BUILDDIR}/${PKGDIR}/${CHKFILE} ]; then
119                        NAME=${PKG_PREFIX}${PKGNAME}
120                        break
121                fi
122                PKGTYPE=
123        done < @PKGDATADIR@/package-types.dat
124
125        # Unknown package type
126        if [ "x${PKGTYPE}" = "x" ]; then
[4925]127                echo "`eval_gettext "Unknown package type."`" 1>&2
[4879]128                exit 1
129        fi
[6897]130
[4927]131        echo "`eval_gettext "Detect package type is \\\${PKGTYPE}."`"
[4889]132
133        # replace SOURCE
134        if [ ${NAME} = ${PKGNAME} ]; then
[5008]135                SOURCE0=`echo ${SOURCE0} | sed -e "s/${PKGNAME}/%{name}/g" -e "s/${PKGVERSION}/%{version}/g"`
[4889]136        else
[6897]137                # make symbolic link
138                LINKTARGET=$(dirname `rpm -E '%_sourcedir'`)/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`
139                if [ ! -r ${LINKTARGET} ]; then
140                        ln -sv ${SOURCEDIR} ${LINKTARGET}
141                fi
[5008]142                SOURCE0=`echo ${SOURCE0} | sed -e "s/${PKGNAME}/%{pkgname}/g" -e "s/${PKGVERSION}/%{version}/g"`
[4889]143        fi
[4879]144}
145
146#
147# check package
148#
149CheckPackage()
150{
[4929]151        if [ ! -f ${PKGSOURCE} ]; then
152                echo "`eval_gettext "Can't find \\\${PKGSOURCE}"`" 1>&2
153                exit
154        fi
[4955]155
[5120]156        PKGDIR=`eval ${LIST_CMD} ${PKGSOURCE} ${ADD_OPT} | head -1 | cut -d'/' -f1`
157        if [ -z "${PKGDIR}" ]; then
[4955]158                echo "`eval_gettext "\\\${PKGSOURCE} is invalid archive."`" 1>&2
159                file ${PKGSOURCE} 1>&2
160                exit 1
161        fi
162
163        RemoveOldDir
[5186]164        if [ ! -d ${BUILDDIR} ]; then
165                mkdir -pv ${BUILDDIR}
166        fi
[4956]167        (cd ${BUILDDIR} && eval ${EXT_CMD} ${PKGSOURCE} ${ADD_OPT})
[4955]168
[4928]169        echo "`eval_gettext "Extracted package to \\\${BUILDDIR}/\\\${PKGDIR}"`"
[4887]170        CheckPkgType
[4885]171        CheckDocumentation
[4880]172        CheckGettexize
[4894]173        CheckLicense
[4879]174}
175
176#
[995]177# check scheme
[1009]178#
[995]179CheckScheme()
180{
[4904]181        case ${ARCHIVE} in
[4705]182                http://* | https://* | ftp://*)
[5008]183                        if wget -P ${SOURCEDIR} -nc ${ARCHIVE} ;then    # download
184                                SOURCE0=${ARCHIVE}
[995]185                        else
186                                exit 1                  # exit when failed download
187                        fi
188                        ;;
189                *)
[4904]190                        if [ -f ${ARCHIVE} ];then
[5008]191                                mkdir -pv ${SOURCEDIR}
192                                echo "move ${ARCHIVE} to ${SOURCEDIR}."
193                                mv ${ARCHIVE} ${SOURCEDIR}
194                                SOURCE0=`basename ${ARCHIVE}`
[995]195                        else
[4904]196                                echo "${ARCHIVE} is not file." 1>&2
[995]197                                exit 1
198                        fi
199                        ;;
200        esac
201}
202
[1009]203#
[4955]204# check packing type
[1009]205#
[4955]206CheckPackType()
[995]207{
[4904]208        case ${ARCHIVE} in
[4956]209                *.tar.bz2)
210                        BASENAME=`basename ${ARCHIVE} .tar.bz2`
211                        PACKTYPE="bzip2"
212                        ;;
213                *.tbz)
214                        BASENAME=`basename ${ARCHIVE} .tbz`
215                        PACKTYPE="bzip2"
216                        ;;
[995]217                *.tar.gz)
[4904]218                        BASENAME=`basename ${ARCHIVE} .tar.gz`
[4955]219                        PACKTYPE="gzip"
[995]220                        ;;
[4956]221                *.tgz)
222                        BASENAME=`basename ${ARCHIVE} .tgz`
223                        PACKTYPE="gzip"
[995]224                        ;;
[4956]225                *.tar.lzma)
226                        BASENAME=`basename ${ARCHIVE} .tar.lzma`
227                        PACKTYPE="lzma"
228                        ;;
229                *.tlz)
230                        BASENAME=`basename ${ARCHIVE} .tlz`
231                        PACKTYPE="lzma"
232                        ;;
[4763]233                *.tar.xz)
[4904]234                        BASENAME=`basename ${ARCHIVE} .tar.xz`
[4955]235                        PACKTYPE="xz"
[4763]236                        ;;
[4956]237                *.txz)
238                        BASENAME=`basename ${ARCHIVE} .txz`
239                        PACKTYPE="xz"
240                        ;;
[995]241                *.zip)
[4904]242                        BASENAME=`basename ${ARCHIVE} .zip`
[4955]243                        PACKTYPE="zip"
[995]244                        ;;
245                *)
246                        echo "Unknown format." 1>&2
247                        exit 1
248                        ;;
249        esac
[4957]250
251        # load plugin
252        if [ -f ${pluginsdir}/${PACKTYPE} ]; then
253                source ${pluginsdir}/${PACKTYPE}
[4955]254        else
[4958]255                echo "`eval_gettext "Can't find \\\${pluginsdir}/\\\${PACKTYPE}"`" 1>&2
[4955]256                exit 1
257        fi
[995]258}
259
[1009]260#
261# output basic information
262#
263OutputBasicInfo()
264{
[4904]265        if [ $NAME != ${PKGNAME} ];then
266                echo "%define   pkgname ${PKGNAME}" > ${SPECFILE}
267                echo >> ${SPECFILE}
[4888]268        else
[4904]269                echo > ${SPECFILE}
[4888]270        fi
271
[4904]272cat >> ${SPECFILE} << EOL
[1009]273# Basic Information
[4904]274Name:           ${NAME}
275Version:        ${PKGVERSION}
[1009]276Release:        1%{?_dist_release}
[4944]277EOL
278
279        echo "`eval_gettext "# Please refer to COPYING etc. and correct License."`" >> ${SPECFILE}
280        echo "License:  ${LICENSE}" >> ${SPECFILE}
281        GROUPS4VINE=/usr/share/doc/rpm-`rpm --version | awk '{ print $3 }'`/GROUPS_for_vine.txt
282        echo "`eval_gettext "# Please refer to \\\${GROUPS4VINE} and correct Group."`" >> ${SPECFILE}
283        echo "Group:            FIXME" >> ${SPECFILE}
[5177]284        if [ "x${URI}" != "x" ]; then
285                echo "URL:      ${URI}" >> ${SPECFILE}
286        fi
[4944]287
288cat >> ${SPECFILE} << EOL
[5008]289Source0:        ${SOURCE0}
[4820]290BuildRoot:      %{_tmppath}/%{name}-%{version}-root
[1009]291
[4820]292Vendor:         Project Vine
293Distribution:   Vine Linux
[4904]294Packager:       ${TRACKID}
[1009]295
[5177]296Summary:        ${SUMMARY}
[4909]297EOL
[1209]298
[4944]299        case ${LANG} in
300        ja_JP*)
301                echo "`eval_gettext "Summary(ja):       Describe summary here in Japanese."`" >> ${SPECFILE}
302                ;;
303        esac
304        echo >> ${SPECFILE}
305
[4909]306        OutputDependency
307
308cat >> ${SPECFILE} << EOL
[1009]309%description
[4944]310EOL
[1009]311
[5177]312        if [ -f ${SOURCEDIR}/description.mkrpmspec ]; then
313                cat ${SOURCEDIR}/description.mkrpmspec >> ${SPECFILE}
314        else
315                echo "FIXME" >> ${SPECFILE}
316        fi
317        echo >> ${SPECFILE}
318
[4944]319        case ${LANG} in
320        ja_JP*)
321                echo "%description -l ja" >> ${SPECFILE}
322                echo "`eval_gettext "describe description here in Japanese."`" >> ${SPECFILE}
323                echo >> ${SPECFILE}
324                ;;
325        esac
[1009]326}
327
328#
329# Output prep section
330#
331OutputPrep()
332{
[4904]333        echo '%prep' >> ${SPECFILE}
[1009]334
[4900]335        if [ "${NAME}-${PKGVERSION}" != "${PKGDIR}" ]; then
[4879]336                SETUPOPT=" -n ${PKGDIR}"
337        fi
[1009]338        # setup corresponding to suffix
[4955]339        case ${PACKTYPE} in
[4956]340                bzip2 | gzip | lzma | xz)
[4904]341                        echo "%setup -q${SETUPOPT}" >> ${SPECFILE}
[1009]342                        ;;
[4955]343                zip)
[5126]344                        echo "rm -rf %{_builddir}/${PKGDIR}" >> ${SPECFILE}
[4904]345                        echo 'unzip -xq %{SOURCE0}' >> ${SPECFILE}
[5126]346                        echo "%setup -D -T %{name}-%{version}" >> ${SPECFILE}
[1009]347                        ;;     
348        esac
349
[4904]350        echo '' >> ${SPECFILE}
[1009]351}
352
353#
[4938]354# Output clean section
355#
356OutputClean()
357{
[4904]358cat >> ${SPECFILE} << EOL
[4885]359
[1009]360%clean
[1180]361%{__rm} -rf \${RPM_BUILD_ROOT}
[1009]362
363
364EOL
365}
366
367#
368# Output file list
369#
370OutputFileList()
371{
[4880]372        if [ "${GETTEXTIZE}" = "yes" ]; then
[4904]373                echo "%files -f %{name}.lang" >> ${SPECFILE}
[6900]374        elif [ "${PKGTYPE}" = "Perl-ArchDepend" -o "${PKGTYPE}" = "Perl-NoArch" ]; then
[4904]375                echo "%files -f %{name}.files" >> ${SPECFILE}
[4880]376        else
[4904]377                echo "%files" >> ${SPECFILE}
[4880]378        fi
379
[1009]380# ToDo: check file exists
[4904]381cat >> ${SPECFILE} << EOL
[1009]382%defattr(-,root,root)
[4885]383EOL
[1009]384
[4885]385        if [ "x${DOCFILES}" != "x" ]; then
[4904]386                echo "%doc${DOCFILES}" >> ${SPECFILE}
[4885]387        fi
388
[4904]389        echo >> ${SPECFILE}
[1009]390}
391
392#
393# Output ChangeLog
394#
395OutputChangeLog()
396{
[4904]397cat >> ${SPECFILE} << EOL
[1009]398%changelog
[4884]399* `LANG=C LANGUAGE=C LC_ALL=C date '+%a %b %d %Y'` $FULLNAME <$EMAIL> $PKGVERSION-1
[1009]400- initial build for Vine Linux
401EOL
402}
403
404#
405# main
406#
407
[4968]408#
409# parse arguments.
410#
[995]411if [ -z "$*" ]; then
[4968]412        print_usage
[995]413        exit 1
414fi
415
[4968]416while [ ! -z "$*" ]
417do
418        case $1 in
419                --pkgname=*)
420                        PKGNAME=`echo $1 | sed -e 's/--pkgname=//'`
421                        ;;
422                --pkgversion=*)
423                        PKGVERSION=`echo $1 | sed -e 's/--pkgversion=//'`
424                        ;;
425                --help)
426                        print_usage
427                        exit
428                        ;;
429                --version)
430                        print_version
431                        exit
432                        ;;
433                -*)
434                        OPTION=`echo $1 | sed -e 's/=.*//'`
435                        echo "`eval_gettext "Unknown option: \\\${OPTION}"`" >&2
436                        echo >&2
437                        print_usage
438                        exit 1
439                        ;;
440                *)
441                        if [ -z "${ARCHIVE}" ]; then
442                                ARCHIVE=$1
443                        else
444                                echo "`eval_gettext "Too many arguments."`" >&2
445                                echo >&2
446                                print_usage
447                                exit 1
448                        fi
449                        ;;
450        esac
451        shift
452done
[995]453
[4884]454# load configuration
455if [ -f $HOME/.config/vine-rpm-helper/mkrpmspec.conf ]; then
456        source $HOME/.config/vine-rpm-helper/mkrpmspec.conf
457else
458        TRACKID="FIXME"
459        FULLNAME="Your Name"
460        EMAIL="name@yours.example.com"
461fi
462
[4955]463CheckPackType
[995]464
[4968]465if [ -z "${PKGNAME}" ]; then
466        PKGNAME=`echo ${BASENAME} | sed -e 's/-[0-9][0-9.]*.*//'`
467fi
468if [ -z "${PKGVERSION}" ]; then
469        PKGVERSION=`echo ${BASENAME} | sed -e 's/^.*-\([0-9][0-9.]*.*\)/\1/'`
470fi
[4600]471SOURCEDIR=`rpm -E '%_sourcedir' | sed -e "s|%{name}|${PKGNAME}|"`
[4879]472PKGSOURCE=${SOURCEDIR}/`basename ${ARCHIVE}`
473BUILDDIR=`rpm -E '%_builddir'`
[995]474
[4600]475CheckScheme
476
[4888]477CheckPackage
478
479SPECDIR=`rpm -E '%_specdir'`/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`
[4923]480mkdir -pv ${SPECDIR}
[4888]481SPECFILE=${SPECDIR}/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`-vl.spec
[995]482
[4897]483# Backup spec file
484if [ -f ${SPECFILE} ]; then
485        cp -v ${SPECFILE}{,.`LANG=C LANGUAGE=C LC_ALL=C date '+%Y%m%d%H%M%S'`}
486fi
487
[4939]488# Load plugins
489if [ -f ${pluginsdir}/${PKGTYPE} ]; then
490        source ${pluginsdir}/${PKGTYPE}
491else
492        echo "`eval_gettext "Can't find \\\${pluginsdir}/\\\${PKGTYPE}"`" 1>&2
493        exit 1
494fi
495
[5177]496# Get basic info
497SUMMARY=
498URI=
499if [ "${PKGTYPE}" = "Python" ]; then
500        GetBasicInfo
501fi
502
503if [ "x${SUMMARY}" = "x" ];then
504        SUMMARY="FIXME"
505fi
506
[995]507# Output SPEC file.
[1009]508OutputBasicInfo
509OutputPrep
510OutputBuild
511OutputInstall
[4939]512
513if [ "${GETTEXTIZE}" = "yes" ]; then
514        echo >> ${SPECFILE}
515        echo "%find_lang %{name}" >> ${SPECFILE}
516        echo >> ${SPECFILE}
517fi
518
[4938]519OutputClean
[1009]520OutputFileList
521OutputChangeLog
[995]522
[1009]523# Output result
[4944]524echo "`eval_gettext "Created \\\${SPECFILE}"`"
Note: See TracBrowser for help on using the repository browser.