Accepting request 95751 from openSUSE:Tools
- move pkgconfig() and co to the end of the buildrequires - another update from git to replace way more licenses (0.4) - update from https://github.com/openSUSE/obs-service-format_spec_file - allow to specify a defined spec file (version 0.2) OBS-URL: https://build.opensuse.org/request/show/95751 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/obs-service-format_spec_file?expand=0&rev=14
This commit is contained in:
parent
6db162e5ba
commit
0d8a50984a
@ -9,6 +9,10 @@ while test $# -gt 0; do
|
|||||||
MYOUTDIR="$2"
|
MYOUTDIR="$2"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
*-specfile)
|
||||||
|
MYSPECFILES="$MYSPECFILES $2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo Unknown parameter $1.
|
echo Unknown parameter $1.
|
||||||
echo 'Usage: this service is not excepting parameters'
|
echo 'Usage: this service is not excepting parameters'
|
||||||
@ -19,7 +23,10 @@ while test $# -gt 0; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
RETURN=0
|
RETURN=0
|
||||||
for i in *.spec; do
|
if [ -z "$MYSPECFILES" ]; then
|
||||||
|
MYSPECFILES=`echo *.spec`
|
||||||
|
fi
|
||||||
|
for i in $MYSPECFILES; do
|
||||||
if [ "$i" == '*.spec' ]; then
|
if [ "$i" == '*.spec' ]; then
|
||||||
echo "WARNING: no spec file found"
|
echo "WARNING: no spec file found"
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
<service name="source_validator">
|
<service name="format_spec_file">
|
||||||
<summary>Validate sources</summary>
|
<summary>Format the spec files</summary>
|
||||||
<description>The default SUSE source validator which catches common pitfalls before build.</description>
|
<description>Formatting the spec files</description>
|
||||||
|
<parameter name="specfile">
|
||||||
|
<description>Just run on specified spec file instead all available</description>
|
||||||
|
</parameter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
366
licenses_changes.txt
Normal file
366
licenses_changes.txt
Normal file
@ -0,0 +1,366 @@
|
|||||||
|
SPDX Name in Spec File
|
||||||
|
AAL AAL
|
||||||
|
AFL-2.1 Academic Free License 2.1
|
||||||
|
AGPL-3.0 Affero GPL
|
||||||
|
AFL-2.1 AFL 2.1
|
||||||
|
AFL-1.2 AFL-1.2
|
||||||
|
AFL-2.0 AFL-2.0
|
||||||
|
AFL-2.1 AFL-2.1
|
||||||
|
AFL-3.0 AFL-3.0
|
||||||
|
AGPL-3.0 AGPL-3.0
|
||||||
|
AGPL-3.0 AGPLv3
|
||||||
|
SUSE-AGPL-3.0+ AGPLv3+
|
||||||
|
ANTLR-PD ANTLR-PD
|
||||||
|
Apache-1.1 Apache 1.1 (Indiana University)
|
||||||
|
Apache-2.0 Apache 2.0
|
||||||
|
Apache-2.0 Apache License
|
||||||
|
Apache-2.0 Apache License 2.0
|
||||||
|
Apache-2.0 Apache License, Version 2.0
|
||||||
|
Apache-2.0 Apache Software License ..
|
||||||
|
Apache-2.0 Apache Software License
|
||||||
|
Apache-2.0 Apache v2.0
|
||||||
|
Apache-1.0 Apache-1.0
|
||||||
|
Apache-1.1 Apache-1.1
|
||||||
|
Apache-2.0 Apache-2.0
|
||||||
|
APL-1.0 APL-1.0
|
||||||
|
APL-1.0 APL-1.0 (spdx.org/licenses)
|
||||||
|
APSL-1.0 APSL-1.0
|
||||||
|
APSL-1.1 APSL-1.1
|
||||||
|
APSL-1.2 APSL-1.2
|
||||||
|
APSL-2.0 APSL-2.0
|
||||||
|
Artistic-1.0 Artistic
|
||||||
|
Artistic-1.0 Artistic 1.0
|
||||||
|
Artistic-2.0 Artistic 2.0
|
||||||
|
Artistic-1.0 Artistic license
|
||||||
|
Artistic-1.0 Artistic License
|
||||||
|
Artistic-1.0 Artistic License ..
|
||||||
|
Artistic-1.0 Artistic-1.0
|
||||||
|
SUSE-Artistic-1.0+ Artistic-1.0+
|
||||||
|
Artistic-2.0 Artistic-2.0
|
||||||
|
Apache-1.1 ASL 1.1
|
||||||
|
Apache-2.0 ASL 2.0
|
||||||
|
Apache-2.0 ASL2
|
||||||
|
Apache-2.0 ASLv..
|
||||||
|
Apache-2.0 ASLv2
|
||||||
|
Apache-2.0 ASLv2.0
|
||||||
|
SUSE-Apache-2.0+ ASLv2.0+
|
||||||
|
BSD-3-Clause BSD (3-Clause)
|
||||||
|
BSD-2-Clause BSD 2 clause
|
||||||
|
BSD-2-Clause BSD 2 Clause
|
||||||
|
BSD-2-Clause BSD 2-clause
|
||||||
|
BSD-2-Clause BSD 2-Clause
|
||||||
|
BSD-3-Clause BSD 3-Clause
|
||||||
|
BSD-3-Clause BSD 3-clause (or similar)
|
||||||
|
BSD-2-Clause BSD-2-Clause
|
||||||
|
BSD-2-Clause BSD-2c
|
||||||
|
BSD-3-Clause BSD-3
|
||||||
|
BSD-3-Clause BSD-3-Clause
|
||||||
|
BSD-3-Clause BSD-3-clause (or similar)
|
||||||
|
BSD-4-Clause BSD-4-Clause
|
||||||
|
BSD-2-Clause BSD2c
|
||||||
|
BSD-3-Clause BSD3
|
||||||
|
BSD-3-Clause BSD3c
|
||||||
|
BSD-3-Clause BSD3c (or similar)
|
||||||
|
BSD-3-Clause BSD3c(or similar)
|
||||||
|
BSD-4-Clause BSD4c
|
||||||
|
BSD-4-Clause BSD4c(or similar)
|
||||||
|
BSL-1.0 BSL-1.0
|
||||||
|
CATOSL-1.1 CATOSL-1.1
|
||||||
|
CC-BY-SA-3.0 CC BY-SA 3.0
|
||||||
|
CC-BY-SA-2.5 CC by-sa V2.5
|
||||||
|
CC-BY-SA-3.0 CC BY-SA V3.0
|
||||||
|
CC-BY-1.0 CC-BY-1.0
|
||||||
|
CC-BY-2.0 CC-BY-2.0
|
||||||
|
CC-BY-2.5 CC-BY-2.5
|
||||||
|
CC-BY-3.0 CC-BY-3.0
|
||||||
|
CC-BY-NC-1.0 CC-BY-NC-1.0
|
||||||
|
CC-BY-NC-2.0 CC-BY-NC-2.0
|
||||||
|
CC-BY-NC-2.5 CC-BY-NC-2.5
|
||||||
|
CC-BY-NC-3.0 CC-BY-NC-3.0
|
||||||
|
CC-BY-NC-ND-1.0 CC-BY-NC-ND-1.0
|
||||||
|
CC-BY-NC-ND-2.0 CC-BY-NC-ND-2.0
|
||||||
|
CC-BY-NC-ND-2.5 CC-BY-NC-ND-2.5
|
||||||
|
CC-BY-NC-ND-3.0 CC-BY-NC-ND-3.0
|
||||||
|
CC-BY-NC-SA-1.0 CC-BY-NC-SA-1.0
|
||||||
|
CC-BY-NC-SA-2.0 CC-BY-NC-SA-2.0
|
||||||
|
CC-BY-NC-SA-2.5 CC-BY-NC-SA-2.5
|
||||||
|
CC-BY-NC-SA-3.0 CC-BY-NC-SA-3.0
|
||||||
|
CC-BY-ND-1.0 CC-BY-ND-1.0
|
||||||
|
CC-BY-ND-2.0 CC-BY-ND-2.0
|
||||||
|
CC-BY-ND-2.5 CC-BY-ND-2.5
|
||||||
|
CC-BY-ND-3.0 CC-BY-ND-3.0
|
||||||
|
CC-BY-SA-1.0 CC-BY-SA-1.0
|
||||||
|
CC-BY-SA-2.0 CC-BY-SA-2.0
|
||||||
|
CC-BY-SA-2.5 CC-BY-SA-2.5
|
||||||
|
CC-BY-SA-3.0 CC-BY-SA-3.0
|
||||||
|
CC0-1.0 CC0-1.0
|
||||||
|
CDDL-1.0 CDDL
|
||||||
|
CDDL-1.0 CDDL 1.0
|
||||||
|
CDDL-1.0 CDDL-1.0
|
||||||
|
CDDL-1.0 or LGPL-2.1 CDDLv1.0 | LGPLv2.1
|
||||||
|
CECILL-1.0 CECILL-1.0
|
||||||
|
CECILL-1.1English CECILL-1.1English
|
||||||
|
CECILL-2.0 CECILL-2.0
|
||||||
|
CECILL-B CECILL-B
|
||||||
|
CECILL-C CECILL-C
|
||||||
|
ClArtistic ClArtistic
|
||||||
|
CPL-1.0 Common Public License - v 1.0
|
||||||
|
CPL-1.0 Common Public License v1.0
|
||||||
|
CPL-1.0 Common Public License v1.0 (CPL)
|
||||||
|
CPL-1.0 Common Public License Version 1.0
|
||||||
|
CPL-1.0 Common Public License Version 1.0 (CPL1.0)
|
||||||
|
CPAL-1.0 CPAL-1.0
|
||||||
|
CPL-1.0 CPL (Common Public License) v1
|
||||||
|
CPL-1.0 CPL 1.0
|
||||||
|
CPL-1.0 CPL 1.0 ...
|
||||||
|
CPL-1.0 CPL-1.0
|
||||||
|
CUA-OPL-1.0 CUA-OPL-1.0
|
||||||
|
ECL-1.0 ECL-1.0
|
||||||
|
ECL-2.0 ECL-2.0
|
||||||
|
EPL-1.0 Eclipse Public License
|
||||||
|
EPL-1.0 Eclipse-1.0
|
||||||
|
EPL-1.0 Eclipse Public License 1.0
|
||||||
|
eCos-2.0 eCos-2.0
|
||||||
|
EFL-1.0 EFL-1.0
|
||||||
|
EFL-2.0 EFL-2.0
|
||||||
|
Entessa Entessa
|
||||||
|
EPL-1.0 EPL
|
||||||
|
EPL-1.0 EPL 1.0
|
||||||
|
EPL-1.0 EPL 1.0 ...
|
||||||
|
EPL-1.0 EPL v1.0
|
||||||
|
EPL-1.0 EPL-1
|
||||||
|
EPL-1.0 EPL-1.0
|
||||||
|
ErlPL-1.1 Erlang Public License
|
||||||
|
ErlPL-1.1 ErlPL-1.1
|
||||||
|
EUDatagrid EUDatagrid
|
||||||
|
EUPL-1.0 EUPL-1.0
|
||||||
|
EUPL-1.1 EUPL-1.1
|
||||||
|
MIT Expat
|
||||||
|
MIT Expat License
|
||||||
|
Fair Fair
|
||||||
|
SUSE-GFDL-1.1 FDL v1.1 or later
|
||||||
|
SUSE-GFDL-1.2+ FDL-1.2+
|
||||||
|
SUSE-GFDL-1.3+ FDL-1.3+
|
||||||
|
SUSE-GFDL-1.2+ FDLv1.2+
|
||||||
|
Frameworx-1.0 Frameworx-1.0
|
||||||
|
SUSE-Freeware Freeware
|
||||||
|
SUSE-Freeware Freeware license
|
||||||
|
GFDL-1.1 GFDL 1.1
|
||||||
|
GFDL-1.2 GFDL 1.2
|
||||||
|
GFDL-1.1 GFDL v1.1
|
||||||
|
GFDL-1.2 GFDL v1.2
|
||||||
|
GFDL-1.1 GFDL-1.1
|
||||||
|
GFDL-1.2 GFDL-1.2
|
||||||
|
GFDL-1.3 GFDL-1.3
|
||||||
|
GFDL-1.1 GFDLv1.1
|
||||||
|
GFDL-1.2 GFDLv1.2
|
||||||
|
SUSE-GFDL-1.2+ GFDLv1.2+
|
||||||
|
GPL-2.0 GLPv2
|
||||||
|
GFDL-1.1 GNU Free Documentation License, Version 1.1 (GFDL 1.1)
|
||||||
|
GFDL-1.2 GNU Free Documentation License, Version 1.2 (GFDL 1.2)
|
||||||
|
GFDL-1.3 GNU Free Documentation License, Version 1.3 (GFDL 1.3)
|
||||||
|
GPL-2.0 GNU General Public License (GPL) v2
|
||||||
|
GPL-2.0 GNU General Public License version 2 (GPL v2)
|
||||||
|
GPL-2.0+ GNU General Public License version 2 or later
|
||||||
|
GPL-2.0+ GNU General Public License version 2 or later (GPL v2 or later)
|
||||||
|
GPL-2.0+ GNU General Public License version 2 or later (GPLv2 or later)
|
||||||
|
GPL-3.0 GNU General Public License version 3 (GPLv3)
|
||||||
|
GPL-2.0 GNU GPL v2
|
||||||
|
GPL-3.0+ GNU GPL v3 or later
|
||||||
|
GPL-3.0 GNU GPL version 3
|
||||||
|
LGPL-3.0 GNU Lesser General Public License (LGPL), Version 3
|
||||||
|
LGPL-2.1 GNU Lesser General Public License version 2.1 (LGPL v2.1)
|
||||||
|
LGPL-3.0 GNU Lesser General Public License version 3 (LGPL v3)
|
||||||
|
LGPL-2.1+ GNU LGPL v2.1 or later
|
||||||
|
LGPL-2.1 GNU LGPLv2.1
|
||||||
|
GPL-2.0 GPL 2.0
|
||||||
|
GPL-3.0 GPL 3
|
||||||
|
GPL-2.0 GPL v2
|
||||||
|
GPL-2.0 GPL v2 only
|
||||||
|
GPL-2.0+ GPL v2 or later
|
||||||
|
GPL-2.0+ GPL v2 or later
|
||||||
|
GPL-2.0 GPL v2.0
|
||||||
|
GPL-2.0+ GPL v2.0 or later
|
||||||
|
GPL-2.0+ GPL v2+
|
||||||
|
GPL-3.0 GPL v3
|
||||||
|
GPL-3.0 GPL v3 only
|
||||||
|
GPL-3.0+ GPL v3 or later
|
||||||
|
GPL-1.0 GPL-1.0
|
||||||
|
GPL-1.0+ GPL-1.0+
|
||||||
|
GPL-2.0 GPL-2
|
||||||
|
GPL-2.0 GPL-2.0
|
||||||
|
GPL-2.0; GPL-2.0+ GPL-2.0 GPL-2.0+
|
||||||
|
GPL-2.0+ GPL-2.0 or later
|
||||||
|
GPL-2.0-with-autoconf-exception GPL-2.0-with-autoconf-exception
|
||||||
|
GPL-2.0-with-bison-exception GPL-2.0-with-bison-exception
|
||||||
|
GPL-2.0-with-classpath-exception GPL-2.0-with-classpath-exception
|
||||||
|
GPL-2.0-with-font-exception GPL-2.0-with-font-exception
|
||||||
|
GPL-2.0-with-GCC-exception GPL-2.0-with-GCC-exception
|
||||||
|
GPL-2.0; GPL-2.0+ GPL-2.0, GPL-2.0+
|
||||||
|
GPL-2.0+ GPL-2.0+
|
||||||
|
Apache-2.0; GPL-2.0+ GPL-2.0+, Apache-2.0
|
||||||
|
GPL-2.0+; LGPL-2.0+ GPL-2.0+,LGPL-2.0+
|
||||||
|
GPL-2.0 GPL-2.Ã0
|
||||||
|
GPL-2.0+ GPL-2+
|
||||||
|
GPL-3.0 GPL-3
|
||||||
|
GPL-3.0 GPL-3.0
|
||||||
|
GPL-3.0-with-autoconf-exception GPL-3.0-with-autoconf-exception
|
||||||
|
GPL-3.0-with-GCC-exception GPL-3.0-with-GCC-exception
|
||||||
|
GPL-3.0; GPL-2.0+ GPL-3.0, GPL-2.0+
|
||||||
|
GPL-3.0+ GPL-3.0+
|
||||||
|
GPL-3.0+ GPL-3+
|
||||||
|
GPL-1.0+ GPL+
|
||||||
|
GPL-2.0 GPL2
|
||||||
|
GPL-2.0+ GPL2+
|
||||||
|
GPL-3.0 GPL3
|
||||||
|
GPL-1.0+ GPLv1+
|
||||||
|
GPL-2.0 GPLv2
|
||||||
|
GPL-2.0 or GPL-3.0 GPLv2 || GPLv3
|
||||||
|
GPL-2.0+ GPLv2 or later
|
||||||
|
GPL-2.0+ GPLv2+
|
||||||
|
GPL-3.0 GPLv3
|
||||||
|
GPL-3.0+ GPLv3+
|
||||||
|
gSOAP-1.3b gSOAP-1.3b
|
||||||
|
HPND HPND
|
||||||
|
IPL-1.0 IBM PL
|
||||||
|
IPL-1.0 IBM Public License
|
||||||
|
IPL-1.0 IBM Public License ..
|
||||||
|
IPA IPA
|
||||||
|
IPL-1.0 IPL-1.0
|
||||||
|
ISC ISC
|
||||||
|
ISC ISC License
|
||||||
|
LGPL-2.1 LGPL 2.1
|
||||||
|
LGPL-2.0 LGPL v2
|
||||||
|
LGPL-2.0+ LGPL v2 or later
|
||||||
|
LGPL-2.0 LGPL v2.0 only
|
||||||
|
LGPL-2.0+ LGPL v2.0 or later
|
||||||
|
LGPL-2.1 LGPL v2.1
|
||||||
|
LGPL-2.1 LGPL v2.1 only
|
||||||
|
LGPL-2.1+ LGPL v2.1 or later
|
||||||
|
LGPL-2.1+ LGPL v2.1+
|
||||||
|
LGPL-2.1+ LGPL v2+
|
||||||
|
LGPL-2.1+ LGPL V2+
|
||||||
|
LGPL-3.0+ LGPL v3 or later
|
||||||
|
LGPL-2.0 LGPL-2.0
|
||||||
|
LGPL-2.1+ LGPL-2.0.1 or later
|
||||||
|
LGPL-2.0+ LGPL-2.0+
|
||||||
|
LGPL-2.1 LGPL-2.1
|
||||||
|
LGPL-2.1+ LGPL-2.1+
|
||||||
|
LGPL-3.0 LGPL-3.0
|
||||||
|
LGPL-3.0+ LGPL-3.0+
|
||||||
|
LGPL-2.1 LGPL2.1
|
||||||
|
LGPL-2.0 LGPLv2
|
||||||
|
LGPL-2.0 LGPLv2.0
|
||||||
|
LGPL-2.0+ LGPLv2.0+
|
||||||
|
LGPL-2.1 LGPLv2.1
|
||||||
|
LGPL-2.1+ LGPLv2.1+
|
||||||
|
LGPL-2.1+ LGPLv2+
|
||||||
|
LGPL-3.0 LGPLv3
|
||||||
|
LGPL-3.0+ LGPLv3+
|
||||||
|
GPL-2.0+ libGeoIPUpdate is GPLv2 or later
|
||||||
|
Libpng Libpng
|
||||||
|
LPL-1.02 LPL-1.02
|
||||||
|
LPPL-1.3c LPPL ..
|
||||||
|
LPPL-1.0 LPPL-1.0
|
||||||
|
LPPL-1.1 LPPL-1.1
|
||||||
|
LPPL-1.2 LPPL-1.2
|
||||||
|
LPPL-1.3c LPPL-1.3c
|
||||||
|
MirOS MirOS
|
||||||
|
MIT MIT
|
||||||
|
MIT MIT licence
|
||||||
|
MIT MIT license
|
||||||
|
MIT MIT License
|
||||||
|
MIT MIT License (or similar)
|
||||||
|
MIT MIT-Licence
|
||||||
|
MIT MIT/X Consortium License
|
||||||
|
MIT MIT/X License
|
||||||
|
MIT MIT/X11
|
||||||
|
Motosoto Motosoto
|
||||||
|
MPL-1.1 MOZILLA PUBLIC LICENSE (MPL/NPL)
|
||||||
|
MPL-1.1 Mozilla Public License 1.1
|
||||||
|
SUSE-MPL-1.1+ MPL 1.1 or later
|
||||||
|
MPL-1.0 MPL-1.0
|
||||||
|
MPL-1.1 MPL-1.1
|
||||||
|
MPL-1.0 MPLv1.0
|
||||||
|
MPL-1.1 MPLv1.1
|
||||||
|
MPL-1.1 MPLv1.1 ..
|
||||||
|
SUSE-MPL-1.1+ MPLv1.1+
|
||||||
|
MS-PL Ms-Pl
|
||||||
|
MS-PL MS-PL
|
||||||
|
MS-RL MS-RL
|
||||||
|
Multics Multics
|
||||||
|
NASA-1.3 NASA-1.3
|
||||||
|
Naumen Naumen
|
||||||
|
NCSA NCSA
|
||||||
|
NGPL NGPL
|
||||||
|
Nokia Nokia
|
||||||
|
NPOSL-3.0 NPOSL-3.0
|
||||||
|
NTP NTP
|
||||||
|
OCLC-2.0 OCLC-2.0
|
||||||
|
ODbL-1.0 ODbL-1.0
|
||||||
|
OFL-1.1 OFL
|
||||||
|
OFL-1.1 OFL-1.1
|
||||||
|
OGTSL OGTSL
|
||||||
|
OLDAP-2.8 OLDAP-2.8
|
||||||
|
OFL-1.1 Open Font License
|
||||||
|
OLDAP-2.8 openldap 2.8
|
||||||
|
OpenSSL OpenSSL
|
||||||
|
OSL-1.0 OSL-1.0
|
||||||
|
OSL-2.0 OSL-2.0
|
||||||
|
OSL-3.0 OSL-3.0
|
||||||
|
PDDL-1.0 PDDL-1.0
|
||||||
|
Artistic-1.0 or GPL-1.0+ Perl License
|
||||||
|
PHP-3.0.1 PHP License
|
||||||
|
PostgreSQL PostgreSQL
|
||||||
|
SUSE-Public-Domain Public domain
|
||||||
|
SUSE-Public-Domain Public Domain
|
||||||
|
SUSE-Public-Domain Public Domain, Freeware
|
||||||
|
SUSE-Public-Domain Public Domain. See http://www.sentex.ca/~mw
|
||||||
|
Python-2.0 Python
|
||||||
|
Python-2.0 Python ..
|
||||||
|
Python-2.0 Python Copyright
|
||||||
|
Python-2.0 Python License ..
|
||||||
|
Python-2.0 Python Software Foundation License
|
||||||
|
Python-2.0 Python-2.0
|
||||||
|
QPL-1.0 QPL
|
||||||
|
QPL-1.0 QPL ..
|
||||||
|
QPL-1.0 QPL-1.0
|
||||||
|
RHeCos-1.1 RHeCos-1.1
|
||||||
|
RPL-1.5 RPL-1.5
|
||||||
|
RPSL-1.0 RPSL-1.0
|
||||||
|
RSCPL RSCPL
|
||||||
|
Ruby Ruby
|
||||||
|
SAX-PD SAX-PD
|
||||||
|
IPA see IPA_Font_License_Agreement_v1.0.txt
|
||||||
|
OFL-1.1 SIL Open Font License
|
||||||
|
OFL-1.1 SIL Open Font License 1.1
|
||||||
|
SimPL-2.0 SimPL-2.0
|
||||||
|
Sleepycat Sleepycat
|
||||||
|
SPL-1.0 SPL-1.0
|
||||||
|
SugarCRM-1.1.3 SugarCRM-1.1.3
|
||||||
|
LPPL-1.3c TeX-License ..
|
||||||
|
Apache-2.0 The Apache Software License
|
||||||
|
PHP-3.0.1 The PHP License, version 3.01
|
||||||
|
VSL-1.0 VSL-1.0
|
||||||
|
W3C W3C
|
||||||
|
W3C W3C Software License
|
||||||
|
Watcom-1.0 Watcom-1.0
|
||||||
|
WXwindows WXwindows
|
||||||
|
MIT X11
|
||||||
|
MIT X11 (BSD like)
|
||||||
|
MIT X11 MIT
|
||||||
|
MIT X11/MIT
|
||||||
|
XFree86-1.1 XFree86-1.1
|
||||||
|
Xnet Xnet
|
||||||
|
YPL-1.1 YPL-1.1
|
||||||
|
Zimbra-1.3 Zimbra-1.3
|
||||||
|
Zlib Zlib
|
||||||
|
Zlib zlib
|
||||||
|
Zlib Zlib License
|
||||||
|
Zlib zlib/libpng License
|
||||||
|
ZPL-2.0 Zope Public License
|
||||||
|
ZPL-2.0 ZPL
|
||||||
|
ZPL-2.1 ZPL 2.1
|
||||||
|
ZPL-1.1 ZPL-1.1
|
||||||
|
ZPL-2.0 ZPL-2.0
|
||||||
|
ZPL-2.1 ZPL-2.1
|
@ -1,3 +1,23 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Dec 7 14:04:46 UTC 2011 - coolo@suse.com
|
||||||
|
|
||||||
|
- move pkgconfig() and co to the end of the buildrequires
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Dec 7 08:22:29 UTC 2011 - coolo@suse.com
|
||||||
|
|
||||||
|
- another update from git to replace way more licenses (0.4)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Dec 6 08:50:41 UTC 2011 - coolo@suse.com
|
||||||
|
|
||||||
|
- update from https://github.com/openSUSE/obs-service-format_spec_file
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Dec 1 14:10:52 UTC 2011 - adrian@suse.de
|
||||||
|
|
||||||
|
- allow to specify a defined spec file (version 0.2)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Sep 7 13:34:45 CEST 2011 - dmueller@suse.de
|
Wed Sep 7 13:34:45 CEST 2011 - dmueller@suse.de
|
||||||
|
|
||||||
|
@ -16,16 +16,18 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Name: obs-service-format_spec_file
|
Name: obs-service-format_spec_file
|
||||||
License: GPL v2 or later
|
Summary: An OBS source service: reformats a spec file to SUSE standard
|
||||||
|
License: GPL-2.0+
|
||||||
Group: Development/Tools/Building
|
Group: Development/Tools/Building
|
||||||
Summary: An OBS source service: reformats a spec file to SUSE standard.
|
Version: 0.4
|
||||||
Version: 0.1
|
Release: 0
|
||||||
Release: 11
|
Url: https://github.com/openSUSE/obs-service-format_spec_file
|
||||||
Source: format_spec_file
|
Source: format_spec_file
|
||||||
Source1: format_spec_file.service
|
Source1: format_spec_file.service
|
||||||
Source2: prepare_spec
|
Source2: prepare_spec
|
||||||
|
Source3: patch_license
|
||||||
|
Source4: licenses_changes.txt
|
||||||
Requires: osc-source_validator
|
Requires: osc-source_validator
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
@ -49,7 +51,8 @@ spec file instead of creating a new one.
|
|||||||
mkdir -p $RPM_BUILD_ROOT/usr/lib/obs/service/format_spec_file.files
|
mkdir -p $RPM_BUILD_ROOT/usr/lib/obs/service/format_spec_file.files
|
||||||
install -m 0755 %{SOURCE0} $RPM_BUILD_ROOT/usr/lib/obs/service
|
install -m 0755 %{SOURCE0} $RPM_BUILD_ROOT/usr/lib/obs/service
|
||||||
install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT/usr/lib/obs/service
|
install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT/usr/lib/obs/service
|
||||||
install -m 0755 %{SOURCE2} $RPM_BUILD_ROOT/usr/lib/obs/service/format_spec_file.files
|
install -m 0755 %{SOURCE2} %{SOURCE3} $RPM_BUILD_ROOT/usr/lib/obs/service/format_spec_file.files
|
||||||
|
install -m 0644 %{SOURCE4} $RPM_BUILD_ROOT/usr/lib/obs/service/format_spec_file.files
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
|
564
patch_license
Normal file
564
patch_license
Normal file
@ -0,0 +1,564 @@
|
|||||||
|
#! /usr/bin/perl -w
|
||||||
|
#
|
||||||
|
# vim:sw=2:et
|
||||||
|
#
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
unshift @INC, ".";
|
||||||
|
unshift @INC, "/usr/lib/build/";
|
||||||
|
}
|
||||||
|
|
||||||
|
use Time::localtime;
|
||||||
|
use Data::Dumper;
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my @oldspec = ();
|
||||||
|
my @newspec = ();
|
||||||
|
my $base_package = "";
|
||||||
|
my $icecreamforbuild = "";
|
||||||
|
my @copyrights = ();
|
||||||
|
my $needsrootforbuild = 0;
|
||||||
|
my $needsbinariesforbuild = 0;
|
||||||
|
my $nodebuginfo = 0;
|
||||||
|
my $vim_modeline;
|
||||||
|
my $nosrc_result = 0;
|
||||||
|
my $current_section = "header";
|
||||||
|
my $had_debug_package = 0;
|
||||||
|
my %pkg_version = ();
|
||||||
|
my $main_license;
|
||||||
|
my %seen_licenses = ();
|
||||||
|
my $main_group;
|
||||||
|
my %seen_groups = ();
|
||||||
|
my $build_root = $ENV{'BUILD_ROOT'};
|
||||||
|
my $disabled_packs;
|
||||||
|
my $ifhandler;
|
||||||
|
my $definelist;
|
||||||
|
my $debug = 0;
|
||||||
|
|
||||||
|
my @global_tags_list =
|
||||||
|
(
|
||||||
|
'Autoreq',
|
||||||
|
'Autoreqprov',
|
||||||
|
'BuildArch',
|
||||||
|
'BuildArchitectures',
|
||||||
|
'BuildRequires',
|
||||||
|
'Conflicts',
|
||||||
|
'DocDir',
|
||||||
|
'Enhances',
|
||||||
|
'Enhances',
|
||||||
|
'EssentialFor',
|
||||||
|
'ExcludeArch',
|
||||||
|
'ExclusiveArch',
|
||||||
|
'Freshens',
|
||||||
|
'Group',
|
||||||
|
'Name',
|
||||||
|
'NoPatch',
|
||||||
|
'NoSource',
|
||||||
|
'Obsoletes',
|
||||||
|
'Patch\d*',
|
||||||
|
'Prefix',
|
||||||
|
'PreReq',
|
||||||
|
'Provides',
|
||||||
|
'Recommends',
|
||||||
|
'Requires',
|
||||||
|
'Source\d*',
|
||||||
|
'Suggests',
|
||||||
|
'Summary',
|
||||||
|
'Supplements',
|
||||||
|
'Url',
|
||||||
|
);
|
||||||
|
|
||||||
|
my $global_tags_re = '^\s*(' . join("|", @global_tags_list) . ')\s*:';
|
||||||
|
|
||||||
|
my $section_tags_re ='^\s*%(?:clean|check|prep|build|install|pre|post|preun|postun|posttrans|package|' .
|
||||||
|
'description|files|triggerin|triggerun|triggerpostun)\b';
|
||||||
|
|
||||||
|
sub unify {
|
||||||
|
my %h = map {$_ => 1} @_;
|
||||||
|
return grep(delete($h{$_}), @_);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub capitalize_case($)
|
||||||
|
{
|
||||||
|
my ($tag) = @_;
|
||||||
|
|
||||||
|
$tag = lc($tag);
|
||||||
|
|
||||||
|
$tag =~ s/docdir/DocDir/i;
|
||||||
|
$tag =~ s/arch/Arch/i;
|
||||||
|
$tag =~ s/patch/Patch/i;
|
||||||
|
$tag =~ s/source/Source/i;
|
||||||
|
$tag =~ s/req/Req/i;
|
||||||
|
$tag =~ s/prov/Prov/i;
|
||||||
|
$tag =~ s/^(\w)/uc($1)/e;
|
||||||
|
|
||||||
|
return $tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub compare_arrays {
|
||||||
|
my ($first, $second) = @_;
|
||||||
|
return 0 unless @$first == @$second;
|
||||||
|
for (my $i = 0; $i < @$first; $i++) {
|
||||||
|
return 0 if $first->[$i] ne $second->[$i];
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub maybe_add_empty_line()
|
||||||
|
{
|
||||||
|
push @oldspec, "XXXBLANKLINE"
|
||||||
|
if ($current_section ne "description" && $oldspec[-1] !~ /^\s*$/ && $oldspec[-1] !~ /^[#%]/);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub change_section($)
|
||||||
|
{
|
||||||
|
my ($new_section) = @_;
|
||||||
|
|
||||||
|
maybe_add_empty_line();
|
||||||
|
|
||||||
|
$current_section = $new_section;
|
||||||
|
warn "section changed to $current_section\n" if $debug;
|
||||||
|
}
|
||||||
|
|
||||||
|
my %license_replace = ();
|
||||||
|
use File::Basename;
|
||||||
|
|
||||||
|
sub load_license_map()
|
||||||
|
{
|
||||||
|
return if defined $license_replace{"GPL-2.0"};
|
||||||
|
my $scriptdir = File::Basename::dirname($0);
|
||||||
|
open(MAP, "$scriptdir/licenses_changes.txt") || die "can't open licenses_changes.txt";
|
||||||
|
# ignore header
|
||||||
|
readline(*MAP);
|
||||||
|
my %spdx;
|
||||||
|
while (<MAP>) {
|
||||||
|
chomp;
|
||||||
|
my ($license, $oldstring) = split(/\t/, $_, 2);
|
||||||
|
#$license =~ s,\s*$,,;
|
||||||
|
#$oldstring =~ s,\s*$,,;
|
||||||
|
next unless length($license);
|
||||||
|
#print STDERR "$license\t$oldstring\n";
|
||||||
|
die "$oldstring is given twice in $_" if defined $license_replace{$oldstring};
|
||||||
|
$license_replace{$oldstring} = $license;
|
||||||
|
$spdx{$license} = 1;
|
||||||
|
}
|
||||||
|
close(MAP);
|
||||||
|
for (keys %spdx) {
|
||||||
|
$license_replace{$_} = $_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub replace_single_spdx($)
|
||||||
|
{
|
||||||
|
my ($l) = @_;
|
||||||
|
|
||||||
|
return '' if $l eq '';
|
||||||
|
|
||||||
|
load_license_map();
|
||||||
|
$l =~ s,ORlater,or later,g;
|
||||||
|
$l =~ s,ORsim,or similar,g;
|
||||||
|
$l =~ s,^\s+,,;
|
||||||
|
$l =~ s,\s+$,,;
|
||||||
|
|
||||||
|
if (defined $license_replace{$l}) {
|
||||||
|
$l = $license_replace{$l};
|
||||||
|
} else {
|
||||||
|
print STDERR "Unknown license '$l'\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
return $l;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub replace_spdx_and($);
|
||||||
|
sub replace_spdx_and($)
|
||||||
|
{
|
||||||
|
my ($license) = @_;
|
||||||
|
|
||||||
|
# special case as or later is common in our spec files
|
||||||
|
$license =~ s,or later,ORlater,g;
|
||||||
|
$license =~ s,or similar,ORsim,g;
|
||||||
|
|
||||||
|
#print STDERR "ORIG '$license'\n";
|
||||||
|
my @licenses = ();
|
||||||
|
if ( $license =~ /^(.*?)\(([^)]*)\)(.*?)$/ ) {
|
||||||
|
my ($head, $paren, $tail) = ($1, $2, $3);
|
||||||
|
if ($paren =~ /and|or/) {
|
||||||
|
$head = replace_spdx_and($head);
|
||||||
|
$tail = replace_spdx_and($tail);
|
||||||
|
$paren = replace_spdx_and($paren);
|
||||||
|
#print STDERR "AFTE '$head($paren)$tail'\n";
|
||||||
|
return "$head($paren)$tail";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (split(/(\s+(?:and|or)\s+)/, $license, -1)) {
|
||||||
|
$_ = replace_single_spdx($_) unless $_ eq '' || /(\s+(?:and|or)\s+)/;
|
||||||
|
s/\s+/ /g;
|
||||||
|
push @licenses, $_;
|
||||||
|
}
|
||||||
|
#print STDERR "AFTE '" . join('', @licenses) . "'\n";
|
||||||
|
return join('', @licenses);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub replace_spdx($)
|
||||||
|
{
|
||||||
|
my ($license) = @_;
|
||||||
|
|
||||||
|
my @licenses = ();
|
||||||
|
for (split(/\s*;\s*/, $license)) {
|
||||||
|
push @licenses, replace_spdx_and($_);
|
||||||
|
}
|
||||||
|
return join(' ; ', @licenses);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub set_current_pkg {
|
||||||
|
my ( $arg ) = @_;
|
||||||
|
print "DEBUG: set_current_pkg receiving $arg\n" if $debug;
|
||||||
|
my ( @argarray ) = split ( '\s+' , $arg );
|
||||||
|
my $curpack = $base_package;
|
||||||
|
my $curlang = "";
|
||||||
|
while (my $carg = shift @argarray) {
|
||||||
|
next if ($carg eq "%description" || $carg eq "%package" || $carg eq "%prep");
|
||||||
|
if ($carg eq "-l") {
|
||||||
|
$curlang = shift @argarray;
|
||||||
|
} elsif ($carg eq "-n") {
|
||||||
|
$curpack = shift @argarray;
|
||||||
|
} else {
|
||||||
|
$curpack = "$base_package-" if $base_package;
|
||||||
|
$curpack .= $carg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "DEBUG: set_current_pkg returning $curpack, $curlang\n" if $debug;
|
||||||
|
return ($curpack, $curlang);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub read_and_parse_old_spec {
|
||||||
|
my ( $specfile, $base_package ) = @_;
|
||||||
|
my $current_package = $base_package;
|
||||||
|
my $current_lang = "";
|
||||||
|
my $check_printed = "false";
|
||||||
|
my $print_comments = "false";
|
||||||
|
my %version;
|
||||||
|
my $ifhandler;
|
||||||
|
$ifhandler->{"disabled"} = 0;
|
||||||
|
|
||||||
|
my @readspec;
|
||||||
|
open ( SPEC , "$specfile" ) || die "can't read specfile";
|
||||||
|
@readspec = <SPEC>;
|
||||||
|
close SPEC;
|
||||||
|
chomp @readspec;
|
||||||
|
|
||||||
|
while (@readspec) {
|
||||||
|
$_ = shift @readspec;
|
||||||
|
|
||||||
|
if ( /^\s*$/ && $current_section ne "description") {
|
||||||
|
# stop preamble parsing on two blank lines
|
||||||
|
if ($print_comments eq "false" && $oldspec[0] && $oldspec[-1] eq "XXXBLANKLINE") {
|
||||||
|
$print_comments = "true";
|
||||||
|
push @oldspec, "XXXDOUBLELINE";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
push @oldspec, "XXXBLANKLINE";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^# vim:/ ) {
|
||||||
|
$vim_modeline = $_;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^#\s*needsrootforbuild\s*$/ ) {
|
||||||
|
$needsrootforbuild = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^#\s*needsbinariesforbuild\s*$/ ) {
|
||||||
|
$needsbinariesforbuild = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^#\s*norootforbuild/ ) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^#\s*nodebuginfo\s*$/ ) {
|
||||||
|
$nodebuginfo = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^#\s*icecream/ ) {
|
||||||
|
$icecreamforbuild = $_;
|
||||||
|
$icecreamforbuild =~ s/^#\s*icecream\s*//;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^#\s*Copyright\s*/ ) {
|
||||||
|
my $lastlineblank = 0;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
# check if line is ONLY a standard copyright line, if so, ignore.
|
||||||
|
my $c = $_;
|
||||||
|
$c =~ s{\s*(\d+|copyrights?|\(c\)|suse|linux|products|gmbh|nuremberg|n..?rnberg|germany|\W+)\s*}{}gi;
|
||||||
|
push(@copyrights, $_) if length $c > 5;
|
||||||
|
last if length $readspec[0] < 10 || $readspec[0] =~ m{modifications and additions}i || $readspec[0] !~ /^[\#\s]/
|
||||||
|
|| grep { $readspec[0] =~ /^#\s*$_/ } ("needsrootforbuild","needsbinariesforbuild","nodebuginfo","icecream","usedforbuild","Commandline","MD5SUM","!BuildIgnore");
|
||||||
|
$_ = shift @readspec;
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
# evil epoch removal
|
||||||
|
next if ( /^Epoch:/ );
|
||||||
|
$_ =~ s/%{?epoch}?[:-]//g;
|
||||||
|
$_ =~ s/ 0:/ /g if ( /^requires/i || /^buildreq/i );
|
||||||
|
|
||||||
|
if ( /^BuildRequires:/ ) {
|
||||||
|
my $cur_buildreq = $_;
|
||||||
|
$cur_buildreq =~ s/^BuildRequires:\s*//;
|
||||||
|
my %aa;
|
||||||
|
while ($cur_buildreq =~ m{([^,\s]+(\s*[<=>]+\s*[^,\s]+)?)}g) {
|
||||||
|
$aa{$1}=1;
|
||||||
|
}
|
||||||
|
# ignore line if it looks like a "usedforbuild" line, i.e.
|
||||||
|
# if it contains too many base packages
|
||||||
|
next if (grep {$aa{$_}} qw{gcc rpm glibc bash}) > 2;
|
||||||
|
for my $br (sort keys(%aa)) {
|
||||||
|
push @oldspec, "BuildRequires: $br";
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
next if ( /^#\s*usedforbuild/ );
|
||||||
|
if ( /^%\?__\*BuildRequires:/ ) {
|
||||||
|
push @oldspec, $_;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^#!__\*BuildRequires:/ ) {
|
||||||
|
push @oldspec, $_;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^#!BuildIgnore:/ ) {
|
||||||
|
push @oldspec, $_;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^#/ && $current_section ne "description") {
|
||||||
|
warn "$_ $current_section\n" if $debug;
|
||||||
|
if ( $print_comments eq "true" || $readspec[0] =~ /^%define/ || $readspec[0] =~ /^%if/) {
|
||||||
|
push @oldspec, $_;
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^%debug_package/ ) {
|
||||||
|
# remove, we add this ourselves
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
$print_comments = "true" unless /^#/;
|
||||||
|
|
||||||
|
if ( /^%define\s*vendor\s/ || /^%define\s*distribution\s/ ) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^\s*%if/ || /^\s*%\{/ || /^\s*%define/ || /^\s*%el/ || /^\s*%endif/ ) {
|
||||||
|
change_section("header") if ($current_section eq "description");
|
||||||
|
push @oldspec, $_;
|
||||||
|
if ( /^\s*%if\s/ ) {
|
||||||
|
my @args = split (/\s+/,$_);
|
||||||
|
$_ =~ s/[\{\}\"]//g for (@args);
|
||||||
|
$ifhandler->{"last_if_disabled"} = 0;
|
||||||
|
$ifhandler->{"last_if_if"} = 1;
|
||||||
|
$ifhandler->{"depth"}++;
|
||||||
|
my $if_not = 0;
|
||||||
|
if ( $args[1] =~ /^\!/ ) {
|
||||||
|
$args[1] =~ s/^\!//;
|
||||||
|
$if_not = 1;
|
||||||
|
}
|
||||||
|
$args[2] = "" unless $args[2];
|
||||||
|
if ( ($args[1] eq "0")
|
||||||
|
|| ($args[1] eq "%name" && $args[2] eq "!=" && $args[3] eq $base_package)
|
||||||
|
|| ($args[1] eq "%name" && $args[2] eq "==" && $args[3] ne $base_package)
|
||||||
|
|| ($args[1] && !$args[3] && !$if_not && $definelist->{$args[1]} && $definelist->{$args[1]} eq "0")
|
||||||
|
|| ($args[2] eq "==" && $args[3] ne "0" && $definelist->{$args[1]} && $definelist->{$args[1]} eq "0")
|
||||||
|
|| ($args[2] eq "!=" && $args[3] eq "0" && $definelist->{$args[1]} && $definelist->{$args[1]} eq "0")
|
||||||
|
|| ($args[1] && !$args[3] && $if_not && $definelist->{$args[1]} && $definelist->{$args[1]} eq "1")
|
||||||
|
|| ($args[1] && $args[2] eq "!=" && $args[3] eq "1" && $definelist->{$args[1]} && $definelist->{$args[1]} eq "1") ) {
|
||||||
|
$ifhandler->{"disabled"} = $ifhandler->{"depth"};
|
||||||
|
$ifhandler->{"last_if_disabled"} = 1;
|
||||||
|
}
|
||||||
|
} elsif ( /^\s*%if/ ) {
|
||||||
|
$ifhandler->{"last_if_disabled"} = 0;
|
||||||
|
$ifhandler->{"last_if_if"} = 0;
|
||||||
|
$ifhandler->{"depth"}++;
|
||||||
|
} elsif ( /^\s*%endif/ ) {
|
||||||
|
$ifhandler->{"disabled"} = 0 if $ifhandler->{"disabled"} == $ifhandler->{"depth"};
|
||||||
|
$ifhandler->{"depth"}--;
|
||||||
|
} elsif ( /^\s*%else/ ) {
|
||||||
|
if ($ifhandler->{"disabled"} == $ifhandler->{"depth"} && $ifhandler->{"last_if_disabled"} == 1) {
|
||||||
|
$ifhandler->{"disabled"} = 0;
|
||||||
|
} elsif ($ifhandler->{"disabled"} == 0 && $ifhandler->{"depth"} == 1 && $ifhandler->{"last_if_if"} == 1) {
|
||||||
|
$ifhandler->{"disabled"} = 1;
|
||||||
|
}
|
||||||
|
} elsif ( /^\s*%define\s/ ) {
|
||||||
|
my @args = split (/\s+/,$_);
|
||||||
|
$_ =~ s/[\{\}\"]//g for (@args);
|
||||||
|
$args[2] =~ s/\Q$_\E/$definelist->{$_}/g for sort { length($b) <=> length($a) } keys (%{$definelist});
|
||||||
|
if ( $args[2] !~ /[\(\)\{\}\@\%\"\\]/ ) {
|
||||||
|
$definelist->{"%".$args[1]} = $args[2] if $ifhandler->{"disabled"} == 0;
|
||||||
|
$definelist->{"%{".$args[1]."}"} = $args[2] if $ifhandler->{"disabled"} == 0;
|
||||||
|
$definelist->{"%{?".$args[1]."}"} = $args[2] if $ifhandler->{"disabled"} == 0;
|
||||||
|
}
|
||||||
|
while ($_ =~ /\\$/) {
|
||||||
|
$_ = shift @readspec;
|
||||||
|
push @oldspec, $_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^%package\b/i or /^%prep\b/i ) {
|
||||||
|
if (/^%package\b/i) {
|
||||||
|
change_section("header");
|
||||||
|
} else {
|
||||||
|
change_section("prep");
|
||||||
|
}
|
||||||
|
$_ =~ s/^(%\w+)/lc($1)/e;
|
||||||
|
if ($debug) {
|
||||||
|
warn "key: $_ value: $definelist->{$_}\n" for (sort { length($b) <=> length($a) } keys (%{$definelist}));
|
||||||
|
}
|
||||||
|
push @oldspec, $_;
|
||||||
|
for my $xx (sort { length($b) <=> length($a) } keys (%{$definelist})) {
|
||||||
|
$_ =~ s/\Q$xx\E/$definelist->{$xx}/;
|
||||||
|
}
|
||||||
|
$_ =~ s/%{\?[^\}]*}//;
|
||||||
|
if ($debug) {
|
||||||
|
warn "after: $_\n";
|
||||||
|
}
|
||||||
|
($current_package, $current_lang) = set_current_pkg ( $_ );
|
||||||
|
if ($ifhandler->{"disabled"}) {
|
||||||
|
$disabled_packs->{$current_package} = 1;
|
||||||
|
warn "$current_package is disabled\n" if $debug;
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^%description\b/i ) {
|
||||||
|
change_section("description");
|
||||||
|
push @oldspec, $_;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^%install\b/i ) {
|
||||||
|
change_section("install");
|
||||||
|
push @oldspec, $_;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^%changelog\b/i ) {
|
||||||
|
change_section("changelog");
|
||||||
|
# changelog comes always from *.changes. Skip what is in spec file
|
||||||
|
# at the moment.
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if (/^%files\b/i) {
|
||||||
|
change_section("files");
|
||||||
|
$current_section = "files";
|
||||||
|
}
|
||||||
|
if ( /^%/ ) {
|
||||||
|
if ( m/$section_tags_re/oi ) {
|
||||||
|
$_ =~ s/^(%\w+)/lc($1)/e;
|
||||||
|
change_section("header") if (! m/\s*%files/i && !m/\s*%build/i);
|
||||||
|
change_section("build") if m/\s*%build/i;
|
||||||
|
warn "changed to $current_section for $_\n" if $debug;
|
||||||
|
}
|
||||||
|
|
||||||
|
push @oldspec, "$_";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($current_section eq "header") {
|
||||||
|
my $c_pack = $current_package;
|
||||||
|
$c_pack .= "_disabled" if $ifhandler->{"disabled"};
|
||||||
|
|
||||||
|
if ( /^Vendor:/ || /^Distribution:/ || /^Packager:/ ) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
# remove default value of Autoreqprov
|
||||||
|
if ( /^Autoreqprov\s*:\s*(.*)/i ) {
|
||||||
|
next if ( lc($1) eq "on" || lc($1) eq "yes");
|
||||||
|
}
|
||||||
|
# reset Release
|
||||||
|
if ( /^Release\s*:\s*(.*)/i ) {
|
||||||
|
# will be after Version
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^Summary\s*:\s*(.*)\s*$/i ) {
|
||||||
|
push @oldspec, sprintf("%-16s%s", "Summary:", $1);
|
||||||
|
push @oldspec, "XXXPOSTSUMMARY $current_package";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove license and print out after license later
|
||||||
|
if ( /^License\s*:\s*(.*)\s*$/i || /^Copyright\s*:\s*(.*)\s*$/i ) {
|
||||||
|
my $license = replace_spdx($1);
|
||||||
|
$main_license = $license if (!$main_license);
|
||||||
|
$seen_licenses{$current_package} = $license;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove groups and print out after summary later
|
||||||
|
if ( /^Group\s*:\s*(.*)\s*$/i ) {
|
||||||
|
my $group = $1;
|
||||||
|
$main_group = $group if (!$main_group);
|
||||||
|
$seen_groups{$current_package} = $group;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^BuildArchitectures\s*:/i ) {
|
||||||
|
$_ =~ s/^[^:]+:/BuildArch:/;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^BuildRoot\s*:/i ) {
|
||||||
|
push @oldspec, "BuildRoot: %{_tmppath}/%{name}-%{version}-build";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m/$global_tags_re\s*(.*)/oi ) {
|
||||||
|
my ($tag, $value) = ($1, $2);
|
||||||
|
$nosrc_result = 1 if ($tag =~ /(?:nosource|nopatch)/i);
|
||||||
|
push @oldspec, sprintf("%-16s%s", capitalize_case($tag) . ":", $value);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ( /^Version:/ ) {
|
||||||
|
warn "found Version, section = $current_section\n" if $debug;
|
||||||
|
$version{$c_pack} = $_;
|
||||||
|
$version{$c_pack} =~ s/^Version:\s*(.*)\s*/$1/;
|
||||||
|
push @oldspec, sprintf("%-16s%s","Version:",$version{$c_pack});
|
||||||
|
push @oldspec, sprintf("%-16s%s","Release:", "0");
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( $current_section ne "changelog" ) {
|
||||||
|
push @oldspec, $_;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
my $specfile = shift ( @ARGV );
|
||||||
|
if ( ! stat($specfile) ) {
|
||||||
|
die "$specfile is no file";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
my @specpath = split ('/' ,$specfile);
|
||||||
|
my $specbase = pop @specpath;
|
||||||
|
my $specdir = join ('/', @specpath);
|
||||||
|
|
||||||
|
if ( $specdir eq "" ) {
|
||||||
|
$specdir = ".";
|
||||||
|
}
|
||||||
|
my $xdefinelist;
|
||||||
|
my $seen_name = 0;
|
||||||
|
open ( SPE , "$specfile" );
|
||||||
|
while ( <SPE> ) {
|
||||||
|
chomp;
|
||||||
|
|
||||||
|
if ( m/^License\s*:\s*(.*)\s*$/ ) {
|
||||||
|
printf("%-16s%s\n","License:", replace_spdx($1));
|
||||||
|
} else {
|
||||||
|
print "$_\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
323
prepare_spec
323
prepare_spec
@ -15,21 +15,20 @@ use strict;
|
|||||||
my @oldspec = ();
|
my @oldspec = ();
|
||||||
my @newspec = ();
|
my @newspec = ();
|
||||||
my $base_package = "";
|
my $base_package = "";
|
||||||
my $neededforbuild = "";
|
|
||||||
my $icecreamforbuild = "";
|
my $icecreamforbuild = "";
|
||||||
my $norootforbuild = 0;
|
|
||||||
my @copyrights = ();
|
my @copyrights = ();
|
||||||
my $needsrootforbuild = 0;
|
my $needsrootforbuild = 0;
|
||||||
my $needsbinariesforbuild = 0;
|
my $needsbinariesforbuild = 0;
|
||||||
my $nodebuginfo = 0;
|
my $nodebuginfo = 0;
|
||||||
my %multiline_macros = ();
|
my $vim_modeline;
|
||||||
my $nosrc_result = 0;
|
my $nosrc_result = 0;
|
||||||
my $current_section = "header";
|
my $current_section = "header";
|
||||||
my $had_debug_package = 0;
|
my $had_debug_package = 0;
|
||||||
my %pkg_version = ();
|
my %pkg_version = ();
|
||||||
my %pkg_release = ();
|
my $main_license;
|
||||||
my %please_replace = ();
|
my %seen_licenses = ();
|
||||||
my %replace_hash = ();
|
my $main_group;
|
||||||
|
my %seen_groups = ();
|
||||||
my $build_root = $ENV{'BUILD_ROOT'};
|
my $build_root = $ENV{'BUILD_ROOT'};
|
||||||
my $disabled_packs;
|
my $disabled_packs;
|
||||||
my $ifhandler;
|
my $ifhandler;
|
||||||
@ -51,6 +50,8 @@ my @global_tags_list =
|
|||||||
'ExcludeArch',
|
'ExcludeArch',
|
||||||
'ExclusiveArch',
|
'ExclusiveArch',
|
||||||
'Freshens',
|
'Freshens',
|
||||||
|
'Group',
|
||||||
|
'Name',
|
||||||
'NoPatch',
|
'NoPatch',
|
||||||
'NoSource',
|
'NoSource',
|
||||||
'Obsoletes',
|
'Obsoletes',
|
||||||
@ -62,6 +63,7 @@ my @global_tags_list =
|
|||||||
'Requires',
|
'Requires',
|
||||||
'Source\d*',
|
'Source\d*',
|
||||||
'Suggests',
|
'Suggests',
|
||||||
|
'Summary',
|
||||||
'Supplements',
|
'Supplements',
|
||||||
'Url',
|
'Url',
|
||||||
);
|
);
|
||||||
@ -93,10 +95,19 @@ sub capitalize_case($)
|
|||||||
return $tag;
|
return $tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub compare_arrays {
|
||||||
|
my ($first, $second) = @_;
|
||||||
|
return 0 unless @$first == @$second;
|
||||||
|
for (my $i = 0; $i < @$first; $i++) {
|
||||||
|
return 0 if $first->[$i] ne $second->[$i];
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
sub maybe_add_empty_line()
|
sub maybe_add_empty_line()
|
||||||
{
|
{
|
||||||
push @oldspec, "XXXBLANKLINE"
|
push @oldspec, "XXXBLANKLINE"
|
||||||
if ($current_section ne "description" && $oldspec[-1] !~ /^\s*$/);
|
if ($current_section ne "description" && $oldspec[-1] !~ /^\s*$/ && $oldspec[-1] !~ /^[#%]/);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub change_section($)
|
sub change_section($)
|
||||||
@ -109,6 +120,96 @@ sub change_section($)
|
|||||||
warn "section changed to $current_section\n" if $debug;
|
warn "section changed to $current_section\n" if $debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my %license_replace = ();
|
||||||
|
use File::Basename;
|
||||||
|
|
||||||
|
sub load_license_map()
|
||||||
|
{
|
||||||
|
return if defined $license_replace{"GPL-2.0"};
|
||||||
|
my $scriptdir = File::Basename::dirname($0);
|
||||||
|
open(MAP, "$scriptdir/licenses_changes.txt") || die "can't open licenses_changes.txt";
|
||||||
|
# ignore header
|
||||||
|
readline(*MAP);
|
||||||
|
my %spdx;
|
||||||
|
while (<MAP>) {
|
||||||
|
chomp;
|
||||||
|
my ($license, $oldstring) = split(/\t/, $_, 2);
|
||||||
|
#$license =~ s,\s*$,,;
|
||||||
|
#$oldstring =~ s,\s*$,,;
|
||||||
|
next unless length($license);
|
||||||
|
#print STDERR "$license\t$oldstring\n";
|
||||||
|
die "$oldstring is given twice in $_" if defined $license_replace{$oldstring};
|
||||||
|
$license_replace{$oldstring} = $license;
|
||||||
|
$spdx{$license} = 1;
|
||||||
|
}
|
||||||
|
close(MAP);
|
||||||
|
for (keys %spdx) {
|
||||||
|
$license_replace{$_} = $_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub replace_single_spdx($)
|
||||||
|
{
|
||||||
|
my ($l) = @_;
|
||||||
|
|
||||||
|
return '' if $l eq '';
|
||||||
|
|
||||||
|
load_license_map();
|
||||||
|
$l =~ s,ORlater,or later,g;
|
||||||
|
$l =~ s,ORsim,or similar,g;
|
||||||
|
$l =~ s,^\s+,,;
|
||||||
|
$l =~ s,\s+$,,;
|
||||||
|
|
||||||
|
if (defined $license_replace{$l}) {
|
||||||
|
$l = $license_replace{$l};
|
||||||
|
} else {
|
||||||
|
print STDERR "Unknown license '$l'\n";
|
||||||
|
}
|
||||||
|
return $l;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub replace_spdx_and($);
|
||||||
|
sub replace_spdx_and($)
|
||||||
|
{
|
||||||
|
my ($license) = @_;
|
||||||
|
|
||||||
|
# special case as or later is common in our spec files
|
||||||
|
$license =~ s,or later,ORlater,g;
|
||||||
|
$license =~ s,or similar,ORsim,g;
|
||||||
|
|
||||||
|
#print STDERR "ORIG '$license'\n";
|
||||||
|
my @licenses = ();
|
||||||
|
if ( $license =~ /^(.*?)\(([^)]*)\)(.*?)$/ ) {
|
||||||
|
my ($head, $paren, $tail) = ($1, $2, $3);
|
||||||
|
if ($paren =~ /and|or/) {
|
||||||
|
$head = replace_spdx_and($head);
|
||||||
|
$tail = replace_spdx_and($tail);
|
||||||
|
$paren = replace_spdx_and($paren);
|
||||||
|
#print STDERR "AFTE '$head($paren)$tail'\n";
|
||||||
|
return "$head($paren)$tail";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (split(/(\s+(?:and|or)\s+)/, $license, -1)) {
|
||||||
|
$_ = replace_single_spdx($_) unless $_ eq '' || /(\s+(?:and|or)\s+)/;
|
||||||
|
s/\s+/ /g;
|
||||||
|
push @licenses, $_;
|
||||||
|
}
|
||||||
|
#print STDERR "AFTE '" . join('', @licenses) . "'\n";
|
||||||
|
return join('', @licenses);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub replace_spdx($)
|
||||||
|
{
|
||||||
|
my ($license) = @_;
|
||||||
|
|
||||||
|
my @licenses = ();
|
||||||
|
for (split(/\s*;\s*/, $license)) {
|
||||||
|
push @licenses, replace_spdx_and($_);
|
||||||
|
}
|
||||||
|
return join(' ; ', @licenses);
|
||||||
|
}
|
||||||
|
|
||||||
sub set_current_pkg {
|
sub set_current_pkg {
|
||||||
my ( $arg ) = @_;
|
my ( $arg ) = @_;
|
||||||
print "DEBUG: set_current_pkg receiving $arg\n" if $debug;
|
print "DEBUG: set_current_pkg receiving $arg\n" if $debug;
|
||||||
@ -130,6 +231,18 @@ sub set_current_pkg {
|
|||||||
return ($curpack, $curlang);
|
return ($curpack, $curlang);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub sort_buildrequires_helper {
|
||||||
|
if (($a =~ /^[^#]*\(/) != ($b =~ /^[^#]*\(/)) {
|
||||||
|
if ($a =~ /^[^#]*\(/) {
|
||||||
|
1;
|
||||||
|
} else {
|
||||||
|
-1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$a cmp $b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub read_and_parse_old_spec {
|
sub read_and_parse_old_spec {
|
||||||
my ( $specfile, $base_package ) = @_;
|
my ( $specfile, $base_package ) = @_;
|
||||||
my $current_package = $base_package;
|
my $current_package = $base_package;
|
||||||
@ -148,15 +261,23 @@ sub read_and_parse_old_spec {
|
|||||||
|
|
||||||
while (@readspec) {
|
while (@readspec) {
|
||||||
$_ = shift @readspec;
|
$_ = shift @readspec;
|
||||||
|
|
||||||
if ( /^\s*$/ && $current_section ne "description") {
|
if ( /^\s*$/ && $current_section ne "description") {
|
||||||
|
# stop preamble parsing on two blank lines
|
||||||
|
if ($print_comments eq "false" && $oldspec[0] && $oldspec[-1] eq "XXXBLANKLINE") {
|
||||||
|
$print_comments = "true";
|
||||||
|
push @oldspec, "XXXDOUBLELINE";
|
||||||
|
next;
|
||||||
|
}
|
||||||
push @oldspec, "XXXBLANKLINE";
|
push @oldspec, "XXXBLANKLINE";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( /^#\s*norootforbuild\s*$/ ) {
|
if ( /^# vim:/ ) {
|
||||||
$norootforbuild = 1;
|
$vim_modeline = $_;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( /^#\s*needsrootforbuild\s*$/ ) {
|
if ( /^#\s*needsrootforbuild\s*$/ ) {
|
||||||
$needsrootforbuild = 1;
|
$needsrootforbuild = 1;
|
||||||
next;
|
next;
|
||||||
@ -165,6 +286,10 @@ sub read_and_parse_old_spec {
|
|||||||
$needsbinariesforbuild = 1;
|
$needsbinariesforbuild = 1;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
if ( /^#\s*norootforbuild/ ) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
if ( /^#\s*nodebuginfo\s*$/ ) {
|
if ( /^#\s*nodebuginfo\s*$/ ) {
|
||||||
$nodebuginfo = 1;
|
$nodebuginfo = 1;
|
||||||
next;
|
next;
|
||||||
@ -175,6 +300,7 @@ sub read_and_parse_old_spec {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if ( /^#\s*Copyright\s*/ ) {
|
if ( /^#\s*Copyright\s*/ ) {
|
||||||
|
my $lastlineblank = 0;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
# check if line is ONLY a standard copyright line, if so, ignore.
|
# check if line is ONLY a standard copyright line, if so, ignore.
|
||||||
@ -182,22 +308,11 @@ sub read_and_parse_old_spec {
|
|||||||
$c =~ s{\s*(\d+|copyrights?|\(c\)|suse|linux|products|gmbh|nuremberg|n..?rnberg|germany|\W+)\s*}{}gi;
|
$c =~ s{\s*(\d+|copyrights?|\(c\)|suse|linux|products|gmbh|nuremberg|n..?rnberg|germany|\W+)\s*}{}gi;
|
||||||
push(@copyrights, $_) if length $c > 5;
|
push(@copyrights, $_) if length $c > 5;
|
||||||
last if length $readspec[0] < 10 || $readspec[0] =~ m{modifications and additions}i || $readspec[0] !~ /^[\#\s]/
|
last if length $readspec[0] < 10 || $readspec[0] =~ m{modifications and additions}i || $readspec[0] !~ /^[\#\s]/
|
||||||
|| grep { $readspec[0] =~ /^#\s*$_/ } ("norootforbuild","needsrootforbuild","needsbinariesforbuild","nodebuginfo","icecream","neededforbuild","usedforbuild","Commandline","MD5SUM","!BuildIgnore");
|
|| grep { $readspec[0] =~ /^#\s*$_/ } ("needsrootforbuild","needsbinariesforbuild","nodebuginfo","icecream","usedforbuild","Commandline","MD5SUM","!BuildIgnore");
|
||||||
$_ = shift @readspec;
|
$_ = shift @readspec;
|
||||||
}
|
}
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if ( /^#\s*neededforbuild/ ) {
|
|
||||||
$neededforbuild = $_;
|
|
||||||
$neededforbuild =~ s/^#\s*neededforbuild\s*//;
|
|
||||||
my (%aa) = ();
|
|
||||||
foreach my $x (split(' ',$neededforbuild)){
|
|
||||||
$aa{$x}=1;
|
|
||||||
}
|
|
||||||
$neededforbuild = join(' ',sort keys (%aa));
|
|
||||||
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
# evil epoch removal
|
# evil epoch removal
|
||||||
next if ( /^Epoch:/ );
|
next if ( /^Epoch:/ );
|
||||||
$_ =~ s/%{?epoch}?[:-]//g;
|
$_ =~ s/%{?epoch}?[:-]//g;
|
||||||
@ -213,7 +328,9 @@ sub read_and_parse_old_spec {
|
|||||||
# ignore line if it looks like a "usedforbuild" line, i.e.
|
# ignore line if it looks like a "usedforbuild" line, i.e.
|
||||||
# if it contains too many base packages
|
# if it contains too many base packages
|
||||||
next if (grep {$aa{$_}} qw{gcc rpm glibc bash}) > 2;
|
next if (grep {$aa{$_}} qw{gcc rpm glibc bash}) > 2;
|
||||||
push @oldspec, "BuildRequires: ".join(' ',sort keys(%aa));
|
for my $br (sort keys(%aa)) {
|
||||||
|
push @oldspec, "BuildRequires: $br";
|
||||||
|
}
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
next if ( /^#\s*usedforbuild/ );
|
next if ( /^#\s*usedforbuild/ );
|
||||||
@ -229,6 +346,7 @@ sub read_and_parse_old_spec {
|
|||||||
push @oldspec, $_;
|
push @oldspec, $_;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( /^#/ && $current_section ne "description") {
|
if ( /^#/ && $current_section ne "description") {
|
||||||
warn "$_ $current_section\n" if $debug;
|
warn "$_ $current_section\n" if $debug;
|
||||||
if ( $print_comments eq "true" || $readspec[0] =~ /^%define/ || $readspec[0] =~ /^%if/) {
|
if ( $print_comments eq "true" || $readspec[0] =~ /^%define/ || $readspec[0] =~ /^%if/) {
|
||||||
@ -236,6 +354,7 @@ sub read_and_parse_old_spec {
|
|||||||
}
|
}
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( /^%debug_package/ ) {
|
if ( /^%debug_package/ ) {
|
||||||
# remove, we add this ourselves
|
# remove, we add this ourselves
|
||||||
next;
|
next;
|
||||||
@ -245,9 +364,7 @@ sub read_and_parse_old_spec {
|
|||||||
if ( /^%define\s*vendor\s/ || /^%define\s*distribution\s/ ) {
|
if ( /^%define\s*vendor\s/ || /^%define\s*distribution\s/ ) {
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if ( /^%define\s+(\w[\w\d]+).*\\$/ ) {
|
|
||||||
$multiline_macros{$1} = 1;
|
|
||||||
}
|
|
||||||
if ( /^\s*%if/ || /^\s*%\{/ || /^\s*%define/ || /^\s*%el/ || /^\s*%endif/ ) {
|
if ( /^\s*%if/ || /^\s*%\{/ || /^\s*%define/ || /^\s*%el/ || /^\s*%endif/ ) {
|
||||||
change_section("header") if ($current_section eq "description");
|
change_section("header") if ($current_section eq "description");
|
||||||
push @oldspec, $_;
|
push @oldspec, $_;
|
||||||
@ -330,13 +447,7 @@ sub read_and_parse_old_spec {
|
|||||||
}
|
}
|
||||||
if ( /^%description\b/i ) {
|
if ( /^%description\b/i ) {
|
||||||
change_section("description");
|
change_section("description");
|
||||||
$_ =~ s/^(%\w+)/lc($1)/e;
|
|
||||||
push @oldspec, $_;
|
push @oldspec, $_;
|
||||||
($current_package, $current_lang) = set_current_pkg ( $_ );
|
|
||||||
my $target = $current_package;
|
|
||||||
$target .= "_$current_lang" if $current_lang;
|
|
||||||
$target .= "_disabled" if $ifhandler->{"disabled"};
|
|
||||||
push @oldspec, "XXXDESCRIPTION $target";
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if ( /^%install\b/i ) {
|
if ( /^%install\b/i ) {
|
||||||
@ -363,64 +474,56 @@ sub read_and_parse_old_spec {
|
|||||||
}
|
}
|
||||||
|
|
||||||
push @oldspec, "$_";
|
push @oldspec, "$_";
|
||||||
# multiline macros need an extra newline with old RPMs
|
|
||||||
if (/^%(\w[\w\d]+).*[^\\]$/) {
|
|
||||||
push @oldspec, "" if (defined($multiline_macros{$1}));
|
|
||||||
}
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($current_section eq "header") {
|
if ($current_section eq "header") {
|
||||||
my $c_pack = $current_package;
|
my $c_pack = $current_package;
|
||||||
$c_pack .= "_disabled" if $ifhandler->{"disabled"};
|
$c_pack .= "_disabled" if $ifhandler->{"disabled"};
|
||||||
if ( /^Summary\b\s*:\s*(.*)/i ) {
|
|
||||||
$replace_hash{"XXXSUMMARY $c_pack"} = sprintf("%-16s%s","Summary:", $1);
|
|
||||||
push @oldspec, "XXXSUMMARY $c_pack";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ( /^Group\b\s*:\s*(.*)/i ) {
|
|
||||||
$replace_hash{"XXXGROUP $c_pack"} = sprintf("%-16s%s", "Group:", $1);
|
|
||||||
push @oldspec, "XXXGROUP $c_pack";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ( /^Vendor:/ || /^Distribution:/ || /^Packager:/ ) {
|
if ( /^Vendor:/ || /^Distribution:/ || /^Packager:/ ) {
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if ( /^Name\s*:\s*(.*)/i ) {
|
# remove default value of Autoreqprov
|
||||||
my $orig_name = $1;
|
if ( /^Autoreqprov\s*:\s*(.*)/i ) {
|
||||||
my $changed_name = $orig_name;
|
next if ( lc($1) eq "on" || lc($1) eq "yes");
|
||||||
$changed_name =~ s/\Q$_\E/$definelist->{$_}/ for (sort { length($b) <=> length($a) } keys (%{$definelist}));
|
|
||||||
if ($changed_name eq $base_package) {
|
|
||||||
push @oldspec, sprintf("\n%-16s%s","Name:", $orig_name);
|
|
||||||
} else {
|
|
||||||
push @oldspec, sprintf("\n%-16s%s","Name:", $base_package);
|
|
||||||
}
|
}
|
||||||
$definelist->{"%name"} = $base_package if $ifhandler->{"disabled"} == 0;
|
# reset Release
|
||||||
$definelist->{"%{name}"} = $base_package if $ifhandler->{"disabled"} == 0;
|
if ( /^Release\s*:\s*(.*)/i ) {
|
||||||
warn ("line is $_, orig_name is $orig_name, base_package is $base_package\n") if $ifhandler->{"disabled"} == 0 && $debug;
|
# will be after Version
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
if ( /^Summary\s*:\s*(.*)\s*$/i ) {
|
||||||
|
push @oldspec, sprintf("%-16s%s", "Summary:", $1);
|
||||||
|
push @oldspec, "XXXPOSTSUMMARY $current_package";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove license and print out after license later
|
||||||
|
if ( /^License\s*:\s*(.*)\s*$/i || /^Copyright\s*:\s*(.*)\s*$/i ) {
|
||||||
|
my $license = replace_spdx($1);
|
||||||
|
$main_license = $license if (!$main_license);
|
||||||
|
$seen_licenses{$current_package} = $license;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove groups and print out after summary later
|
||||||
|
if ( /^Group\s*:\s*(.*)\s*$/i ) {
|
||||||
|
my $group = $1;
|
||||||
|
$main_group = $group if (!$main_group);
|
||||||
|
$seen_groups{$current_package} = $group;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
if ( /^BuildArchitectures\s*:/i ) {
|
if ( /^BuildArchitectures\s*:/i ) {
|
||||||
$_ =~ s/^[^:]+:/BuildArch:/;
|
$_ =~ s/^[^:]+:/BuildArch:/;
|
||||||
}
|
}
|
||||||
if ( /^Release\s*:\s*(.*)/i ) {
|
|
||||||
$pkg_release{$c_pack} = $_;
|
|
||||||
$replace_hash{"XXXRELEASE $c_pack"} = sprintf("%-16s%s","Release:", $1);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ( /^BuildRoot\s*:/i ) {
|
if ( /^BuildRoot\s*:/i ) {
|
||||||
push @oldspec, "BuildRoot: %{_tmppath}/%{name}-%{version}-build";
|
push @oldspec, "BuildRoot: %{_tmppath}/%{name}-%{version}-build";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if ( /^Copyright\s*:\s*(.*)/i || /^License\s*:\s*(.*)/i ) {
|
|
||||||
$replace_hash{"XXXLICENSE $c_pack"} = sprintf("%-16s%s","License:", $1);
|
|
||||||
push @oldspec, "XXXLICENSE $c_pack";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ( /^Url\s*:\s*(.*)/i ) {
|
|
||||||
$replace_hash{"XXXURL $c_pack"} = sprintf("%-16s%s","Url:", $1);
|
|
||||||
push @oldspec, "XXXURL $c_pack";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ( m/$global_tags_re\s*(.*)/oi ) {
|
if ( m/$global_tags_re\s*(.*)/oi ) {
|
||||||
my ($tag, $value) = ($1, $2);
|
my ($tag, $value) = ($1, $2);
|
||||||
$nosrc_result = 1 if ($tag =~ /(?:nosource|nopatch)/i);
|
$nosrc_result = 1 if ($tag =~ /(?:nosource|nopatch)/i);
|
||||||
@ -431,24 +534,17 @@ sub read_and_parse_old_spec {
|
|||||||
warn "found Version, section = $current_section\n" if $debug;
|
warn "found Version, section = $current_section\n" if $debug;
|
||||||
$version{$c_pack} = $_;
|
$version{$c_pack} = $_;
|
||||||
$version{$c_pack} =~ s/^Version:\s*(.*)\s*/$1/;
|
$version{$c_pack} =~ s/^Version:\s*(.*)\s*/$1/;
|
||||||
$replace_hash{"XXXVERSION $c_pack"} = sprintf("%-16s%s","Version:",$version{$c_pack});
|
push @oldspec, sprintf("%-16s%s","Version:",$version{$c_pack});
|
||||||
push @oldspec, $replace_hash{"XXXVERSION $c_pack"};
|
push @oldspec, sprintf("%-16s%s","Release:", "0");
|
||||||
push @oldspec, "XXXRELEASE $c_pack";
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( $current_section eq "description" ) {
|
if ( $current_section ne "changelog" ) {
|
||||||
my $target = $current_package;
|
|
||||||
$target .= "_$current_lang" if $current_lang;
|
|
||||||
$target .= "_disabled" if $ifhandler->{"disabled"};
|
|
||||||
$replace_hash{"XXXDESCRIPTION $target"} .= "\n" if ( $replace_hash{"XXXDESCRIPTION $target"} );
|
|
||||||
$replace_hash{"XXXDESCRIPTION $target"} .= $_;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
if ( $current_section ne "description" && $current_section ne "changelog" ) {
|
|
||||||
push @oldspec, $_;
|
push @oldspec, $_;
|
||||||
|
next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ARGV[0] eq '--debug') {
|
if ($ARGV[0] eq '--debug') {
|
||||||
@ -518,16 +614,40 @@ if ( ! stat ((glob("$specdir/$base_package*.spec"))[0] || "") ) {
|
|||||||
|
|
||||||
read_and_parse_old_spec ( $specfile, $base_package );
|
read_and_parse_old_spec ( $specfile, $base_package );
|
||||||
|
|
||||||
for (@oldspec) {
|
my $linesmoved = 1;
|
||||||
next unless /^XXX/;
|
while ($linesmoved) {
|
||||||
$please_replace{$_} = 1;
|
$linesmoved = 0;
|
||||||
|
my @firstlines = ();
|
||||||
|
my @buildrequires = ();
|
||||||
|
while ($oldspec[0]) {
|
||||||
|
my $l = shift @oldspec;
|
||||||
|
if ($l =~ m/^BuildRequires:/ ) {
|
||||||
|
push(@buildrequires, $l);
|
||||||
|
} else {
|
||||||
|
# if there are already buildrequires, we need to sort and exit
|
||||||
|
if (@buildrequires > 0) {
|
||||||
|
my @sortedbrs = sort sort_buildrequires_helper @buildrequires;
|
||||||
|
$linesmoved = !compare_arrays(\@buildrequires, \@sortedbrs);
|
||||||
|
@oldspec = (@firstlines, @sortedbrs, $l, @oldspec);
|
||||||
|
@firstlines = ();
|
||||||
|
@buildrequires = ();
|
||||||
|
last;
|
||||||
|
} else {
|
||||||
|
push(@firstlines, $l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@oldspec = (@firstlines, @oldspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
my $thisyear = localtime->year() + 1900;
|
my $thisyear = localtime->year() + 1900;
|
||||||
|
|
||||||
unshift @copyrights, "# Copyright (c) $thisyear SUSE LINUX Products GmbH, Nuernberg, Germany.";
|
unshift @copyrights, "# Copyright (c) $thisyear SUSE LINUX Products GmbH, Nuernberg, Germany.";
|
||||||
|
|
||||||
my $copy_list = join("\n", @copyrights);
|
my $copy_list = join("\n", @copyrights);
|
||||||
|
|
||||||
|
print $vim_modeline . "\n" if (defined $vim_modeline);
|
||||||
print <<EOF;
|
print <<EOF;
|
||||||
#
|
#
|
||||||
# spec file for package $base_package
|
# spec file for package $base_package
|
||||||
@ -545,39 +665,38 @@ $copy_list
|
|||||||
|
|
||||||
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||||
#
|
#
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
print "# norootforbuild\n" if $norootforbuild;
|
|
||||||
print "# needsrootforbuild\n" if $needsrootforbuild;
|
print "# needsrootforbuild\n" if $needsrootforbuild;
|
||||||
print "# needsbinariesforbuild\n" if $needsbinariesforbuild;
|
print "# needsbinariesforbuild\n" if $needsbinariesforbuild;
|
||||||
print "# nodebuginfo\n" if $nodebuginfo;
|
print "# nodebuginfo\n" if $nodebuginfo;
|
||||||
print "# icecream $icecreamforbuild\n" if $icecreamforbuild ne '';
|
print "# icecream $icecreamforbuild\n" if $icecreamforbuild ne '';
|
||||||
print "\n";
|
print "\n" if ($needsrootforbuild || $needsbinariesforbuild || $nodebuginfo || $icecreamforbuild ne '');
|
||||||
|
|
||||||
while ($oldspec[0] eq "XXXBLANKLINE") {
|
while ($oldspec[0] eq "XXXBLANKLINE") {
|
||||||
shift @oldspec;
|
shift @oldspec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $license_unique = !grep { $_ ne $main_license } values %seen_licenses;
|
||||||
|
my $groups_unique = !grep { $_ ne $main_group } values %seen_groups;
|
||||||
|
my $first_summary = 1;
|
||||||
|
|
||||||
my $line;
|
my $line;
|
||||||
while (@oldspec) {
|
while (@oldspec) {
|
||||||
$line = shift @oldspec;
|
$line = shift @oldspec;
|
||||||
if ($line eq "XXXBLANKLINE") {
|
if ($line eq "XXXBLANKLINE") {
|
||||||
print "\n" unless $oldspec[0] && ($oldspec[0] eq "XXXBLANKLINE" || $oldspec[0] =~ /^\s*$/ || $oldspec[0] =~ /^\n/);
|
print "\n" unless $oldspec[0] && ($oldspec[0] =~ m/^XXX.*LINE/ || $oldspec[0] =~ /^\s*$/ || $oldspec[0] =~ /^\n/);
|
||||||
} elsif ($line =~ /^XXX/) {
|
} elsif ($line eq "XXXDOUBLELINE") {
|
||||||
print "DEBUG: replacing $line\n" if $debug;
|
print "\n\n" unless $oldspec[0] && ($oldspec[0] =~ m/^XXX.*LINE/ || $oldspec[0] =~ /^\s*$/ || $oldspec[0] =~ /^\n/);
|
||||||
print "$replace_hash{$line}\n";
|
} elsif ($line =~ m/XXXPOSTSUMMARY (.*)$/) {
|
||||||
|
my $current_package = $1;
|
||||||
|
my $license = $seen_licenses{$current_package} || $main_license;
|
||||||
|
printf("%-16s%s\n", "License:", $license) if (!$license_unique || $first_summary);
|
||||||
|
my $group = $seen_groups{$current_package} || $main_group;
|
||||||
|
printf("%-16s%s\n", "Group:", $group) if (!$groups_unique || $first_summary);
|
||||||
|
$first_summary = 0;
|
||||||
} else {
|
} else {
|
||||||
print "$line\n";
|
print "$line\n";
|
||||||
# a package line with no license tag found for it yet
|
|
||||||
# if line ends with "\", we are probably in a macro definition
|
|
||||||
if ($line =~ /^%package/ && $line !~ /\\$/) {
|
|
||||||
$line =~ s/^(%\w+)/lc($1)/e;
|
|
||||||
my ($current_package, $current_lang) = set_current_pkg ( $line );
|
|
||||||
unless ($please_replace{"XXXLICENSE $current_package"} || !$replace_hash{"XXXLICENSE $current_package"}) {
|
|
||||||
print $replace_hash{"XXXLICENSE $current_package"}."\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user