source: projects/vine-rpm-helper/tags/0.5/mkrpmspec.in @ 4972

Revision 4972, 9.5 KB checked in by yasumichi, 13 years ago (diff)

msgid を正しくエスケープした

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}" = "Perl" ]; then
96                LICENSE="Artistic or GPL"
97        fi
98
99        if [ "x${LICENSE}" = "x" ]; then
100                LICENSE="FIXEME"
101        fi
102}
103
104#
105# check package type
106#
107CheckPkgType()
108{
109        if [ -f ${BUILDDIR}/${PKGDIR}/Makefile.PL ]; then
110                PKGTYPE=Perl
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
116        elif [ -f ${BUILDDIR}/${PKGDIR}/setup.py ]; then
117                PKGTYPE=Python
118                NAME=${PKGNAME}
119        elif [ -f ${BUILDDIR}/${PKGDIR}/configure ]; then
120                PKGTYPE=autotoolize
121                NAME=${PKGNAME}
122        else
123                echo "`eval_gettext "Unknown package type."`" 1>&2
124                exit 1
125        fi
126        echo "`eval_gettext "Detect package type is \\\${PKGTYPE}."`"
127
128        # replace SOURCE
129        if [ ${NAME} = ${PKGNAME} ]; then
130                SOURCE=`echo ${SOURCE} | sed -e "s/${PKGNAME}/%{name}/g" -e "s/${PKGVERSION}/%{version}/g"`
131        else
132                SOURCE=`echo ${SOURCE} | sed -e "s/${PKGNAME}/%{pkgname}/g" -e "s/${PKGVERSION}/%{version}/g"`
133        fi
134}
135
136#
137# check package
138#
139CheckPackage()
140{
141        if [ ! -f ${PKGSOURCE} ]; then
142                echo "`eval_gettext "Can't find \\\${PKGSOURCE}"`" 1>&2
143                exit
144        fi
145
146        FIRST=`eval ${LIST_CMD} ${PKGSOURCE} ${ADD_OPT} | head -1`
147        if [ -z "${FIRST}" ]; then
148                echo "`eval_gettext "\\\${PKGSOURCE} is invalid archive."`" 1>&2
149                file ${PKGSOURCE} 1>&2
150                exit 1
151        fi
152
153        PKGDIR=`basename ${FIRST}`
154        RemoveOldDir
155        (cd ${BUILDDIR} && eval ${EXT_CMD} ${PKGSOURCE} ${ADD_OPT})
156
157        echo "`eval_gettext "Extracted package to \\\${BUILDDIR}/\\\${PKGDIR}"`"
158        CheckPkgType
159        CheckDocumentation
160        CheckGettexize
161        CheckLicense
162}
163
164#
165# check scheme
166#
167CheckScheme()
168{
169        case ${ARCHIVE} in
170                http://* | https://* | ftp://*)
171                        if wget -P $SOURCEDIR -nc ${ARCHIVE} ;then      # download
172                                SOURCE=${ARCHIVE}
173                        else
174                                exit 1                  # exit when failed download
175                        fi
176                        ;;
177                *)
178                        if [ -f ${ARCHIVE} ];then
179                                mkdir -pv $SOURCEDIR
180                                echo "move ${ARCHIVE} to $SOURCEDIR."
181                                mv ${ARCHIVE} $SOURCEDIR
182                                SOURCE=`basename ${ARCHIVE}`
183                        else
184                                echo "${ARCHIVE} is not file." 1>&2
185                                exit 1
186                        fi
187                        ;;
188        esac
189}
190
191#
192# check packing type
193#
194CheckPackType()
195{
196        case ${ARCHIVE} in
197                *.tar.bz2)
198                        BASENAME=`basename ${ARCHIVE} .tar.bz2`
199                        PACKTYPE="bzip2"
200                        ;;
201                *.tbz)
202                        BASENAME=`basename ${ARCHIVE} .tbz`
203                        PACKTYPE="bzip2"
204                        ;;
205                *.tar.gz)
206                        BASENAME=`basename ${ARCHIVE} .tar.gz`
207                        PACKTYPE="gzip"
208                        ;;
209                *.tgz)
210                        BASENAME=`basename ${ARCHIVE} .tgz`
211                        PACKTYPE="gzip"
212                        ;;
213                *.tar.lzma)
214                        BASENAME=`basename ${ARCHIVE} .tar.lzma`
215                        PACKTYPE="lzma"
216                        ;;
217                *.tlz)
218                        BASENAME=`basename ${ARCHIVE} .tlz`
219                        PACKTYPE="lzma"
220                        ;;
221                *.tar.xz)
222                        BASENAME=`basename ${ARCHIVE} .tar.xz`
223                        PACKTYPE="xz"
224                        ;;
225                *.txz)
226                        BASENAME=`basename ${ARCHIVE} .txz`
227                        PACKTYPE="xz"
228                        ;;
229                *.zip)
230                        BASENAME=`basename ${ARCHIVE} .zip`
231                        PACKTYPE="zip"
232                        ;;
233                *)
234                        echo "Unknown format." 1>&2
235                        exit 1
236                        ;;
237        esac
238
239        # load plugin
240        if [ -f ${pluginsdir}/${PACKTYPE} ]; then
241                source ${pluginsdir}/${PACKTYPE}
242        else
243                echo "`eval_gettext "Can't find \\\${pluginsdir}/\\\${PACKTYPE}"`" 1>&2
244                exit 1
245        fi
246}
247
248#
249# output basic information
250#
251OutputBasicInfo()
252{
253        if [ $NAME != ${PKGNAME} ];then
254                echo "%define   pkgname ${PKGNAME}" > ${SPECFILE}
255                echo >> ${SPECFILE}
256        else
257                echo > ${SPECFILE}
258        fi
259
260cat >> ${SPECFILE} << EOL
261# Basic Information
262Name:           ${NAME}
263Version:        ${PKGVERSION}
264Release:        1%{?_dist_release}
265EOL
266
267        echo "`eval_gettext "# Please refer to COPYING etc. and correct License."`" >> ${SPECFILE}
268        echo "License:  ${LICENSE}" >> ${SPECFILE}
269        GROUPS4VINE=/usr/share/doc/rpm-`rpm --version | awk '{ print $3 }'`/GROUPS_for_vine.txt
270        echo "`eval_gettext "# Please refer to \\\${GROUPS4VINE} and correct Group."`" >> ${SPECFILE}
271        echo "Group:            FIXME" >> ${SPECFILE}
272
273cat >> ${SPECFILE} << EOL
274Source0:        ${SOURCE}
275BuildRoot:      %{_tmppath}/%{name}-%{version}-root
276
277Vendor:         Project Vine
278Distribution:   Vine Linux
279Packager:       ${TRACKID}
280
281Summary:        FIXME
282EOL
283
284        case ${LANG} in
285        ja_JP*)
286                echo "`eval_gettext "Summary(ja):       Describe summary here in Japanese."`" >> ${SPECFILE}
287                ;;
288        esac
289        echo >> ${SPECFILE}
290
291        OutputDependency
292
293cat >> ${SPECFILE} << EOL
294%description
295FIXME
296
297EOL
298
299        case ${LANG} in
300        ja_JP*)
301                echo "%description -l ja" >> ${SPECFILE}
302                echo "`eval_gettext "describe description here in Japanese."`" >> ${SPECFILE}
303                echo >> ${SPECFILE}
304                ;;
305        esac
306}
307
308#
309# Output prep section
310#
311OutputPrep()
312{
313        echo '%prep' >> ${SPECFILE}
314
315        if [ "${NAME}-${PKGVERSION}" != "${PKGDIR}" ]; then
316                SETUPOPT=" -n ${PKGDIR}"
317        fi
318        # setup corresponding to suffix
319        case ${PACKTYPE} in
320                bzip2 | gzip | lzma | xz)
321                        echo "%setup -q${SETUPOPT}" >> ${SPECFILE}
322                        ;;
323                zip)
324                        echo "%setup -T %{name}-%{version}" >> ${SPECFILE}
325                        echo 'unzip -xq %{SOURCE0}' >> ${SPECFILE}
326                        ;;     
327        esac
328
329        echo '' >> ${SPECFILE}
330}
331
332#
333# Output clean section
334#
335OutputClean()
336{
337cat >> ${SPECFILE} << EOL
338
339%clean
340%{__rm} -rf \${RPM_BUILD_ROOT}
341
342
343EOL
344}
345
346#
347# Output file list
348#
349OutputFileList()
350{
351        if [ "${GETTEXTIZE}" = "yes" ]; then
352                echo "%files -f %{name}.lang" >> ${SPECFILE}
353        elif [ "${PKGTYPE}" = "Perl" ]; then
354                echo "%files -f %{name}.files" >> ${SPECFILE}
355        else
356                echo "%files" >> ${SPECFILE}
357        fi
358
359# ToDo: check file exists
360cat >> ${SPECFILE} << EOL
361%defattr(-,root,root)
362EOL
363
364        if [ "x${DOCFILES}" != "x" ]; then
365                echo "%doc${DOCFILES}" >> ${SPECFILE}
366        fi
367
368        echo >> ${SPECFILE}
369}
370
371#
372# Output ChangeLog
373#
374OutputChangeLog()
375{
376cat >> ${SPECFILE} << EOL
377%changelog
378* `LANG=C LANGUAGE=C LC_ALL=C date '+%a %b %d %Y'` $FULLNAME <$EMAIL> $PKGVERSION-1
379- initial build for Vine Linux
380EOL
381}
382
383#
384# main
385#
386
387#
388# parse arguments.
389#
390if [ -z "$*" ]; then
391        print_usage
392        exit 1
393fi
394
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
432
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
442CheckPackType
443
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
450SOURCE=`echo $SOURCE | sed -e "s/${PKGNAME}/%{name}/g" | sed -e "s/$PKGVERSION/%{version}/g"`
451SOURCEDIR=`rpm -E '%_sourcedir' | sed -e "s|%{name}|${PKGNAME}|"`
452PKGSOURCE=${SOURCEDIR}/`basename ${ARCHIVE}`
453BUILDDIR=`rpm -E '%_builddir'`
454
455CheckScheme
456
457CheckPackage
458
459SPECDIR=`rpm -E '%_specdir'`/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`
460mkdir -pv ${SPECDIR}
461SPECFILE=${SPECDIR}/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`-vl.spec
462
463# Backup spec file
464if [ -f ${SPECFILE} ]; then
465        cp -v ${SPECFILE}{,.`LANG=C LANGUAGE=C LC_ALL=C date '+%Y%m%d%H%M%S'`}
466fi
467
468# Load plugins
469if [ -f ${pluginsdir}/${PKGTYPE} ]; then
470        source ${pluginsdir}/${PKGTYPE}
471else
472        echo "`eval_gettext "Can't find \\\${pluginsdir}/\\\${PKGTYPE}"`" 1>&2
473        exit 1
474fi
475
476# Output SPEC file.
477OutputBasicInfo
478OutputPrep
479OutputBuild
480OutputInstall
481
482if [ "${GETTEXTIZE}" = "yes" ]; then
483        echo >> ${SPECFILE}
484        echo "%find_lang %{name}" >> ${SPECFILE}
485        echo >> ${SPECFILE}
486fi
487
488OutputClean
489OutputFileList
490OutputChangeLog
491
492# Output result
493echo "`eval_gettext "Created \\\${SPECFILE}"`"
Note: See TracBrowser for help on using the repository browser.