123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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))
|