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

Revision 5181, 10.1 KB checked in by yasumichi, 13 years ago (diff)

add support for traditional Makefile project.

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