Support web app 39/188539/1
authorhyokeun <hyokeun.jeon@samsung.com>
Thu, 6 Sep 2018 01:46:07 +0000 (10:46 +0900)
committerhyokeun <hyokeun.jeon@samsung.com>
Thu, 6 Sep 2018 01:48:35 +0000 (10:48 +0900)
Change-Id: Ic695f410df6ad6b5972a5b2ae939b8897cc0b210

abs
build.template
spec.template

diff --git a/abs b/abs
index 772a628..d61b584 100755 (executable)
--- 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':
index 1a749f0..fa4d8bd 100644 (file)
@@ -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
index ccb612e..cceffa4 100644 (file)
@@ -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}/*