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