summaryrefslogtreecommitdiff
path: root/branding/scripts/gen-qtinstaller
blob: 1f2c03d901dc86d97b12a44482aed7f9c8813350 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env python3

import configparser
import json
import os
import sys
import time

from string import Template

from provider import getDefaultProvider
from provider import getProviderData

OS_CONFIG = {
    'osx': """
    <!-- osx -->
    <TargetDir>@ApplicationsDir@/$APPNAME.app</TargetDir>
    <StartMenuDir>$APPNAME.app</StartMenuDir>
    <RunProgram>open</RunProgram>
    <RunProgramDescription>Start $APPNAME now!</RunProgramDescription>
      <RunProgramArguments>
        <Argument>@TargetDir@</Argument>
      </RunProgramArguments>
    <WizardStyle>mac</WizardStyle>
    <!-- end osx -->
""",
    'windows': """
    <TargetDir>@ApplicationsDir@/$APPNAME</TargetDir>
    <StartMenuDir>$APPNAME</StartMenuDir>

    <RunProgram>@TargetDir@/$BINNAME.exe</RunProgram>
    <RunProgramArguments>
    </RunProgramArguments>
    <!-- end windows -->
"""
}

def getData():
    config = configparser.ConfigParser()
    configPath = os.path.join(VENDOR_PATH, 'vendor.conf')
    config.read(configPath)

    provider = os.environ.get('PROVIDER')
    if not provider:
        provider = getDefaultProvider(config)
    return getProviderData(provider, config)

def generateQtInstallerBoilerplate(data, platform, outDir):
    generateConfig(data, platform, outDir)
    generatePackageMetadata(data, platform, outDir)

def generateConfig(data, platform, outDir):
    templateData = {
        'APPNAME': data['applicationName'],
        'BINNAME': data['binaryName'],
        'VERSION': getVersion(),
        'TIMESTAMP': time.strftime('%Y-%m-%d'),
    }

    platformStr = OS_CONFIG[platform]
    platBlock = Template(platformStr).substitute(**templateData)
    templateData['PLATFORM_BLOCK'] = platBlock

    renderTemplate(
         templatePath='../templates/qtinstaller/config/config.xml',
         outPath=os.path.join(outDir, 'config/config.xml'),
         data=templateData)

def generatePackageMetadata(data, platform, outDir):
    appname = 'applicationName'
    templateData = {
        'APPNAME': data[appname],
        'BINNAME': data['binaryName'],
        'VERSION': getVersion(),
        'TIMESTAMP': time.strftime('%Y-%m-%d')
    }
    if platform == "windows":
        p = data[appname] + " for Windows"
    elif platform == "osx":
        p = data[appname] + " for OSX"
    elif platform == "linux":
        p = data[appname] + " for GNU/Linux"
    else:
        p = data[appname]
    templateData['APPNAME_PLATFORM'] = p

    renderTemplate(
         templatePath='../templates/qtinstaller/packages/bitmaskvpn/meta/package.xml',
         outPath=os.path.join(outDir, 'packages/bitmaskvpn/meta/package.xml'),
         data=templateData)

    renderTemplate(
         templatePath='../templates/qtinstaller/packages/bitmaskvpn/meta/install.js',
         outPath=os.path.join(outDir, 'packages/bitmaskvpn/meta/install.js'),
         data=templateData)

def renderTemplate(templatePath=None, outPath=None, data=None):
    with open(os.path.join(here(), templatePath), 'r') as f:
        t = f.read()	
    rendered = Template(t).substitute(**data)
    os.makedirs(os.path.dirname(outPath), exist_ok=True)
    with open(outPath, 'w') as out:
        out.write(rendered)

def here():
    return os.path.abspath(os.path.dirname(__file__))

def bail(msg=None):
    if not msg:
        print("ERROR: not enough arguments!")
        print('Usage: {scriptname}.py <config> <output>'.format(
            scriptname=SCRIPT_NAME))
    else:
        print(msg)
    sys.exit(1)

def getVersion():
    return os.environ.get('VERSION', 'unknown')

if __name__ == "__main__":
    VENDOR_PATH = os.environ.get('VENDOR_PATH')

    if len(sys.argv) != 3:
        bail()
    platform = sys.argv[1]
    outDir = sys.argv[2]
    print("[+] Generating qtinstaller files...")
    data = getData()
    generateQtInstallerBoilerplate(data, platform, outDir)