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

Revision 8874, 10.4 KB checked in by yasumichi, 10 years ago (diff)

add --without-prefix option

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