136 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
'''
 | 
						|
This file is part of Telegram Desktop,
 | 
						|
the official desktop application for the Telegram messaging service.
 | 
						|
 | 
						|
For license and copyright information please follow this link:
 | 
						|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
						|
'''
 | 
						|
import sys, os, re, subprocess
 | 
						|
 | 
						|
def finish(code):
 | 
						|
    global executePath
 | 
						|
    os.chdir(executePath)
 | 
						|
    sys.exit(code)
 | 
						|
 | 
						|
if sys.platform == 'win32' and not 'COMSPEC' in os.environ:
 | 
						|
    print('[ERROR] COMSPEC environment variable is not set.')
 | 
						|
    finish(1)
 | 
						|
 | 
						|
executePath = os.getcwd()
 | 
						|
scriptPath = os.path.dirname(os.path.realpath(__file__))
 | 
						|
 | 
						|
apiId = ''
 | 
						|
apiHash = ''
 | 
						|
nextApiId = False
 | 
						|
nextApiHash = False
 | 
						|
ciBuild = False
 | 
						|
for arg in sys.argv:
 | 
						|
    if nextApiId:
 | 
						|
        apiId = re.sub(r'[^\d]', '', arg)
 | 
						|
        nextApiId = False
 | 
						|
    elif nextApiHash:
 | 
						|
        apiHash = re.sub(r'[^a-fA-F\d]', '', arg)
 | 
						|
        nextApiHash = False
 | 
						|
    else:
 | 
						|
        nextApiId = (arg == '--api-id')
 | 
						|
        nextApiHash = (arg == '--api-hash')
 | 
						|
        if arg == '--ci-build':
 | 
						|
            ciBuild = True
 | 
						|
 | 
						|
officialTarget = ''
 | 
						|
officialTargetFile = scriptPath + '/../build/target'
 | 
						|
if os.path.isfile(officialTargetFile):
 | 
						|
    with open(officialTargetFile, 'r') as f:
 | 
						|
        for line in f:
 | 
						|
            officialTarget = line.strip()
 | 
						|
 | 
						|
if officialTarget != '':
 | 
						|
    officialApiIdFile = scriptPath + '/../../../DesktopPrivate/custom_api_id.h'
 | 
						|
    if not os.path.isfile(officialApiIdFile):
 | 
						|
        print("[ERROR] DesktopPrivate/custom_api_id.h not found.")
 | 
						|
        finish(1)
 | 
						|
    with open(officialApiIdFile, 'r') as f:
 | 
						|
        for line in f:
 | 
						|
            apiIdMatch = re.search(r'ApiId\s+=\s+(\d+)', line)
 | 
						|
            apiHashMatch = re.search(r'ApiHash\s+=\s+"([a-fA-F\d]+)"', line)
 | 
						|
            if apiIdMatch:
 | 
						|
                apiId = apiIdMatch.group(1)
 | 
						|
            elif apiHashMatch:
 | 
						|
                apiHash = apiHashMatch.group(1)
 | 
						|
 | 
						|
if apiId == '' or apiHash == '':
 | 
						|
    print("""[USAGE]: refresh --api-id YOUR_API_ID --api-hash YOUR_API_HASH
 | 
						|
 | 
						|
> To build your version of Telegram Desktop you're required to provide
 | 
						|
> your own 'api_id' and 'api_hash' for the Telegram API access.
 | 
						|
> 
 | 
						|
> How to obtain your 'api_id' and 'api_hash' is described here:
 | 
						|
> https://core.telegram.org/api/obtaining_api_id
 | 
						|
> 
 | 
						|
> If you're building the application not for deployment,
 | 
						|
> but only for test purposes you can use TEST ONLY credentials,
 | 
						|
> which are very limited by the Telegram API server:
 | 
						|
> 
 | 
						|
> api_id: 17349
 | 
						|
> api_hash: 344583e45741c457fe1862106095a5eb
 | 
						|
> 
 | 
						|
> Your users will start getting internal server errors on login
 | 
						|
> if you deploy an app using those 'api_id' and 'api_hash'.""")
 | 
						|
    finish(0)
 | 
						|
 | 
						|
gypScript = 'gyp'
 | 
						|
gypFormats = []
 | 
						|
gypArguments = []
 | 
						|
cmakeConfigurations = []
 | 
						|
gypArguments.append('--depth=.')
 | 
						|
gypArguments.append('--generator-output=..')
 | 
						|
gypArguments.append('-Goutput_dir=../out')
 | 
						|
gypArguments.append('-Dapi_id=' + apiId)
 | 
						|
gypArguments.append('-Dapi_hash=' + apiHash)
 | 
						|
gypArguments.append('-Dlottie_use_cache=0')
 | 
						|
gypArguments.append('-Dspecial_build_target=' + officialTarget)
 | 
						|
if ciBuild:
 | 
						|
    gypArguments.append('-Dci_build=1')
 | 
						|
 | 
						|
if 'TDESKTOP_BUILD_DEFINES' in os.environ:
 | 
						|
    buildDefines = os.environ['TDESKTOP_BUILD_DEFINES']
 | 
						|
    gypArguments.append('-Dbuild_defines=' + buildDefines)
 | 
						|
    print('[INFO] Set build defines to ' + buildDefines)
 | 
						|
 | 
						|
if sys.platform == 'win32':
 | 
						|
    gypFormats.append('ninja')
 | 
						|
    gypFormats.append('msvs-ninja')
 | 
						|
elif sys.platform == 'darwin':
 | 
						|
    # use patched gyp with Xcode project generator
 | 
						|
    gypScript = '../../../Libraries/gyp/gyp'
 | 
						|
    gypArguments.append('-Gxcode_upgrade_check_project_version=1030')
 | 
						|
    gypFormats.append('xcode')
 | 
						|
else:
 | 
						|
    gypScript = '../../../Libraries/gyp/gyp'
 | 
						|
    gypFormats.append('cmake')
 | 
						|
    cmakeConfigurations.append('Debug')
 | 
						|
    cmakeConfigurations.append('Release')
 | 
						|
 | 
						|
os.chdir(scriptPath)
 | 
						|
if sys.platform == 'darwin':
 | 
						|
    subprocess.call('mkdir -p ../../out', shell=True)
 | 
						|
for format in gypFormats:
 | 
						|
    command = gypArguments[:]
 | 
						|
    command.insert(0, gypScript)
 | 
						|
    command.append('--format=' + format)
 | 
						|
    command.append('Telegram.gyp')
 | 
						|
    result = subprocess.call(' '.join(command), shell=True)
 | 
						|
    if result != 0:
 | 
						|
        print('[ERROR] Failed generating for format: ' + format)
 | 
						|
        finish(result)
 | 
						|
 | 
						|
os.chdir(scriptPath + '/../../out')
 | 
						|
for configuration in cmakeConfigurations:
 | 
						|
    os.chdir(configuration)
 | 
						|
    result = subprocess.call('cmake "-GCodeBlocks - Unix Makefiles" .', shell=True)
 | 
						|
    if result != 0:
 | 
						|
        print('[ERROR] Failed calling cmake for ' + configuration)
 | 
						|
        finish(result)
 | 
						|
    os.chdir('..')
 | 
						|
 | 
						|
finish(0)
 |