Welcome to mirror list, hosted at ThFree Co, Russian Federation.

nsis-configurator.py « NSIS « packaging - github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c8986fb1184ae26fd404acb965021488b7dcf9ba (plain)
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
import shutil
import sys
from datetime import datetime

from pathlib import Path

from jinja2 import Template

if __name__ == "__main__":
    """
    - dist_loc: Location of distribution folder, as output by pyinstaller
    - nsi_jinja_loc: Jinja2 template to use
    - app_name: Should be "Ultimaker Cura".
    - main_app: Name of executable, e.g. Ultimaker-Cura.exe?
    - version_major: Major version number of Semver (e.g. 5).
    - version_minor: Minor version number of Semver (e.g. 0).
    - version_patch: Patch version number of Semver (e.g. 0).
    - version_build: A version number that gets manually incremented at each build.
    - company: Publisher of the application. Should be "Ultimaker B.V."
    - web_site: Website to find more information. Should be "https://ultimaker.com".
    - cura_license_file: Path to a license file in Cura. Should point to packaging/cura_license.txt in this repository.
    - compression_method: Compression algorithm to use to compress the data inside the executable. Should be ZLIB, ZBIP2 or LZMA.
    - cura_banner_img: Path to an image shown on the left in the installer. Should point to packaging/cura_banner_nsis.bmp in this repository.
    - icon_path: Path to the icon to use on the installer
    - destination: Where to put the installer after it's generated.
`    """
    for i, v in enumerate(sys.argv):
        print(f"{i} = {v}")
    dist_loc = Path(sys.argv[1])
    instdir = Path("$INSTDIR")
    dist_paths = [p.relative_to(dist_loc) for p in sorted(dist_loc.rglob("*")) if p.is_file()]
    mapped_out_paths = {}
    for dist_path in dist_paths:
        if "__pycache__" not in dist_path.parts:
            out_path = instdir.joinpath(dist_path).parent
            if out_path not in mapped_out_paths:
                mapped_out_paths[out_path] = [(dist_loc.joinpath(dist_path), instdir.joinpath(dist_path))]
            else:
                mapped_out_paths[out_path].append((dist_loc.joinpath(dist_path), instdir.joinpath(dist_path)))

    rmdir_paths = set()
    for rmdir_f in mapped_out_paths.values():
        for _, rmdir_p in rmdir_f:
            for rmdir in rmdir_p.parents:
                rmdir_paths.add(rmdir)

    rmdir_paths = sorted(list(rmdir_paths), reverse = True)[:-2]

    jinja_template_path = Path(sys.argv[2])
    with open(jinja_template_path, "r") as f:
        template = Template(f.read())

    nsis_content = template.render(
        app_name = sys.argv[3],
        main_app = sys.argv[4],
        version_major = sys.argv[5],
        version_minor = sys.argv[6],
        version_patch = sys.argv[7],
        version_build = sys.argv[8],
        company = sys.argv[9],
        web_site = sys.argv[10],
        year = datetime.now().year,
        cura_license_file = Path(sys.argv[11]),
        compression_method = sys.argv[12],  # ZLIB, BZIP2 or LZMA
        cura_banner_img = Path(sys.argv[13]),
        cura_icon = Path(sys.argv[14]),
        mapped_out_paths = mapped_out_paths,
        rmdir_paths = rmdir_paths,
        destination = Path(sys.argv[15])
    )

    with open(dist_loc.parent.joinpath(jinja_template_path.stem), "w") as f:
        f.write(nsis_content)

    shutil.copy(Path(__file__).absolute().parent.joinpath("fileassoc.nsh"), dist_loc.parent.joinpath("fileassoc.nsh"))
    icon_path = Path(sys.argv[14])
    shutil.copy(icon_path, dist_loc.joinpath(icon_path.name))