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

Revision 6717, 10.3 KB checked in by yasumichi, 12 years ago (diff)

Add prefix python where package type is Python.

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