From ef2f26e5f0eb1ea70493629d9e21b4d3483c81cb Mon Sep 17 00:00:00 2001 From: Ilya Zverev Date: Wed, 20 Jan 2016 18:16:01 +0300 Subject: [PATCH 1/3] [android] Fix indentation in set_up_android.py (no other changes) --- tools/android/set_up_android.py | 128 ++++++++++++++++---------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/tools/android/set_up_android.py b/tools/android/set_up_android.py index 4485992c05..a638a46bf1 100755 --- a/tools/android/set_up_android.py +++ b/tools/android/set_up_android.py @@ -7,87 +7,87 @@ import sys def locate_sdk(sdkPath): - if (not sdkPath): - sdkPath = raw_input('Enter Android SDK path: ').strip() - # check if directory is correct - androidPath = os.path.join(sdkPath, 'tools', 'android') - if os.path.exists(androidPath): - print 'ANDROID SDK path assigned: %s' % sdkPath - return sdkPath - else: - print 'Incorrect SDK path.' - exit(1) + if (not sdkPath): + sdkPath = raw_input('Enter Android SDK path: ').strip() + # check if directory is correct + androidPath = os.path.join(sdkPath, 'tools', 'android') + if os.path.exists(androidPath): + print 'ANDROID SDK path assigned: %s' % sdkPath + return sdkPath + else: + print 'Incorrect SDK path.' + exit(1) def locate_ndk(ndkPath): - if (not ndkPath): - ndkPath = raw_input('Enter Anroid NDK path: ').strip() - # check if directory is correct - ndkBuildPath = os.path.join(ndkPath, 'ndk-build') - if os.path.exists(ndkBuildPath): - print 'ANDROID NDK path assigned: %s' % ndkPath - return ndkPath - else: - print 'Incorrect NDK path.' - exit(1) + if (not ndkPath): + ndkPath = raw_input('Enter Anroid NDK path: ').strip() + # check if directory is correct + ndkBuildPath = os.path.join(ndkPath, 'ndk-build') + if os.path.exists(ndkBuildPath): + print 'ANDROID NDK path assigned: %s' % ndkPath + return ndkPath + else: + print 'Incorrect NDK path.' + exit(1) def write_local_properties(sdkDir, ndkDir): - locPropsContent = ('# Autogenerated file\n' + - '# Do not add it to version control\n' + - 'sdk.dir=%s\n' % sdkDir + - 'ndk.dir=%s\n' % ndkDir) + locPropsContent = ('# Autogenerated file\n' + + '# Do not add it to version control\n' + + 'sdk.dir=%s\n' % sdkDir + + 'ndk.dir=%s\n' % ndkDir) - curDir = os.getcwd() - omimRoot = os.path.dirname(os.path.dirname(curDir)) - androidRoot = os.path.join(omimRoot, 'android') - locPropsOrigin = os.path.join(androidRoot, 'local.properties') + curDir = os.getcwd() + omimRoot = os.path.dirname(os.path.dirname(curDir)) + androidRoot = os.path.join(omimRoot, 'android') + locPropsOrigin = os.path.join(androidRoot, 'local.properties') - file = open(locPropsOrigin, 'w') - file.write(locPropsContent) - file.close() + file = open(locPropsOrigin, 'w') + file.write(locPropsContent) + file.close() - # copy files to folders - subfolders = ['YoPme', - 'YoPme2', - 'UnitTests'] + # copy files to folders + subfolders = ['YoPme', + 'YoPme2', + 'UnitTests'] - for folder in subfolders: - dstFold = os.path.join(androidRoot, folder) - if not os.path.exists(dstFold): - os.makedirs(dstFold) - dst = os.path.join(dstFold, 'local.properties') - shutil.copy(locPropsOrigin, dst) - print 'File created:', dst + for folder in subfolders: + dstFold = os.path.join(androidRoot, folder) + if not os.path.exists(dstFold): + os.makedirs(dstFold) + dst = os.path.join(dstFold, 'local.properties') + shutil.copy(locPropsOrigin, dst) + print 'File created:', dst def usage(): - print "Usage: " + sys.argv[0] + " --sdk --ndk " + print "Usage: " + sys.argv[0] + " --sdk --ndk " def run(): - try: - opts, args = getopt.getopt(sys.argv[1:], "h", ["sdk=", "ndk=", "help"]) - except getopt.GetoptError as err: - print str(err) - usage() - exit(2) + try: + opts, args = getopt.getopt(sys.argv[1:], "h", ["sdk=", "ndk=", "help"]) + except getopt.GetoptError as err: + print str(err) + usage() + exit(2) - sdk = None - ndk = None - for o, a in opts: - if o == "--sdk": - sdk = a - elif o == "--ndk": - ndk = a - elif o in ("-h", "--help"): - usage() - sys.exit() + sdk = None + ndk = None + for o, a in opts: + if o == "--sdk": + sdk = a + elif o == "--ndk": + ndk = a + elif o in ("-h", "--help"): + usage() + sys.exit() - sdkDir = locate_sdk(sdk) - ndkDir = locate_ndk(ndk) - print '>>> Writing local.properties' - write_local_properties(sdkDir, ndkDir) - print '>>> Done!' + sdkDir = locate_sdk(sdk) + ndkDir = locate_ndk(ndk) + print '>>> Writing local.properties' + write_local_properties(sdkDir, ndkDir) + print '>>> Done!' run() From 9d2f64d7bb4949445977e903e195b3b24dc7f038 Mon Sep 17 00:00:00 2001 From: Ilya Zverev Date: Wed, 20 Jan 2016 19:16:36 +0300 Subject: [PATCH 2/3] [android] Rewrite set_up_android.py script --- tools/android/set_up_android.py | 158 ++++++++++++++++---------------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/tools/android/set_up_android.py b/tools/android/set_up_android.py index a638a46bf1..1a74d342da 100755 --- a/tools/android/set_up_android.py +++ b/tools/android/set_up_android.py @@ -1,93 +1,93 @@ #!/usr/bin/python +import os, sys, shutil, collections +from optparse import OptionParser -import os -import shutil -import getopt -import sys +def find_recursive(root, subpath, maxdepth=4): + queue = collections.deque([(root, 0)]) + while len(queue) > 0: + item = queue.popleft() + if os.path.isfile(os.path.join(item[0], *subpath)): + return item[0] + if item[1] < maxdepth: + for name in os.listdir(item[0]): + fullname = os.path.join(item[0], name) + if os.path.isdir(fullname) and '.' not in name: + queue.append((fullname, item[1] + 1)) + return None +def read_local_properties(): + androidRoot = os.path.join(os.path.dirname(sys.argv[0]), '..', '..', 'android') + propsFile = os.path.join(androidRoot, 'local.properties') + sdkDir = None + ndkDir = None + if os.path.exists(propsFile): + with open(propsFile, 'r') as f: + for line in f: + if line[:8] == 'sdk.dir=': + sdkDir = line[8:].strip() + elif line[:8] == 'ndk.dir=': + ndkDir = line[8:].strip() + return (sdkDir, ndkDir) -def locate_sdk(sdkPath): - if (not sdkPath): - sdkPath = raw_input('Enter Android SDK path: ').strip() - # check if directory is correct - androidPath = os.path.join(sdkPath, 'tools', 'android') - if os.path.exists(androidPath): - print 'ANDROID SDK path assigned: %s' % sdkPath - return sdkPath +def query_path(title, option, default, subpath): + default = '' if not default else os.path.abspath(default) + searchHint = ', "s" to search' + while True: + path = raw_input('Path to {0}{1} [{2}]:'.format(title, searchHint, default)) or default + if len(searchHint) > 0 and path.lower().strip() == 's': + found = find_recursive(os.path.expanduser('~'), subpath) + if found: + default = found + searchHint = '' + else: + break + test = os.path.join(path, *subpath) + if path and os.path.isfile(test): + return os.path.abspath(path) else: - print 'Incorrect SDK path.' - exit(1) - - -def locate_ndk(ndkPath): - if (not ndkPath): - ndkPath = raw_input('Enter Anroid NDK path: ').strip() - # check if directory is correct - ndkBuildPath = os.path.join(ndkPath, 'ndk-build') - if os.path.exists(ndkBuildPath): - print 'ANDROID NDK path assigned: %s' % ndkPath - return ndkPath - else: - print 'Incorrect NDK path.' - exit(1) - + print 'Could not find {0}, not an {1} path.'.format(test, title) + sys.exit(1) def write_local_properties(sdkDir, ndkDir): - locPropsContent = ('# Autogenerated file\n' + - '# Do not add it to version control\n' + - 'sdk.dir=%s\n' % sdkDir + - 'ndk.dir=%s\n' % ndkDir) + content = ''.join([x + '\n' for x in [ + '# Autogenerated file', + '# Do not add it to version control', + 'sdk.dir={0}'.format(sdkDir), + 'ndk.dir={0}'.format(ndkDir) + ]]) - curDir = os.getcwd() - omimRoot = os.path.dirname(os.path.dirname(curDir)) - androidRoot = os.path.join(omimRoot, 'android') - locPropsOrigin = os.path.join(androidRoot, 'local.properties') + # Create omim/android/local.properties + androidRoot = os.path.join(os.path.dirname(sys.argv[0]), '..', '..', 'android') + propsFile = os.path.join(androidRoot, 'local.properties') + print 'Writing {0}'.format(propsFile) + with open(propsFile, 'w') as f: + f.write(content) - file = open(locPropsOrigin, 'w') - file.write(locPropsContent) - file.close() + # Copy files to folders + for folder in ['YoPme', 'YoPme2', 'UnitTests']: + destFolder = os.path.join(androidRoot, folder) + if not os.path.exists(destFolder): + os.makedirs(destFolder) + dst = os.path.join(destFolder, 'local.properties') + print 'Copying to {0}'.format(dst) + shutil.copy(propsFile, dst) - # copy files to folders - subfolders = ['YoPme', - 'YoPme2', - 'UnitTests'] +if __name__ == '__main__': + parser = OptionParser() + parser.add_option('-s', '--sdk', help='Path to Android SDK') + parser.add_option('-n', '--ndk', help='Path to Android NDK') + options, _ = parser.parse_args() - for folder in subfolders: - dstFold = os.path.join(androidRoot, folder) - if not os.path.exists(dstFold): - os.makedirs(dstFold) - dst = os.path.join(dstFold, 'local.properties') - shutil.copy(locPropsOrigin, dst) - print 'File created:', dst + sdkDir = options.sdk + ndkDir = options.ndk + if not options.sdk or not options.ndk: + sdkDirOld, ndkDirOld = read_local_properties() + if not sdkDir: + sdkDir = sdkDirOld + if not ndkDir: + ndkDir = ndkDirOld + sdkDir = query_path('Android SDK', options.sdk, sdkDir, ['platform-tools', 'adb']) + ndkDir = query_path('Android NDK', options.ndk, ndkDir, ['ndk-build']) -def usage(): - print "Usage: " + sys.argv[0] + " --sdk --ndk " - - -def run(): - try: - opts, args = getopt.getopt(sys.argv[1:], "h", ["sdk=", "ndk=", "help"]) - except getopt.GetoptError as err: - print str(err) - usage() - exit(2) - - sdk = None - ndk = None - for o, a in opts: - if o == "--sdk": - sdk = a - elif o == "--ndk": - ndk = a - elif o in ("-h", "--help"): - usage() - sys.exit() - - sdkDir = locate_sdk(sdk) - ndkDir = locate_ndk(ndk) - print '>>> Writing local.properties' write_local_properties(sdkDir, ndkDir) - print '>>> Done!' - -run() From 92d2ad0bba506c05d0a6b9eca47d0fdfb7f5bcf5 Mon Sep 17 00:00:00 2001 From: Ilya Zverev Date: Thu, 21 Jan 2016 12:26:07 +0300 Subject: [PATCH 3/3] [android] Update set_up_android.py by review --- tools/android/set_up_android.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tools/android/set_up_android.py b/tools/android/set_up_android.py index 1a74d342da..207baea819 100755 --- a/tools/android/set_up_android.py +++ b/tools/android/set_up_android.py @@ -4,10 +4,14 @@ from optparse import OptionParser def find_recursive(root, subpath, maxdepth=4): queue = collections.deque([(root, 0)]) + if 'PATH' in os.environ: + envpath = os.environ['PATH'].split(':') + relpath = ['..'] * (len(subpath) - 1) + queue.extendleft([(os.path.join(x, *relpath), maxdepth) for x in envpath if 'android' in x.lower()]) while len(queue) > 0: item = queue.popleft() if os.path.isfile(os.path.join(item[0], *subpath)): - return item[0] + return os.path.abspath(item[0]) if item[1] < maxdepth: for name in os.listdir(item[0]): fullname = os.path.join(item[0], name) @@ -23,10 +27,11 @@ def read_local_properties(): if os.path.exists(propsFile): with open(propsFile, 'r') as f: for line in f: - if line[:8] == 'sdk.dir=': - sdkDir = line[8:].strip() - elif line[:8] == 'ndk.dir=': - ndkDir = line[8:].strip() + line = line.strip() + if line.startswith('sdk.dir') and '=' in line: + sdkDir = line.split('=')[1].strip() + elif line.startswith('ndk.dir') and '=' in line: + ndkDir = line.split('=')[1].strip() return (sdkDir, ndkDir) def query_path(title, option, default, subpath):