Move compile script to bin dir and update paths

This commit is contained in:
Orsiris de Jong 2023-01-28 18:07:32 +01:00
parent 94a8ac6467
commit 10a8d9475c
2 changed files with 71 additions and 32 deletions

2
.gitignore vendored
View file

@ -153,6 +153,6 @@ cython_debug/
*/RESTIC_SOURCE_FILES/restic*
_private*
*/BUILD-PRIVATE
BUILD-PRIVATE
*.conf
COMPILE.CMD

View file

@ -7,15 +7,19 @@ __intname__ = "npbackup.compile-and-package-for-windows"
__author__ = "Orsiris de Jong"
__copyright__ = "Copyright (C) 2023 NetInvent"
__license__ = "GPL-3.0-only"
__build__ = "2023012701"
__version__ = "1.3.0"
__build__ = "2023012801"
__version__ = "1.4.0"
import sys
import os
from command_runner import command_runner
# Insert parent dir as path se we get to use npbackup as package
sys.path.insert(0, os.path.normpath(os.path.join(os.path.dirname(__file__), "..")))
from npbackup import __version__ as npbackup_version
from npbackup.NPBackupInstaller import __version__ as installer_version
from bin.NPBackupInstaller import __version__ as installer_version
from npbackup.customization import (
COMPANY_NAME,
TRADEMARKS,
@ -27,17 +31,18 @@ from npbackup.customization import (
from npbackup.core.restic_source_binary import get_restic_internal_binary
from npbackup.path_helper import BASEDIR
del sys.path[0]
def check_private_build():
private = False
try:
import _private_secret_keys
import npbackup._private_secret_keys
print("WARNING: Building with private secret key")
private = True
except ImportError:
try:
import secret_keys
import npbackup.secret_keys
print("Building with default secret key")
except ImportError:
@ -56,15 +61,37 @@ def get_private_conf_dist_file():
private_dist_conf_file = "_private_npbackup.conf.dist"
dist_conf_file = "npbackup.conf.dist"
dist_conf_file_path = os.path.join(BASEDIR, "examples", private_dist_conf_file)
if not os.path.isfile(dist_conf_file_path):
if os.path.isfile(dist_conf_file_path):
print("Building with private dist config file")
else:
print("Building with default dist config file")
dist_conf_file_path = os.path.join(BASEDIR, "examples", dist_conf_file)
return dist_conf_file_path
def have_nuitka_commercial():
try:
import nuitka.plugins.commercial
print("Running with nuitka commercial")
return True
except ImportError:
print("Running with nuitka open source")
return False
def compile(arch="64"):
if os.name == "nt":
program_executable = "npbackup.exe"
restic_executable = "restic.exe"
else:
program_executable = "npbackup"
restic_executable = "restic"
PACKAGE_DIR = 'npbackup'
is_private = check_private_build()
OUTPUT_DIR = os.path.join(BASEDIR, "BUILD" + "-PRIVATE" if is_private else "")
OUTPUT_DIR = os.path.abspath(os.path.join(BASEDIR, os.pardir, "BUILD" + "-PRIVATE" if is_private else ""))
if not os.path.isdir(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)
@ -85,28 +112,33 @@ def compile(arch="64"):
if not restic_source_file:
print("Cannot find restic source file.")
return
restic_dest_file = os.path.join(PACKAGE_DIR, restic_executable)
output_arch_dir = os.path.join(
OUTPUT_DIR,
"win-p{}{}-{}".format(sys.version_info[0], sys.version_info[1], arch),
)
if os.name == "nt":
program_executable = "npbackup.exe"
else:
program_executable = "npbackup"
program_executable_path = os.path.join(output_arch_dir, program_executable)
translations_dir = "translations"
translations_dir_path = os.path.join(BASEDIR, translations_dir)
translations_dir_source = os.path.join(BASEDIR, translations_dir)
translations_dir_dest = os.path.join(PACKAGE_DIR, translations_dir)
# Override default config file with a private version if needed
private_dist_conf_file = "_private_npbackup.conf.dist"
dist_conf_file = "npbackup.conf.dist"
dist_conf_file_path = get_private_conf_dist_file()
license_dest_file = os.path.join(PACKAGE_DIR, os.path.basename(LICENSE_FILE))
icon_file = os.path.join(PACKAGE_DIR, 'npbackup_icon.ico')
# Installer specific files, no need for a npbackup package directory here
dist_conf_file_source = get_private_conf_dist_file()
dist_conf_file_dest = os.path.basename(dist_conf_file_source)
excludes_dir = "excludes"
excludes_dir_path = os.path.join(BASEDIR, excludes_dir)
excludes_dir_source = os.path.join(BASEDIR, excludes_dir)
excludes_dir_dest = excludes_dir
r"""
C:\GIT\npbackup>C:\GIT\NPBACKUP\venv\scripts\python.exe -m nuitka --python-flag=no_docstrings --python-flag=-O --onefile --plugin-enable=tk-inter --include-data-dir="C:\GIT\npbackup\npbackup\translations"="npbackup\translations" --include-data-file="C:\GIT\npbackup\npbackup\LICENSE.md"="npbackup\LICENSE.md" --include-data-file=npbackup\RESTIC_SOURCE_FILES\restic_0.15.0_windows_amd64.exe="restic.exe" --windows-icon-from-ico=npbackup\npbackup_icon.ico --company-name="NetInvent" --product-name="NPBackup Network Backup Client" --file-version="2.1.0.0" --product-version="2.1.0.0" --copyright="NetInvent 2022-2023" --file-description="Network Backup Client P10-x64priv" --trademarks="NetInvent (C)" --output-dir="C:\GIT\npbackup\npbackup\BUILD-PRIVATE\win-p310-x64" bin\npbackup
"""
EXE_OPTIONS = '--company-name="{}" --product-name="{}" --file-version="{}" --product-version="{}" --copyright="{}" --file-description="{}" --trademarks="{}"'.format(
COMPANY_NAME,
PRODUCT_NAME,
@ -116,13 +148,19 @@ def compile(arch="64"):
file_description,
TRADEMARKS,
)
CMD = '{} -m nuitka --python-flag=no_docstrings --python-flag=-O --onefile --plugin-enable=tk-inter --include-data-dir="{}"="{}" --include-data-file="{}"=LICENSE.md --include-data-file={}=restic.exe --windows-icon-from-ico=npbackup_icon.ico {} --output-dir="{}" npbackup.py'.format(
NUITKA_OPTIONS = '--enable-plugin=data-hiding' if have_nuitka_commercial() else ''
CMD = '{} -m nuitka --python-flag=no_docstrings --python-flag=-O {} {} --onefile --plugin-enable=tk-inter --include-data-dir="{}"="{}" --include-data-file="{}"="{}" --include-data-file="{}"="{}" --windows-icon-from-ico="{}" --output-dir="{}" bin/npbackup'.format(
PYTHON_EXECUTABLE,
translations_dir_path,
translations_dir,
LICENSE_FILE,
restic_source_file,
NUITKA_OPTIONS,
EXE_OPTIONS,
translations_dir_source,
translations_dir_dest,
LICENSE_FILE,
license_dest_file,
restic_source_file,
restic_dest_file,
icon_file,
output_arch_dir,
)
@ -145,15 +183,17 @@ def compile(arch="64"):
file_description,
TRADEMARKS,
)
CMD = '{} -m nuitka --python-flag=no_docstrings --python-flag=-O --onefile --plugin-enable=tk-inter --include-data-file="{}"="{}" --include-data-file="{}"="{}" --include-data-dir="{}"="{}" --windows-icon-from-ico=npbackup_icon.ico --windows-uac-admin {} --output-dir="{}" NPBackupInstaller.py'.format(
CMD = '{} -m nuitka --python-flag=no_docstrings --python-flag=-O {} {} --onefile --plugin-enable=tk-inter --include-data-file="{}"="{}" --include-data-file="{}"="{}" --include-data-dir="{}"="{}" --windows-icon-from-ico="{}" --windows-uac-admin --output-dir="{}" bin/NPBackupInstaller.py'.format(
PYTHON_EXECUTABLE,
NUITKA_OPTIONS,
EXE_OPTIONS,
program_executable_path,
program_executable,
dist_conf_file_path,
dist_conf_file,
excludes_dir_path,
excludes_dir,
EXE_OPTIONS,
dist_conf_file_source,
dist_conf_file_dest,
excludes_dir_source,
excludes_dir_dest,
icon_file,
output_arch_dir,
)
@ -162,11 +202,10 @@ def compile(arch="64"):
if exit_code != 0:
errors = True
print("ERRORS", errors)
print("COMPILE ERRORS", errors)
if __name__ == "__main__":
# I know, I could improve UX here
compile(arch=sys.argv[1])
check_private_build()