forked from dixyes/lwmbs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dump_licenses.php
executable file
·107 lines (95 loc) · 3.39 KB
/
dump_licenses.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!php
<?php
/**
* Copyright (c) 2022 Yun Dou <dixyes@gmail.com>
*
* lwmbs is licensed under Mulan PSL v2. You can use this
* software according to the terms and conditions of the
* Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
* WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*
* See the Mulan PSL v2 for more details.
*/
require __DIR__ . '/common/Log.php';
require __DIR__ . '/common/LogType.php';
require __DIR__ . '/common/CommonUtilTrait.php';
class Util
{
use CommonUtilTrait;
}
function mian($argv): int
{
Util::setErrorHandler();
$cmdArgs = Util::parseArgs(
argv: $argv,
positionalNames: [
'destDir' => ['DESTDIR', true, null, 'destination path'],
'libraries' => ['LIBRARIES', false, '', 'libraries to generate, comma separated, empty for all'],
'extensions' => ['EXTENSIONS', false, '', 'extensions to generate, comma separated, empty for all'],
],
namedKeys: [
'srcFile' => ['SRCFILE', false, __DIR__ . DIRECTORY_SEPARATOR . 'src.json', 'src.json path'],
],
);
$destDir = $cmdArgs['positional']['destDir'];
if (!is_dir($destDir)) {
mkdir($destDir);
}
$data = json_decode(file_get_contents($cmdArgs['named']['srcFile']), true);
$chosen = [
'php',
'micro',
];
$libraries = array_map('trim', array_filter(explode(',', $cmdArgs['positional']['libraries'])));
if ($libraries) {
foreach ($libraries as $lib) {
$srcName = $data['libs'][$lib]['source'];
$chosen[] = $srcName;
}
} else {
$chosen = [...$chosen, ...array_map(fn ($x) => $x['source'], array_values($data['libs']))];
}
$extensions = array_map('trim', array_filter(explode(',', $cmdArgs['positional']['extensions'])));
if ($extensions) {
foreach ($extensions as $lib) {
$srcName = $data['exts'][$lib]['source'];
$chosen[] = $srcName;
}
} else {
$chosen = [...$chosen, ...array_map(fn ($x) => $x['source'], array_values($data['exts']))];
}
$chosen = array_unique($chosen);
$filter = fn ($_, $name) => in_array($name, $chosen, true);
foreach (array_filter($data['src'], $filter, ARRAY_FILTER_USE_BOTH) as $name => $info) {
$license = $info['license'];
Log::i("dump license for $name");
switch ($license['type']) {
case 'text':
file_put_contents("{$destDir}/LICENSE.$name", $license['text']);
break;
case 'file':
$srcPath = $info['path'] ?? $name;
if (!is_file("src/{$srcPath}/{$license['path']}")) {
Log::w("license file not found: src/{$srcPath}/{$license['path']}");
continue;
}
copy("src/{$srcPath}/{$license['path']}", "{$destDir}/LICENSE.$name");
break;
default:
throw new Exception("unsupported license type {$license['type']}");
}
}
if ($filter('', 'php')) {
Log::i("dump license for php");
copy("src/php-src/LICENSE", "{$destDir}/LICENSE.php");
}
Log::i('done');
return 0;
}
exit(mian($argv));