source: projects/vine-rpm-helper/tags/0.6/mkrpmspec.in @ 5177

Revision 5177, 10.0 KB checked in by yasumichi, 12 years ago (diff)

Get summary, url and description from PKG-INFO when PkgType? is Python.

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