diff --git a/Manager/Manager.pro b/Manager/Manager.pro index 0aa0085..12f7959 100644 --- a/Manager/Manager.pro +++ b/Manager/Manager.pro @@ -35,7 +35,7 @@ CONFIG += console link_prl CONFIG -= app_bundle CONFIG -= qt -TARGET = manager +TARGET = AkVCamManager SOURCES = \ src/main.cpp diff --git a/commons.pri b/commons.pri index 4a4bb03..af77e8b 100644 --- a/commons.pri +++ b/commons.pri @@ -33,7 +33,7 @@ win32 { } else: !isEmpty(ProgramFiles) { DEFAULT_PREFIX = $(ProgramFiles) } else: contains(host_name, linux) { - DEFAULT_PREFIX = /opt + DEFAULT_PREFIX = / } else { DEFAULT_PREFIX = C:/ } diff --git a/dshow/VirtualCamera/VirtualCamera.pro b/dshow/VirtualCamera/VirtualCamera.pro index b1519e8..fcfbefd 100644 --- a/dshow/VirtualCamera/VirtualCamera.pro +++ b/dshow/VirtualCamera/VirtualCamera.pro @@ -132,5 +132,8 @@ resources.files = $$shell_path($${PWD}/../../share/TestFrame/TestFrame.bmp) resources.path = $${PREFIX}/$${RESOURCESPATH} QMAKE_POST_LINK = \ - $$sprintf($$QMAKE_MKDIR_CMD, $$shell_path($${OUT_PWD}/../../$${RESOURCESPATH})) $${CMD_SEP} \ - $(COPY) $$shell_path($${PWD}/../../share/TestFrame/TestFrame.bmp) $$shell_path($${OUT_PWD}/../../$${RESOURCESPATH}/TestFrame.bmp) + $$sprintf($$QMAKE_MKDIR_CMD, \ + $$shell_quote($$shell_path($${OUT_PWD}/../../$${RESOURCESPATH}))) \ + $${CMD_SEP} \ + $(COPY) $$shell_quote($$shell_path($${PWD}/../../share/TestFrame/TestFrame.bmp)) \ + $$shell_quote($$shell_path($${OUT_PWD}/../../$${RESOURCESPATH}/TestFrame.bmp)) diff --git a/ports/deploy/deploy_mac.py b/ports/deploy/deploy_mac.py index 5040077..0f18819 100644 --- a/ports/deploy/deploy_mac.py +++ b/ports/deploy/deploy_mac.py @@ -39,8 +39,8 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): self.installDir = os.path.join(self.buildDir, 'ports/deploy/temp_priv') self.pkgsDir = os.path.join(self.buildDir, 'ports/deploy/packages_auto', self.targetSystem) self.detectQt(os.path.join(self.buildDir, 'Manager')) - self.rootInstallDir = os.path.join(self.installDir, 'Applications') self.programName = 'AkVirtualCamera' + self.rootInstallDir = os.path.join(self.installDir, 'Applications') self.appBundleDir = os.path.join(self.rootInstallDir, self.programName + '.plugin') self.execPrefixDir = os.path.join(self.appBundleDir, 'Contents') self.binaryInstallDir = os.path.join(self.execPrefixDir, 'MacOS') diff --git a/ports/deploy/deploy_posix.py b/ports/deploy/deploy_posix.py index 6ee44b7..15e9b8e 100644 --- a/ports/deploy/deploy_posix.py +++ b/ports/deploy/deploy_posix.py @@ -38,23 +38,9 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): super().__init__() self.installDir = os.path.join(self.buildDir, 'ports/deploy/temp_priv') self.pkgsDir = os.path.join(self.buildDir, 'ports/deploy/packages_auto', sys.platform) - self.detectQt(os.path.join(self.buildDir, 'StandAlone')) + self.detectQt(os.path.join(self.buildDir, 'Manager')) self.rootInstallDir = os.path.join(self.installDir, self.qmakeQuery(var='QT_INSTALL_PREFIX')[1:]) self.binaryInstallDir = os.path.join(self.rootInstallDir, 'bin') - self.libInstallDir = self.qmakeQuery(var='QT_INSTALL_LIBS') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.libQtInstallDir = self.qmakeQuery(var='QT_INSTALL_ARCHDATA') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.qmlInstallDir = self.qmakeQuery(var='QT_INSTALL_QML') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.pluginsInstallDir = self.qmakeQuery(var='QT_INSTALL_PLUGINS') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.qtConf = os.path.join(self.binaryInstallDir, 'qt.conf') - self.qmlRootDirs = ['StandAlone/share/qml', 'libAvKys/Plugins'] self.mainBinary = os.path.join(self.binaryInstallDir, 'webcamoid') self.programName = os.path.basename(self.mainBinary) self.programVersion = self.detectVersion(os.path.join(self.rootDir, 'commons.pri')) diff --git a/ports/deploy/deploy_posix_windows.py b/ports/deploy/deploy_posix_windows.py index 8ef462e..5106e89 100644 --- a/ports/deploy/deploy_posix_windows.py +++ b/ports/deploy/deploy_posix_windows.py @@ -37,24 +37,10 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): self.targetSystem = 'posix_windows' self.installDir = os.path.join(self.buildDir, 'ports/deploy/temp_priv') self.pkgsDir = os.path.join(self.buildDir, 'ports/deploy/packages_auto/windows') - self.detectQt(os.path.join(self.buildDir, 'StandAlone')) - self.programName = 'webcamoid' - self.rootInstallDir = os.path.join(self.installDir, self.programName) + self.detectQt(os.path.join(self.buildDir, 'Manager')) + self.programName = 'AkVirtualCamera' + self.rootInstallDir = os.path.join(self.installDir, self.programName + '.plugin') self.binaryInstallDir = os.path.join(self.rootInstallDir, 'bin') - self.libInstallDir = self.qmakeQuery(var='QT_INSTALL_LIBS') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.libQtInstallDir = self.qmakeQuery(var='QT_INSTALL_ARCHDATA') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.qmlInstallDir = self.qmakeQuery(var='QT_INSTALL_QML') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.pluginsInstallDir = self.qmakeQuery(var='QT_INSTALL_PLUGINS') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.qtConf = os.path.join(self.binaryInstallDir, 'qt.conf') - self.qmlRootDirs = ['StandAlone/share/qml', 'libAvKys/Plugins'] self.mainBinary = os.path.join(self.binaryInstallDir, self.programName + '.exe') self.programName = os.path.splitext(os.path.basename(self.mainBinary))[0] self.programVersion = self.detectVersion(os.path.join(self.rootDir, 'commons.pri')) @@ -65,12 +51,8 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): self.dependencies = [] self.installerConfig = os.path.join(self.installDir, 'installer/config') self.installerPackages = os.path.join(self.installDir, 'installer/packages') - self.installerIconSize = 256 - self.appIcon = os.path.join(self.rootDir, - 'StandAlone/share/themes/WebcamoidTheme/icons/hicolor/{1}x{1}/{0}.ico'.format(self.programName, - self.installerIconSize)) + self.appIcon = os.path.join(self.rootDir, 'share/TestFrame/webcamoid.png') self.licenseFile = os.path.join(self.rootDir, 'COPYING') - self.installerRunProgram = '@TargetDir@/bin/' + self.programName + '.exe' self.installerScript = os.path.join(self.rootDir, 'ports/deploy/installscript.windows.qs') self.changeLog = os.path.join(self.rootDir, 'ChangeLog') self.targetArch = '64bit' if 'x86_64' in self.qtInstallBins else '32bit' @@ -109,142 +91,20 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): else: appsDir = '@ApplicationsDirX64@' - self.installerTargetDir = appsDir + '/' + self.programName + self.installerTargetDir = appsDir + '/' + self.programName + '.plugin' arch = 'win32' if self.targetArch == '32bit' else 'win64' self.outPackage = os.path.join(self.pkgsDir, '{}-{}-{}.exe'.format(self.programName, self.programVersion, arch)) - print('Copying Qml modules\n') - self.solvedepsQml() - print('\nCopying required plugins\n') - self.solvedepsPlugins() - print('\nRemoving Qt debug libraries') - self.removeDebugs() - print('Copying required libs\n') - self.solvedepsLibs() - print('\nWritting qt.conf file') - self.writeQtConf() print('Stripping symbols') self.binarySolver.stripSymbols(self.installDir) - print('Writting launcher file') - self.createLauncher() print('Removing unnecessary files') self.removeUnneededFiles(self.installDir) print('\nWritting build system information\n') self.writeBuildInfo() - def solvedepsLibs(self): - deps = set(self.binarySolver.scanDependencies(self.installDir)) - extraDeps = ['libeay32.dll', - 'ssleay32.dll', - 'libEGL.dll', - 'libGLESv2.dll', - 'D3DCompiler_43.dll', - 'D3DCompiler_46.dll', - 'D3DCompiler_47.dll'] - - for dep in extraDeps: - path = self.whereBin(dep) - - if path != '': - deps.add(path) - - for depPath in self.binarySolver.allDependencies(path): - deps.add(depPath) - - deps = sorted(deps) - - for dep in deps: - depPath = os.path.join(self.binaryInstallDir, os.path.basename(dep)) - - if dep != depPath: - print(' {} -> {}'.format(dep, depPath)) - self.copy(dep, depPath) - self.dependencies.append(dep) - - def removeDebugs(self): - dbgFiles = set() - - for root, _, files in os.walk(self.libQtInstallDir): - for f in files: - if f.endswith('.dll'): - fname, ext = os.path.splitext(f) - dbgFile = os.path.join(root, '{}d{}'.format(fname, ext)) - - if os.path.exists(dbgFile): - dbgFiles.add(dbgFile) - - for f in dbgFiles: - os.remove(f) - - def searchPackageFor(self, path): - os.environ['LC_ALL'] = 'C' - pacman = self.whereBin('pacman') - - if len(pacman) > 0: - process = subprocess.Popen([pacman, '-Qo', path], # nosec - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, _ = process.communicate() - - if process.returncode != 0: - return '' - - info = stdout.decode(sys.getdefaultencoding()).split(' ') - - if len(info) < 2: - return '' - - package, version = info[-2:] - - return ' '.join([package.strip(), version.strip()]) - - dpkg = self.whereBin('dpkg') - - if len(dpkg) > 0: - process = subprocess.Popen([dpkg, '-S', path], # nosec - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, _ = process.communicate() - - if process.returncode != 0: - return '' - - package = stdout.split(b':')[0].decode(sys.getdefaultencoding()).strip() - - process = subprocess.Popen([dpkg, '-s', package], # nosec - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, _ = process.communicate() - - if process.returncode != 0: - return '' - - for line in stdout.decode(sys.getdefaultencoding()).split('\n'): - line = line.strip() - - if line.startswith('Version:'): - return ' '.join([package, line.split()[1].strip()]) - - return '' - - rpm = self.whereBin('rpm') - - if len(rpm) > 0: - process = subprocess.Popen([rpm, '-qf', path], # nosec - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, _ = process.communicate() - - if process.returncode != 0: - return '' - - return stdout.decode(sys.getdefaultencoding()).strip() - - return '' - def commitHash(self): try: process = subprocess.Popen(['git', 'rev-parse', 'HEAD'], # nosec @@ -272,10 +132,15 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): return info def writeBuildInfo(self): + try: + os.makedirs(self.pkgsDir) + except: + pass + shareDir = os.path.join(self.rootInstallDir, 'share') try: - os.makedirs(self.pkgsDir) + os.makedirs(shareDir) except: pass @@ -348,44 +213,6 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): print() f.write('\n') - # Write binary dependencies info. - - packages = set() - - for dep in self.dependencies: - packageInfo = self.searchPackageFor(dep) - - if len(packageInfo) > 0: - packages.add(packageInfo) - - packages = sorted(packages) - - with open(depsInfoFile, 'a') as f: - for packge in packages: - print(' ' + packge) - f.write(packge + '\n') - - def createLauncher(self): - path = os.path.join(self.rootInstallDir, self.programName) + '.bat' - libDir = os.path.relpath(self.libInstallDir, self.rootInstallDir) - - with open(path, 'w') as launcher: - launcher.write('@echo off\n') - launcher.write('\n') - launcher.write('rem Default values: desktop | angle | software\n') - launcher.write('rem set QT_OPENGL=angle\n') - launcher.write('\n') - launcher.write('rem Default values: d3d11 | d3d9 | warp\n') - launcher.write('rem set QT_ANGLE_PLATFORM=d3d11\n') - launcher.write('\n') - launcher.write('rem Default values: software | d3d12 | openvg\n') - launcher.write('rem set QT_QUICK_BACKEND=""\n') - launcher.write('\n') - launcher.write('start /b "" ' - + '"%~dp0bin\\{}" '.format(self.programName) - + '-p "%~dp0{}\\avkys" '.format(libDir) - + '-c "%~dp0share\\config"\n') - @staticmethod def hrSize(size): i = int(math.log(size) // math.log(1024)) @@ -409,30 +236,6 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): os.path.basename(path), 'FAILED') - def createPortable(self, mutex): - arch = 'win32' if self.targetArch == '32bit' else 'win64' - packagePath = \ - os.path.join(self.pkgsDir, - '{}-portable-{}-{}.zip'.format(self.programName, - self.programVersion, - arch)) - - if not os.path.exists(self.pkgsDir): - os.makedirs(self.pkgsDir) - - with zipfile.ZipFile(packagePath, 'w', zipfile.ZIP_DEFLATED, False) as zipFile: - for root, dirs, files in os.walk(self.rootInstallDir): - for f in dirs + files: - filePath = os.path.join(root, f) - dstPath = os.path.join(self.programName, - filePath.replace(self.rootInstallDir + os.sep, '')) - zipFile.write(filePath, dstPath) - - mutex.acquire() - print('Created portable package:') - self.printPackageInfo(packagePath) - mutex.release() - def createAppInstaller(self, mutex): packagePath = self.createInstaller() @@ -446,9 +249,8 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): def package(self): mutex = threading.Lock() - - threads = [threading.Thread(target=self.createPortable, args=(mutex,))] - packagingTools = ['zip'] + threads = [] + packagingTools = [] if self.qtIFW != '': threads.append(threading.Thread(target=self.createAppInstaller, args=(mutex,))) diff --git a/ports/deploy/deploy_windows.py b/ports/deploy/deploy_windows.py index 0ec4842..1daa041 100644 --- a/ports/deploy/deploy_windows.py +++ b/ports/deploy/deploy_windows.py @@ -37,44 +37,22 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): super().__init__() self.installDir = os.path.join(self.buildDir, 'ports/deploy/temp_priv') self.pkgsDir = os.path.join(self.buildDir, 'ports/deploy/packages_auto/windows') - self.detectQt(os.path.join(self.buildDir, 'StandAlone')) - self.rootInstallDir = os.path.join(self.installDir, 'usr') + self.detectQt(os.path.join(self.buildDir, 'Manager')) + self.programName = 'AkVirtualCamera' + self.rootInstallDir = os.path.join(self.installDir, self.programName + '.plugin') self.binaryInstallDir = os.path.join(self.rootInstallDir, 'bin') - self.libInstallDir = self.qmakeQuery(var='QT_INSTALL_LIBS') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.libQtInstallDir = self.qmakeQuery(var='QT_INSTALL_ARCHDATA') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.qmlInstallDir = self.qmakeQuery(var='QT_INSTALL_QML') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.pluginsInstallDir = self.qmakeQuery(var='QT_INSTALL_PLUGINS') \ - .replace(self.qmakeQuery(var='QT_INSTALL_PREFIX'), - self.rootInstallDir) - self.qtConf = os.path.join(self.binaryInstallDir, 'qt.conf') - self.qmlRootDirs = ['StandAlone/share/qml', 'libAvKys/Plugins'] - self.mainBinary = os.path.join(self.binaryInstallDir, 'webcamoid.exe') + self.mainBinary = os.path.join(self.binaryInstallDir, self.programName + '.exe') self.programName = os.path.splitext(os.path.basename(self.mainBinary))[0] self.programVersion = self.detectVersion(os.path.join(self.rootDir, 'commons.pri')) self.detectMake() - xspec = self.qmakeQuery(var='QMAKE_XSPEC') - - if 'android' in xspec: - self.targetSystem = 'android' - self.binarySolver = tools.binary_pecoff.DeployToolsBinary() self.binarySolver.readExcludeList(os.path.join(self.rootDir, 'ports/deploy/exclude.{}.{}.txt'.format(os.name, sys.platform))) self.packageConfig = os.path.join(self.rootDir, 'ports/deploy/package_info.conf') self.dependencies = [] self.installerConfig = os.path.join(self.installDir, 'installer/config') self.installerPackages = os.path.join(self.installDir, 'installer/packages') - self.installerIconSize = 256 - self.appIcon = os.path.join(self.rootDir, - 'StandAlone/share/themes/WebcamoidTheme/icons/hicolor/{1}x{1}/{0}.ico'.format(self.programName, - self.installerIconSize)) + self.appIcon = os.path.join(self.rootDir, 'share/TestFrame/webcamoid.png') self.licenseFile = os.path.join(self.rootDir, 'COPYING') - self.installerRunProgram = '@TargetDir@/bin/' + self.programName + '.exe' self.installerScript = os.path.join(self.rootDir, 'ports/deploy/installscript.windows.qs') self.changeLog = os.path.join(self.rootDir, 'ChangeLog') @@ -91,62 +69,19 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): else: appsDir = '@ApplicationsDirX64@' - self.installerTargetDir = appsDir + '/' + self.programName + self.installerTargetDir = appsDir + '/' + self.programName + '.plugin' arch = 'win32' if self.targetArch == '32bit' else 'win64' self.outPackage = os.path.join(self.pkgsDir, 'webcamoid-{}-{}.exe'.format(self.programVersion, arch)) - print('Copying Qml modules\n') - self.solvedepsQml() - print('\nCopying required plugins\n') - self.solvedepsPlugins() - print('\nRemoving Qt debug libraries') - self.removeDebugs() - print('Copying required libs\n') - self.solvedepsLibs() - print('\nWritting qt.conf file') - self.writeQtConf() print('Stripping symbols') self.binarySolver.stripSymbols(self.installDir) - print('Writting launcher file') - self.createLauncher() print('Removing unnecessary files') self.removeUnneededFiles(self.installDir) print('\nWritting build system information\n') self.writeBuildInfo() - def solvedepsLibs(self): - deps = set(self.binarySolver.scanDependencies(self.installDir)) - extraDeps = ['libeay32.dll', - 'ssleay32.dll', - 'libEGL.dll', - 'libGLESv2.dll', - 'D3DCompiler_43.dll', - 'D3DCompiler_46.dll', - 'D3DCompiler_47.dll'] - - for dep in extraDeps: - path = self.whereBin(dep) - - if path != '': - deps.add(path) - - for depPath in self.binarySolver.allDependencies(path): - deps.add(depPath) - - deps = sorted(deps) - - for dep in deps: - dep = dep.replace('\\', '/') - depPath = os.path.join(self.binaryInstallDir, os.path.basename(dep)) - depPath = depPath.replace('\\', '/') - - if dep != depPath: - print(' {} -> {}'.format(dep, depPath)) - self.copy(dep, depPath) - self.dependencies.append(dep) - def removeDebugs(self): dbgFiles = set() @@ -162,27 +97,6 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): for f in dbgFiles: os.remove(f) - def createLauncher(self): - path = os.path.join(self.rootInstallDir, self.programName) + '.bat' - libDir = os.path.relpath(self.libInstallDir, self.rootInstallDir) - - with open(path, 'w') as launcher: - launcher.write('@echo off\n') - launcher.write('\n') - launcher.write('rem Default values: desktop | angle | software\n') - launcher.write('rem set QT_OPENGL=angle\n') - launcher.write('\n') - launcher.write('rem Default values: d3d11 | d3d9 | warp\n') - launcher.write('rem set QT_ANGLE_PLATFORM=d3d11\n') - launcher.write('\n') - launcher.write('rem Default values: software | d3d12 | openvg\n') - launcher.write('rem set QT_QUICK_BACKEND=""\n') - launcher.write('\n') - launcher.write('start /b "" ' - + '"%~dp0bin\\{}" '.format(self.programName) - + '-p "%~dp0{}\\avkys" '.format(libDir) - + '-c "%~dp0share\\config"\n') - @staticmethod def removeUnneededFiles(path): afiles = set() @@ -198,39 +112,6 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): for afile in afiles: os.remove(afile) - def searchPackageFor(self, path): - path = path.replace('C:/', '/c/') - os.environ['LC_ALL'] = 'C' - pacman = self.whereBin('pacman.exe') - - if len(pacman) > 0: - process = subprocess.Popen([pacman, '-Qo', path], # nosec - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, _ = process.communicate() - - if process.returncode != 0: - prefix = '/c/msys32' if self.targetArch == '32bit' else '/c/msys64' - path = path[len(prefix):] - process = subprocess.Popen([pacman, '-Qo', path], # nosec - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, _ = process.communicate() - - if process.returncode != 0: - return '' - - info = stdout.decode(sys.getdefaultencoding()).split(' ') - - if len(info) < 2: - return '' - - package, version = info[-2:] - - return ' '.join([package.strip(), version.strip()]) - - return '' - def commitHash(self): try: process = subprocess.Popen(['git', 'rev-parse', 'HEAD'], # nosec @@ -262,6 +143,11 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): return ' '.join(platform.uname()) def writeBuildInfo(self): + try: + os.makedirs(self.pkgsDir) + except: + pass + shareDir = os.path.join(self.rootInstallDir, 'share') try: @@ -298,23 +184,6 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): print() f.write('\n') - # Write binary dependencies info. - - packages = set() - - for dep in self.dependencies: - packageInfo = self.searchPackageFor(dep) - - if len(packageInfo) > 0: - packages.add(packageInfo) - - packages = sorted(packages) - - with open(depsInfoFile, 'a') as f: - for packge in packages: - print(' ' + packge) - f.write(packge + '\n') - @staticmethod def hrSize(size): i = int(math.log(size) // math.log(1024)) @@ -338,30 +207,6 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): os.path.basename(path), 'FAILED') - def createPortable(self, mutex): - arch = 'win32' if self.targetArch == '32bit' else 'win64' - packagePath = \ - os.path.join(self.pkgsDir, - '{}-portable-{}-{}.zip'.format(self.programName, - self.programVersion, - arch)) - - if not os.path.exists(self.pkgsDir): - os.makedirs(self.pkgsDir) - - with zipfile.ZipFile(packagePath, 'w', zipfile.ZIP_DEFLATED, False) as zipFile: - for root, dirs, files in os.walk(self.rootInstallDir): - for f in dirs + files: - filePath = os.path.join(root, f) - dstPath = os.path.join(self.programName, - filePath.replace(self.rootInstallDir + os.sep, '')) - zipFile.write(filePath, dstPath) - - mutex.acquire() - print('Created portable package:') - self.printPackageInfo(packagePath) - mutex.release() - def createAppInstaller(self, mutex): packagePath = self.createInstaller() @@ -375,9 +220,8 @@ class Deploy(deploy_base.DeployBase, tools.qt5.DeployToolsQt): def package(self): mutex = threading.Lock() - - threads = [threading.Thread(target=self.createPortable, args=(mutex,))] - packagingTools = ['zip'] + threads = [] + packagingTools = [] if self.qtIFW != '': threads.append(threading.Thread(target=self.createAppInstaller, args=(mutex,))) diff --git a/ports/deploy/installscript.windows.qs b/ports/deploy/installscript.windows.qs index 72ea769..1df54a9 100644 --- a/ports/deploy/installscript.windows.qs +++ b/ports/deploy/installscript.windows.qs @@ -10,12 +10,22 @@ Component.prototype.beginInstallation = function() Component.prototype.createOperations = function() { component.createOperations(); + let archs = ["x86", "x64"]; - // Create shortcuts. - var installDir = ["@TargetDir@", "@StartMenuDir@", "@DesktopDir@"]; + for (let i in archs) { + let assistantPath = + installer.value("TargetDir") + + "/" + + archs[i] + + "/AkVCamAssistant.exe"; - for (var dir in installDir) - component.addOperation("CreateShortcut", - "@TargetDir@/bin/webcamoid.exe", - installDir[dir] + "/webcamoid.lnk"); + if (!installer.fileExists(assistantPath)) + continue; + + // Load assistant daemon. + component.addElevatedOperation("Execute", + assistantPath, "--install", + "UNDOEXECUTE", + assistantPath, "--uninstall"); + } }