From bbe67bcda6d353c06f54dfc8d1379c2c57df8240 Mon Sep 17 00:00:00 2001 From: hyokeun Date: Thu, 6 Sep 2018 10:46:07 +0900 Subject: [PATCH 1/1] Support web app Change-Id: Ic695f410df6ad6b5972a5b2ae939b8897cc0b210 --- abs | 96 +++++++++++++++++++++++++++++++++++++++++----------------- build.template | 7 ++++- spec.template | 12 ++++---- 3 files changed, 81 insertions(+), 34 deletions(-) diff --git a/abs b/abs index 772a628..d61b584 100755 --- a/abs +++ b/abs @@ -344,7 +344,7 @@ class Sdk(object): myZipFile.close() return rsrc_zip - def build_native(self, source, rootstrap=None, arch=None, conf='Debug', jobs=None): + def build_tizen(self, source, rootstrap=None, arch=None, conf='Debug', jobs=None): """SDK CLI build command""" _rootstrap = self.check_rootstrap(rootstrap) @@ -369,10 +369,18 @@ class Sdk(object): elif arch == 'arm': rootstrap = rootstrap.replace('emulator', 'device') for x in source.project_list: - b_args = ['-r', rootstrap, '-a', self.arch, '-C', conf, '-c', 'gcc'] - if jobs is not None: b_args.extend(['-j', jobs]) - b_args.extend(['--', x['path']]) - out = self._run('build-native', b_args, checker=True) + b_args = [] + if x['web_app'] == True: + print '\n\n BUILD WEB\n' + b_args.extend(['--', x['path']]) + out = self._run('build-web ', b_args, checker=True) + else: + print '\n\n BUILD NATIVE\n' + if jobs is not None: + b_args.extend(['-j', jobs]) + b_args.extend(['-r', rootstrap, '-a', self.arch, '-C', conf, '-c', 'gcc']) + b_args.extend(['--', x['path']]) + out = self._run('build-native', b_args, checker=True) logpath = os.path.join(source.output_dir, \ 'build_%s_%s' % (rootstrap, os.path.basename(x['path']))) if not os.path.isdir(source.output_dir): @@ -398,6 +406,7 @@ class Sdk(object): final_app = '' main_args = ['-t', pkg_type, '-s', cert] + main_args_web = ['-t', 'wgt', '-s', cert] out = '' #logfile # remove tpk or zip file on project path @@ -405,6 +414,7 @@ class Sdk(object): for i, x in enumerate(source.project_list): package_list.extend(list_files(os.path.join(x['path'], conf), ext='tpk')) package_list.extend(list_files(os.path.join(x['path'], conf), ext='zip')) + package_list.extend(list_files(x['path'], ext='wgt')) for k in package_list : print ' package list ' + k; @@ -418,6 +428,8 @@ class Sdk(object): for i, x in enumerate(source.project_list): dir = os.path.join(x['path'], conf) + if not os.path.isdir(dir): + continue files = [os.path.join(dir,f) for f in os.listdir(dir) if os.path.isfile(os.path.join(dir,f))] # dir must be "project/Debug directory" @@ -452,47 +464,70 @@ class Sdk(object): for k in files: cmdline = strip_cmd + ' ' + k; - #print 'my command line ' + cmdline; Executor().run(cmdline, show=False) elif conf == 'Release': main_args.extend(['--strip', 'on']) for i, x in enumerate(source.project_list): - if x['type'] == 'app': + if x['web_app'] == False: + if x['type'] == 'app': + print '\n\n PACKAGE NATIVE\n' + out = '%s\n%s' % (out, \ + self._run('package', main_args + ['--',os.path.join(x['path'],conf)])) + try: + final_app = list_files(os.path.join(x['path'], conf), ext='tpk')[0] + except: + raise LocalError('TPK file not generated for %s.' % x['APPNAME']) + x['out_package'] = final_app + elif x['type'] == 'sharedLib': + self._package_sharedlib(x['path'], conf, x['APPNAME']) + x['out_package'] = list_files(os.path.join(x['path'], conf), ext='zip')[0] + else: + raise LocalError('Not supported project type %s' % x['type']) + elif x['web_app'] == True: + print '\n\n PACKAGE WEB\n' out = '%s\n%s' % (out, \ - self._run('package', main_args + ['--',os.path.join(x['path'],conf)])) + self._run('package', main_args_web + ['--', x['path']])) try: - final_app = list_files(os.path.join(x['path'], conf), ext='tpk')[0] + final_app = list_files(x['path'], ext='wgt')[0] except: - raise LocalError('TPK file not generated for %s.' % x['APPNAME']) + raise LocalError('WGT file not generated for %s.' % x['APPNAME']) x['out_package'] = final_app - elif x['type'] == 'sharedLib': - self._package_sharedlib(x['path'], conf, x['APPNAME']) - x['out_package'] = list_files(os.path.join(x['path'], conf), ext='zip')[0] - else: - raise LocalError('Not supported project type %s' % x['type']) if source.b_multi == True: extra_args=[] print 'THIS IS MULTI PROJECT' for i, x in enumerate(source.project_list): - if x['out_package'] != final_app and x['type'] == 'app': + if x['out_package'] != final_app and x.get('type') == 'app': extra_args.extend(['-r', x['out_package']]) - elif x['type'] == 'sharedLib': + elif x.get('type') == 'sharedLib': extra_args.extend(['-r', x['out_package']]) extra_args.extend(['--', final_app]) - out = self._run('package', main_args + extra_args) + if final_app.endswith('.tpk'): + out = self._run('package', main_args + extra_args) + elif final_app.endswith('.wgt'): + out = self._run('package', main_args_web + extra_args) #TODO: signature validation check failed : Invalid file reference. An unsigned file was found. - print 'Packaging final step again!' - out = self._run('package', main_args + ['--', final_app]) + if final_app.endswith('.tpk'): + print 'Packaging final step again!' + out = self._run('package', main_args + ['--', final_app]) + + #Append arch to web binary + if final_app.endswith('.wgt'): + final_app_with_arch = final_app.replace('.wgt', '-%s.wgt' % self.arch) + os.rename(final_app, final_app_with_arch) + final_app = final_app_with_arch #Copy tpk to output directory if conf == 'Debug' and manual_strip == False : basename = os.path.splitext(final_app)[0] - newname = basename +'-debug.tpk' + if final_app.endswith('.tpk'): + newname = basename +'-debug.tpk' + elif final_app.endswith('.wgt'): + newname = basename +'-debug.wgt' os.rename(final_app, newname) shutil.copy(newname, source.output_dir) else : @@ -540,9 +575,13 @@ class Source(object): mydict = {} cp = ConfigParser.SafeConfigParser() cp.optionxform = str - cp.readfp(FakeSecHead(open(os.path.join(path, 'project_def.prop')))) - for x in cp.items('ascection'): - mydict[x[0]] = x[1] + if self.is_web_app(path): + mydict['web_app'] = True + else: + mydict['web_app'] = False + cp.readfp(FakeSecHead(open(os.path.join(path, 'project_def.prop')))) + for x in cp.items('ascection'): + mydict[x[0]] = x[1] mydict['path'] = path return mydict @@ -557,6 +596,11 @@ class Source(object): os.environ['USER_LINK_OPTS'] = link_opts print 'Set USER_LINK_OPTS=[%s]' % os.getenv('USER_LINK_OPTS') + def is_web_app(self, project_directory): + if os.path.isfile(os.path.join(project_directory, 'config.xml')): + return True + return False + def pre_process(self): if os.path.isfile(os.path.join(self.workspace, self.multi_conf_file)): @@ -622,7 +666,7 @@ def build_main(args): print '-------------------' my_sdk = Sdk(sdkpath=args.sdkpath, rootstrap_search=args.profiletosearch) my_sdk.clean(my_source) - my_sdk.build_native(my_source, rootstrap=args.rootstrap, arch=args.arch, jobs=args.jobs) + my_sdk.build_tizen(my_source, rootstrap=args.rootstrap, arch=args.arch, jobs=args.jobs) if args.conf == 'Debug' : my_sdk.package(my_source, pkg_type=args.type, cert=args.cert) my_sdk.package(my_source, pkg_type=args.type, cert=args.cert, manual_strip=True) @@ -640,8 +684,6 @@ def build_main(args): def main(argv): """Script entry point.""" - print 'ABS SCRIPT FROM GIT' - args = argument_parsing(argv) if args.subcommands == 'build': diff --git a/build.template b/build.template index 1a749f0..fa4d8bd 100644 --- a/build.template +++ b/build.template @@ -67,7 +67,12 @@ for rs in $rs_list; do #else su - build -c "${ABS_CMD} build -r $rs -w ${BUILD_ROOT}/${PACKAGE} -s ABS -c ${BUILD_MODE} ${PARALLEL_JOBS} --profile-to-search ${PROFILE}" #fi - mv ${TMP_DIR}/*.tpk ${SHARE_ROOT} + count=`ls -1 *.tpk 2>/dev/null | wc -l` + if [ $count != 0 ]; then + mv ${TMP_DIR}/*.tpk ${SHARE_ROOT} + else + mv ${TMP_DIR}/*.wgt ${SHARE_ROOT} + fi ret=$?; echo "BUILDING FINISH TIME: `date`" if [ $ret != 0 ]; then echo $rs build fail; _clear 8 diff --git a/spec.template b/spec.template index ccb612e..cceffa4 100644 --- a/spec.template +++ b/spec.template @@ -12,10 +12,10 @@ __EXCLUSIVE_ARCH__ __EXCLUDE_ARCH__ BuildRequires: pkgconfig(libtzplatform-config) -Requires(post): /usr/bin/tpk-backend +Requires(post): /usr/bin/__APP_TYPE__-backend %define internal_name __TIZEN_STUDIO_PACKAGE_NAME__ -%define preload_tpk_path %{TZ_SYS_RO_APP}/.preload-tpk +%define preload___APP_TYPE___path %{TZ_SYS_RO_APP}/.preload-__APP_TYPE__ %define build_mode __BUILD_MODE__ @@ -34,7 +34,7 @@ Requires(post): /usr/bin/tpk-backend %description __VCS_DESCRIPTION__ -This is a container package which have preload TPK files +This is a container package which have preload TPK/WGT files %prep %setup -q @@ -43,12 +43,12 @@ This is a container package which have preload TPK files %install rm -rf %{buildroot} -mkdir -p %{buildroot}/%{preload_tpk_path} -install %{internal_name}-%{version}-%{target}%{build_mode}.tpk %{buildroot}/%{preload_tpk_path}/ +mkdir -p %{buildroot}/%{preload___APP_TYPE___path} +install %{internal_name}-%{version}-%{target}%{build_mode}.__APP_TYPE__ %{buildroot}/%{preload___APP_TYPE___path}/ %post %files %defattr(-,root,root,-) -%{preload_tpk_path}/* +%{preload___APP_TYPE___path}/* -- 2.7.4