Warning, file /sdk/kde-dev-scripts/relicensecheck.pl was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 #!/usr/bin/perl -w 0002 # vim:sw=4:et 0003 # (c) Dirk Mueller. GPLv2+ 0004 # I would love to be a python script, but os.popen just sucks 0005 0006 use strict; 0007 0008 use List::Util qw(any); 0009 0010 ### Please add your KDE (svn/git) account name in *alphabetical* order to the list 0011 ### below, then answer the following questions: 0012 ### 0013 ### 1. Include 'gplv23' if you are okay with contributions you've made under 0014 ### "GPLv2" being relicensed as "GPLv2 or GPLv3". 0015 ### 0016 ### 2. Include 'lgplv23' if you are okay with contributions you've made under 0017 ### "LGPLv2" being relicensed as "LGPLv2 or LGPLv3". 0018 ### 0019 ### 3. Include 'gplv2+' if you are okay with contributions you've made under 0020 ### "GPLv2" being relicensed as "GPLv2 or later". 0021 ### 0022 ### 4. Include 'lgplv2+' if you are okay with contributions you've made under 0023 ### "LGPLv2" being relicensed as "LGPLv2 or later". 0024 ### 0025 ### 5. Include '+eV' if you are okay with the KDE e.V. deciding on a future 0026 ### licensing change to your code if necessary. 0027 ### 0028 ### 6. Include 'CCBYSA4' if you are okay with contributions you've made under 0029 ### "GNU FDL" being relicensed as "Creative Commons Attribution-ShareAlike 4.0 International". 0030 ### For more information, see https://community.kde.org/Guidelines_and_HOWTOs/Relicensing/KDE_Relicensing 0031 0032 my %license_table = ( 0033 'acrouthamel' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0034 'adityam' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0035 'aheinecke' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0036 'ahmadsamir' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0037 'albertvaka' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0038 'alex' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0039 'apollozhu' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0040 'arbab' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0041 'arichardson' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0042 'arrowdodger' => ['lgplv23', 'CCBYSA4'], 0043 'athurhfree' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0044 'bdevries' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0045 'bharadwaj-raju'=> ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0046 'blu-base' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0047 'bruns' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0048 'burghard' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0049 'carlschwan' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0050 'cfeck' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0051 'cgerloff' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0052 'cordlandwehr' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0053 'davidbryant' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0054 'davidedmundson'=> ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0055 'davidhurka' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0056 'davidre' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0057 'djarvie' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0058 'emmanuelp' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0059 'felixernst' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', 'CCBYSA4' ], 0060 'flherne' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0061 'froscher' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0062 'fthieme' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0063 'hadacek' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', 'CCBYSA4' ], 0064 'huoni' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0065 'igorkushnir' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0066 'jarmond' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0067 'jbatrina' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0068 'johanneszarl' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0069 'jpoelen' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0070 'jriddell' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0071 'jsuhaas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0072 'kezik' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0073 'kleag' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', 'CCBYSA4' ], 0074 'lesliezhai' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0075 'lnj' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0076 'logixoul' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0077 'lorendb' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0078 'ltoscano' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0079 'lueck' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0080 'mart' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0081 'marten' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0082 'meven' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0083 'mgallien' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0084 'michaeleden' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0085 'michelh' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0086 'mitchell' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0087 'mjansen' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0088 'mpyne' => ['gplv23', 'lgplv23', '+eV', 'CCBYSA4' ], 0089 'muhlenpfordt' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0090 'ndavis' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0091 'nclarius' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', 'CCBYSA4' ], 0092 'ngraham' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0093 'nicolasfella' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0094 'nituldatt' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0095 'okellogg' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0096 'ostroffjh' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0097 'redstrate' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0098 'rikkus' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0099 'rkflx' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0100 'rkrawitz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0101 'safaalfulaij' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0102 'sitter' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0103 'smithjd' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0104 'smitop' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0105 'sredman' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0106 'stefan' => ['lgplv2+'], 0107 'sstjames' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0108 'stikonas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0109 'tfella' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0110 'thomassc' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0111 'tkadauke' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0112 'tleupold' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0113 'vladz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0114 'vjoshi' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0115 'whiting' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0116 'wxiao' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0117 'wbauer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ], 0118 'xyquadrat' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV', 'CCBYSA4' ] 0119 ); 0120 0121 my %old_license_table_2 = ( 0122 # From before CCBYSA4 was added, if you get an update for one of these people move it to %license_table 0123 'aacid' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0124 'abryant' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0125 'adawit' => ['gplv23', 'lgplv23', '+eV' ], 0126 'ademko' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0127 'adiaferia' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0128 'afiestas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0129 'alexmerry' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0130 'alund' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0131 'amantia' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0132 'amth' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0133 'andreyc' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0134 'antlarr' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0135 'apol' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0136 'arnolddumas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0137 'asensi' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0138 'aseigo' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0139 'asserhal' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0140 'beaulen' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0141 'bensi' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0142 'beschow' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0143 'bgupta' => [ 'gplv2+', 'lgplv2+', '+eV' ], 0144 'bhards' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0145 'bieker' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0146 'bischoff' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0147 'bks' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0148 'blackie' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0149 'bport' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0150 'bram' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0151 'broulik' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0152 'bruggie' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0153 'bshah' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0154 'capel' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0155 'carewolf' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0156 'cgiboudeaux' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0157 'chani' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0158 'chehrlic' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0159 'clee' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0160 'cmollekopf' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0161 'coates' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0162 'codrea' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0163 'craig' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0164 'cramblitt' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0165 'cschumac' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0166 'ctennis' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0167 'cullmann' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0168 'dakon' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0169 'danimo' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0170 'dannya' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0171 'deller' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0172 'denis' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0173 'deniskuplyakov'=> ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0174 'dfaure' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0175 'dhaumann' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0176 'dherberth' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0177 'domi' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0178 'dyp' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0179 'dvratil' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0180 'egorov' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0181 'ehamberg' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0182 'eliasp' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0183 'elvisangelaccio'=>['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0184 'epignet' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0185 'ereslibre' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0186 'eros' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0187 'ervin' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0188 'eschepers' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', ], 0189 'eva' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0190 'fabiank' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0191 'fawcett' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0192 'fengchao' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0193 'fischer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0194 'fizz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0195 'flocati' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0196 'fujioka' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0197 'fux' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0198 'garbanzo' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0199 'gateau' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0200 'geralds' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0201 'giannaros' => ['gplv23', 'lgplv23' ], 0202 'gioele' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0203 'graesslin' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0204 'granroth' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0205 'gregormi' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0206 'groszdaniel' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0207 'grulich' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0208 'guymaurel' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0209 'haeber' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0210 'haeckel' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', ], 0211 'harris' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0212 'hausmann' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0213 'heikobecker' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', ], 0214 'hein' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0215 'hdhoang' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0216 'hindenburg' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0217 'hoelzer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0218 'hrvojes' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0219 'hubner' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0220 'huerlimann' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0221 'huftis' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0222 'ibragimov' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0223 'ilic' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0224 'ikomissarov' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0225 'ivan' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0226 'jbrouault' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0227 'jehrichs' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0228 'jekyllwu' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0229 'jlee' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0230 'johnflux' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0231 'jones' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0232 'jowenn' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0233 'jschroeder' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0234 'jtamate' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0235 'kainhofe' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0236 'kfunk' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0237 'kloecker' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0238 'knight' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0239 'knauss' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0240 'kossebau' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0241 'kylafas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0242 'lbeltrame' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0243 'leinir' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0244 'leonh' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0245 'leonhard' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0246 'lilachaze' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0247 'lliehu' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0248 'lukas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0249 'lvsouza' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0250 'lypanov' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0251 'majewsky' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0252 'mardelle' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0253 'martyn' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0254 'mbritton' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0255 'mbroadst' => ['gplv23', 'lgplv23' , '+eV' ], 0256 'mecir' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0257 'michaelhowell' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0258 'michalhumpula' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0259 'milliams' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0260 'mirko' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0261 'mklapetek' => ['gplv23', 'lgplv23', , , '+eV' ], 0262 'mkoller' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0263 'mlaurent' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0264 'mludwig' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0265 'mmrozowski' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0266 'mssola' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0267 'mturkia' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0268 'mueller' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0269 'mwolff' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0270 'nalvarez' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0271 'narvaez' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0272 'nhasan' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0273 'nikitas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0274 'nsams' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0275 'ogoffart' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0276 'orcsik' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0277 'palant' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0278 'palimaka' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0279 'pdamsten' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0280 'peifengyu' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0281 'pgquiles' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0282 'pino' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0283 'pletourn' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0284 'pupeno' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0285 'raabe' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0286 'rahn' => ['gplv23', 'lgplv23' , '+eV' ], 0287 'ralfjung' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0288 'ralsina' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0289 'rdale' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0290 'reiher' => ['gplv23', 'lgplv23', '+eV' ], 0291 'rich' => ['gplv23', 'lgplv23' , '+eV' ], 0292 'richih' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0293 'rkcosta' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0294 'robbilla' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0295 'romariorios' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0296 'rpreukschas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0297 'rthomsen' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0298 'ruedigergad' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0299 'sanders' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0300 'sandsmark' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0301 'sars' => ['gplv23', 'lgplv23', '+eV' ], 0302 'saschpe' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0303 'savernik' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0304 'scarpino' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0305 'schmeisser' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0306 'schroder' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0307 'schwarzer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0308 'sebas' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0309 'skelly' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0310 'smartins' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0311 'sping' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0312 'staikos' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0313 'staniek' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0314 'sune' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0315 'taj' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0316 'tanton' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0317 'tenharmsel' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0318 'teske' => ['gplv23', 'lgplv23', ], 0319 'tfry' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0320 'thiago' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0321 'tjansen' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0322 'tmcguire' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0323 'tnyblom' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0324 'treat' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0325 'turbov' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0326 'uga' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0327 'uwolfer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0328 'vandenoever' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0329 'vhanda' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0330 'vitters' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0331 'vkrause' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0332 'vonreth' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0333 'vrusu' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0334 'waba' => ['gplv23', 'lgplv23', '+eV' ], # NOTE: explicit consent given for relicensing LGPL-2.0-only to LGPL-2.1-only in addition to the stated grants 0335 'wheeler' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0336 'willy' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0337 'woebbe' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0338 'wstephens' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0339 'yurchor' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0340 'zack' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ], 0341 'zecke' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+', '+eV' ] 0342 # Do not add anything here. Use license_table instead. 0343 ); 0344 0345 my %old_license_table = ( 0346 ### below is the older table -- from before we offered the +eV option. 0347 ### This means that in theory some of these contributors might accept 0348 ### to add the +eV if we ask them nicely. If they refuse, move the line 0349 ### to the above part of the table so that we don't ask them again. 0350 'adridg' => ['gplv23', 'lgplv23' ], 0351 'ahartmetz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0352 'annma' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0353 'apaku' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0354 'arendjr' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0355 'aumuell' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0356 'bbroeksema' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0357 'binner' => ['gplv23', 'lgplv23' ], 0358 'bjacob' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0359 'bmeyer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0360 'boemann' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0361 'borgese' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0362 'braxton' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0363 'bvirlet' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0364 'cartman' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0365 'cconnell' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0366 'charles' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0367 'cies' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0368 'cniehaus' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0369 'coolo' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0370 'cschlaeg' => ['gplv23', 'lgplv23' ], 0371 'dimsuz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0372 'djurban' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0373 'dmacvicar' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0374 'dymo' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0375 'edghill' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0376 'emmott' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0377 'espen' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0378 'fela' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0379 'fredrik' => ['gplv23', 'lgplv23' ], 0380 'gladhorn' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0381 'gogolok' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0382 'goossens' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0383 'gyurco' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0384 'harald' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0385 'hedlund' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0386 'helio' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0387 'howells' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0388 'hschaefer' => ['gplv23' ], 0389 'ingwa' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0390 'isaac' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0391 'jens' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0392 'jlayt' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0393 'johach' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0394 'krake' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0395 'laidig' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0396 'lunakl' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0397 'lure' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0398 'marchand' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0399 'mattr' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0400 'mcamen' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0401 'menard' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0402 'mfranz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0403 'mhunter' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0404 'micron' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0405 'mkretz' => ['gplv23', 'lgplv23' ], 0406 'mlarouche' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0407 'mm' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0408 'mrudolf' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0409 'msoeken' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0410 'mstocker' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0411 'mutz' => [ 'gplv2+', 'lgplv2+' ], 0412 'mvaldenegro' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0413 'mwoehlke' => ['gplv23', 'lgplv23' ], 0414 'nielsslot' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0415 'okellogg' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0416 'onurf' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0417 'orzel' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0418 'ossi' => [ 'gplv2+', 'lgplv2+' ], 0419 'osterfeld' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0420 'pfeiffer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0421 'piacentini' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0422 'pitagora' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0423 'ppenz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0424 'pstirnweiss' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0425 'putzer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0426 'pvicente' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0427 'quique' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0428 'raggi' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0429 'rempt' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0430 'rjarosz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0431 'rodda' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0432 'roffet' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0433 'rohanpm' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0434 'sebsauer' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0435 'shaforo' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0436 'shipley' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0437 'silberstorff' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0438 'thorbenk' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0439 'tilladam' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0440 'tokoe' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0441 'toma' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0442 'troeder' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0443 'trueg' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], # NOTE: except k3b 0444 'wgreven' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0445 'winterz' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0446 'zachmann' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ], 0447 'zander' => ['gplv23', 'lgplv23', 'gplv2+', 'lgplv2+' ] 0448 # Do not add anything here. Use license_table instead. 0449 ); 0450 0451 my %secondary_mail_addresses = ( 0452 '13thguards@gmail.com' => 'isemenov', 0453 'ABBAPOH@me.com' => 'ikomissarov', 0454 'aetf@unlimitedcodeworks.xyz' => 'peifengyu', 0455 'aleixpol@kde.org' => 'apol', 0456 'alex.merry@kde.org' => 'alexmerry', 0457 'arichardson.kde@googlemail.com' => 'arichardson', 0458 'asmond@gmx.com' => 'asensi', 0459 'athurh@gmail.com' => 'athurhfree', 0460 'bero@arklinux.org' => 'bero', 0461 'bhush94@gmail.com' => 'bshah', 0462 'blackie@kde.org' => 'blackie', 0463 'caleb@gentoo.org' => 'ctennis', 0464 'cgiboudeaux@gmx.com' => 'cgiboudeaux', 0465 'christoph@maxiom.de' => 'cfeck', 0466 'kde@davidedmundson.co.uk' => 'davidedmundson', 0467 'devel@the-user.org' => 'schmidt-domine', 0468 'devriese@kde.org' => 'domi', 0469 'dvratil@redhat.com' => 'dvratil', 0470 'elvis.angelaccio@kdemail.net' => 'elvisangelaccio', 0471 'ervin+bluesystems@kde.org' => 'ervin', 0472 'faure+bluesystems@kde.org' => 'dfaure', 0473 'git@the-user.org' => 'schmidt-domine', 0474 'guy.maurel@kde.org' => 'guymaurel', 0475 'guy-kde@maurel.de' => 'guymaurel', 0476 'isilmendil@gmx.net' => 'johanneszarl', 0477 'isilmendil@isilme.lupus.uberspace.de' => 'johanneszarl', 0478 'jesper.pedersen@kdab.com' => 'blackie', 0479 'jesper.pedersen@kde.org' => 'blackie', 0480 'jkt@flaska.net' => 'jkt', 0481 'jkt@gentoo.org' => 'jkt', 0482 'johannes@zarl.at' => 'johanneszarl', 0483 'john@layt.net' => 'jlayt', 0484 'kevin.krammer@gmx.at' => 'krake', 0485 'kde@randomguy3.me.uk' => 'alexmerry', 0486 'kde@rusu.info' => 'valir', 0487 'keziolio123@gmail.com' => 'kezik', 0488 'knauss@kolabsys.com' => 'knauss', 0489 'kubito@gmail.com' => 'rkcosta', 0490 'lamarque@gmail.com' => 'lvsouza', 0491 'lukas@kde.org' => 'lukas', 0492 'majewsky@gmx.net' => 'majewsky', 0493 'malte@kde.org' => 'malte', 0494 'matthias.fuessel@gmx.net' => 'matthiasf', 0495 'miika.turkia@nixu.fi' => 'mturkia', 0496 'mk-lists@email.de' => 'kaning', 0497 'mklapetek@kde.org' => 'mklapetek', 0498 'neoclust.kde@free.fr' => 'nlecureuil', 0499 'nyblom@kde.org' => 'tnyblom', 0500 'olav@vitters.nl' => 'vitters', 0501 'pointedstick@zoho.com' => 'ngraham', 0502 'richard@goteborg.utfors.se' => 'larkang', 0503 'schwarzerf@gmail.com' => 'schwarzer', 0504 'iamsergio@gmail.com' => 'smartins', 0505 'sandsmark@samfundet.no' => 'sandsmark', 0506 'sune@vuorela.dk' => 'sune', 0507 'thb@net-bembel.de' => 'tbaumgart', 0508 'tobias.leupold@web.de' => 'tleupold', 0509 'trev@adblockplus.org' => 'palant', 0510 'tsdgeos@terra.es' => 'aacid', 0511 'nicolas.fella@kdab.com' => 'nicolasfella', 0512 'xiangzhai83@gmail.com' => 'lesliezhai', 0513 ); 0514 0515 my %ruletable; 0516 my %blacklist; 0517 my %whitelist; 0518 my %unknown_authors; 0519 my @blacklist_revs; 0520 0521 foreach my $who (keys %old_license_table) { 0522 die "$who in both tables" if defined $license_table{$who}; 0523 $license_table{$who} = $old_license_table{$who}; 0524 } 0525 0526 foreach my $who (keys %old_license_table_2) { 0527 die "$who in both tables" if defined $license_table{$who}; 0528 $license_table{$who} = $old_license_table_2{$who}; 0529 } 0530 0531 foreach my $who (keys %license_table) { 0532 foreach my $license(@{$license_table{$who}}) { 0533 $ruletable{$license}->{$who} = 1; 0534 } 0535 } 0536 0537 # Read kde-common/accounts for email->name mapping. 0538 0539 my $configfile = $ENV{HOME}. "/.config/KDE/relicensecheck.conf"; 0540 0541 open(CONFIG, $configfile) or die "Please write the path to kde-common/accounts in $configfile"; 0542 my $accountfile; 0543 while (<CONFIG>) { 0544 if (not /^#/) { 0545 chomp; 0546 $accountfile = $_; 0547 } 0548 } 0549 close CONFIG; 0550 defined $accountfile or die "Please write the path to kde-common/accounts in $configfile"; 0551 0552 my %authors = (); 0553 my %authornames = (); 0554 sub parseAccountsFile($) 0555 { 0556 my ($accountfile) = @_; 0557 open(ACCOUNTS, $accountfile) || die "Account file not found: $accountfile"; 0558 while (<ACCOUNTS>) { 0559 # The format is nick name email. 0560 if (/([^\s]*)\s+([^\s].*[^\s])\s+([^\s]+)/) { 0561 $authors{$3} = "$1"; 0562 $authornames{$1} = "$2"; 0563 } 0564 #elsif (/([^\s]*)\s+([^\s]*)/) { 0565 # $authors{$1} = $2; 0566 #} 0567 else { 0568 die "$accountfile: couldn't parse $_"; 0569 } 0570 } 0571 close ACCOUNTS; 0572 } 0573 0574 if ($accountfile) { 0575 parseAccountsFile($accountfile); 0576 0577 # Also read the "disabled accounts" file 0578 my $disabledaccountsfile = $accountfile; 0579 $disabledaccountsfile =~ s/accounts$/disabled-accounts/; 0580 die "I expected this to end with 'accounts': $accountfile" if ($accountfile eq $disabledaccountsfile); 0581 parseAccountsFile($disabledaccountsfile); 0582 } 0583 0584 sub resolveEmail($) { 0585 my ($email) = @_; 0586 0587 my $resolved = $authors{$email}; 0588 if (not defined $resolved) { 0589 $resolved = $secondary_mail_addresses{$email}; 0590 } 0591 if (not defined $resolved) { 0592 $unknown_authors{$email} = 1; 0593 return $email; 0594 } 0595 return $resolved; 0596 } 0597 0598 sub skipCommitByAuthor($) { 0599 my ($author) = @_; 0600 return ($author eq "scripty" or 0601 $author eq "(no" or 0602 $author eq "nobody\@localhost" or 0603 $author eq "not.committed.yet" or 0604 $author eq "null\@kde.org"); 0605 } 0606 0607 sub usage() 0608 { 0609 print << "EOM"; 0610 Usage: 0611 relicensecheck.pl file 0612 0613 Output information on relicensing possibilities for <file> 0614 0615 relicensecheck.pl -g 0616 relicensecheck.pl --generate-wiki 0617 0618 Generate the table for the wiki page 0619 EOM 0620 } 0621 0622 my $generate_wiki = 0; 0623 my @arguments; 0624 sub parse_arguments(@) 0625 { 0626 while (scalar @_) { 0627 my $arg = shift @_; 0628 0629 if ($arg eq "-g" || $arg eq "--generate-wiki") { 0630 $generate_wiki = 1; 0631 } elsif ($arg eq "-?" || $arg eq "--?" || $arg eq "-h" || $arg eq "--help") { 0632 usage(); 0633 exit 0; 0634 } elsif ($arg eq "--") { 0635 push @arguments, @_; 0636 return; 0637 } else { 0638 push @arguments, $arg; 0639 } 0640 } 0641 } 0642 0643 parse_arguments(@ARGV); 0644 0645 if ($generate_wiki) { 0646 0647 print "{| border=\"1\"\n"; 0648 print "! Name !! GPLv2->GPLv2+ !! LGPLv2 -> LGPLv2+ !! GPLv2 -> GPLv2+v3 !! LGPLv2 -> LGPLv2+LGPLv3 !! KDE e.V. decides !! FDL -> CC-BY-SA 4.0 \n"; 0649 print "|-\n"; 0650 my @lines = (); 0651 foreach my $who (keys %license_table) { 0652 if (!defined $authornames{$who}) { 0653 die "ERROR: unknown author $who\n"; 0654 } 0655 # Example: print "|Adam, Till || YES || YES || YES || YES || NO\n"; 0656 my @licenses = @{$license_table{$who}}; 0657 my %licensesHash = map { $_ => 1 } @licenses; 0658 my $gplv23 = exists($licensesHash{'gplv23'}) ? "YES" : "NO"; 0659 my $lgplv23 = exists($licensesHash{'lgplv23'}) ? "YES" : "NO"; 0660 my $gplv2plus = exists($licensesHash{'gplv2+'}) ? "YES" : "NO"; 0661 my $lgplv2plus = exists($licensesHash{'lgplv2+'}) ? "YES" : "NO"; 0662 my $eV = exists($licensesHash{'+eV'}) ? "YES" : "NO"; 0663 $eV = "" if (exists $old_license_table{$who}); 0664 my $ccbysa4 = exists($licensesHash{'CCBYSA4'}) ? "YES" : "NO"; 0665 $ccbysa4 = "" if (exists $old_license_table_2{$who} || exists $old_license_table{$who}); 0666 push @lines, "|$authornames{$who} || $gplv2plus || $lgplv2plus || $gplv23 || $lgplv23 || $eV || $ccbysa4\n"; 0667 } 0668 use locale; 0669 foreach my $line (sort @lines) { 0670 print $line; 0671 print "|-\n"; 0672 } 0673 print "|}\n"; 0674 0675 exit 0; 0676 } 0677 my $file = $arguments[0] || ""; 0678 0679 die "need existing file: $file" if (! -r $file); 0680 0681 my $svn = (-d ".svn"); 0682 0683 if ($svn) { 0684 open(IN, "-|") || exec 'svn', 'log', '-q', $file; 0685 } else { 0686 # Format the git output to match the format of svn log. 0687 open(IN, "-|") || exec 'git', 'log', '--follow', '--abbrev-commit', '--pretty=format:r%h | %ae ', $file; 0688 } 0689 while(<IN>) { 0690 0691 if (/^r(\S+) \| (\S+) /) { 0692 my ($rev, $author) = ($1, $2); 0693 #print STDERR "rev=$rev author=$author\n"; 0694 0695 next if skipCommitByAuthor($author); 0696 0697 if (not $svn) { 0698 # Resolve email to account name 0699 $author = resolveEmail($author); 0700 } 0701 0702 foreach my $license(keys %ruletable) { 0703 if (!defined($ruletable{$license}->{$author})) { 0704 push(@{$blacklist{$license}->{$author}}, $rev); 0705 } 0706 else { 0707 push(@{$whitelist{$license}->{$author}}, $rev); 0708 } 0709 0710 } 0711 } 0712 } 0713 close(IN); 0714 0715 my %loc_author = (); 0716 0717 if (-f $file) { 0718 if ($svn) { 0719 open(IN, "-|") || exec 'svn', 'ann', '-x', '-w', $file; 0720 while(<IN>) { 0721 my ($author) = (split)[1]; 0722 $loc_author{$author}++; 0723 } 0724 close(IN); 0725 } else { 0726 open(IN, "-|") || exec 'git', 'blame', '-f', '-w', '-e', $file; 0727 while(<IN>) { 0728 # The format is: 0729 # b061712b kdecore/klockfile.cpp (<faure@kde.org> [...] 0730 if (m/^(\S+) (\S+) +\(<([^>]+)>/) { 0731 my ($author) = $3; 0732 next if skipCommitByAuthor($author); 0733 $author = resolveEmail($author); 0734 $loc_author{$author}++; 0735 } else { 0736 print STDERR "Parse error on git blame output: $_"; 0737 } 0738 } 0739 close(IN); 0740 } 0741 } 0742 0743 if (%unknown_authors) { 0744 print "The following emails do not appear in the accounts file:\n\n"; 0745 foreach my $who(keys %unknown_authors) { 0746 print "$who\n"; 0747 } 0748 print "\n"; 0749 } 0750 0751 if (defined (keys %blacklist)) { 0752 print "Need permission for licensing:\n\n"; 0753 0754 my %stat; 0755 0756 foreach my $license(keys %blacklist) { 0757 print "- $license: ". join(' ', (keys %{$blacklist{$license}})) . "\n"; 0758 foreach my $who(keys %{$blacklist{$license}}) { 0759 next if not defined $loc_author{$who}; 0760 $stat{$license} += scalar(@{$blacklist{$license}->{$who}}); 0761 printf "%9s (%4d LOC): %s \n", $who, $loc_author{$who} || 0, join(",", @{$blacklist{$license}->{$who}}); 0762 } 0763 print "\n"; 0764 } 0765 0766 print "\n"; 0767 print "Summary:\n"; 0768 0769 foreach my $license(sort { $stat{$a} <=> $stat{$b} } keys %stat) { 0770 printf "%5d commits preventing relicensing to %s\n", $stat{$license}, $license 0771 } 0772 } 0773 0774 my @allowed_list = (); 0775 0776 if (defined (keys %whitelist)) { 0777 foreach my $license(keys %whitelist) { 0778 next if defined($blacklist{$license}); 0779 push(@allowed_list, $license); 0780 } 0781 } 0782 0783 if ($#allowed_list >= 0) { 0784 print "\nRelicensing allowed: ". join(' ', @allowed_list) . "\n"; 0785 } 0786 0787 print "\nDo not forget to check copyright headers and for patches committed in the name of others!\n";