Loading scripts/construct_context.py +59 −38 Original line number Diff line number Diff line Loading @@ -27,20 +27,35 @@ from manifest import compare_version_gt def parse_args(args): """Parse commandline arguments.""" parser = argparse.ArgumentParser() parser.add_argument('--target-sdk-version', default='', dest='sdk', parser.add_argument( '--target-sdk-version', default='', dest='sdk', help='specify target SDK version (as it appears in the manifest)') parser.add_argument('--host-context-for-sdk', dest='host_contexts', action='append', nargs=2, metavar=('sdk','context'), parser.add_argument( '--host-context-for-sdk', dest='host_contexts', action='append', nargs=2, metavar=('sdk', 'context'), help='specify context on host for a given SDK version or "any" version') parser.add_argument('--target-context-for-sdk', dest='target_contexts', action='append', nargs=2, metavar=('sdk','context'), help='specify context on target for a given SDK version or "any" version') parser.add_argument( '--target-context-for-sdk', dest='target_contexts', action='append', nargs=2, metavar=('sdk', 'context'), help='specify context on target for a given SDK version or "any" ' 'version' ) return parser.parse_args(args) # Special keyword that means that the context should be added to class loader # context regardless of the target SDK version. any_sdk = 'any' # We assume that the order of context arguments passed to this script is # correct (matches the order computed by package manager). It is possible to # sort them here, but Soong needs to use deterministic order anyway, so it can Loading @@ -52,12 +67,17 @@ def construct_context(versioned_contexts, target_sdk): context.append(ctx) return context def construct_contexts(args): host_context = construct_context(args.host_contexts, args.sdk) target_context = construct_context(args.target_contexts, args.sdk) context_sep = '#' return ('class_loader_context_arg=--class-loader-context=PCL[]{%s} ; ' % context_sep.join(host_context) + 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{%s}' % context_sep.join(target_context)) return ( 'class_loader_context_arg=--class-loader-context=PCL[]{%s} ; ' % context_sep.join(host_context) + 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{%s}' #pylint: disable=line-too-long % context_sep.join(target_context)) def main(): """Program entry point.""" Loading @@ -77,5 +97,6 @@ def main(): print('error: ' + str(err), file=sys.stderr) sys.exit(-1) if __name__ == '__main__': main() scripts/construct_context_test.py +50 −40 Original line number Diff line number Diff line Loading @@ -23,53 +23,63 @@ import construct_context as cc sys.dont_write_bytecode = True def construct_contexts(arglist): args = cc.parse_args(arglist) return cc.construct_contexts(args) contexts = [ '--host-context-for-sdk', '28', 'PCL[out/zdir/z.jar]', '--target-context-for-sdk', '28', 'PCL[/system/z.jar]', '--host-context-for-sdk', '29', 'PCL[out/xdir/x.jar]#PCL[out/ydir/y.jar]', '--target-context-for-sdk', '29', 'PCL[/system/x.jar]#PCL[/product/y.jar]', '--host-context-for-sdk', 'any', 'PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]', '--target-context-for-sdk', 'any', 'PCL[/system/a.jar]#PCL[/product/b.jar]', '--host-context-for-sdk', '28', 'PCL[out/zdir/z.jar]', '--target-context-for-sdk', '28', 'PCL[/system/z.jar]', '--host-context-for-sdk', '29', 'PCL[out/xdir/x.jar]#PCL[out/ydir/y.jar]', '--target-context-for-sdk', '29', 'PCL[/system/x.jar]#PCL[/product/y.jar]', '--host-context-for-sdk', 'any', 'PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]', '--target-context-for-sdk', 'any', 'PCL[/system/a.jar]#PCL[/product/b.jar]', ] #pylint: disable=line-too-long class ConstructContextTest(unittest.TestCase): def test_construct_context_28(self): args = ['--target-sdk-version', '28'] + contexts result = construct_contexts(args) expect = ('class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/xdir/x.jar]' '#PCL[out/ydir/y.jar]' '#PCL[out/adir/a.jar]' '#PCL[out/bdir/b.jar]}' expect = ( 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/xdir/x.jar]#PCL[out/ydir/y.jar]#PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}' ' ; ' 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/x.jar]' '#PCL[/product/y.jar]' '#PCL[/system/a.jar]' '#PCL[/product/b.jar]}') 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/x.jar]#PCL[/product/y.jar]#PCL[/system/a.jar]#PCL[/product/b.jar]}') self.assertEqual(result, expect) def test_construct_context_29(self): args = ['--target-sdk-version', '29'] + contexts result = construct_contexts(args) expect = ('class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]' '#PCL[out/bdir/b.jar]}' expect = ( 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}' ' ; ' 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]' '#PCL[/product/b.jar]}') 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]#PCL[/product/b.jar]}') self.assertEqual(result, expect) def test_construct_context_S(self): args = ['--target-sdk-version', 'S'] + contexts result = construct_contexts(args) expect = ('class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]' '#PCL[out/bdir/b.jar]}' expect = ( 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}' ' ; ' 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]' '#PCL[/product/b.jar]}') 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]#PCL[/product/b.jar]}') self.assertEqual(result, expect) #pylint: enable=line-too-long if __name__ == '__main__': unittest.main(verbosity=2) Loading
scripts/construct_context.py +59 −38 Original line number Diff line number Diff line Loading @@ -27,20 +27,35 @@ from manifest import compare_version_gt def parse_args(args): """Parse commandline arguments.""" parser = argparse.ArgumentParser() parser.add_argument('--target-sdk-version', default='', dest='sdk', parser.add_argument( '--target-sdk-version', default='', dest='sdk', help='specify target SDK version (as it appears in the manifest)') parser.add_argument('--host-context-for-sdk', dest='host_contexts', action='append', nargs=2, metavar=('sdk','context'), parser.add_argument( '--host-context-for-sdk', dest='host_contexts', action='append', nargs=2, metavar=('sdk', 'context'), help='specify context on host for a given SDK version or "any" version') parser.add_argument('--target-context-for-sdk', dest='target_contexts', action='append', nargs=2, metavar=('sdk','context'), help='specify context on target for a given SDK version or "any" version') parser.add_argument( '--target-context-for-sdk', dest='target_contexts', action='append', nargs=2, metavar=('sdk', 'context'), help='specify context on target for a given SDK version or "any" ' 'version' ) return parser.parse_args(args) # Special keyword that means that the context should be added to class loader # context regardless of the target SDK version. any_sdk = 'any' # We assume that the order of context arguments passed to this script is # correct (matches the order computed by package manager). It is possible to # sort them here, but Soong needs to use deterministic order anyway, so it can Loading @@ -52,12 +67,17 @@ def construct_context(versioned_contexts, target_sdk): context.append(ctx) return context def construct_contexts(args): host_context = construct_context(args.host_contexts, args.sdk) target_context = construct_context(args.target_contexts, args.sdk) context_sep = '#' return ('class_loader_context_arg=--class-loader-context=PCL[]{%s} ; ' % context_sep.join(host_context) + 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{%s}' % context_sep.join(target_context)) return ( 'class_loader_context_arg=--class-loader-context=PCL[]{%s} ; ' % context_sep.join(host_context) + 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{%s}' #pylint: disable=line-too-long % context_sep.join(target_context)) def main(): """Program entry point.""" Loading @@ -77,5 +97,6 @@ def main(): print('error: ' + str(err), file=sys.stderr) sys.exit(-1) if __name__ == '__main__': main()
scripts/construct_context_test.py +50 −40 Original line number Diff line number Diff line Loading @@ -23,53 +23,63 @@ import construct_context as cc sys.dont_write_bytecode = True def construct_contexts(arglist): args = cc.parse_args(arglist) return cc.construct_contexts(args) contexts = [ '--host-context-for-sdk', '28', 'PCL[out/zdir/z.jar]', '--target-context-for-sdk', '28', 'PCL[/system/z.jar]', '--host-context-for-sdk', '29', 'PCL[out/xdir/x.jar]#PCL[out/ydir/y.jar]', '--target-context-for-sdk', '29', 'PCL[/system/x.jar]#PCL[/product/y.jar]', '--host-context-for-sdk', 'any', 'PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]', '--target-context-for-sdk', 'any', 'PCL[/system/a.jar]#PCL[/product/b.jar]', '--host-context-for-sdk', '28', 'PCL[out/zdir/z.jar]', '--target-context-for-sdk', '28', 'PCL[/system/z.jar]', '--host-context-for-sdk', '29', 'PCL[out/xdir/x.jar]#PCL[out/ydir/y.jar]', '--target-context-for-sdk', '29', 'PCL[/system/x.jar]#PCL[/product/y.jar]', '--host-context-for-sdk', 'any', 'PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]', '--target-context-for-sdk', 'any', 'PCL[/system/a.jar]#PCL[/product/b.jar]', ] #pylint: disable=line-too-long class ConstructContextTest(unittest.TestCase): def test_construct_context_28(self): args = ['--target-sdk-version', '28'] + contexts result = construct_contexts(args) expect = ('class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/xdir/x.jar]' '#PCL[out/ydir/y.jar]' '#PCL[out/adir/a.jar]' '#PCL[out/bdir/b.jar]}' expect = ( 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/xdir/x.jar]#PCL[out/ydir/y.jar]#PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}' ' ; ' 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/x.jar]' '#PCL[/product/y.jar]' '#PCL[/system/a.jar]' '#PCL[/product/b.jar]}') 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/x.jar]#PCL[/product/y.jar]#PCL[/system/a.jar]#PCL[/product/b.jar]}') self.assertEqual(result, expect) def test_construct_context_29(self): args = ['--target-sdk-version', '29'] + contexts result = construct_contexts(args) expect = ('class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]' '#PCL[out/bdir/b.jar]}' expect = ( 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}' ' ; ' 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]' '#PCL[/product/b.jar]}') 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]#PCL[/product/b.jar]}') self.assertEqual(result, expect) def test_construct_context_S(self): args = ['--target-sdk-version', 'S'] + contexts result = construct_contexts(args) expect = ('class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]' '#PCL[out/bdir/b.jar]}' expect = ( 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}' ' ; ' 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]' '#PCL[/product/b.jar]}') 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]#PCL[/product/b.jar]}') self.assertEqual(result, expect) #pylint: enable=line-too-long if __name__ == '__main__': unittest.main(verbosity=2)