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

Revision 5186, 10.2 KB checked in by yasumichi, 13 years ago (diff)

make directory when isn't exists.

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