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

Revision 4904, 7.7 KB checked in by yasumichi, 13 years ago (diff)

変数の囲い忘れを修正

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        esac
110        echo "パッケージを ${BUILDDIR}/${PKGDIR} に展開しました。"
111        CheckPkgType
112        CheckDocumentation
113        CheckGettexize
114        CheckLicense
115}
116
117#
118# check scheme
119#
120CheckScheme()
121{
122        case ${ARCHIVE} in
123                http://* | https://* | ftp://*)
124                        if wget -P $SOURCEDIR -nc ${ARCHIVE} ;then      # download
125                                SOURCE=${ARCHIVE}
126                        else
127                                exit 1                  # exit when failed download
128                        fi
129                        ;;
130                *)
131                        if [ -f ${ARCHIVE} ];then
132                                mkdir -p $SOURCEDIR
133                                echo "move ${ARCHIVE} to $SOURCEDIR."
134                                mv ${ARCHIVE} $SOURCEDIR
135                                SOURCE=`basename ${ARCHIVE}`
136                        else
137                                echo "${ARCHIVE} is not file." 1>&2
138                                exit 1
139                        fi
140                        ;;
141        esac 
142}
143
144#
145# check suffix
146#
147CheckSuffix()
148{
149        case ${ARCHIVE} in
150                *.tar.gz)
151                        BASENAME=`basename ${ARCHIVE} .tar.gz`
152                        SUFFIX=".tar.gz"
153                        ;;
154                *.tar.bz2)
155                        BASENAME=`basename ${ARCHIVE} .tar.bz2`
156                        SUFFIX=".tar.bz2"
157                        ;;
158                *.tar.xz)
159                        BASENAME=`basename ${ARCHIVE} .tar.xz`
160                        SUFFIX=".tar.xz"
161                        ;;
162                *.zip)
163                        BASENAME=`basename ${ARCHIVE} .zip`
164                        SUFFIX=".zip"
165                        ;;
166                *)
167                        echo "Unknown format." 1>&2
168                        exit 1
169                        ;;
170        esac
171}
172
173#
174# output basic information
175#
176OutputBasicInfo()
177{
178        if [ $NAME != ${PKGNAME} ];then
179                echo "%define   pkgname ${PKGNAME}" > ${SPECFILE}
180                echo >> ${SPECFILE}
181        else
182                echo > ${SPECFILE}
183        fi
184
185cat >> ${SPECFILE} << EOL
186# Basic Information
187Name:           ${NAME}
188Version:        ${PKGVERSION}
189Release:        1%{?_dist_release}
190# License は、COPYING などのファイルを参考に適切なものに変更してください。
191License:        ${LICENSE}
192# Group は、/usr/share/doc/rpm-`rpm --version | awk '{ print $3 }'`/GROUPS_for_vine.txt を参照して適切なものに変更してください。
193Group:          FIXME
194Source0:        ${SOURCE}
195BuildRoot:      %{_tmppath}/%{name}-%{version}-root
196
197Vendor:         Project Vine
198Distribution:   Vine Linux
199Packager:       ${TRACKID}
200
201Summary:        FIXME
202Summary(ja):    ここに日本語で概要を記述してください
203
204# Dependency
205# 以下に依存関係を記述してください。
206
207%description
208FIXME
209
210%description -l ja
211ここに日本語で詳細を記述してください。
212
213EOL
214}
215
216#
217# Output prep section
218#
219OutputPrep()
220{
221        echo '%prep' >> ${SPECFILE}
222
223        if [ "${NAME}-${PKGVERSION}" != "${PKGDIR}" ]; then
224                SETUPOPT=" -n ${PKGDIR}"
225        fi
226        # setup corresponding to suffix
227        case ${SUFFIX} in
228                .tar.gz | .tar.bz2 | .tar.xz)
229                        echo "%setup -q${SETUPOPT}" >> ${SPECFILE}
230                        ;;
231                .zip)
232                        echo "%setup -T %{name}-%{version}" >> ${SPECFILE}
233                        echo 'unzip -xq %{SOURCE0}' >> ${SPECFILE}
234                        ;;     
235        esac
236
237        echo '' >> ${SPECFILE}
238}
239
240#
241# Output build section
242#
243OutputBuild()
244{
245        echo '%build' >> ${SPECFILE}
246        case ${PKGTYPE} in
247                Perl)
248                        echo 'perl Makefile.PL' >> ${SPECFILE}
249                        echo '%{__make}' >> ${SPECFILE}
250                        ;;
251                Python)
252                        echo '%{__python} setup.py build' >> ${SPECFILE}
253                        ;;
254                autotoolize)
255                        echo '%configure' >> ${SPECFILE}
256                        echo '%{__make} %{?_smp_mflags}' >> ${SPECFILE}
257                        ;;
258        esac
259
260        echo '' >> ${SPECFILE}
261}
262
263#
264# Output install section
265#
266OutputInstall()
267{
268cat >> ${SPECFILE} << EOL
269%install
270%{__rm} -rf \${RPM_BUILD_ROOT}
271EOL
272
273        case ${PKGTYPE} in
274                Python)
275                        echo "%{__python} setup.py install --root=${RPM_BUILD_ROOT}" >> ${SPECFILE}
276                        ;;
277                Perl)
278
279cat >> ${SPECFILE} << 'EOL'
280%{__make} install DESTDIR=${RPM_BUILD_ROOT}
281
282find $RPM_BUILD_ROOT%{_prefix} -type f -print |
283        sed "s@^$RPM_BUILD_ROOT@@g" |
284        grep -v ^%{_mandir} |
285        grep -v perllocal.pod |
286        grep -v "\.packlist" > %{name}.files
287if [ "$(cat %{name}.files)X" = "X" ] ; then
288        echo "ERROR: EMPTY FILE LIST"
289        exit -1
290fi
291
292# remove unnecessary files.
293%{__rm} ${RPM_BUILD_ROOT}%{perl_archlib}/perllocal.pod
294#%%{__rm} ${RPM_BUILD_ROOT}%{perl_sitearch}/*/.packlist
295
296EOL
297
298                        ;;
299                autotoolize)
300                        echo "%{__make} install DESTDIR=\${RPM_BUILD_ROOT}" >> ${SPECFILE}
301                        ;;
302        esac
303
304        if [ "${GETTEXTIZE}" = "yes" ]; then
305                echo >> ${SPECFILE}
306                echo "%find_lang %{name}" >> ${SPECFILE}
307                echo >> ${SPECFILE}
308        fi
309
310cat >> ${SPECFILE} << EOL
311
312%clean
313%{__rm} -rf \${RPM_BUILD_ROOT}
314
315
316EOL
317}
318
319#
320# Output file list
321#
322OutputFileList()
323{
324        if [ "${GETTEXTIZE}" = "yes" ]; then
325                echo "%files -f %{name}.lang" >> ${SPECFILE}
326        elif [ "${PKGTYPE}" = "Perl" ]; then
327                echo "%files -f %{name}.files" >> ${SPECFILE}
328        else
329                echo "%files" >> ${SPECFILE}
330        fi
331
332# ToDo: check file exists
333cat >> ${SPECFILE} << EOL
334%defattr(-,root,root)
335EOL
336
337        if [ "x${DOCFILES}" != "x" ]; then
338                echo "%doc${DOCFILES}" >> ${SPECFILE}
339        fi
340
341        echo >> ${SPECFILE}
342}
343
344#
345# Output ChangeLog
346#
347OutputChangeLog()
348{
349cat >> ${SPECFILE} << EOL
350%changelog
351* `LANG=C LANGUAGE=C LC_ALL=C date '+%a %b %d %Y'` $FULLNAME <$EMAIL> $PKGVERSION-1
352- initial build for Vine Linux
353EOL
354}
355
356#
357# main
358#
359
360# check arguments
361if [ -z "$*" ]; then
362        echo "Usage: `basename $0` source-archive"
363        exit 1
364fi
365
366ARCHIVE=$1
367
368# load configuration
369if [ -f $HOME/.config/vine-rpm-helper/mkrpmspec.conf ]; then
370        source $HOME/.config/vine-rpm-helper/mkrpmspec.conf
371else
372        TRACKID="FIXME"
373        FULLNAME="Your Name"
374        EMAIL="name@yours.example.com"
375fi
376
377CheckSuffix
378
379PKGNAME=`echo ${BASENAME} | sed -e 's/-[0-9][0-9.]*.*//'`
380PKGVERSION=`echo ${BASENAME} | sed -e 's/^.*-\([0-9][0-9.]*.*\)/\1/'`
381SOURCE=`echo $SOURCE | sed -e "s/${PKGNAME}/%{name}/g" | sed -e "s/$PKGVERSION/%{version}/g"`
382SOURCEDIR=`rpm -E '%_sourcedir' | sed -e "s|%{name}|${PKGNAME}|"`
383PKGSOURCE=${SOURCEDIR}/`basename ${ARCHIVE}`
384BUILDDIR=`rpm -E '%_builddir'`
385
386CheckScheme
387
388CheckPackage
389
390SPECDIR=`rpm -E '%_specdir'`/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`
391mkdir -p ${SPECDIR}
392SPECFILE=${SPECDIR}/`echo ${NAME} | sed -e "s/%{pkgname}/${PKGNAME}/"`-vl.spec
393
394# Backup spec file
395if [ -f ${SPECFILE} ]; then
396        cp -v ${SPECFILE}{,.`LANG=C LANGUAGE=C LC_ALL=C date '+%Y%m%d%H%M%S'`}
397fi
398
399# Output SPEC file.
400OutputBasicInfo
401OutputPrep
402OutputBuild
403OutputInstall
404OutputFileList
405OutputChangeLog
406
407# Output result
408echo "made ${SPECFILE}"
Note: See TracBrowser for help on using the repository browser.