1
0

- another update from git to replace way more licenses (0.4)

OBS-URL: https://build.opensuse.org/package/show/openSUSE:Tools/obs-service-format_spec_file?expand=0&rev=27
This commit is contained in:
Stephan Kulow 2011-12-07 08:27:18 +00:00 committed by Git OBS Bridge
parent 0b56edb017
commit 743401b468
7 changed files with 1009 additions and 121 deletions

View File

@ -18,14 +18,16 @@
Name: obs-service-format_spec_file Name: obs-service-format_spec_file
Summary: An OBS source service: reformats a spec file to SUSE standard. Summary: An OBS source service: reformats a spec file to SUSE standard
License: GPL-2.0+ License: GPL-2.0+
Group: Development/Tools/Building Group: Development/Tools/Building
Version: 0.3 Version: 0.4
Release: 0 Release: 0
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)

View File

@ -1,6 +1,6 @@
<service name="format_spec_file"> <service name="format_spec_file">
<summary>Format the spec files</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"> <parameter name="specfile">
<description>Just run on specified spec file instead all available</description> <description>Just run on specified spec file instead all available</description>
</parameter> </parameter>

366
licenses_changes.txt Normal file
View File

@ -0,0 +1,366 @@
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
SPDX Name in Spec File
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

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
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 Tue Dec 6 08:50:41 UTC 2011 - coolo@suse.com

View File

@ -17,14 +17,16 @@
Name: obs-service-format_spec_file Name: obs-service-format_spec_file
Summary: An OBS source service: reformats a spec file to SUSE standard. Summary: An OBS source service: reformats a spec file to SUSE standard
License: GPL-2.0+ License: GPL-2.0+
Group: Development/Tools/Building Group: Development/Tools/Building
Version: 0.3 Version: 0.4
Release: 0 Release: 0
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
@ -48,7 +50,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
View 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";
}
}

View File

@ -120,136 +120,83 @@ 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($) sub replace_single_spdx($)
{ {
my ($l) = @_; my ($l) = @_;
my %replace = ( return '' if $l eq '';
"lgplv2.1only" =>"LGPL-2.1",
"lgplv2.1orlater" => "LGPL-2.1+",
"lgplv2.1+" => "LGPL-2.1+",
"lgplv2.1" => "LGPL-2.1",
"lgplv2.0+" => "LGPL-2.0+",
"lgplv2.0" => "LGPL-2.0",
"lgplv2+" => "LGPL-2.1+",
'lgplv3' => "LGPL-3.0", load_license_map();
'lgplv3+' => "LGPL-3.0+", $l =~ s,ORlater,or later,g;
'gnulgplv2.1orlater' => "LGPL-2.1+", $l =~ s,ORsim,or similar,g;
'gnulgplv2.1' => "LGPL-2.1", $l =~ s,^\s+,,;
'lgplv2.0orlater' => 'LGPL-2.0+', $l =~ s,\s+$,,;
'lgplv2orlater' => 'LGPL-2.0+',
"lgplv3only" => "LGPL-3.0", if (defined $license_replace{$l}) {
"lgplv3orlater" => "LGPL-3.0+", $l = $license_replace{$l};
"gpl" => "GPL-1.0",
"gpl+" => "GPL-1.0+",
"gplv2only" => "GPL-2.0",
"gplv2" => "GPL-2.0",
"gpl2" => "GPL-2.0",
"gplv2orlater" => "GPL-2.0+",
"gplv2.0orlater" => "GPL-2.0+",
"gplv2+" => "GPL-2.0+",
"gpl-2+" => "GPL-2.0+",
"gplv3only" => "GPL-3.0",
"gplv3orlater" => "GPL-3.0+",
"gplv3+" => "GPL-3.0+",
"gplv3" => "GPL-3.0",
"gpl-3+" => "GPL-3.0+",
"gnugplversion3" => "GPL-3.0",
"fdl1.1" => "GFDL-1.1",
"gfdlv1.1" => "GFDL-1.1",
'gnufreedocumentationlicense,version1.1(fdl1.1)' => "GFDL-1.1",
'gnufreedocumentationlicense,version1.1(gfdl1.1)' => "GFDL-1.1",
"fdl1.2" => "GFDL-1.2",
"gfdl1.2" => "GFDL-1.2",
"gfdlv1.2" => "GFDL-1.2",
'gnufreedocumentationlicense,version1.2(fdl1.2)' => "GFDL-1.2",
'gnufreedocumentationlicense,version1.2(gfdl1.2)' => "GFDL-1.2",
"fdl1.3" => "GFDL-1.3",
"bsd-2c" => "BSD-2-Clause",
"bsd3-clause" => "BSD-3-Clause",
"bsd3c" => "BSD-3-Clause",
"bsd3c(orsimilar)" => "BSD-3-Clause",
"bsd3-clause(orsimilar)" => "BSD-3-Clause",
"bsd4c" => "BSD-4-Clause",
"bsd4c(orsimilar)" => "BSD-4-Clause",
"x11/mit" => "MIT",
"X11mit" => "MIT",
"mitlicense(orsimilar)" => "MIT",
"asl2.0" => "Apache-2.0",
'apachelicense2.0' => "Apache-2.0",
'apachelicense' => "Apache-2.0",
'theapachesoftwarelicense' => "Apache-2.0",
"apachesoftwarelicense.." => "Apache-2.0",
'apachesoftware license..' => "Apache-2.0",
'aslv..' => "Apache-2.0",
'aslv2' => "Apache-2.0",
"artistic" => "Artistic-1.0",
"artistic2.0" => "Artistic-2.0",
"thephplicense,version3.01" => "PHP-3.01",
"phplicense" => "PHP-3.01",
"mplv1.0" => "MPL-1.0",
"mplv1.1" => "MPL-1.1",
"ibmpubliclicense.." => "IPL-1.0",
"ibmpl" => "IPL-1.0",
"eclipsepubliclicense" => "EPL-1.0",
"openldap2.8" => "OLDAP-2.8",
"zliblicense" => "Zlib"
);
my $tl = lc $l;
$tl =~ s, ,,g;
if (defined $replace{$tl}) {
$l = $replace{$tl};
} else { } else {
my @m = grep(lc($_) eq lc($l), values(%replace)); print STDERR "Unknown license '$l'\n";
if (@m) {
$l = $m[0];
} else {
print STDERR "unknown license '$l'\n";
}
} }
return $l; return $l;
} }
sub replace_spdx_or($) sub replace_spdx_and($);
{
my ($license) = @_;
# special case as or later is common in our spec files
$license =~ s, or later, orlater,g;
my @licenses = ();
for (split(/\s+or\s+/, $license)) {
push @licenses, replace_single_spdx($_);
}
return join(' or ', sort(@licenses));
}
sub replace_spdx_and($) sub replace_spdx_and($)
{ {
my ($license) = @_; 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 = (); my @licenses = ();
for (split(/\s*and\s*/, $license)) { if ( $license =~ /^(.*?)\(([^)]*)\)(.*?)$/ ) {
push @licenses, replace_spdx_or($_); 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";
}
} }
return join(' and ', sort(@licenses));
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($) sub replace_spdx($)
@ -260,7 +207,7 @@ sub replace_spdx($)
for (split(/\s*;\s*/, $license)) { for (split(/\s*;\s*/, $license)) {
push @licenses, replace_spdx_and($_); push @licenses, replace_spdx_and($_);
} }
return join(' ; ', sort(@licenses)); return join(' ; ', @licenses);
} }
sub set_current_pkg { sub set_current_pkg {