source: projects/vine-rpm-helper/tags/0.2/mkrpmspec.in @ 4897

Revision 4897, 7.1 KB checked in by yasumichi, 13 years ago (diff)

既に SPEC ファイルが存在する場合は、バックアップを作成するようにした。

Line 
1#!/bin/sh
2
3#
4# remove old directory
5#
6RemoveOldDir()
7{
8        rm -rf ${BUILDDIR}/${PKGDIR}
9}
10
11#
12# check documentation
13#
14CheckDocumentation()
15{
16        DOCFILES=
17        for FILE in AUTHORS COPYING ChangeLog Changes HACKING LICENSE MAINTAINERS NEWS README THANKS TODO
18        do
19                if [ -f ${BUILDDIR}/${PKGDIR}/${FILE} ]; then
20                        echo "Found: ${FILE}"
21                        DOCFILES="${DOCFILES} ${FILE}"
22                fi
23        done
24}
25
26#
27# check gettextize
28#
29CheckGettexize()
30{
31        if [ -d ${BUILDDIR}/${PKGDIR}/po ];then
32                GETTEXTIZE=yes
33        else
34                GETTEXTIZE=no
35        fi
36}
37
38#
39# check license
40#
41CheckLicense()
42{
43        LICENSE=
44        if [ -f ${BUILDDIR}/${PKGDIR}/COPYING ]; then
45                MD5SUM=`md5sum ${BUILDDIR}/${PKGDIR}/COPYING`
46                LICENSE=`grep ${MD5SUM} @PKGDATADIR@/licences-md5sum.dat | cut -f2`
47        elif [ "${PKGTYPE}" = "Perl" ]; then
48                LICENSE="Artistic or GPL"
49        fi
50
51        if [ "x${LICENSE}" = "x" ]; then
52                LICENSE="FIXEME"
53        fi
54}
55
56#
57# check package type
58#
59CheckPkgType()
60{
61        if [ -f ${BUILDDIR}/${PKGDIR}/Makefile.PL ]; then
62                PKGTYPE=Perl
63                NAME="perl-%{pkgname}"
64                LINKTARGET=$(dirname `rpm -E '%_sourcedir'`)/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`
65                if [ ! -r ${LINKTARGET} ]; then
66                        ln -sv ${SOURCEDIR} ${LINKTARGET}
67                fi
68        elif [ -f ${BUILDDIR}/${PKGDIR}/setup.py ]; then
69                PKGTYPE=Python
70                NAME=$PKGNAME
71        elif [ -f ${BUILDDIR}/${PKGDIR}/configure ]; then
72                PKGTYPE=autotoolize
73                NAME=$PKGNAME
74        else
75                echo "Unknown package type." 1>&2
76                exit 1
77        fi
78        echo "パッケージは ${PKGTYPE} パッケージであると認識ました。"
79
80        # replace SOURCE
81        if [ ${NAME} = ${PKGNAME} ]; then
82                SOURCE=`echo ${SOURCE} | sed -e "s/${PKGNAME}/%{name}/g" -e "s/${PKGVERSION}/%{version}/g"`
83        else
84                SOURCE=`echo ${SOURCE} | sed -e "s/${PKGNAME}/%{pkgname}/g" -e "s/${PKGVERSION}/%{version}/g"`
85        fi
86}
87
88#
89# check package
90#
91CheckPackage()
92{
93        case $SUFFIX in
94                .tar.gz)
95                        PKGDIR=$(basename `tar ztf ${PKGSOURCE} | head -1`)
96                        RemoveOldDir
97                        (cd $BUILDDIR && tar zxf ${PKGSOURCE})
98                        ;;
99                .tar.bz2)
100                        PKGDIR=$(basename `tar jtf ${PKGSOURCE} | head -1`)
101                        RemoveOldDir
102                        (cd $BUILDDIR && tar jxf ${PKGSOURCE})
103                        ;;
104                *.tar.xz)
105                        PKGDIR=$(basename `tar Jtf ${PKGSOURCE} | head -1`)
106                        RemoveOldDir
107                        (cd $BUILDDIR && tar Jxf ${PKGSOURCE})
108                        ;;
109                *)
110                        echo "Unknown format." 1>&2
111                        exit 1
112                        ;;
113        esac
114        echo "パッケージを ${BUILDDIR}/${PKGDIR} に展開しました。"
115        CheckPkgType
116        CheckDocumentation
117        CheckGettexize
118        CheckLicense
119}
120
121#
122# check scheme
123#
124CheckScheme()
125{
126        case $ARCHIVE in
127                http://* | https://* | ftp://*)
128                        if wget -P $SOURCEDIR -nc $ARCHIVE ;then        # download
129                                SOURCE=$ARCHIVE
130                        else
131                                exit 1                  # exit when failed download
132                        fi
133                        ;;
134                *)
135                        if [ -f $ARCHIVE ];then
136                                mkdir -p $SOURCEDIR
137                                echo "move $ARCHIVE to $SOURCEDIR."
138                                mv $ARCHIVE $SOURCEDIR
139                                SOURCE=`basename $ARCHIVE`
140                        else
141                                echo "$ARCHIVE is not file." 1>&2
142                                exit 1
143                        fi
144                        ;;
145        esac 
146}
147
148#
149# check suffix
150#
151CheckSuffix()
152{
153        case $ARCHIVE in
154                *.tar.gz)
155                        BASENAME=`basename $ARCHIVE .tar.gz`
156                        SUFFIX=".tar.gz"
157                        ;;
158                *.tar.bz2)
159                        BASENAME=`basename $ARCHIVE .tar.bz2`
160                        SUFFIX=".tar.bz2"
161                        ;;
162                *.tar.xz)
163                        BASENAME=`basename $ARCHIVE .tar.xz`
164                        SUFFIX=".tar.xz"
165                        ;;
166                *.zip)
167                        BASENAME=`basename $ARCHIVE .zip`
168                        SUFFIX=".zip"
169                        ;;
170                *)
171                        echo "Unknown format." 1>&2
172                        exit 1
173                        ;;
174        esac
175}
176
177#
178# output basic information
179#
180OutputBasicInfo()
181{
182        if [ $NAME != $PKGNAME ];then
183                echo "%define   pkgname $PKGNAME" > $SPECFILE
184                echo >> $SPECFILE
185        else
186                echo > $SPECFILE
187        fi
188
189cat >> $SPECFILE << EOL
190# Basic Information
191Name:           $NAME
192Version:        $PKGVERSION
193Release:        1%{?_dist_release}
194# License は、COPYING などのファイルを参考に適切なものに変更してください。
195License:        $LICENSE
196# Group は、/usr/share/doc/rpm-`rpm --version | awk '{ print $3 }'`/GROUPS_for_vine.txt を参照して適切なものに変更してください。
197Group:          FIXME
198Source0:        $SOURCE
199BuildRoot:      %{_tmppath}/%{name}-%{version}-root
200
201Vendor:         Project Vine
202Distribution:   Vine Linux
203Packager:       $TRACKID
204
205Summary:        FIXME
206Summary(ja):    ここに日本語で概要を記述してください
207
208# Dependency
209# 以下に依存関係を記述してください。
210
211%description
212FIXME
213
214%description -l ja
215ここに日本語で詳細を記述してください。
216
217EOL
218}
219
220#
221# Output prep section
222#
223OutputPrep()
224{
225        echo '%prep' >> $SPECFILE
226
227        if [ "${PKGNAME}-${PKGVERSION}" != "${PKGDIR}" ]; then
228                SETUPOPT=" -n ${PKGDIR}"
229        fi
230        # setup corresponding to suffix
231        case $SUFFIX in
232                .tar.gz | .tar.bz2 | .tar.xz)
233                        echo "%setup -q${SETUPOPT}" >> $SPECFILE
234                        ;;
235                .zip)
236                        echo "%setup -T %{name}-%{version}" >> $SPECFILE
237                        echo 'unzip -xq %{SOURCE0}' >> $SPECFILE
238                        ;;     
239        esac
240
241        echo '' >> $SPECFILE
242}
243
244#
245# Output build section
246#
247OutputBuild()
248{
249        echo '%build' >> $SPECFILE
250        case ${PKGTYPE} in
251                Perl)
252                        echo 'make Makefile.PL' >> $SPECFILE
253                        echo '%{__make}' >> $SPECFILE
254                        ;;
255                Python)
256                        echo '%{__python} setup.py build' >> $SPECFILE
257                        ;;
258                autotoolize)
259                        echo '%configure' >> $SPECFILE
260                        echo '%{__make} %{?_smp_mflags}' >> $SPECFILE
261                        ;;
262        esac
263
264        echo '' >> $SPECFILE
265}
266
267#
268# Output install section
269#
270OutputInstall()
271{
272cat >> $SPECFILE << EOL
273%install
274%{__rm} -rf \${RPM_BUILD_ROOT}
275EOL
276
277        case ${PKGTYPE} in
278                Python)
279                        echo "%{__python} setup.py install --root=${RPM_BUILD_ROOT}" >> $SPECFILE
280                        ;;
281                Perl|autotoolize)
282                        echo "%{__make} install DESTDIR=\${RPM_BUILD_ROOT}" >> $SPECFILE
283                        ;;
284        esac
285
286        if [ "${GETTEXTIZE}" = "yes" ]; then
287                echo >> $SPECFILE
288                echo "%find_lang %{name}" >> $SPECFILE
289                echo >> $SPECFILE
290        fi
291
292cat >> $SPECFILE << EOL
293
294%clean
295%{__rm} -rf \${RPM_BUILD_ROOT}
296
297
298EOL
299}
300
301#
302# Output file list
303#
304OutputFileList()
305{
306        if [ "${GETTEXTIZE}" = "yes" ]; then
307                echo "%files -f %{name}.lang" >> $SPECFILE
308        else
309                echo "%files" >> $SPECFILE
310        fi
311
312# ToDo: check file exists
313cat >> $SPECFILE << EOL
314%defattr(-,root,root)
315EOL
316
317        if [ "x${DOCFILES}" != "x" ]; then
318                echo "%doc${DOCFILES}" >> $SPECFILE
319        fi
320
321        echo >> $SPECFILE
322}
323
324#
325# Output ChangeLog
326#
327OutputChangeLog()
328{
329cat >> $SPECFILE << EOL
330%changelog
331* `LANG=C LANGUAGE=C LC_ALL=C date '+%a %b %d %Y'` $FULLNAME <$EMAIL> $PKGVERSION-1
332- initial build for Vine Linux
333EOL
334}
335
336#
337# main
338#
339
340# check arguments
341if [ -z "$*" ]; then
342        echo "Usage: `basename $0` source-archive"
343        exit 1
344fi
345
346ARCHIVE=$1
347
348# load configuration
349if [ -f $HOME/.config/vine-rpm-helper/mkrpmspec.conf ]; then
350        source $HOME/.config/vine-rpm-helper/mkrpmspec.conf
351else
352        TRACKID="FIXME"
353        FULLNAME="Your Name"
354        EMAIL="name@yours.example.com"
355fi
356
357CheckSuffix
358
359PKGNAME=`echo $BASENAME | sed -e 's/-[0-9][0-9.]*.*//'`
360PKGVERSION=`echo $BASENAME | sed -e 's/^.*-\([0-9][0-9.]*.*\)/\1/'`
361SOURCE=`echo $SOURCE | sed -e "s/$PKGNAME/%{name}/g" | sed -e "s/$PKGVERSION/%{version}/g"`
362SOURCEDIR=`rpm -E '%_sourcedir' | sed -e "s|%{name}|${PKGNAME}|"`
363PKGSOURCE=${SOURCEDIR}/`basename ${ARCHIVE}`
364BUILDDIR=`rpm -E '%_builddir'`
365
366CheckScheme
367
368CheckPackage
369
370SPECDIR=`rpm -E '%_specdir'`/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`
371mkdir -p ${SPECDIR}
372SPECFILE=${SPECDIR}/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`-vl.spec
373
374# Backup spec file
375if [ -f ${SPECFILE} ]; then
376        cp -v ${SPECFILE}{,.`LANG=C LANGUAGE=C LC_ALL=C date '+%Y%m%d%H%M%S'`}
377fi
378
379# Output SPEC file.
380OutputBasicInfo
381OutputPrep
382OutputBuild
383OutputInstall
384OutputFileList
385OutputChangeLog
386
387# Output result
388echo "made $SPECFILE"
Note: See TracBrowser for help on using the repository browser.