app_helper.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import os
  2. import sys
  3. import shutil
  4. import awtk_locator as locator
  5. from SCons import Script
  6. def Helper(ARGUMENTS):
  7. locator.init(ARGUMENTS)
  8. from app_helper_base import AppHelperBase
  9. return AppHelperBase(ARGUMENTS)
  10. def parse_needed_file(helper, root, file):
  11. dst = helper.APP_BIN_DIR
  12. if isinstance(file, list):
  13. src = os.path.abspath(os.path.join(root, file[0]))
  14. if len(file) > 1:
  15. dst = os.path.abspath(os.path.join(helper.APP_BIN_DIR, file[1]))
  16. else:
  17. src = os.path.abspath(os.path.join(root, file))
  18. return src, dst
  19. def clear_needed_files(helper, root, needed_files):
  20. for file in needed_files:
  21. src, dst = parse_needed_file(helper, root, file)
  22. if os.path.isfile(src):
  23. if os.path.isdir(dst):
  24. dst = os.path.join(dst, os.path.basename(src))
  25. if os.path.exists(dst):
  26. os.remove(dst)
  27. print('Removed {}'.format(os.path.relpath(dst, helper.APP_ROOT)))
  28. elif os.path.isdir(src) and os.path.isdir(dst):
  29. dirs = []
  30. for _root, _dirs, _files in os.walk(src):
  31. for _file in _files:
  32. _dst = os.path.join(dst, os.path.relpath(os.path.join(_root, _file), src))
  33. if os.path.exists(_dst):
  34. os.remove(_dst)
  35. print('Removed {}'.format(os.path.relpath(_dst, helper.APP_ROOT)))
  36. for _dir in _dirs:
  37. dirs.append(os.path.join(dst, _dir))
  38. for _dir in dirs:
  39. try:
  40. os.rmdir(_dir)
  41. print('Removed {}'.format(os.path.relpath(_dir, helper.APP_ROOT)))
  42. except:
  43. none
  44. if not os.path.relpath(helper.APP_BIN_DIR, dst) == '.':
  45. try:
  46. os.rmdir(dst)
  47. print('Removed {}'.format(os.path.relpath(dst, helper.APP_ROOT)))
  48. except:
  49. none
  50. def copy_needed_files(helper, root, needed_files):
  51. for file in needed_files:
  52. src, dst = parse_needed_file(helper, root, file)
  53. if os.path.isfile(src):
  54. if os.path.exists(src):
  55. if not os.path.exists(os.path.dirname(dst)):
  56. os.makedirs(os.path.dirname(dst))
  57. shutil.copy(src, dst)
  58. print(src + '==>' + dst)
  59. else:
  60. print('[NeededFiles]: Not found {src}', src)
  61. elif os.path.isdir(src):
  62. if os.path.exists(src):
  63. for _root, _dirs, _files in os.walk(src):
  64. for _file in _files:
  65. _src = os.path.join(_root, _file)
  66. _dst = os.path.join(dst, os.path.relpath(_src, src))
  67. if not os.path.exists(os.path.dirname(_dst)):
  68. os.makedirs(os.path.dirname(_dst))
  69. shutil.copy(_src, _dst)
  70. print(src + '==>' + dst)
  71. else:
  72. print('[NeededFiles]: Not found {src}', src)
  73. def prepare_depends_libs(ARGUMENTS, helper, libs):
  74. if ARGUMENTS.get('PREPARE_DEPENDS', '').lower().startswith('f'):
  75. return
  76. args = ' AWTK_ROOT=\"{}\"'.format(helper.AWTK_ROOT)
  77. if helper.MVVM_ROOT:
  78. args += ' MVVM_ROOT=\"{}\"'.format(helper.MVVM_ROOT)
  79. if 'APP_BIN_DIR' in ARGUMENTS:
  80. helper.APP_BIN_DIR = os.path.abspath(ARGUMENTS['APP_BIN_DIR'])
  81. args += ' APP_BIN_DIR=\"{}\"'.format(helper.APP_BIN_DIR.replace('\\', '/'))
  82. if not os.path.exists(helper.APP_BIN_DIR):
  83. os.makedirs(helper.APP_BIN_DIR)
  84. else:
  85. args += ' APP_BIN_DIR=\"{}\"'.format(os.path.abspath(helper.APP_BIN_DIR).replace('\\', '/'))
  86. for key in ARGUMENTS:
  87. if not key == 'AWTK_ROOT' and not key == 'MVVM_ROOT' and not key == 'APP_BIN_DIR' :
  88. if ' ' in ARGUMENTS[key]:
  89. args += ' {}=\"{}\"'.format(key, ARGUMENTS[key])
  90. else:
  91. args += ' {}={}'.format(key, ARGUMENTS[key])
  92. num_jobs_str = ''
  93. num_jobs = Script.GetOption('num_jobs')
  94. if num_jobs > 1:
  95. num_jobs_str = ' -j' + str(num_jobs)
  96. clean_str = ''
  97. if Script.GetOption('clean'):
  98. clean_str = ' -c '
  99. for lib in libs:
  100. if 'root' in lib and os.path.exists(lib['root'] + '/SConstruct'):
  101. cmd = 'cd ' + lib['root'] + ' && scons' + clean_str + num_jobs_str + args
  102. print('\n*******************************************************************************')
  103. print('[Dependencies]: {}'.format(lib['root']))
  104. print('*******************************************************************************\n')
  105. result = os.system(cmd)
  106. if not result == 0:
  107. sys.exit(result)
  108. if 'needed_files' in lib:
  109. if Script.GetOption('clean'):
  110. clear_needed_files(helper, lib['root'], lib['needed_files'])
  111. else:
  112. copy_needed_files(helper, lib['root'], lib['needed_files'])