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
|
#!/usr/bin/env python3
import os
# It is quite annoying to have to write all the dependency notices
# by hand, so this script goes through the dependency list and generates
# a file with all the licenses automatically during the build process
def read_description_file(subdirectory):
description_filename = "DESCRIPTION"
description_extensions = [ "", ".txt", ".md", ".rst" ]
for extension in description_extensions:
fill_path = os.path.join(subdirectory, description_filename + extension)
if os.path.exists(fill_path):
with open(fill_path, 'r', encoding='utf-8') as file:
return file.read().rstrip().splitlines()[0]
return None
def read_license_file(subdirectory):
license_filenames = [ "LICENSE", "COPYING", "NOTICE" ]
license_extensions = [ "", ".txt", ".md", ".rst" ]
for filename in license_filenames:
for extension in license_extensions:
fill_path = os.path.join(subdirectory, filename + extension)
if os.path.exists(fill_path):
with open(fill_path, 'r', encoding='utf-8') as file:
return file.read().rstrip()
return None
def get_dependencies(directory):
dependencies = []
for subdirectory in os.listdir(directory):
subdirectory_path = os.path.join(directory, subdirectory)
if os.path.isdir(subdirectory_path):
license = read_license_file(subdirectory_path)
description = read_description_file(subdirectory_path)
if description and len(description) > 80:
description = description[:77] + "..."
if license:
dependencies.append((subdirectory, license, description))
return dependencies
assert len(os.sys.argv) > 1, "Please provide the path to the dependencies directory."
dependencies_dir = os.sys.argv[1]
dependencies = get_dependencies(dependencies_dir)
assert len(dependencies) > 0, "No licenses found in the dependencies directory."
with open("thirdparty.txt", 'w', encoding='utf-8') as out_file:
out_file.write("QFengine uses third-party code for certain functions. All the\n")
out_file.write("license texts are included below using an automated script; this generated\n")
out_file.write("file is to be included in binary distributions of the project.\n\n")
for name, license, description in dependencies:
out_file.write(f"{'=' * 80}\n")
if description and len(description) > 0:
out_file.write(f"{name} - {description}\n")
else:
out_file.write(f"{name}\n")
out_file.write(f"{'=' * 80}\n")
out_file.write(f"{license}\n\n\n")
|