105 lines
3.2 KiB
Python
105 lines
3.2 KiB
Python
|
# Copyright (c) 2016 The Chromium Embedded Framework Authors. All rights
|
||
|
# reserved. Use of this source code is governed by a BSD-style license that
|
||
|
# can be found in the LICENSE file.
|
||
|
|
||
|
from cef_parser import *
|
||
|
from make_ctocpp_impl import *
|
||
|
|
||
|
def make_views_function_stub_impl(clsname, func):
|
||
|
name = func.get_name()
|
||
|
|
||
|
# Build the C++ prototype.
|
||
|
parts = func.get_cpp_parts(True)
|
||
|
result = make_ctocpp_impl_proto(clsname, name, func, parts)+' {'
|
||
|
|
||
|
# Retrieve the function return value.
|
||
|
retval = func.get_retval()
|
||
|
retval_type = retval.get_retval_type()
|
||
|
if retval_type == 'invalid':
|
||
|
notify(name+' could not be autogenerated')
|
||
|
# Code could not be auto-generated.
|
||
|
result += '\n // COULD NOT IMPLEMENT DUE TO: (return value)'
|
||
|
result += '\n #pragma message("Warning: "__FILE__": '+name+' is not implemented")'
|
||
|
retval_default = ''
|
||
|
else:
|
||
|
retval_default = retval.get_retval_default(False)
|
||
|
|
||
|
result += '\n NOTIMPLEMENTED();'
|
||
|
if retval_default != '':
|
||
|
result += '\n return ' + retval_default + ';'
|
||
|
|
||
|
result += '\n}\n'
|
||
|
|
||
|
return wrap_code(result)
|
||
|
|
||
|
def make_views_class_stub_impl(header, cls):
|
||
|
impl = ''
|
||
|
|
||
|
clsname = cls.get_name()
|
||
|
funcs = cls.get_static_funcs()
|
||
|
for func in funcs:
|
||
|
impl += make_views_function_stub_impl(clsname, func)
|
||
|
|
||
|
return impl
|
||
|
|
||
|
def make_views_stub_impl(header):
|
||
|
includes = ''
|
||
|
impl = ''
|
||
|
|
||
|
allclasses = header.get_classes()
|
||
|
for cls in allclasses:
|
||
|
dir = cls.get_file_directory()
|
||
|
# Only process files in the views/ directory.
|
||
|
if dir != None and dir.find('views') == 0:
|
||
|
cls_impl = make_views_class_stub_impl(header, cls)
|
||
|
if cls_impl != '':
|
||
|
impl += cls_impl
|
||
|
includes += '#include "include/'+cls.get_file_name()+'"\n'
|
||
|
|
||
|
includes += '\n#include "base/logging.h"\n'
|
||
|
|
||
|
# Build the final output.
|
||
|
result = get_copyright() + includes
|
||
|
result += '\n\n// STATIC STUB METHODS - Do not edit by hand.\n\n'
|
||
|
result += impl
|
||
|
return result
|
||
|
|
||
|
def write_views_stub_impl(header, file, backup):
|
||
|
if path_exists(file):
|
||
|
oldcontents = read_file(file)
|
||
|
else:
|
||
|
oldcontents = ''
|
||
|
|
||
|
newcontents = make_views_stub_impl(header)
|
||
|
if newcontents != oldcontents:
|
||
|
if backup and oldcontents != '':
|
||
|
backup_file(file)
|
||
|
file_dir = os.path.split(file)[0]
|
||
|
if not os.path.isdir(file_dir):
|
||
|
make_dir(file_dir)
|
||
|
write_file(file, newcontents)
|
||
|
return True
|
||
|
|
||
|
return False
|
||
|
|
||
|
# Test the module.
|
||
|
if __name__ == "__main__":
|
||
|
import sys
|
||
|
|
||
|
# Verify that the correct number of command-line arguments are provided.
|
||
|
if len(sys.argv) < 2:
|
||
|
sys.stderr.write('Usage: '+sys.argv[0]+' <cpp_header_dir>')
|
||
|
sys.exit()
|
||
|
|
||
|
cpp_header_dir = sys.argv[1]
|
||
|
|
||
|
# Create the header object. Should match the logic in translator.py.
|
||
|
header = obj_header()
|
||
|
header.set_root_directory(cpp_header_dir)
|
||
|
excluded_files = ['cef_application_mac.h', 'cef_version.h']
|
||
|
header.add_directory(cpp_header_dir, excluded_files)
|
||
|
header.add_directory(os.path.join(cpp_header_dir, 'views'))
|
||
|
|
||
|
# Dump the result to stdout.
|
||
|
sys.stdout.write(make_views_stub_impl(header))
|