File obs-service-format_spec_file-20191114.obscpio of Package obs-service-format_spec_file.13930

07070100000000000081A40000000000000000000000015DCD69F000004644000000000000000000000000000000000000002E00000000obs-service-format_spec_file-20191114/COPYING		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

		     END OF TERMS AND CONDITIONS

	    How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

07070100000001000081A40000000000000000000000015DCD69F00000023E000000000000000000000000000000000000002F00000000obs-service-format_spec_file-20191114/Makefileprefix = /usr

servicedir = ${prefix}/lib/obs/service

all:

install:
	install -d $(DESTDIR)$(servicedir)
	install -m 0755 format_spec_file $(DESTDIR)$(servicedir)
	install -m 0644 format_spec_file.service $(DESTDIR)$(servicedir)
	install -d $(DESTDIR)$(servicedir)/format_spec_file.files
	install -m 0755 prepare_spec patch_license $(DESTDIR)$(servicedir)/format_spec_file.files
	install -m 0644 licenses_changes.txt $(DESTDIR)$(servicedir)/format_spec_file.files
	install -m 0644 licences_exceptions.txt $(DESTDIR)$(servicedir)/format_spec_file.files

.PHONY: all install
07070100000002000081A40000000000000000000000015DCD69F0000045F5000000000000000000000000000000000000003000000000obs-service-format_spec_file-20191114/README.mdThis is the git for openSUSE:Tools/obs-service-format_spec_file
It happens to be *the* repository for valid licenses to be used in openSUSE spec files

# [SPDX Licenses](http://spdx.org/licenses)

License Tag | Description
----------- | -----------
0BSD | BSD Zero Clause License
AAL | Attribution Assurance License
Abstyles | Abstyles License
Adobe-2006 | Adobe Systems Incorporated Source Code License Agreement
Adobe-Glyph | Adobe Glyph List License
ADSL | Amazon Digital Services License
AFL-1.1 | Academic Free License v1.1
AFL-1.2 | Academic Free License v1.2
AFL-2.0 | Academic Free License v2.0
AFL-2.1 | Academic Free License v2.1
AFL-3.0 | Academic Free License v3.0
Afmparse | Afmparse License
AGPL-1.0-only | Affero General Public License v1.0 only
AGPL-1.0-or-later | Affero General Public License v1.0 or later
AGPL-3.0-only | GNU Affero General Public License v3.0 only
AGPL-3.0-or-later | GNU Affero General Public License v3.0 or later
Aladdin | Aladdin Free Public License
AMDPLPA | AMD's plpa_map.c License
AML | Apple MIT License
AMPAS | Academy of Motion Picture Arts and Sciences BSD
ANTLR-PD | ANTLR Software Rights Notice
Apache-1.0 | Apache License 1.0
Apache-1.1 | Apache License 1.1
Apache-2.0 | Apache License 2.0
APAFML | Adobe Postscript AFM License
APL-1.0 | Adaptive Public License 1.0
APSL-1.0 | Apple Public Source License 1.0
APSL-1.1 | Apple Public Source License 1.1
APSL-1.2 | Apple Public Source License 1.2
APSL-2.0 | Apple Public Source License 2.0
Artistic-1.0 | Artistic License 1.0
Artistic-1.0-cl8 | Artistic License 1.0 w/clause 8
Artistic-1.0-Perl | Artistic License 1.0 (Perl)
Artistic-2.0 | Artistic License 2.0
Bahyph | Bahyph License
Barr | Barr License
Beerware | Beerware License
BitTorrent-1.0 | BitTorrent Open Source License v1.0
BitTorrent-1.1 | BitTorrent Open Source License v1.1
Borceux | Borceux license
BSD-1-Clause | BSD 1-Clause License
BSD-2-Clause | BSD 2-Clause "Simplified" License
BSD-2-Clause-FreeBSD | BSD 2-Clause FreeBSD License
BSD-2-Clause-NetBSD | BSD 2-Clause NetBSD License
BSD-2-Clause-Patent | BSD-2-Clause Plus Patent License
BSD-3-Clause | BSD 3-Clause "New" or "Revised" License
BSD-3-Clause-Attribution | BSD with attribution
BSD-3-Clause-Clear | BSD 3-Clause Clear License
BSD-3-Clause-LBNL | Lawrence Berkeley National Labs BSD variant license
BSD-3-Clause-No-Nuclear-License | BSD 3-Clause No Nuclear License
BSD-3-Clause-No-Nuclear-License-2014 | BSD 3-Clause No Nuclear License 2014
BSD-3-Clause-No-Nuclear-Warranty | BSD 3-Clause No Nuclear Warranty
BSD-4-Clause | BSD 4-Clause "Original" or "Old" License
BSD-4-Clause-UC | BSD-4-Clause (University of California-Specific)
BSD-Protection | BSD Protection License
BSD-Source-Code | BSD Source Code Attribution
BSL-1.0 | Boost Software License 1.0
bzip2-1.0.5 | bzip2 and libbzip2 License v1.0.5
bzip2-1.0.6 | bzip2 and libbzip2 License v1.0.6
Caldera | Caldera License
CATOSL-1.1 | Computer Associates Trusted Open Source License 1.1
CC-BY-1.0 | Creative Commons Attribution 1.0 Generic
CC-BY-2.0 | Creative Commons Attribution 2.0 Generic
CC-BY-2.5 | Creative Commons Attribution 2.5 Generic
CC-BY-3.0 | Creative Commons Attribution 3.0 Unported
CC-BY-4.0 | Creative Commons Attribution 4.0 International
CC-BY-NC-1.0 | Creative Commons Attribution Non Commercial 1.0 Generic
CC-BY-NC-2.0 | Creative Commons Attribution Non Commercial 2.0 Generic
CC-BY-NC-2.5 | Creative Commons Attribution Non Commercial 2.5 Generic
CC-BY-NC-3.0 | Creative Commons Attribution Non Commercial 3.0 Unported
CC-BY-NC-4.0 | Creative Commons Attribution Non Commercial 4.0 International
CC-BY-NC-ND-1.0 | Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic
CC-BY-NC-ND-2.0 | Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic
CC-BY-NC-ND-2.5 | Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic
CC-BY-NC-ND-3.0 | Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported
CC-BY-NC-ND-4.0 | Creative Commons Attribution Non Commercial No Derivatives 4.0 International
CC-BY-NC-SA-1.0 | Creative Commons Attribution Non Commercial Share Alike 1.0 Generic
CC-BY-NC-SA-2.0 | Creative Commons Attribution Non Commercial Share Alike 2.0 Generic
CC-BY-NC-SA-2.5 | Creative Commons Attribution Non Commercial Share Alike 2.5 Generic
CC-BY-NC-SA-3.0 | Creative Commons Attribution Non Commercial Share Alike 3.0 Unported
CC-BY-NC-SA-4.0 | Creative Commons Attribution Non Commercial Share Alike 4.0 International
CC-BY-ND-1.0 | Creative Commons Attribution No Derivatives 1.0 Generic
CC-BY-ND-2.0 | Creative Commons Attribution No Derivatives 2.0 Generic
CC-BY-ND-2.5 | Creative Commons Attribution No Derivatives 2.5 Generic
CC-BY-ND-3.0 | Creative Commons Attribution No Derivatives 3.0 Unported
CC-BY-ND-4.0 | Creative Commons Attribution No Derivatives 4.0 International
CC-BY-SA-1.0 | Creative Commons Attribution Share Alike 1.0 Generic
CC-BY-SA-2.0 | Creative Commons Attribution Share Alike 2.0 Generic
CC-BY-SA-2.5 | Creative Commons Attribution Share Alike 2.5 Generic
CC-BY-SA-3.0 | Creative Commons Attribution Share Alike 3.0 Unported
CC-BY-SA-4.0 | Creative Commons Attribution Share Alike 4.0 International
CC0-1.0 | Creative Commons Zero v1.0 Universal
CDDL-1.0 | Common Development and Distribution License 1.0
CDDL-1.1 | Common Development and Distribution License 1.1
CDLA-Permissive-1.0 | Community Data License Agreement Permissive 1.0
CDLA-Sharing-1.0 | Community Data License Agreement Sharing 1.0
CECILL-1.0 | CeCILL Free Software License Agreement v1.0
CECILL-1.1 | CeCILL Free Software License Agreement v1.1
CECILL-2.0 | CeCILL Free Software License Agreement v2.0
CECILL-2.1 | CeCILL Free Software License Agreement v2.1
CECILL-B | CeCILL-B Free Software License Agreement
CECILL-C | CeCILL-C Free Software License Agreement
CERN-OHL-1.1 | CERN Open Hardware License v1.1
CERN-OHL-1.2 | CERN Open Hardware Licence v1.2
ClArtistic | Clarified Artistic License
CNRI-Jython | CNRI Jython License
CNRI-Python | CNRI Python License
CNRI-Python-GPL-Compatible | CNRI Python Open Source GPL Compatible License Agreement
Condor-1.1 | Condor Public License v1.1
copyleft-next-0.3.0 | copyleft-next 0.3.0
copyleft-next-0.3.1 | copyleft-next 0.3.1
CPAL-1.0 | Common Public Attribution License 1.0
CPL-1.0 | Common Public License 1.0
CPOL-1.02 | Code Project Open License 1.02
Crossword | Crossword License
CrystalStacker | CrystalStacker License
CUA-OPL-1.0 | CUA Office Public License v1.0
Cube | Cube License
curl | curl License
D-FSL-1.0 | Deutsche Freie Software Lizenz
diffmark | diffmark license
DOC | DOC License
Dotseqn | Dotseqn License
DSDP | DSDP License
dvipdfm | dvipdfm License
ECL-1.0 | Educational Community License v1.0
ECL-2.0 | Educational Community License v2.0
EFL-1.0 | Eiffel Forum License v1.0
EFL-2.0 | Eiffel Forum License v2.0
eGenix | eGenix.com Public License 1.1.0
Entessa | Entessa Public License v1.0
EPL-1.0 | Eclipse Public License 1.0
EPL-2.0 | Eclipse Public License 2.0
ErlPL-1.1 | Erlang Public License v1.1
EUDatagrid | EU DataGrid Software License
EUPL-1.0 | European Union Public License 1.0
EUPL-1.1 | European Union Public License 1.1
EUPL-1.2 | European Union Public License 1.2
Eurosym | Eurosym License
Fair | Fair License
Frameworx-1.0 | Frameworx Open License 1.0
FreeImage | FreeImage Public License v1.0
FSFAP | FSF All Permissive License
FSFUL | FSF Unlimited License
FSFULLR | FSF Unlimited License (with License Retention)
FTL | Freetype Project License
GFDL-1.1-only | GNU Free Documentation License v1.1 only
GFDL-1.1-or-later | GNU Free Documentation License v1.1 or later
GFDL-1.2-only | GNU Free Documentation License v1.2 only
GFDL-1.2-or-later | GNU Free Documentation License v1.2 or later
GFDL-1.3-only | GNU Free Documentation License v1.3 only
GFDL-1.3-or-later | GNU Free Documentation License v1.3 or later
Giftware | Giftware License
GL2PS | GL2PS License
Glide | 3dfx Glide License
Glulxe | Glulxe License
gnuplot | gnuplot License
GPL-1.0-only | GNU General Public License v1.0 only
GPL-1.0-or-later | GNU General Public License v1.0 or later
GPL-2.0-only | GNU General Public License v2.0 only
GPL-2.0-or-later | GNU General Public License v2.0 or later
GPL-3.0-only | GNU General Public License v3.0 only
GPL-3.0-or-later | GNU General Public License v3.0 or later
gSOAP-1.3b | gSOAP Public License v1.3b
HaskellReport | Haskell Language Report License
HPND | Historical Permission Notice and Disclaimer
HPND-sell-variant | Historical Permission Notice and Disclaimer - sell variant
IBM-pibs | IBM PowerPC Initialization and Boot Software
ICU | ICU License
IJG | Independent JPEG Group License
ImageMagick | ImageMagick License
iMatix | iMatix Standard Function Library Agreement
Imlib2 | Imlib2 License
Info-ZIP | Info-ZIP License
Intel | Intel Open Source License
Intel-ACPI | Intel ACPI Software License Agreement
Interbase-1.0 | Interbase Public License v1.0
IPA | IPA Font License
IPL-1.0 | IBM Public License v1.0
ISC | ISC License
JasPer-2.0 | JasPer License
JPNIC | Japan Network Information Center License
JSON | JSON License
LAL-1.2 | Licence Art Libre 1.2
LAL-1.3 | Licence Art Libre 1.3
Latex2e | Latex2e License
Leptonica | Leptonica License
LGPL-2.0-only | GNU Library General Public License v2 only
LGPL-2.0-or-later | GNU Library General Public License v2 or later
LGPL-2.1-only | GNU Lesser General Public License v2.1 only
LGPL-2.1-or-later | GNU Lesser General Public License v2.1 or later
LGPL-3.0-only | GNU Lesser General Public License v3.0 only
LGPL-3.0-or-later | GNU Lesser General Public License v3.0 or later
LGPLLR | Lesser General Public License For Linguistic Resources
Libpng | libpng License
libpng-2.0 | PNG Reference Library version 2
libtiff | libtiff License
LiLiQ-P-1.1 | Licence Libre du Qu?bec ? Permissive version 1.1
LiLiQ-R-1.1 | Licence Libre du Qu?bec ? R?ciprocit? version 1.1
LiLiQ-Rplus-1.1 | Licence Libre du Qu?bec ? R?ciprocit? forte version 1.1
Linux-OpenIB | Linux Kernel Variant of OpenIB.org license
LPL-1.0 | Lucent Public License Version 1.0
LPL-1.02 | Lucent Public License v1.02
LPPL-1.0 | LaTeX Project Public License v1.0
LPPL-1.1 | LaTeX Project Public License v1.1
LPPL-1.2 | LaTeX Project Public License v1.2
LPPL-1.3a | LaTeX Project Public License v1.3a
LPPL-1.3c | LaTeX Project Public License v1.3c
MakeIndex | MakeIndex License
MirOS | MirOS License
MIT | MIT License
MIT-0 | MIT No Attribution
MIT-advertising | Enlightenment License (e16)
MIT-CMU | CMU License
MIT-enna | enna License
MIT-feh | feh License
MITNFA | MIT +no-false-attribs license
Motosoto | Motosoto License
mpich2 | mpich2 License
MPL-1.0 | Mozilla Public License 1.0
MPL-1.1 | Mozilla Public License 1.1
MPL-2.0 | Mozilla Public License 2.0
MPL-2.0-no-copyleft-exception | Mozilla Public License 2.0 (no copyleft exception)
MS-PL | Microsoft Public License
MS-RL | Microsoft Reciprocal License
MTLL | Matrix Template Library License
Multics | Multics License
Mup | Mup License
NASA-1.3 | NASA Open Source Agreement 1.3
Naumen | Naumen Public License
NBPL-1.0 | Net Boolean Public License v1
NCSA | University of Illinois/NCSA Open Source License
Net-SNMP | Net-SNMP License
NetCDF | NetCDF license
Newsletr | Newsletr License
NGPL | Nethack General Public License
NLOD-1.0 | Norwegian Licence for Open Government Data
NLPL | No Limit Public License
Nokia | Nokia Open Source License
NOSL | Netizen Open Source License
Noweb | Noweb License
NPL-1.0 | Netscape Public License v1.0
NPL-1.1 | Netscape Public License v1.1
NPOSL-3.0 | Non-Profit Open Software License 3.0
NRL | NRL License
NTP | NTP License
OCCT-PL | Open CASCADE Technology Public License
OCLC-2.0 | OCLC Research Public License 2.0
ODbL-1.0 | ODC Open Database License v1.0
ODC-By-1.0 | Open Data Commons Attribution License v1.0
OFL-1.0 | SIL Open Font License 1.0
OFL-1.1 | SIL Open Font License 1.1
OGL-UK-1.0 | Open Government Licence v1.0
OGL-UK-2.0 | Open Government Licence v2.0
OGL-UK-3.0 | Open Government Licence v3.0
OGTSL | Open Group Test Suite License
OLDAP-1.1 | Open LDAP Public License v1.1
OLDAP-1.2 | Open LDAP Public License v1.2
OLDAP-1.3 | Open LDAP Public License v1.3
OLDAP-1.4 | Open LDAP Public License v1.4
OLDAP-2.0 | Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B)
OLDAP-2.0.1 | Open LDAP Public License v2.0.1
OLDAP-2.1 | Open LDAP Public License v2.1
OLDAP-2.2 | Open LDAP Public License v2.2
OLDAP-2.2.1 | Open LDAP Public License v2.2.1
OLDAP-2.2.2 | Open LDAP Public License 2.2.2
OLDAP-2.3 | Open LDAP Public License v2.3
OLDAP-2.4 | Open LDAP Public License v2.4
OLDAP-2.5 | Open LDAP Public License v2.5
OLDAP-2.6 | Open LDAP Public License v2.6
OLDAP-2.7 | Open LDAP Public License v2.7
OLDAP-2.8 | Open LDAP Public License v2.8
OML | Open Market License
OpenSSL | OpenSSL License
OPL-1.0 | Open Public License v1.0
OSET-PL-2.1 | OSET Public License version 2.1
OSL-1.0 | Open Software License 1.0
OSL-1.1 | Open Software License 1.1
OSL-2.0 | Open Software License 2.0
OSL-2.1 | Open Software License 2.1
OSL-3.0 | Open Software License 3.0
PDDL-1.0 | ODC Public Domain Dedication & License 1.0
PHP-3.0 | PHP License v3.0
PHP-3.01 | PHP License v3.01
Plexus | Plexus Classworlds License
PostgreSQL | PostgreSQL License
psfrag | psfrag License
psutils | psutils License
Python-2.0 | Python License 2.0
Qhull | Qhull License
QPL-1.0 | Q Public License 1.0
Rdisc | Rdisc License
RHeCos-1.1 | Red Hat eCos Public License v1.1
RPL-1.1 | Reciprocal Public License 1.1
RPL-1.5 | Reciprocal Public License 1.5
RPSL-1.0 | RealNetworks Public Source License v1.0
RSA-MD | RSA Message-Digest License
RSCPL | Ricoh Source Code Public License
Ruby | Ruby License
SAX-PD | Sax Public Domain Notice
Saxpath | Saxpath License
SCEA | SCEA Shared Source License
Sendmail | Sendmail License
Sendmail-8.23 | Sendmail License 8.23
SGI-B-1.0 | SGI Free Software License B v1.0
SGI-B-1.1 | SGI Free Software License B v1.1
SGI-B-2.0 | SGI Free Software License B v2.0
SimPL-2.0 | Simple Public License 2.0
SISSL | Sun Industry Standards Source License v1.1
SISSL-1.2 | Sun Industry Standards Source License v1.2
Sleepycat | Sleepycat License
SMLNJ | Standard ML of New Jersey License
SMPPL | Secure Messaging Protocol Public License
SNIA | SNIA Public License 1.1
Spencer-86 | Spencer License 86
Spencer-94 | Spencer License 94
Spencer-99 | Spencer License 99
SPL-1.0 | Sun Public License v1.0
SugarCRM-1.1.3 | SugarCRM Public License v1.1.3
SWL | Scheme Widget Library (SWL) Software License Agreement
TAPR-OHL-1.0 | TAPR Open Hardware License v1.0
TCL | TCL/TK License
TCP-wrappers | TCP Wrappers License
TMate | TMate Open Source License
TORQUE-1.1 | TORQUE v2.5+ Software License v1.1
TOSL | Trusster Open Source License
TU-Berlin-1.0 | Technische Universitaet Berlin License 1.0
TU-Berlin-2.0 | Technische Universitaet Berlin License 2.0
Unicode-DFS-2015 | Unicode License Agreement - Data Files and Software (2015)
Unicode-DFS-2016 | Unicode License Agreement - Data Files and Software (2016)
Unicode-TOU | Unicode Terms of Use
Unlicense | The Unlicense
UPL-1.0 | Universal Permissive License v1.0
Vim | Vim License
VOSTROM | VOSTROM Public License for Open Source
VSL-1.0 | Vovida Software License v1.0
W3C | W3C Software Notice and License (2002-12-31)
W3C-19980720 | W3C Software Notice and License (1998-07-20)
W3C-20150513 | W3C Software Notice and Document License (2015-05-13)
Watcom-1.0 | Sybase Open Watcom Public License 1.0
Wsuipa | Wsuipa License
WTFPL | Do What The F*ck You Want To Public License
X11 | X11 License
Xerox | Xerox License
XFree86-1.1 | XFree86 License 1.1
xinetd | xinetd License
Xnet | X.Net License
xpp | XPP License
XSkat | XSkat License
YPL-1.0 | Yahoo! Public License v1.0
YPL-1.1 | Yahoo! Public License v1.1
Zed | Zed License
Zend-2.0 | Zend License v2.0
Zimbra-1.3 | Zimbra Public License v1.3
Zimbra-1.4 | Zimbra Public License v1.4
Zlib | zlib License
zlib-acknowledgement | zlib/libpng License with Acknowledgement
ZPL-1.1 | Zope Public License 1.1
ZPL-2.0 | Zope Public License 2.0
ZPL-2.1 | Zope Public License 2.1

# SUSE Additions

|License Tag|
|-----------|
|SUSE-Arphic|
|SUSE-BSD-3-Clause-with-non-nuclear-addition|
|SUSE-BSD-Mark-Modifications|
|SUSE-Bitstream-Vera|
|SUSE-CC-Sampling-Plus-1.0|
|SUSE-CPL-0.5|
|SUSE-CacertRoot|
|SUSE-Copyleft-Next-0.3.0|
|SUSE-Curb|
|SUSE-DMTF|
|SUSE-Docbook-XSL|
|SUSE-EULA|
|SUSE-Egenix-1.1.0|
|SUSE-FHS|
|SUSE-FLTK|
|SUSE-Firmware|
|SUSE-Free-Art-1.3|
|SUSE-Freetype|
|SUSE-Freeware|
|SUSE-GL2PS-2.0|
|SUSE-GPL-2.0+-with-openssl-exception|
|SUSE-GPL-2.0+-with-sane-exception|
|SUSE-GPL-2.0-with-FLOSS-exception|
|SUSE-GPL-2.0-with-OSI-exception|
|SUSE-GPL-2.0-with-linking-exception|
|SUSE-GPL-2.0-with-openssl-exception|
|SUSE-GPL-2.0-with-plugin-exception|
|SUSE-GPL-3.0+-with-font-exception|
|SUSE-GPL-3.0+-with-openssl-exception|
|SUSE-GPL-3.0-with-FLOSS-exception|
|SUSE-GPL-3.0-with-font-exception|
|SUSE-GPL-3.0-with-openssl-exception|
|SUSE-GPL-3.0-with-template-exception|
|SUSE-Gitslave|
|SUSE-Gnuplot|
|SUSE-Hack-Open-Font-2.0|
|SUSE-IBPL-1.0|
|SUSE-IDPL-1.0|
|SUSE-IEEE|
|SUSE-Innernet-2.0|
|SUSE-Innernet-2.00|
|SUSE-LDPL-2.0|
|SUSE-LGPL-2.0-with-linking-exception|
|SUSE-LGPL-2.1-with-digia-exception-1.1|
|SUSE-LGPL-2.1-with-nokia-exception-1.1|
|SUSE-Liberation|
|SUSE-MIT-Khronos|
|SUSE-Manpages|
|SUSE-Matplotlib|
|SUSE-MgOpen|
|SUSE-Oasis-Specification-Notice|
|SUSE-OldFSFDocLicense|
|SUSE-OpenPublication-1.0|
|SUSE-PHP-2.02|
|SUSE-Permissive|
|SUSE-Permissive-Modify-By-Patch|
|SUSE-Public-Domain|
|SUSE-Python-1.6|
|SUSE-QWT-1.0|
|SUSE-Redistributable-Content|
|SUSE-Repoze|
|SUSE-SGI-FreeB-2.0|
|SUSE-SIP|
|SUSE-SLIB|
|SUSE-SNIA-1.0|
|SUSE-SNIA-1.1|
|SUSE-Scrot|
|SUSE-Sun-Laboratories|
|SUSE-TGPPL-1.0|
|SUSE-TeX|
|SUSE-Ubuntu-Font-License-1.0|
|SUSE-XDebug|
|SUSE-XFree86-with-font-exception|
|SUSE-XSL-Lint|
|SUSE-Xano|
|SUSE-Xenonsoft-1.00|
|SUSE-mirror|
|SUSE-mplus|
|SUSE-wxWidgets-3.1|
07070100000003000041ED0000000000000000000000035DCD69F000000000000000000000000000000000000000000000002D00000000obs-service-format_spec_file-20191114/debian07070100000004000081A40000000000000000000000015DCD69F000000090000000000000000000000000000000000000003700000000obs-service-format_spec_file-20191114/debian/changelogobs-service-format-spec-file (0.0) stable; urgency=medium

  * Initial release.

 -- Hib Eris <hib@hiberis.nl>  Sun, 07 Jun 2015 15:20:41 +0200
07070100000005000081A40000000000000000000000015DCD69F000000002000000000000000000000000000000000000003400000000obs-service-format_spec_file-20191114/debian/compat9
07070100000006000081A40000000000000000000000015DCD69F0000002B7000000000000000000000000000000000000003500000000obs-service-format_spec_file-20191114/debian/controlSource: obs-service-format-spec-file
Maintainer: Hib Eris <hib@hiberis.nl>
Section: devel
Priority: extra
Build-Depends: debhelper (>= 7)
Standards-Version: 3.9.6
Homepage: https://github.com/openSUSE/obs-service-format_spec_file

Package: obs-service-format-spec-file
Architecture: all
Description: An OBS source service: reformats a spec file to SUSE standard
 This is a source service for openSUSE Build Service.
 .
 This source service is formating the spec file to SUSE standard. The rational
 behind is to make it easier to review spec files from unknown packagers.
 .
 This should be used in "trylocal" mode, so that osc is adapting the existing
 spec file instead of creating a new one.
07070100000007000081A40000000000000000000000015DCD69F000000604000000000000000000000000000000000000003700000000obs-service-format_spec_file-20191114/debian/copyrightFormat: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: obs-service-format_spec_file
Source: https://github.com/openSUSE/obs-service-format_spec_file
License: GPL-2.0+

Files: *
Copyright: 2012, Adrian Schröter <adrian@suse.de>
           2014, Andreas Schwab <schwab@suse.de>
           2015, Hib Eris <hib@hiberis.nl>
           2014, Ruediger Oertel <ro@suse.de>
           2012, Sascha Peilicke <saschpe@suse.de>
           2015, StefanBruens <stefan.bruens@rwth-aachen.de>
           2014, 2015, Stephan Kulow <coolo@kde.org>
           2011, 2012, 2013, 2014, 2015, Stephan Kulow <coolo@suse.de>
           2014, Thorsten Behrens <tbehrens@suse.com>
           2011, Vincent Untz <vuntz@opensuse.org>
License: GPL-2.0+

License: GPL-2.0+
 This package is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 .
 This package is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .
 You should have received a copy of the GNU General Public License
 along with this program. If not, see <http://www.gnu.org/licenses/>
 .
 On Debian systems, the complete text of the GNU General
 Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
07070100000008000081ED0000000000000000000000015DCD69F000000047000000000000000000000000000000000000003300000000obs-service-format_spec_file-20191114/debian/rules#!/usr/bin/make -f
# -*- makefile -*-
#
export DH_VERBOSE=1

%:
	dh $@
07070100000009000041ED0000000000000000000000025DCD69F000000000000000000000000000000000000000000000003400000000obs-service-format_spec_file-20191114/debian/source0707010000000A000081A40000000000000000000000015DCD69F00000000D000000000000000000000000000000000000003B00000000obs-service-format_spec_file-20191114/debian/source/format3.0 (native)
0707010000000B000081A40000000000000000000000015DCD69F0000009D1000000000000000000000000000000000000003800000000obs-service-format_spec_file-20191114/fetch-licenses.shexport LC_ALL=C
curl -s 'https://docs.google.com/spreadsheets/d/14AdaJ6cmU0kvQ4ulq9pWpjdZL5tkR03exRSYJmPGdfs/export?format=tsv&id=14AdaJ6cmU0kvQ4ulq9pWpjdZL5tkR03exRSYJmPGdfs&gid=0' | grep -v "New format" \
  | sed -e 's,\s*$,,' > licenses_changes.ntxt

: > licenses_changes.ptxt
grep ^SUSE- licenses_changes.ntxt | cut -d'	' -f1 | while read l; do
  echo "$l+	$l+" >> licenses_changes.ptxt ; 
done

for i in `w3m -dump -cols 1000 http://spdx.org/licenses/ | grep "License Text" | sed -e 's, *License Text.*, LT,; s,Y\s*LT$,LT,; s,Y\s*LT$,LT,;  s,\s*LT$,,; s,.* ,,;'`; do 
	echo "$i	$i" >> licenses_changes.ntxt ; 
	echo "$i+	$i+" >> licenses_changes.ptxt ;
done
IFS=:
dups=$(tr '	' ':' < licenses_changes.ntxt | while read nl ol; do echo "$nl"; done | sed -e 's,^,B-,; s,B-SUSE-,A-,' | sort | uniq | sed -e 's,^.-,,' | sort | uniq -d)
if test -n "$dups"; then 
  echo "DUPS $dups"
  exit 1
fi
dups=$(tr '	' ':' < licenses_changes.ntxt | while read nl ol; do echo "$ol"; done | sort | uniq -d)
unset IFS
if test -n "$dups"; then 
  echo "DUPS $dups"
  exit 1
fi

: > licenses_changes.raw
( 
echo "This is the git for openSUSE:Tools/obs-service-format_spec_file"
echo "It happens to be *the* repository for valid licenses to be used in openSUSE spec files"
echo ""
echo "# [SPDX Licenses](http://spdx.org/licenses)"
echo ""
echo "License Tag | Description"
echo "----------- | -----------"
IFS=:
w3m -dump -cols 1000 http://spdx.org/licenses/ | grep "License Text" | sed -e 's, *License Text.*, LT,; s,Y\s*LT$,LT,; s,Y\s*LT$,LT,;  s,\s*LT$,,;; s,\s* \([^ ]*\)$,:\1,' | while read text license; do
  echo "$license | $text"
  echo "$license" >> licenses_changes.raw
done
unset IFS

echo ""
echo "# SUSE Additions"
echo ""
echo "|License Tag|"
echo "|-----------|"

IFS=:
grep ^SUSE- licenses_changes.ntxt | cut -d'	' -f1 | sort -u | while read nl; do 
  echo "|$nl|"
done
unset IFS

rm licenses_changes.raw
) > README.md

for i in `w3m -dump -cols 1000 http://spdx.org/licenses/exceptions-index.html | grep "License Exception Text" | sed -e 's, *Y *License Exception Text,,; s, *License Exception Text,,; s,\s* \([^ ]*\)$,:\1,' | cut -d: -f2`; do
    echo "$i" >> license_exceptions.ntxt ;
done

cat license_exceptions.ntxt | sort -u -o licences_exceptions.txt
rm license_exceptions.ntxt

cat licenses_changes.ntxt licenses_changes.ptxt | sort -u -o licenses_changes.stxt
( echo "First line" ; cat licenses_changes.stxt ) > licenses_changes.txt
rm licenses_changes.ntxt licenses_changes.stxt licenses_changes.ptxt

0707010000000C000081A40000000000000000000000015DCD69F00000048D000000000000000000000000000000000000003700000000obs-service-format_spec_file-20191114/format_spec_file#!/bin/bash

# just a wrapper for the perl script.


while test $# -gt 0; do
  case $1 in
    *-outdir)
      MYOUTDIR="$2"
      shift
    ;;
    *-specfile)
      MYSPECFILES="$MYSPECFILES $2"
      shift
    ;;
    *)
      echo Unknown parameter $1.
      echo 'Usage: this service only accepts the --outdir and --specfile parameters.'
      exit 1
    ;;
  esac
  shift
done

RETURN=0
if [ -z "$MYSPECFILES" ]; then
  MYSPECFILES=`echo *.spec`
fi
if [ -z "$MYOUTDIR" ]; then
  MYOUTDIR=`pwd`
fi

for i in $MYSPECFILES; do
  if [ "$i" == '*.spec' ]; then
    echo "WARNING: no spec file found"
    exit 0
  fi
  if [ "$i" != "${i##*/}" ]; then
    # no path separators, please ("security" issue)
    echo "$i: illegal filename"
    exit 1
  fi
  if /usr/lib/obs/service/format_spec_file.files/prepare_spec "$i" > "$MYOUTDIR/$i.$$"; then
    # remove all file files which are indendical to committed files
    # be carefull for the case that $MYOUDIR is local dir
    if cmp -s "$i" "$MYOUTDIR/$i.$$"; then
      rm "$MYOUTDIR/$i.$$"
    else
      mv "$MYOUTDIR/$i.$$" "$MYOUTDIR/$i"
    fi
  else
    rm "$MYOUTDIR/$i.$$"
    RETURN=1
  fi
done

exit $RETURN

0707010000000D000081A40000000000000000000000015DCD69F000000112000000000000000000000000000000000000003F00000000obs-service-format_spec_file-20191114/format_spec_file.service<service name="format_spec_file">
  <summary>Format the spec files</summary>
  <description>Formatting the spec files</description>
  <parameter name="specfile">
    <description>Just run on specified spec file instead all available</description>
  </parameter>
</service>

0707010000000E000081A40000000000000000000000015DCD69F0000002B1000000000000000000000000000000000000003E00000000obs-service-format_spec_file-20191114/licences_exceptions.txt389-exception
Autoconf-exception-2.0
Autoconf-exception-3.0
Bison-exception-2.2
Bootloader-exception
CLISP-exception-2.0
Classpath-exception-2.0
DigiRule-FOSS-exception
FLTK-exception
Fawkes-Runtime-exception
Font-exception-2.0
GCC-exception-2.0
GCC-exception-3.1
GPL-CC-1.0
LLVM-exception
LZMA-exception
Libtool-exception
Linux-syscall-note
OCCT-exception-1.0
OCaml-LGPL-linking-exception
OpenJDK-assembly-exception-1.0
PS-or-PDF-font-exception-20170817
Qt-GPL-exception-1.0
Qt-LGPL-exception-1.1
Qwt-exception-1.0
WxWindows-exception-3.1
eCos-exception-2.0
freertos-exception-2.0
gnu-javamail-exception
i2p-gpl-java-exception
mif-exception
openvpn-openssl-exception
u-boot-exception-2.0
0707010000000F000081A40000000000000000000000015DCD69F000008335000000000000000000000000000000000000003B00000000obs-service-format_spec_file-20191114/licenses_changes.txtFirst line
0BSD	0BSD
0BSD+	0BSD+
AAL	AAL
AAL+	AAL+
ADSL	ADSL
ADSL+	ADSL+
AFL-1.1	AFL-1.1
AFL-1.1+	AFL-1.1+
AFL-1.2	AFL-1.2
AFL-1.2+	AFL-1.2+
AFL-2.0	AFL-2.0
AFL-2.0+	AFL-2.0+
AFL-2.1	AFL 2.1
AFL-2.1	AFL-2.1
AFL-2.1	Academic Free License 2.1
AFL-2.1+	AFL-2.1+
AFL-3.0	AFL-3.0
AFL-3.0+	AFL-3.0+
AGPL-1.0-only	AGPL-1.0-only
AGPL-1.0-only+	AGPL-1.0-only+
AGPL-1.0-or-later	AGPL-1.0-or-later
AGPL-1.0-or-later+	AGPL-1.0-or-later+
AGPL-3.0-only	AGPL-3.0
AGPL-3.0-only	AGPL-3.0-only
AGPL-3.0-only	AGPLv3
AGPL-3.0-only	Affero GPL
AGPL-3.0-only+	AGPL-3.0-only+
AGPL-3.0-or-later	AGPL-3.0+
AGPL-3.0-or-later	AGPL-3.0-or-later
AGPL-3.0-or-later	AGPLv3+
AGPL-3.0-or-later	SUSE-AGPL-3.0+
AGPL-3.0-or-later+	AGPL-3.0-or-later+
AMDPLPA	AMDPLPA
AMDPLPA+	AMDPLPA+
AML	AML
AML+	AML+
AMPAS	AMPAS
AMPAS+	AMPAS+
ANTLR-PD	ANTLR-PD
ANTLR-PD+	ANTLR-PD+
APAFML	APAFML
APAFML+	APAFML+
APL-1.0	APL-1.0
APL-1.0	APL-1.0 (spdx.org/licenses)
APL-1.0+	APL-1.0+
APSL-1.0	APSL-1.0
APSL-1.0+	APSL-1.0+
APSL-1.1	APSL-1.1
APSL-1.1+	APSL-1.1+
APSL-1.2	APSL-1.2
APSL-1.2+	APSL-1.2+
APSL-2.0	APSL-2.0
APSL-2.0+	APSL-2.0+
Abstyles	Abstyles
Abstyles+	Abstyles+
Adobe-2006	Adobe-2006
Adobe-2006+	Adobe-2006+
Adobe-Glyph	Adobe-Glyph
Adobe-Glyph+	Adobe-Glyph+
Afmparse	Afmparse
Afmparse+	Afmparse+
Aladdin	Aladdin
Aladdin+	Aladdin+
Apache-1.0	Apache-1.0
Apache-1.0+	Apache-1.0+
Apache-1.1	ASL 1.1
Apache-1.1	Apache 1.1 (Indiana University)
Apache-1.1	Apache-1.1
Apache-1.1+	Apache-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
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 License, Version 2.0
Apache-2.0	Apache Software License
Apache-2.0	Apache Software License ..
Apache-2.0	Apache Software License, Version 2.0
Apache-2.0	Apache v2.0
Apache-2.0	Apache-2.0
Apache-2.0	The Apache Software License
Apache-2.0+	ASLv2.0+
Apache-2.0+	Apache-2.0+
Apache-2.0+	SUSE-Apache-2.0+
Artistic-1.0	Artistic
Artistic-1.0	Artistic 1.0
Artistic-1.0	Artistic License
Artistic-1.0	Artistic License ..
Artistic-1.0	Artistic license
Artistic-1.0	Artistic-1.0
Artistic-1.0 or GPL-1.0+	Perl License
Artistic-1.0+	Artistic-1.0+
Artistic-1.0+	SUSE-Artistic-1.0+
Artistic-1.0-Perl	Artistic-1.0-Perl
Artistic-1.0-Perl+	Artistic-1.0-Perl+
Artistic-1.0-cl8	Artistic-1.0-cl8
Artistic-1.0-cl8+	Artistic-1.0-cl8+
Artistic-2.0	Artistic 2.0
Artistic-2.0	Artistic-2.0
Artistic-2.0+	Artistic-2.0+
BSD-1-Clause	BSD-1-Clause
BSD-1-Clause+	BSD-1-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-2-Clause	BSD-2-Clause
BSD-2-Clause	BSD-2c
BSD-2-Clause	BSD2c
BSD-2-Clause+	BSD-2-Clause+
BSD-2-Clause-FreeBSD	BSD-2-Clause-FreeBSD
BSD-2-Clause-FreeBSD+	BSD-2-Clause-FreeBSD+
BSD-2-Clause-NetBSD	BSD-2-Clause-NetBSD
BSD-2-Clause-NetBSD+	BSD-2-Clause-NetBSD+
BSD-2-Clause-Patent	BSD-2-Clause-Patent
BSD-2-Clause-Patent	https://opensource.org/licenses/BSDplusPatent
BSD-2-Clause-Patent+	BSD-2-Clause-Patent+
BSD-3-Clause	BSD (3-Clause)
BSD-3-Clause	BSD 3-Clause
BSD-3-Clause	BSD 3-clause (or similar)
BSD-3-Clause	BSD-3
BSD-3-Clause	BSD-3-Clause
BSD-3-Clause	BSD-3-clause (or similar)
BSD-3-Clause	BSD3
BSD-3-Clause	BSD3c
BSD-3-Clause	BSD3c (or similar)
BSD-3-Clause	BSD3c(or similar)
BSD-3-Clause	New BSD License
BSD-3-Clause+	BSD-3-Clause+
BSD-3-Clause-Attribution	BSD-3-Clause-Attribution
BSD-3-Clause-Attribution+	BSD-3-Clause-Attribution+
BSD-3-Clause-Clear	BSD-3-Clause-Clear
BSD-3-Clause-Clear+	BSD-3-Clause-Clear+
BSD-3-Clause-LBNL	BSD-3-Clause-LBNL
BSD-3-Clause-LBNL+	BSD-3-Clause-LBNL+
BSD-3-Clause-No-Nuclear-License	BSD-3-Clause-No-Nuclear-License
BSD-3-Clause-No-Nuclear-License+	BSD-3-Clause-No-Nuclear-License+
BSD-3-Clause-No-Nuclear-License-2014	BSD-3-Clause-No-Nuclear-License-2014
BSD-3-Clause-No-Nuclear-License-2014+	BSD-3-Clause-No-Nuclear-License-2014+
BSD-3-Clause-No-Nuclear-Warranty	BSD-3-Clause-No-Nuclear-Warranty
BSD-3-Clause-No-Nuclear-Warranty+	BSD-3-Clause-No-Nuclear-Warranty+
BSD-4-Clause	BSD-4-Clause
BSD-4-Clause	BSD4c
BSD-4-Clause	BSD4c(or similar)
BSD-4-Clause+	BSD-4-Clause+
BSD-4-Clause-UC	BSD-4-Clause-UC
BSD-4-Clause-UC+	BSD-4-Clause-UC+
BSD-Protection	BSD-Protection
BSD-Protection+	BSD-Protection+
BSD-Source-Code	BSD-Source-Code
BSD-Source-Code+	BSD-Source-Code+
BSL-1.0	BSL-1.0
BSL-1.0+	BSL-1.0+
Bahyph	Bahyph
Bahyph+	Bahyph+
Barr	Barr
Barr+	Barr+
Beerware	Beerware
Beerware	SUSE-Beerware
Beerware+	Beerware+
BitTorrent-1.0	BitTorrent-1.0
BitTorrent-1.0+	BitTorrent-1.0+
BitTorrent-1.1	BitTorrent-1.1
BitTorrent-1.1+	BitTorrent-1.1+
Borceux	Borceux
Borceux+	Borceux+
CATOSL-1.1	CATOSL-1.1
CATOSL-1.1+	CATOSL-1.1+
CC-BY-1.0	CC-BY-1.0
CC-BY-1.0+	CC-BY-1.0+
CC-BY-2.0	CC-BY-2.0
CC-BY-2.0+	CC-BY-2.0+
CC-BY-2.5	CC-BY-2.5
CC-BY-2.5+	CC-BY-2.5+
CC-BY-3.0	CC-BY-3.0
CC-BY-3.0+	CC-BY-3.0+
CC-BY-4.0	CC-BY-4.0
CC-BY-4.0+	CC-BY-4.0+
CC-BY-NC-1.0	CC-BY-NC-1.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.0+	CC-BY-NC-2.0+
CC-BY-NC-2.5	CC-BY-NC-2.5
CC-BY-NC-2.5+	CC-BY-NC-2.5+
CC-BY-NC-3.0	CC-BY-NC-3.0
CC-BY-NC-3.0+	CC-BY-NC-3.0+
CC-BY-NC-4.0	CC-BY-NC-4.0
CC-BY-NC-4.0+	CC-BY-NC-4.0+
CC-BY-NC-ND-1.0	CC-BY-NC-ND-1.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.0+	CC-BY-NC-ND-2.0+
CC-BY-NC-ND-2.5	CC-BY-NC-ND-2.5
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-ND-3.0+	CC-BY-NC-ND-3.0+
CC-BY-NC-ND-4.0	CC-BY-NC-ND-4.0
CC-BY-NC-ND-4.0+	CC-BY-NC-ND-4.0+
CC-BY-NC-SA-1.0	CC-BY-NC-SA-1.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.0+	CC-BY-NC-SA-2.0+
CC-BY-NC-SA-2.5	CC-BY-NC-SA-2.5
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-NC-SA-3.0+	CC-BY-NC-SA-3.0+
CC-BY-NC-SA-4.0	CC-BY-NC-SA-4.0
CC-BY-NC-SA-4.0+	CC-BY-NC-SA-4.0+
CC-BY-ND-1.0	CC-BY-ND-1.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.0+	CC-BY-ND-2.0+
CC-BY-ND-2.5	CC-BY-ND-2.5
CC-BY-ND-2.5+	CC-BY-ND-2.5+
CC-BY-ND-3.0	CC-BY-ND-3.0
CC-BY-ND-3.0+	CC-BY-ND-3.0+
CC-BY-ND-4.0	CC-BY-ND-4.0
CC-BY-ND-4.0	http://spdx.org/licenses/CC-BY-ND-4.0.html#licenseText
CC-BY-ND-4.0+	CC-BY-ND-4.0+
CC-BY-SA-1.0	CC-BY-SA-1.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.0+	CC-BY-SA-2.0+
CC-BY-SA-2.5	CC by-sa V2.5
CC-BY-SA-2.5	CC-BY-SA-2.5
CC-BY-SA-2.5+	CC-BY-SA-2.5+
CC-BY-SA-3.0	CC BY-SA 3.0
CC-BY-SA-3.0	CC BY-SA V3.0
CC-BY-SA-3.0	CC-BY-SA-3.0
CC-BY-SA-3.0+	CC-BY-SA-3.0+
CC-BY-SA-4.0	CC-BY-SA-4.0
CC-BY-SA-4.0	http://creativecommons.org/licenses/by-sa/4.0/legalcode
CC-BY-SA-4.0+	CC-BY-SA-4.0+
CC0-1.0	CC0-1.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+	CDDL-1.0+
CDDL-1.1	CDDL-1.1
CDDL-1.1+	CDDL-1.1+
CDLA-Permissive-1.0	CDLA-Permissive-1.0
CDLA-Permissive-1.0+	CDLA-Permissive-1.0+
CDLA-Sharing-1.0	CDLA-Sharing-1.0
CDLA-Sharing-1.0+	CDLA-Sharing-1.0+
CECILL-1.0	CECILL-1.0
CECILL-1.0+	CECILL-1.0+
CECILL-1.1	CECILL-1.1
CECILL-1.1+	CECILL-1.1+
CECILL-2.0	CECILL-2.0
CECILL-2.0+	CECILL-2.0+
CECILL-2.1	CECILL-2.1
CECILL-2.1+	CECILL-2.1+
CECILL-B	CECILL-B
CECILL-B+	CECILL-B+
CECILL-C	CECILL-C
CECILL-C+	CECILL-C+
CERN-OHL-1.1	CERN-OHL-1.1
CERN-OHL-1.1+	CERN-OHL-1.1+
CERN-OHL-1.2	CERN-OHL-1.2
CERN-OHL-1.2+	CERN-OHL-1.2+
CNRI-Jython	CNRI-Jython
CNRI-Jython+	CNRI-Jython+
CNRI-Python	CNRI-Python
CNRI-Python+	CNRI-Python+
CNRI-Python-GPL-Compatible	CNRI-Python-GPL-Compatible
CNRI-Python-GPL-Compatible+	CNRI-Python-GPL-Compatible+
CPAL-1.0	CPAL-1.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
CPL-1.0	Common Public License - v 1.0
CPL-1.0	Common Public License Version 1.0
CPL-1.0	Common Public License Version 1.0 (CPL1.0)
CPL-1.0	Common Public License v1.0
CPL-1.0	Common Public License v1.0 (CPL)
CPL-1.0+	CPL-1.0+
CPOL-1.02	CPOL-1.02
CPOL-1.02+	CPOL-1.02+
CUA-OPL-1.0	CUA-OPL-1.0
CUA-OPL-1.0+	CUA-OPL-1.0+
Caldera	Caldera
Caldera+	Caldera+
ClArtistic	ClArtistic
ClArtistic+	ClArtistic+
Condor-1.1	Condor-1.1
Condor-1.1+	Condor-1.1+
Crossword	Crossword
Crossword+	Crossword+
CrystalStacker	CrystalStacker
CrystalStacker+	CrystalStacker+
Cube	Cube
Cube+	Cube+
D-FSL-1.0	D-FSL-1.0
D-FSL-1.0+	D-FSL-1.0+
DOC	DOC
DOC+	DOC+
DSDP	DSDP
DSDP+	DSDP+
Dotseqn	Dotseqn
Dotseqn+	Dotseqn+
ECL-1.0	ECL-1.0
ECL-1.0+	ECL-1.0+
ECL-2.0	ECL-2.0
ECL-2.0+	ECL-2.0+
EFL-1.0	EFL-1.0
EFL-1.0+	EFL-1.0+
EFL-2.0	EFL-2.0
EFL-2.0+	EFL-2.0+
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
EPL-1.0	Eclipse Public License
EPL-1.0	Eclipse Public License 1.0
EPL-1.0	Eclipse-1.0
EPL-1.0+	EPL-1.0+
EPL-2.0	EPL-2.0
EPL-2.0+	EPL-2.0+
EUDatagrid	EUDatagrid
EUDatagrid+	EUDatagrid+
EUPL-1.0	EUPL-1.0
EUPL-1.0+	EUPL-1.0+
EUPL-1.1	EUPL-1.1
EUPL-1.1+	EUPL-1.1+
EUPL-1.2	EUPL-1.2
EUPL-1.2+	EUPL-1.2+
Entessa	Entessa
Entessa+	Entessa+
ErlPL-1.1	ErlPL-1.1
ErlPL-1.1	Erlang Public License
ErlPL-1.1+	ErlPL-1.1+
Eurosym	Eurosym
Eurosym+	Eurosym+
FSFAP	FSFAP
FSFAP+	FSFAP+
FSFUL	FSFUL
FSFUL+	FSFUL+
FSFULLR	FSFULLR
FSFULLR+	FSFULLR+
FTL	FTL
FTL+	FTL+
Fair	Fair
Fair+	Fair+
Frameworx-1.0	Frameworx-1.0
Frameworx-1.0+	Frameworx-1.0+
FreeImage	FreeImage
FreeImage+	FreeImage+
GFDL-1.1-only	GFDL 1.1
GFDL-1.1-only	GFDL v1.1
GFDL-1.1-only	GFDL-1.1
GFDL-1.1-only	GFDL-1.1-only
GFDL-1.1-only	GFDLv1.1
GFDL-1.1-only	GNU Free Documentation License, Version 1.1 (GFDL 1.1)
GFDL-1.1-only+	GFDL-1.1-only+
GFDL-1.1-or-later	FDL v1.1 or later
GFDL-1.1-or-later	GFDL-1.1+
GFDL-1.1-or-later	GFDL-1.1-or-later
GFDL-1.1-or-later	SUSE-GFDL-1.1+
GFDL-1.1-or-later+	GFDL-1.1-or-later+
GFDL-1.2-only	GFDL 1.2
GFDL-1.2-only	GFDL v1.2
GFDL-1.2-only	GFDL-1.2
GFDL-1.2-only	GFDL-1.2-only
GFDL-1.2-only	GFDLv1.2
GFDL-1.2-only	GNU Free Documentation License, Version 1.2 (GFDL 1.2)
GFDL-1.2-only+	GFDL-1.2-only+
GFDL-1.2-or-later	FDL-1.2+
GFDL-1.2-or-later	FDLv1.2+
GFDL-1.2-or-later	GFDL-1.2+
GFDL-1.2-or-later	GFDL-1.2-or-later
GFDL-1.2-or-later	GFDLv1.2+
GFDL-1.2-or-later	SUSE-GFDL-1.2+
GFDL-1.2-or-later+	GFDL-1.2-or-later+
GFDL-1.3-only	GFDL-1.3
GFDL-1.3-only	GFDL-1.3-only
GFDL-1.3-only	GNU Free Documentation License, Version 1.3 (GFDL 1.3)
GFDL-1.3-only+	GFDL-1.3-only+
GFDL-1.3-or-later	FDL-1.3+
GFDL-1.3-or-later	GFDL-1.3+
GFDL-1.3-or-later	GFDL-1.3-or-later
GFDL-1.3-or-later	SUSE-GFDL-1.3+
GFDL-1.3-or-later+	GFDL-1.3-or-later+
GL2PS	GL2PS
GL2PS+	GL2PS+
GPL-1.0-only	GPL-1.0
GPL-1.0-only	GPL-1.0-only
GPL-1.0-only+	GPL-1.0-only+
GPL-1.0-or-later	GPL+
GPL-1.0-or-later	GPL-1.0+
GPL-1.0-or-later	GPL-1.0-or-later
GPL-1.0-or-later	GPLv1+
GPL-1.0-or-later+	GPL-1.0-or-later+
GPL-2.0-only	GLPv2
GPL-2.0-only	GNU GPL v2
GPL-2.0-only	GNU General Public License (GPL) v2
GPL-2.0-only	GNU General Public License version 2 (GPL v2)
GPL-2.0-only	GPL 2.0
GPL-2.0-only	GPL v2
GPL-2.0-only	GPL v2 only
GPL-2.0-only	GPL v2.0
GPL-2.0-only	GPL-2
GPL-2.0-only	GPL-2.0
GPL-2.0-only	GPL-2.0-only
GPL-2.0-only	GPL2
GPL-2.0-only	GPLv2
GPL-2.0-only+	GPL-2.0-only+
GPL-2.0-or-later	GNU General Public License version 2 or later
GPL-2.0-or-later	GNU General Public License version 2 or later (GPL v2 or later)
GPL-2.0-or-later	GNU General Public License version 2 or later (GPLv2 or later)
GPL-2.0-or-later	GPL v2 or later
GPL-2.0-or-later	GPL v2+
GPL-2.0-or-later	GPL v2.0 or later
GPL-2.0-or-later	GPL-2+
GPL-2.0-or-later	GPL-2.0 or later
GPL-2.0-or-later	GPL-2.0+
GPL-2.0-or-later	GPL-2.0-or-later
GPL-2.0-or-later	GPL2+
GPL-2.0-or-later	GPLv2 or later
GPL-2.0-or-later	GPLv2+
GPL-2.0-or-later	libGeoIPUpdate is GPLv2 or later
GPL-2.0-or-later+	GPL-2.0-or-later+
GPL-3.0-only	GNU GPL version 3
GPL-3.0-only	GNU General Public License version 3 (GPLv3)
GPL-3.0-only	GPL 3
GPL-3.0-only	GPL v3
GPL-3.0-only	GPL v3 only
GPL-3.0-only	GPL-3
GPL-3.0-only	GPL-3.0
GPL-3.0-only	GPL-3.0-only
GPL-3.0-only	GPL3
GPL-3.0-only	GPLv3
GPL-3.0-only+	GPL-3.0-only+
GPL-3.0-or-later	GNU GPL v3 or later
GPL-3.0-or-later	GPL v3 or later
GPL-3.0-or-later	GPL-3+
GPL-3.0-or-later	GPL-3.0+
GPL-3.0-or-later	GPL-3.0-or-later
GPL-3.0-or-later	GPLv3+
GPL-3.0-or-later WITH Autoconf-exception-3.0	GPLv3+ with exceptions
GPL-3.0-or-later+	GPL-3.0-or-later+
GPL-3.0-with-Qt-Company-Qt-exception-1.1	GPL-3.0-with-Qt-Company-Qt-exception-1.1
Giftware	Giftware
Giftware+	Giftware+
Glide	Glide
Glide+	Glide+
Glulxe	Glulxe
Glulxe+	Glulxe+
HPND	HPND
HPND+	HPND+
HPND-sell-variant	HPND-sell-variant
HPND-sell-variant+	HPND-sell-variant+
HaskellReport	HaskellReport
HaskellReport+	HaskellReport+
IBM-pibs	IBM-pibs
IBM-pibs+	IBM-pibs+
ICU	ICU
ICU+	ICU+
IJG	IJG
IJG	SUSE-IJG
IJG+	IJG+
IPA	IPA
IPA	see IPA_Font_License_Agreement_v1.0.txt
IPA+	IPA+
IPL-1.0	IBM PL
IPL-1.0	IBM Public License
IPL-1.0	IBM Public License ..
IPL-1.0	IPL-1.0
IPL-1.0+	IPL-1.0+
ISC	ISC
ISC	ISC License
ISC+	ISC+
ImageMagick	ImageMagick
ImageMagick+	ImageMagick+
Imlib2	Imlib2
Imlib2+	Imlib2+
Info-ZIP	Info-ZIP
Info-ZIP+	Info-ZIP+
Intel	Intel
Intel+	Intel+
Intel-ACPI	Intel-ACPI
Intel-ACPI+	Intel-ACPI+
Interbase-1.0	Interbase-1.0
Interbase-1.0+	Interbase-1.0+
JPNIC	JPNIC
JPNIC+	JPNIC+
JSON	JSON
JSON	SUSE-JSON
JSON+	JSON+
JasPer-2.0	JasPer-2.0
JasPer-2.0+	JasPer-2.0+
LAL-1.2	LAL-1.2
LAL-1.2	https://spdx.org/licenses/LAL-1.2.html
LAL-1.2+	LAL-1.2+
LAL-1.3	LAL-1.3
LAL-1.3+	LAL-1.3+
LGPL-2.0-only	LGPL v2
LGPL-2.0-only	LGPL v2.0 only
LGPL-2.0-only	LGPL-2.0
LGPL-2.0-only	LGPL-2.0-only
LGPL-2.0-only	LGPLv2
LGPL-2.0-only	LGPLv2.0
LGPL-2.0-only+	LGPL-2.0-only+
LGPL-2.0-or-later	LGPL v2 or later
LGPL-2.0-or-later	LGPL v2.0 or later
LGPL-2.0-or-later	LGPL-2.0+
LGPL-2.0-or-later	LGPL-2.0-or-later
LGPL-2.0-or-later	LGPLv2.0+
LGPL-2.0-or-later+	LGPL-2.0-or-later+
LGPL-2.1-only	GNU LGPLv2.1
LGPL-2.1-only	GNU Lesser General Public License version 2.1 (LGPL v2.1)
LGPL-2.1-only	LGPL 2.1
LGPL-2.1-only	LGPL v2.1
LGPL-2.1-only	LGPL v2.1 only
LGPL-2.1-only	LGPL-2.1
LGPL-2.1-only	LGPL-2.1-only
LGPL-2.1-only	LGPL2.1
LGPL-2.1-only	LGPLv2.1
LGPL-2.1-only+	LGPL-2.1-only+
LGPL-2.1-or-later	GNU LGPL v2.1 or later
LGPL-2.1-or-later	LGPL V2+
LGPL-2.1-or-later	LGPL v2+
LGPL-2.1-or-later	LGPL v2.1 or later
LGPL-2.1-or-later	LGPL v2.1+
LGPL-2.1-or-later	LGPL-2.0.1 or later
LGPL-2.1-or-later	LGPL-2.1+
LGPL-2.1-or-later	LGPL-2.1-or-later
LGPL-2.1-or-later	LGPLv2+
LGPL-2.1-or-later	LGPLv2.1+
LGPL-2.1-or-later WITH GCC-exception-2.0	LGPLv2+ with GCC exception
LGPL-2.1-or-later WITH GCC-exception-2.0	SUSE-LGPL-2.1+-with-GCC-exception
LGPL-2.1-or-later+	LGPL-2.1-or-later+
LGPL-2.1-with-Qt-Company-Qt-exception-1.1	LGPL-2.1-with-Qt-Company-Qt-exception-1.1
LGPL-3.0-only	GNU Lesser General Public License (LGPL), Version 3
LGPL-3.0-only	GNU Lesser General Public License version 3 (LGPL v3)
LGPL-3.0-only	LGPL-3.0
LGPL-3.0-only	LGPL-3.0-only
LGPL-3.0-only	LGPLv3
LGPL-3.0-only WITH openvpn-openssl-exception	SUSE-LGPL-3.0-with-openssl-exception
LGPL-3.0-only WITH openvpn-openssl-exception	e.g python-psycopg2
LGPL-3.0-only+	LGPL-3.0-only+
LGPL-3.0-or-later	LGPL v3 or later
LGPL-3.0-or-later	LGPL-3.0+
LGPL-3.0-or-later	LGPL-3.0-or-later
LGPL-3.0-or-later	LGPLv3+
LGPL-3.0-or-later+	LGPL-3.0-or-later+
LGPL-3.0-with-Qt-Company-Qt-exception-1.1	LGPL-3.0-with-Qt-Company-Qt-exception-1.1
LGPLLR	LGPLLR
LGPLLR+	LGPLLR+
LPL-1.0	LPL-1.0
LPL-1.0+	LPL-1.0+
LPL-1.02	LPL-1.02
LPL-1.02+	LPL-1.02+
LPPL-1.0	LPPL-1.0
LPPL-1.0+	LPPL-1.0+
LPPL-1.1	LPPL-1.1
LPPL-1.1+	LPPL-1.1+
LPPL-1.2	LPPL-1.2
LPPL-1.2+	LPPL-1.2+
LPPL-1.3a	LPPL-1.3a
LPPL-1.3a+	LPPL-1.3a+
LPPL-1.3c	LPPL ..
LPPL-1.3c	LPPL-1.3c
LPPL-1.3c	TeX-License ..
LPPL-1.3c+	LPPL-1.3c+
Latex2e	Latex2e
Latex2e+	Latex2e+
Leptonica	Leptonica
Leptonica+	Leptonica+
LiLiQ-P-1.1	LiLiQ-P-1.1
LiLiQ-P-1.1+	LiLiQ-P-1.1+
LiLiQ-R-1.1	LiLiQ-R-1.1
LiLiQ-R-1.1+	LiLiQ-R-1.1+
LiLiQ-Rplus-1.1	LiLiQ-Rplus-1.1
LiLiQ-Rplus-1.1+	LiLiQ-Rplus-1.1+
Libpng	Libpng
Libpng+	Libpng+
Linux-OpenIB	Linux-OpenIB
Linux-OpenIB+	Linux-OpenIB+
MIT	Expat
MIT	Expat License
MIT	MIT
MIT	MIT License
MIT	MIT License (or similar)
MIT	MIT licence
MIT	MIT license
MIT	MIT-Licence
MIT+	MIT+
MIT-0	MIT-0
MIT-0+	MIT-0+
MIT-CMU	MIT-CMU
MIT-CMU+	MIT-CMU+
MIT-advertising	MIT-advertising
MIT-advertising+	MIT-advertising+
MIT-enna	MIT-enna
MIT-enna+	MIT-enna+
MIT-feh	MIT-feh
MIT-feh+	MIT-feh+
MITNFA	MITNFA
MITNFA+	MITNFA+
MPL-1.0	MPL-1.0
MPL-1.0	MPLv1.0
MPL-1.0+	MPL-1.0+
MPL-1.1	MOZILLA PUBLIC LICENSE (MPL/NPL)
MPL-1.1	MPL-1.1
MPL-1.1	MPLv1.1
MPL-1.1	MPLv1.1 ..
MPL-1.1	Mozilla Public License 1.1
MPL-1.1+	MPL 1.1 or later
MPL-1.1+	MPL-1.1+
MPL-1.1+	MPLv1.1+
MPL-1.1+	SUSE-MPL-1.1+
MPL-2.0	MPL-2.0
MPL-2.0+	MPL-2.0+
MPL-2.0-no-copyleft-exception	MPL-2.0-no-copyleft-exception
MPL-2.0-no-copyleft-exception+	MPL-2.0-no-copyleft-exception+
MS-PL	MS-PL
MS-PL	Ms-Pl
MS-PL+	MS-PL+
MS-RL	MS-RL
MS-RL+	MS-RL+
MTLL	MTLL
MTLL+	MTLL+
MakeIndex	MakeIndex
MakeIndex	SUSE-MakeIndex
MakeIndex+	MakeIndex+
MirOS	MirOS
MirOS+	MirOS+
Motosoto	Motosoto
Motosoto+	Motosoto+
Multics	Multics
Multics+	Multics+
Mup	Mup
Mup+	Mup+
NASA-1.3	NASA-1.3
NASA-1.3+	NASA-1.3+
NBPL-1.0	NBPL-1.0
NBPL-1.0+	NBPL-1.0+
NCSA	NCSA
NCSA+	NCSA+
NGPL	NGPL
NGPL+	NGPL+
NLOD-1.0	NLOD-1.0
NLOD-1.0+	NLOD-1.0+
NLPL	NLPL
NLPL+	NLPL+
NOSL	NOSL
NOSL+	NOSL+
NPL-1.0	NPL-1.0
NPL-1.0+	NPL-1.0+
NPL-1.1	NPL-1.1
NPL-1.1+	NPL-1.1+
NPOSL-3.0	NPOSL-3.0
NPOSL-3.0+	NPOSL-3.0+
NRL	NRL
NRL+	NRL+
NTP	NTP
NTP+	NTP+
Naumen	Naumen
Naumen+	Naumen+
Net-SNMP	Net-SNMP
Net-SNMP+	Net-SNMP+
NetCDF	NetCDF
NetCDF	SUSE-NetCDF
NetCDF+	NetCDF+
Newsletr	Newsletr
Newsletr+	Newsletr+
Nokia	Nokia
Nokia+	Nokia+
NonFree	NonFree licenses
NonFree	SUSE-NonFree
Noweb	Noweb
Noweb+	Noweb+
OCCT-PL	OCCT-PL
OCCT-PL+	OCCT-PL+
OCLC-2.0	OCLC-2.0
OCLC-2.0+	OCLC-2.0+
ODC-By-1.0	ODC-By-1.0
ODC-By-1.0+	ODC-By-1.0+
ODbL-1.0	ODbL-1.0
ODbL-1.0+	ODbL-1.0+
OFL-1.0	OFL-1.0
OFL-1.0+	OFL-1.0+
OFL-1.1	OFL
OFL-1.1	OFL-1.1
OFL-1.1	Open Font License
OFL-1.1	SIL Open Font License
OFL-1.1	SIL Open Font License 1.1
OFL-1.1+	OFL-1.1+
OGL-UK-1.0	OGL-UK-1.0
OGL-UK-1.0+	OGL-UK-1.0+
OGL-UK-2.0	OGL-UK-2.0
OGL-UK-2.0+	OGL-UK-2.0+
OGL-UK-3.0	OGL-UK-3.0
OGL-UK-3.0+	OGL-UK-3.0+
OGTSL	OGTSL
OGTSL+	OGTSL+
OLDAP-1.1	OLDAP-1.1
OLDAP-1.1+	OLDAP-1.1+
OLDAP-1.2	OLDAP-1.2
OLDAP-1.2+	OLDAP-1.2+
OLDAP-1.3	OLDAP-1.3
OLDAP-1.3+	OLDAP-1.3+
OLDAP-1.4	OLDAP-1.4
OLDAP-1.4+	OLDAP-1.4+
OLDAP-2.0	OLDAP-2.0
OLDAP-2.0+	OLDAP-2.0+
OLDAP-2.0.1	OLDAP-2.0.1
OLDAP-2.0.1+	OLDAP-2.0.1+
OLDAP-2.1	OLDAP-2.1
OLDAP-2.1+	OLDAP-2.1+
OLDAP-2.2	OLDAP-2.2
OLDAP-2.2+	OLDAP-2.2+
OLDAP-2.2.1	OLDAP-2.2.1
OLDAP-2.2.1+	OLDAP-2.2.1+
OLDAP-2.2.2	OLDAP-2.2.2
OLDAP-2.2.2+	OLDAP-2.2.2+
OLDAP-2.3	OLDAP-2.3
OLDAP-2.3+	OLDAP-2.3+
OLDAP-2.4	OLDAP-2.4
OLDAP-2.4+	OLDAP-2.4+
OLDAP-2.5	OLDAP-2.5
OLDAP-2.5+	OLDAP-2.5+
OLDAP-2.6	OLDAP-2.6
OLDAP-2.6+	OLDAP-2.6+
OLDAP-2.7	OLDAP-2.7
OLDAP-2.7+	OLDAP-2.7+
OLDAP-2.8	OLDAP-2.8
OLDAP-2.8	openldap 2.8
OLDAP-2.8+	OLDAP-2.8+
OML	OML
OML	SUSE-OML
OML+	OML+
OPL-1.0	OPL-1.0
OPL-1.0	Open Public License 1.0
OPL-1.0+	OPL-1.0+
OSET-PL-2.1	OSET-PL-2.1
OSET-PL-2.1+	OSET-PL-2.1+
OSL-1.0	OSL-1.0
OSL-1.0+	OSL-1.0+
OSL-1.1	OSL-1.1
OSL-1.1	SUSE-OSL-1.1
OSL-1.1+	OSL-1.1+
OSL-2.0	OSL-2.0
OSL-2.0+	OSL-2.0+
OSL-2.1	OSL-2.1
OSL-2.1+	OSL-2.1+
OSL-3.0	OSL-3.0
OSL-3.0+	OSL-3.0+
OpenSSL	OpenSSL
OpenSSL+	OpenSSL+
PDDL-1.0	PDDL-1.0
PDDL-1.0+	PDDL-1.0+
PHP-3.0	PHP-3.0
PHP-3.0+	PHP-3.0+
PHP-3.01	PHP License
PHP-3.01	PHP-3.0.1
PHP-3.01	PHP-3.01
PHP-3.01	The PHP License, version 3.01
PHP-3.01+	PHP-3.01+
Plexus	Plexus
Plexus+	Plexus+
PostgreSQL	PostgreSQL
PostgreSQL+	PostgreSQL+
Python-2.0	PSF
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
Python-2.0+	Python-2.0+
QPL-1.0	QPL
QPL-1.0	QPL ..
QPL-1.0	QPL-1.0
QPL-1.0+	QPL-1.0+
Qhull	Qhull
Qhull	SUSE-Qhull
Qhull+	Qhull+
RHeCos-1.1	RHeCos-1.1
RHeCos-1.1+	RHeCos-1.1+
RPL-1.1	RPL-1.1
RPL-1.1+	RPL-1.1+
RPL-1.5	RPL-1.5
RPL-1.5+	RPL-1.5+
RPSL-1.0	RPSL-1.0
RPSL-1.0+	RPSL-1.0+
RSA-MD	RSA-MD
RSA-MD+	RSA-MD+
RSCPL	RSCPL
RSCPL+	RSCPL+
Rdisc	Rdisc
Rdisc+	Rdisc+
Ruby	GPL-2.0+ or Ruby
Ruby	GPLv2+ or Ruby
Ruby	Ruby
Ruby	same as ruby's
Ruby+	Ruby+
SAX-PD	SAX-PD
SAX-PD+	SAX-PD+
SCEA	SCEA
SCEA+	SCEA+
SGI-B-1.0	SGI-B-1.0
SGI-B-1.0+	SGI-B-1.0+
SGI-B-1.1	SGI-B-1.1
SGI-B-1.1+	SGI-B-1.1+
SGI-B-2.0	SGI-B-2.0
SGI-B-2.0+	SGI-B-2.0+
SISSL	SISSL
SISSL+	SISSL+
SISSL-1.2	SISSL-1.2
SISSL-1.2+	SISSL-1.2+
SMLNJ	SMLNJ
SMLNJ+	SMLNJ+
SMPPL	SMPPL
SMPPL+	SMPPL+
SNIA	SNIA
SNIA+	SNIA+
SPL-1.0	SPL-1.0
SPL-1.0+	SPL-1.0+
SUSE-Arphic	http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/LICENSE
SUSE-Arphic+	SUSE-Arphic+
SUSE-BSD-3-Clause-with-non-nuclear-addition	BSD-3-Clause with addition which clarifies the software is not licensed for use in design, build or operation of nuclear facility
SUSE-BSD-3-Clause-with-non-nuclear-addition+	SUSE-BSD-3-Clause-with-non-nuclear-addition+
SUSE-BSD-Mark-Modifications	BSD-Mark-Modifications
SUSE-BSD-Mark-Modifications+	SUSE-BSD-Mark-Modifications+
SUSE-Bitstream-Vera	http://www.xfree86.org/current/LICENSE13.html
SUSE-Bitstream-Vera+	SUSE-Bitstream-Vera+
SUSE-CC-Sampling-Plus-1.0	Creative Commons Sampling Plus 1.0
SUSE-CC-Sampling-Plus-1.0+	SUSE-CC-Sampling-Plus-1.0+
SUSE-CPL-0.5	Common Public License 0.5
SUSE-CPL-0.5+	SUSE-CPL-0.5+
SUSE-CacertRoot	http://www.cacert.org/policy/RootDistributionLicense.php
SUSE-CacertRoot+	SUSE-CacertRoot+
SUSE-Copyleft-Next-0.3.0	https://raw.githubusercontent.com/richardfontana/copyleft-next/master/Releases/copyleft-next-0.3.0
SUSE-Copyleft-Next-0.3.0+	SUSE-Copyleft-Next-0.3.0+
SUSE-Curb	https://raw.githubusercontent.com/taf2/curb/master/LICENSE
SUSE-Curb+	SUSE-Curb+
SUSE-DMTF	Distributed Management Task Force ( see https://fedoraproject.org/wiki/Licensing/DMTF )
SUSE-DMTF+	SUSE-DMTF+
SUSE-Docbook-XSL	Copyright (C) 1999-2007 Norman Walsh
SUSE-Docbook-XSL+	SUSE-Docbook-XSL+
SUSE-EULA	SUSE End User License Agreement
SUSE-EULA+	SUSE-EULA+
SUSE-Egenix-1.1.0	Egenix Public License Agreement 1.1.0 (e.g. python-egenix-mx-base) http://www.egenix.com/products/python/mxBase/eGenix.com-Public-License-1.1.0.pdf
SUSE-Egenix-1.1.0+	SUSE-Egenix-1.1.0+
SUSE-FHS	See for example, the "FHS" license here: https://launchpad.net/ubuntu/precise/+source/debian-policy/+copyright
SUSE-FHS+	SUSE-FHS+
SUSE-FLTK	Fltk
SUSE-FLTK+	SUSE-FLTK+
SUSE-Firmware	Firmware license, redistributable unmodified
SUSE-Firmware+	SUSE-Firmware+
SUSE-Free-Art-1.3	http://artlibre.org/licence/lal/en
SUSE-Free-Art-1.3+	SUSE-Free-Art-1.3+
SUSE-Freetype	Freetype
SUSE-Freetype+	SUSE-Freetype+
SUSE-Freeware	Freeware
SUSE-Freeware	Freeware license
SUSE-Freeware+	SUSE-Freeware+
SUSE-GL2PS-2.0	http://www.geuz.org/gl2ps/COPYING.GL2PS
SUSE-GL2PS-2.0+	SUSE-GL2PS-2.0+
SUSE-GPL-2.0+-with-openssl-exception	GPLv2+ with openssl linking exception
SUSE-GPL-2.0+-with-openssl-exception+	SUSE-GPL-2.0+-with-openssl-exception+
SUSE-GPL-2.0+-with-sane-exception	Sane contains many files with an exception to permit linking against proprietary libraries
SUSE-GPL-2.0+-with-sane-exception+	SUSE-GPL-2.0+-with-sane-exception+
SUSE-GPL-2.0-with-FLOSS-exception	GPL-2.0-with-FLOSS-exception
SUSE-GPL-2.0-with-FLOSS-exception+	SUSE-GPL-2.0-with-FLOSS-exception+
SUSE-GPL-2.0-with-OSI-exception	GPL-2.0 with linking exception for OSI licenses (see elfutils e.g.)
SUSE-GPL-2.0-with-OSI-exception+	SUSE-GPL-2.0-with-OSI-exception+
SUSE-GPL-2.0-with-linking-exception	Copyright holder expressly allows GPL-2.0 component to be linked with components which are not GPL compatible
SUSE-GPL-2.0-with-linking-exception+	SUSE-GPL-2.0-with-linking-exception+
SUSE-GPL-2.0-with-openssl-exception	SPDX does not have this exception
SUSE-GPL-2.0-with-openssl-exception+	SUSE-GPL-2.0-with-openssl-exception+
SUSE-GPL-2.0-with-plugin-exception	Many GPL-2.0 licensed applications grant an exception that permits non-free plugins (e.g. from gstreamer) to be linked against them
SUSE-GPL-2.0-with-plugin-exception+	SUSE-GPL-2.0-with-plugin-exception+
SUSE-GPL-3.0+-with-font-exception	GPLv3+ with exceptions (Fedora)
SUSE-GPL-3.0+-with-font-exception+	SUSE-GPL-3.0+-with-font-exception+
SUSE-GPL-3.0+-with-openssl-exception	GPLv3+ with openssl linking exception
SUSE-GPL-3.0+-with-openssl-exception+	SUSE-GPL-3.0+-with-openssl-exception+
SUSE-GPL-3.0-with-FLOSS-exception	GPL-3.0 with exceptions for certain FLOSS licenses
SUSE-GPL-3.0-with-FLOSS-exception+	SUSE-GPL-3.0-with-FLOSS-exception+
SUSE-GPL-3.0-with-font-exception	GPL-3.0-with-font-exception
SUSE-GPL-3.0-with-font-exception+	SUSE-GPL-3.0-with-font-exception+
SUSE-GPL-3.0-with-openssl-exception	GPLv3 with openssl linking exception (see e.g. courier-authlib 0.64.0)
SUSE-GPL-3.0-with-openssl-exception+	SUSE-GPL-3.0-with-openssl-exception+
SUSE-GPL-3.0-with-template-exception	See e.g. dh-make from debian (debian/copyright)
SUSE-GPL-3.0-with-template-exception+	SUSE-GPL-3.0-with-template-exception+
SUSE-Gitslave	Similar to LGPL-2.1 but without sections 3 and 13
SUSE-Gitslave+	SUSE-Gitslave+
SUSE-Gnuplot	Gnuplot
SUSE-Gnuplot+	SUSE-Gnuplot+
SUSE-Hack-Open-Font-2.0	https://github.com/chrissimpkins/Hack/blob/master/LICENSE.md
SUSE-Hack-Open-Font-2.0+	SUSE-Hack-Open-Font-2.0+
SUSE-IBPL-1.0	http://www.firebirdsql.org/en/interbase-public-license/
SUSE-IBPL-1.0+	SUSE-IBPL-1.0+
SUSE-IDPL-1.0	http://www.firebirdsql.org/en/initial-developer-s-public-license-version-1-0/
SUSE-IDPL-1.0+	SUSE-IDPL-1.0+
SUSE-IEEE	Corresponds to https://fedoraproject.org/wiki/Licensing/IEEEDocLicense
SUSE-IEEE+	SUSE-IEEE+
SUSE-Innernet-2.0	Inner Net License 2
SUSE-Innernet-2.0+	SUSE-Innernet-2.0+
SUSE-Innernet-2.00	Inner Net License 2.00
SUSE-Innernet-2.00+	SUSE-Innernet-2.00+
SUSE-LDPL-2.0	http://www.tldp.org/COPYRIGHT.html
SUSE-LDPL-2.0+	SUSE-LDPL-2.0+
SUSE-LGPL-2.0-with-linking-exception	LGPL-2.0-with-linking-exception
SUSE-LGPL-2.0-with-linking-exception+	SUSE-LGPL-2.0-with-linking-exception+
SUSE-LGPL-2.1-with-digia-exception-1.1	qtcreator November 2012
SUSE-LGPL-2.1-with-digia-exception-1.1+	SUSE-LGPL-2.1-with-digia-exception-1.1+
SUSE-LGPL-2.1-with-nokia-exception-1.1	Part of the license choice in libqt4
SUSE-LGPL-2.1-with-nokia-exception-1.1+	SUSE-LGPL-2.1-with-nokia-exception-1.1+
SUSE-Liberation	LiberationFontsLicense (Fedora calls this the Liberation license - it will be easier to get it upstream if we adopt that)
SUSE-Liberation+	SUSE-Liberation+
SUSE-MIT-Khronos	https://github.com/KhronosGroup/KTX/blob/master/lib/loader.c
SUSE-MIT-Khronos+	SUSE-MIT-Khronos+
SUSE-Manpages	Manpages licenses (linux man pages e.g.)
SUSE-Manpages+	SUSE-Manpages+
SUSE-Matplotlib	E.g. python -matplotlib -> LICENSE/LICENSE
SUSE-Matplotlib+	SUSE-Matplotlib+
SUSE-MgOpen	MgOpen Fonts license (similar to Bitstream Vera but with additional language)
SUSE-MgOpen+	SUSE-MgOpen+
SUSE-Oasis-Specification-Notice	Oasis-Specification-Notice
SUSE-Oasis-Specification-Notice+	SUSE-Oasis-Specification-Notice+
SUSE-OldFSFDocLicense	Tracked by Fedora as OldFSFDocLicense (see https://fedoraproject.org/wiki/Licensing:OldFSFDocLicense?rd=Licensing/OldFSFDocLicense)
SUSE-OldFSFDocLicense+	SUSE-OldFSFDocLicense+
SUSE-OpenPublication-1.0	http://opencontent.org/openpub/ - note this is not the OPL-1.0
SUSE-OpenPublication-1.0+	SUSE-OpenPublication-1.0+
SUSE-PHP-2.02	PHP 2.02
SUSE-PHP-2.02+	SUSE-PHP-2.02+
SUSE-Permissive	Must not be copyleft. Must not contain patent clauses of any nature. Most not limit ability to copy, modifiy, distribute (through multiple tiers of distribution) and distribute modified versions. Must not impose obligations such as 'advertising clauses' or anything that could be viewed as an 'additional restriction' under GPL-2.0+ or GPL-3.0+. Must not impose obligations such as modification by patch only, or reciprocal clauses.
SUSE-Permissive+	SUSE-Permissive+
SUSE-Permissive-Modify-By-Patch	Similar to SUSE-Permissive but copyright holder has specified that modification is only allowed by patch
SUSE-Permissive-Modify-By-Patch+	SUSE-Permissive-Modify-By-Patch+
SUSE-Public-Domain	Public Domain
SUSE-Public-Domain	Public Domain License
SUSE-Public-Domain	Public Domain, Freeware
SUSE-Public-Domain	Public Domain. See http://www.sentex.ca/~mw
SUSE-Public-Domain	Public domain
SUSE-Public-Domain+	SUSE-Public-Domain+
SUSE-Python-1.6	CNRI (http://www.handle.net/python_licenses/python1.6_9-5-00.html)
SUSE-Python-1.6+	SUSE-Python-1.6+
SUSE-QWT-1.0	LGPL-2.1 with clarifications. See http://qwt.sourceforge.net/
SUSE-QWT-1.0+	SUSE-QWT-1.0+
SUSE-Redistributable-Content	This license can _only_ be used for content (i.e. no code, no documentation). Provided there are no restrictions on free (re)distribution of the content, use this license. SUSE-Firmware is a subset of this category.
SUSE-Redistributable-Content+	SUSE-Redistributable-Content+
SUSE-Repoze	http://repoze.org/license.html
SUSE-Repoze+	SUSE-Repoze+
SUSE-SGI-FreeB-2.0	Fedora calls this MIT (it is very similar to the MIT)
SUSE-SGI-FreeB-2.0+	SUSE-SGI-FreeB-2.0+
SUSE-SIP	http://www.riverbankcomputing.co.uk/software/sip/license
SUSE-SIP+	SUSE-SIP+
SUSE-SLIB	http://www-swiss.ai.mit.edu/~jaffer/SLIB_COPYING.txt
SUSE-SLIB+	SUSE-SLIB+
SUSE-SNIA-1.0	SNIA Public License (https://fedoraproject.org/wiki/Licensing/SNIA_Public_License)
SUSE-SNIA-1.0+	SUSE-SNIA-1.0+
SUSE-SNIA-1.1	SNIA 1.1
SUSE-SNIA-1.1+	SUSE-SNIA-1.1+
SUSE-Scrot	Scrot license (advertising clause)
SUSE-Scrot+	SUSE-Scrot+
SUSE-Sun-Laboratories	http://pastebin.com/UubnS3se
SUSE-Sun-Laboratories+	SUSE-Sun-Laboratories+
SUSE-TGPPL-1.0	https://zooko.com/uri/URI:DIR2-RO:d23ekhh2b4xashf53ycrfoynkq:y4vpazbrt2beddyhgwcch4sduhnmmefdotlyelojxg4tyzllhb4a/tgppl.html
SUSE-TGPPL-1.0+	SUSE-TGPPL-1.0+
SUSE-TeX	http://en.wikipedia.org/wiki/TeX#License
SUSE-TeX+	SUSE-TeX+
SUSE-Ubuntu-Font-License-1.0	http://font.ubuntu.com/licence/
SUSE-Ubuntu-Font-License-1.0+	SUSE-Ubuntu-Font-License-1.0+
SUSE-XDebug	https://xdebug.org/license.php
SUSE-XDebug+	SUSE-XDebug+
SUSE-XFree86-with-font-exception	XFree86 with exception to clarify that a document embedding such fonts does not need to be licensed under the XFree86 license
SUSE-XFree86-with-font-exception+	SUSE-XFree86-with-font-exception+
SUSE-XSL-Lint	http://pastebin.com/cFxX3zCb (probably deprecated but found in docbook-dsssl-stylesheets)
SUSE-XSL-Lint+	SUSE-XSL-Lint+
SUSE-Xano	https://fedoraproject.org/wiki/Licensing/MinchoFontLicense
SUSE-Xano+	SUSE-Xano+
SUSE-Xenonsoft-1.00	http://pastebin.com/PkSpfTbr (part of spectcl)
SUSE-Xenonsoft-1.00+	SUSE-Xenonsoft-1.00+
SUSE-mirror	License of the mirror package is quite liberal but prohibits distribution of modified versions. Instead, you should distribute modifications as patches. This is permitted by Section 4 of the Open Source Definition
SUSE-mirror+	SUSE-mirror+
SUSE-mplus	http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html#license
SUSE-mplus+	SUSE-mplus+
SUSE-wxWidgets-3.1	https://www.wxwidgets.org/about/licence/
SUSE-wxWidgets-3.1+	SUSE-wxWidgets-3.1+
SWL	SWL
SWL+	SWL+
Saxpath	Saxpath
Saxpath+	Saxpath+
Sendmail	SUSE-Sendmail
Sendmail	Sendmail
Sendmail+	Sendmail+
Sendmail-8.23	Sendmail-8.23
Sendmail-8.23+	Sendmail-8.23+
SimPL-2.0	SimPL-2.0
SimPL-2.0+	SimPL-2.0+
Sleepycat	Sleepycat
Sleepycat+	Sleepycat+
Spencer-86	Spencer-86
Spencer-86+	Spencer-86+
Spencer-94	Spencer-94
Spencer-94+	Spencer-94+
Spencer-99	Spencer-99
Spencer-99+	Spencer-99+
SugarCRM-1.1.3	SugarCRM-1.1.3
SugarCRM-1.1.3+	SugarCRM-1.1.3+
TAPR-OHL-1.0	TAPR-OHL-1.0
TAPR-OHL-1.0+	TAPR-OHL-1.0+
TCL	SUSE-TCL
TCL	TCL
TCL+	TCL+
TCP-wrappers	TCP-wrappers
TCP-wrappers+	TCP-wrappers+
TMate	TMate
TMate+	TMate+
TORQUE-1.1	TORQUE-1.1
TORQUE-1.1+	TORQUE-1.1+
TOSL	TOSL
TOSL+	TOSL+
TU-Berlin-1.0	TU-Berlin-1.0
TU-Berlin-1.0+	TU-Berlin-1.0+
TU-Berlin-2.0	TU-Berlin-2.0
TU-Berlin-2.0+	TU-Berlin-2.0+
UPL-1.0	UPL-1.0
UPL-1.0+	UPL-1.0+
Unicode	http://www.unicode.org/copyright.html
Unicode-DFS-2015	Unicode-DFS-2015
Unicode-DFS-2015+	Unicode-DFS-2015+
Unicode-DFS-2016	Unicode-DFS-2016
Unicode-DFS-2016+	Unicode-DFS-2016+
Unicode-TOU	Unicode-TOU
Unicode-TOU+	Unicode-TOU+
Unlicense	Unlicense
Unlicense+	Unlicense+
VOSTROM	VOSTROM
VOSTROM+	VOSTROM+
VSL-1.0	VSL-1.0
VSL-1.0+	VSL-1.0+
Vim	SUSE-Vim
Vim	Vim
Vim+	Vim+
W3C	W3C
W3C	W3C Software License
W3C+	W3C+
W3C-19980720	W3C-19980720
W3C-19980720+	W3C-19980720+
W3C-20150513	W3C-20150513
W3C-20150513+	W3C-20150513+
WTFPL	SUSE-WTFPL-2.0
WTFPL	WTFPL
WTFPL+	WTFPL+
Watcom-1.0	Watcom-1.0
Watcom-1.0+	Watcom-1.0+
Wsuipa	Wsuipa
Wsuipa+	Wsuipa+
X11	MIT/X Consortium License
X11	MIT/X License
X11	MIT/X11
X11	SUSE-XFree86-1.0
X11	X11
X11	X11 (BSD like)
X11	X11 MIT
X11	X11/MIT
X11+	X11+
XFree86-1.1	XFree86-1.1
XFree86-1.1+	XFree86-1.1+
XSkat	XSkat
XSkat+	XSkat+
Xerox	Xerox
Xerox+	Xerox+
Xnet	Xnet
Xnet+	Xnet+
YPL-1.0	YPL-1.0
YPL-1.0+	YPL-1.0+
YPL-1.1	YPL-1.1
YPL-1.1+	YPL-1.1+
ZPL-1.1	ZPL-1.1
ZPL-1.1+	ZPL-1.1+
ZPL-2.0	ZPL
ZPL-2.0	ZPL-2.0
ZPL-2.0	Zope Public License
ZPL-2.0+	ZPL-2.0+
ZPL-2.1	ZPL 2.1
ZPL-2.1	ZPL-2.1
ZPL-2.1+	ZPL-2.1+
Zed	Zed
Zed+	Zed+
Zend-2.0	Zend-2.0
Zend-2.0+	Zend-2.0+
Zimbra-1.3	Zimbra-1.3
Zimbra-1.3+	Zimbra-1.3+
Zimbra-1.4	Zimbra-1.4
Zimbra-1.4+	Zimbra-1.4+
Zlib	Zlib
Zlib	Zlib License
Zlib	zlib
Zlib	zlib/libpng License
Zlib+	Zlib+
bzip2-1.0.5	bzip2-1.0.5
bzip2-1.0.5+	bzip2-1.0.5+
bzip2-1.0.6	bzip2-1.0.6
bzip2-1.0.6+	bzip2-1.0.6+
copyleft-next-0.3.0	copyleft-next-0.3.0
copyleft-next-0.3.0+	copyleft-next-0.3.0+
copyleft-next-0.3.1	copyleft-next-0.3.1
copyleft-next-0.3.1+	copyleft-next-0.3.1+
curl	curl
curl+	curl+
diffmark	diffmark
diffmark+	diffmark+
dvipdfm	dvipdfm
dvipdfm+	dvipdfm+
eGenix	eGenix
eGenix+	eGenix+
gSOAP-1.3b	gSOAP-1.3b
gSOAP-1.3b+	gSOAP-1.3b+
gnuplot	gnuplot
gnuplot+	gnuplot+
iMatix	iMatix
iMatix+	iMatix+
libpng-2.0	libpng-2.0
libpng-2.0+	libpng-2.0+
libtiff	libtiff
libtiff+	libtiff+
mpich2	mpich2
mpich2+	mpich2+
psfrag	psfrag
psfrag+	psfrag+
psutils	psutils
psutils+	psutils+
xinetd	SUSE-xinetd
xinetd	xinetd
xinetd+	xinetd+
xpp	xpp
xpp+	xpp+
zlib-acknowledgement	zlib-acknowledgement
zlib-acknowledgement+	zlib-acknowledgement+
07070100000010000081ED0000000000000000000000015DCD69F000003A7B000000000000000000000000000000000000003400000000obs-service-format_spec_file-20191114/patch_license#! /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) = @_;

  return $tag if $tag =~ m/Url|URL/;

  $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/i) {
	    $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+)/i, $license, -1)) {
	$_ = replace_single_spdx($_) unless $_ eq '' || /(\s+(?:AND|OR)\s+)/i;
        s/\s+/ /g;
        $_ = uc $_ if /(\s+(?:AND|OR)\s+)/i;
	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";
  }	
}

07070100000011000081ED0000000000000000000000015DCD69F00000514A000000000000000000000000000000000000003300000000obs-service-format_spec_file-20191114/prepare_spec#! /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 $needssslcertforbuild = 0;
my $nodebuginfo = 0;
my $vim_modeline;
my $nosrc_result = 0;
my $current_section = "header";
my $had_debug_package = 0;
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/url/URL/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() {
  return if $current_section eq "description";

  push @oldspec, "XXXBLANKLINE"
    if ($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";
  }
  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/i) {
      $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+)/i, $license, -1)) {
    $_ = replace_single_spdx($_) unless $_ eq '' || /(\s+(?:AND|OR)\s+)/i;
    s/\s+/ /g;
    $_ = uc $_ if /(\s+(?:AND|OR)\s+)/i;
    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(' and ', @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 sort_tags_helper {
  if (($a =~ /^[^#]*\(/) != ($b =~ /^[^#]*\(/)) {
    if ($a =~ /^[^#]*\(/) {
      1;
    } else {
      -1;
    }
  } else {
    $a cmp $b;
  }
}

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:/ && $current_section eq "header" ) {
      $vim_modeline = $_;
      next;
    }

    if ( /^#\s*needsrootforbuild\s*$/ ) {
      $needsrootforbuild = 1;
      next;
    }
    if ( /^#\s*needsbinariesforbuild\s*$/ ) {
      $needsbinariesforbuild = 1;
      next;
    }
    if ( /^#\s*needssslcertforbuild\s*$/ ) {
      $needssslcertforbuild = 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","needssslcertforbuild", "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:/i || /^Requires:/i || /^Provides:/i || /^Obsoletes:/i ) {
      my $cur_tag = $_;
      my $tag = '';
      if (m/^(\S+):\s*(.*)$/) {
	$tag = $1;
	$cur_tag = $2;
      }

      my %aa;
      if ($cur_tag =~ /%\(/ || $cur_tag =~ /%\{/ || $cur_tag =~ /\(.*\)/) {
        # do not touch lines with shell execution or rich deps in brackets
	$aa{$cur_tag}=1;
      } else {
        # seperate tags of all other lines
        while ($cur_tag =~ 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 $value (sort keys(%aa)) {
	push (@oldspec, sprintf("%-16s%s", capitalize_case($tag) . ":", $value));
      }
      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] =~ /^%global/ || $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*%global/ || /^\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/ || /^\s*%global\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 ) {
	if ($1 !~ m/^[0-9]*$/ && $oldspec[-1] eq "XXXRELEASE") {
	  pop @oldspec;
	  push @oldspec, sprintf("%-16s%s","Release:", $1);
	}
	# 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, sprintf("%-16s%s", "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, "XXXRELEASE";
	next;
      }
    }
    if ( $current_section ne "changelog" ) {
      push @oldspec, $_;
      next;
    }
  }

}

if ($ARGV[0] eq '--debug') {
  $debug = 1;
  shift @ARGV;
}

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" ) || die("open $specfile: $!\n");
while ( <SPE> ) {
  chomp();
  if ( /^%define/ || /^%global/ ) {
    my @args = split (/\s+/,$_);
    $_ =~ s/[\{\}\"]//g for (@args);
    $args[2] =~ s/\Q$_\E/$xdefinelist->{$_}/ for (sort { length($b) <=> length($a) } keys (%{$xdefinelist}));
    if ( $args[2] !~ /[\(\)\{\}\@\%\"\\]/ ) {
      $xdefinelist->{"%".$args[1]} = $args[2];
      $xdefinelist->{"%{".$args[1]."}"} = $args[2];
    }
  }
  if ( /^\s*Name:/ ) {
    next if $seen_name;
    $seen_name = 1;
    $base_package = $_;
    $base_package =~ s/^\s*Name:\s*(\S*)\s*/$1/;
    $base_package =~ s/\Q$_\E/$xdefinelist->{$_}/ for (sort { length($b) <=> length($a) } keys (%{$xdefinelist}));
    if ($debug) {
      warn "DEBUG: base_package = $base_package\n";
      warn Dumper($xdefinelist);
    }
    last;
  }
}
close ( SPE );

warn ("base_package is $base_package\n") if $debug;

if ( ! stat ((glob("$specdir/$base_package*.spec"))[0] || "") ) {
  $base_package =~ s/[0-9]$//;
}

if ( ! stat ((glob("$specdir/$base_package*.spec"))[0] || "") ) {
  $base_package =~ s/\-[^\-]*$//;
}

warn ("base_package is $base_package\n") if $debug;

if ( ! stat ((glob("$specdir/$base_package*.spec"))[0] || "") ) {
  $base_package = $specbase;
  $base_package =~ s/\.spec$//;
  $base_package =~ s/\-.*$//;
}

read_and_parse_old_spec ( $specfile, $base_package );

for my $tag (qw(BuildRequires Requires Provides Obsoletes)) {
  my $linesmoved = 1;
 sortcycle: while ($linesmoved) {
    $linesmoved = 0;
    my @firstlines = ();
    my @tags = ();
    while (defined $oldspec[0]) {
      my $l = shift @oldspec;
      if ($l =~ m/^$tag:/i ) {
	push(@tags, $l);
      } else {
	# if there are already tags, we need to sort and exit
	if (@tags > 0) {
	  my @sortedtags = sort sort_tags_helper @tags;
	  $linesmoved = !compare_arrays(\@tags, \@sortedtags);
	  if ($linesmoved) {
	    @oldspec = (@firstlines, @sortedtags, $l, @oldspec);
	    @firstlines = ();
	    @tags = ();
	    next sortcycle;
	  } else {
	    @firstlines = (@firstlines, @tags, $l);
	    @tags = ();
	    next;
	  }
	} else {
	  push(@firstlines, $l);
	}
      }
    }
    @oldspec = (@firstlines, @oldspec);
  }
}


my $thisyear = localtime->year() + 1900;

unshift @copyrights, "# Copyright (c) $thisyear SUSE LLC";

my $copy_list = join("\n", @copyrights);

print $vim_modeline . "\n" if (defined $vim_modeline);
print <<EOF;
#
# spec file for package $base_package
#
$copy_list
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
EOF

print "# needsrootforbuild\n" if $needsrootforbuild;
print "# needsbinariesforbuild\n" if $needsbinariesforbuild;
print "# nodebuginfo\n" if $nodebuginfo;
print "# needssslcertforbuild\n" if $needssslcertforbuild;
print "# icecream $icecreamforbuild\n" if $icecreamforbuild ne '';
#print "\n" if ($needsrootforbuild || $needsbinariesforbuild || $nodebuginfo || $icecreamforbuild || $needssslcertforbuild ne '');

while ($oldspec[0] eq "XXXBLANKLINE" || $oldspec[0] eq "XXXDOUBLELINE") {
  shift @oldspec;
}

print "\n\n";

my $license_unique = !grep { $_ ne $main_license } values %seen_licenses;
my $groups_unique = !grep { $_ ne $main_group } values %seen_groups;
# we need to have unique groups in the spec file as long as we support SLE11 ;(
$groups_unique = 0;
my $first_summary = 1;

my $line;
while (@oldspec) {
  $line = shift @oldspec;

  if ($line eq "XXXBLANKLINE") {
    print "\n" unless $oldspec[0] && ($oldspec[0] =~ m/^XXX.*LINE/ || $oldspec[0] =~ /^\s*$/ || $oldspec[0] =~ /^\n/);
  } elsif ($line eq "XXXDOUBLELINE") {
    print "\n\n" unless $oldspec[0] && ($oldspec[0] =~ m/^XXX.*LINE/ || $oldspec[0] =~ /^\s*$/ || $oldspec[0] =~ /^\n/);
  } elsif ($line eq "XXXRELEASE") {
    printf("%-16s%s\n", "Release:", "0") ;
  } elsif ($line =~ m/XXXPOSTSUMMARY (.*)$/) {
    # There is a chance to have some comments that should appear before
    # licenses and groups so print them here.
    $line = shift @oldspec;
    while ($line =~ m/^#.*/) {
      print "$line\n";
      $line = shift @oldspec;
    }
    unshift(@oldspec, $line);
    my $current_package = $1;
    my $license = $seen_licenses{$current_package} || $main_license;
    printf("%-16s%s\n", "License:", $license) if $license && (!$license_unique || $first_summary || $current_package eq $base_package);
    my $group = $seen_groups{$current_package} || $main_group;
    if ($group) {
      printf("%-16s%s\n", "Group:", $group) if (!$groups_unique || $first_summary || $current_package eq $base_package);
    }
    $first_summary = 0;
  } else {
    print "$line\n";
  }
}

print "\n" unless $line eq "XXXBLANKLINE" || $line eq "";
print "%changelog\n";

07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!227 blocks
openSUSE Build Service is sponsored by