Add cef_api_hash.h generated by the translator tool (see issue #2596)

This splits out the API hashes from the cef_version.h file which is generated at
build time. Changes to the cef_api_hash.h file are committed to the repo and
represent potentially breaking API changes. This commit history will be used to
calculate the version number.
This commit is contained in:
Marshall Greenblatt 2019-03-14 11:18:06 -04:00
parent 725ed88529
commit a76f40eb83
16 changed files with 244 additions and 83 deletions

View File

@ -34,6 +34,7 @@
'include/base/internal/cef_lock_impl.h', 'include/base/internal/cef_lock_impl.h',
'include/base/internal/cef_raw_scoped_refptr_mismatch_checker.h', 'include/base/internal/cef_raw_scoped_refptr_mismatch_checker.h',
'include/base/internal/cef_thread_checker_impl.h', 'include/base/internal/cef_thread_checker_impl.h',
'include/cef_api_hash.h',
'include/cef_base.h', 'include/cef_base.h',
'include/cef_version.h', 'include/cef_version.h',
'include/internal/cef_export.h', 'include/internal/cef_export.h',

76
include/cef_api_hash.h Normal file
View File

@ -0,0 +1,76 @@
// Copyright (c) 2019 Marshall A. Greenblatt. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the name Chromium Embedded
// Framework nor the names of its contributors may be used to endorse
// or promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// ---------------------------------------------------------------------------
//
// This file was generated by the CEF translator tool. If making changes by
// hand only do so within the body of existing method and function
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=b5fa5783096eaa1af5e76645e2557e123af56848$
//
#ifndef CEF_INCLUDE_API_HASH_H_
#define CEF_INCLUDE_API_HASH_H_
#include "include/internal/cef_export.h"
// The API hash is created by analyzing CEF header files for C API type
// definitions. The hash value will change when header files are modified in a
// way that may cause binary incompatibility with other builds. The universal
// hash value will change if any platform is affected whereas the platform hash
// values will change only if that particular platform is affected.
#define CEF_API_HASH_UNIVERSAL "8ae24aac4bd16d2e2d87e7d6561985064990670e"
#if defined(OS_WIN)
#define CEF_API_HASH_PLATFORM "fe476e7a38a8270fe783981b4bc6fac4284ab9fe"
#elif defined(OS_MACOSX)
#define CEF_API_HASH_PLATFORM "ab1b4d8c4578b0bcdc97f28f13a10384057bdf95"
#elif defined(OS_LINUX)
#define CEF_API_HASH_PLATFORM "73f24626e0179a3f5664d64ffe0fa2aab9edf7cf"
#endif
#ifdef __cplusplus
extern "C" {
#endif
///
// Returns CEF API hashes for the libcef library. The returned string is owned
// by the library and should not be freed. The |entry| parameter describes which
// hash value will be returned:
// 0 - CEF_API_HASH_PLATFORM
// 1 - CEF_API_HASH_UNIVERSAL
// 2 - CEF_COMMIT_HASH (from cef_version.h)
///
CEF_EXPORT const char* cef_api_hash(int entry);
#ifdef __cplusplus
}
#endif
#endif // CEF_INCLUDE_API_HASH_H_

View File

@ -9,11 +9,11 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=a87daf3d3e3bd604ac3c008561676181d42f3266$ // $hash=0e24c6b07a7377337132b09396d9e5f3e4eca517$
// //
#include "libcef_dll/ctocpp/command_line_ctocpp.h" #include "libcef_dll/ctocpp/command_line_ctocpp.h"
#include "include/cef_version.h" #include "include/cef_api_hash.h"
#include "libcef_dll/transfer_util.h" #include "libcef_dll/transfer_util.h"
// STATIC METHODS - Body may be edited by hand. // STATIC METHODS - Body may be edited by hand.

View File

@ -4,6 +4,7 @@
// //
#include <cstddef> #include <cstddef>
#include "include/cef_api_hash.h"
#include "include/cef_version.h" #include "include/cef_version.h"
CEF_EXPORT int cef_version_info(int entry) { CEF_EXPORT int cef_version_info(int entry) {

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=ef8269462464beba6718a2e0d03e0f1cb41901bf$ // $hash=4a4744491587c5f5b1ce8726d8dd08ad04646b92$
// //
#include <dlfcn.h> #include <dlfcn.h>
@ -58,6 +58,7 @@
#include "include/capi/views/cef_scroll_view_capi.h" #include "include/capi/views/cef_scroll_view_capi.h"
#include "include/capi/views/cef_textfield_capi.h" #include "include/capi/views/cef_textfield_capi.h"
#include "include/capi/views/cef_window_capi.h" #include "include/capi/views/cef_window_capi.h"
#include "include/cef_api_hash.h"
#include "include/cef_version.h" #include "include/cef_version.h"
#include "include/internal/cef_logging_internal.h" #include "include/internal/cef_logging_internal.h"
#include "include/internal/cef_string_list.h" #include "include/internal/cef_string_list.h"
@ -333,8 +334,8 @@ typedef struct _cef_textfield_t* (*cef_textfield_create_ptr)(
struct _cef_textfield_delegate_t*); struct _cef_textfield_delegate_t*);
typedef struct _cef_window_t* (*cef_window_create_top_level_ptr)( typedef struct _cef_window_t* (*cef_window_create_top_level_ptr)(
struct _cef_window_delegate_t*); struct _cef_window_delegate_t*);
typedef int (*cef_version_info_ptr)(int);
typedef const char* (*cef_api_hash_ptr)(int); typedef const char* (*cef_api_hash_ptr)(int);
typedef int (*cef_version_info_ptr)(int);
typedef int (*cef_get_min_log_level_ptr)(); typedef int (*cef_get_min_log_level_ptr)();
typedef int (*cef_get_vlog_level_ptr)(const char*, size_t); typedef int (*cef_get_vlog_level_ptr)(const char*, size_t);
typedef void (*cef_log_ptr)(const char*, int, int, const char*); typedef void (*cef_log_ptr)(const char*, int, int, const char*);
@ -656,8 +657,8 @@ struct libcef_pointers {
cef_scroll_view_create_ptr cef_scroll_view_create; cef_scroll_view_create_ptr cef_scroll_view_create;
cef_textfield_create_ptr cef_textfield_create; cef_textfield_create_ptr cef_textfield_create;
cef_window_create_top_level_ptr cef_window_create_top_level; cef_window_create_top_level_ptr cef_window_create_top_level;
cef_version_info_ptr cef_version_info;
cef_api_hash_ptr cef_api_hash; cef_api_hash_ptr cef_api_hash;
cef_version_info_ptr cef_version_info;
cef_get_min_log_level_ptr cef_get_min_log_level; cef_get_min_log_level_ptr cef_get_min_log_level;
cef_get_vlog_level_ptr cef_get_vlog_level; cef_get_vlog_level_ptr cef_get_vlog_level;
cef_log_ptr cef_log; cef_log_ptr cef_log;
@ -864,8 +865,8 @@ int libcef_init_pointers(const char* path) {
INIT_ENTRY(cef_scroll_view_create); INIT_ENTRY(cef_scroll_view_create);
INIT_ENTRY(cef_textfield_create); INIT_ENTRY(cef_textfield_create);
INIT_ENTRY(cef_window_create_top_level); INIT_ENTRY(cef_window_create_top_level);
INIT_ENTRY(cef_version_info);
INIT_ENTRY(cef_api_hash); INIT_ENTRY(cef_api_hash);
INIT_ENTRY(cef_version_info);
INIT_ENTRY(cef_get_min_log_level); INIT_ENTRY(cef_get_min_log_level);
INIT_ENTRY(cef_get_vlog_level); INIT_ENTRY(cef_get_vlog_level);
INIT_ENTRY(cef_log); INIT_ENTRY(cef_log);
@ -1098,8 +1099,8 @@ int cef_create_url(const struct _cef_urlparts_t* parts, cef_string_t* url) {
} }
NO_SANITIZE("cfi-icall") NO_SANITIZE("cfi-icall")
cef_string_userfree_t cef_string_userfree_t cef_format_url_for_security_display(
cef_format_url_for_security_display(const cef_string_t* origin_url) { const cef_string_t* origin_url) {
return g_libcef_pointers.cef_format_url_for_security_display(origin_url); return g_libcef_pointers.cef_format_url_for_security_display(origin_url);
} }
@ -1590,54 +1591,46 @@ struct _cef_translator_test_t* cef_translator_test_create() {
} }
NO_SANITIZE("cfi-icall") NO_SANITIZE("cfi-icall")
struct struct _cef_translator_test_ref_ptr_library_t*
_cef_translator_test_ref_ptr_library_t* cef_translator_test_ref_ptr_library_create( cef_translator_test_ref_ptr_library_create(int value) {
int value) {
return g_libcef_pointers.cef_translator_test_ref_ptr_library_create(value); return g_libcef_pointers.cef_translator_test_ref_ptr_library_create(value);
} }
NO_SANITIZE("cfi-icall") NO_SANITIZE("cfi-icall")
struct struct _cef_translator_test_ref_ptr_library_child_t*
_cef_translator_test_ref_ptr_library_child_t* cef_translator_test_ref_ptr_library_child_create( cef_translator_test_ref_ptr_library_child_create(int value, int other_value) {
int value,
int other_value) {
return g_libcef_pointers.cef_translator_test_ref_ptr_library_child_create( return g_libcef_pointers.cef_translator_test_ref_ptr_library_child_create(
value, other_value); value, other_value);
} }
NO_SANITIZE("cfi-icall") NO_SANITIZE("cfi-icall")
struct struct _cef_translator_test_ref_ptr_library_child_child_t*
_cef_translator_test_ref_ptr_library_child_child_t* cef_translator_test_ref_ptr_library_child_child_create( cef_translator_test_ref_ptr_library_child_child_create(int value,
int value, int other_value,
int other_value, int other_other_value) {
int other_other_value) {
return g_libcef_pointers return g_libcef_pointers
.cef_translator_test_ref_ptr_library_child_child_create( .cef_translator_test_ref_ptr_library_child_child_create(
value, other_value, other_other_value); value, other_value, other_other_value);
} }
NO_SANITIZE("cfi-icall") NO_SANITIZE("cfi-icall")
struct struct _cef_translator_test_scoped_library_t*
_cef_translator_test_scoped_library_t* cef_translator_test_scoped_library_create( cef_translator_test_scoped_library_create(int value) {
int value) {
return g_libcef_pointers.cef_translator_test_scoped_library_create(value); return g_libcef_pointers.cef_translator_test_scoped_library_create(value);
} }
NO_SANITIZE("cfi-icall") NO_SANITIZE("cfi-icall")
struct struct _cef_translator_test_scoped_library_child_t*
_cef_translator_test_scoped_library_child_t* cef_translator_test_scoped_library_child_create( cef_translator_test_scoped_library_child_create(int value, int other_value) {
int value,
int other_value) {
return g_libcef_pointers.cef_translator_test_scoped_library_child_create( return g_libcef_pointers.cef_translator_test_scoped_library_child_create(
value, other_value); value, other_value);
} }
NO_SANITIZE("cfi-icall") NO_SANITIZE("cfi-icall")
struct struct _cef_translator_test_scoped_library_child_child_t*
_cef_translator_test_scoped_library_child_child_t* cef_translator_test_scoped_library_child_child_create( cef_translator_test_scoped_library_child_child_create(int value,
int value, int other_value,
int other_value, int other_other_value) {
int other_other_value) {
return g_libcef_pointers return g_libcef_pointers
.cef_translator_test_scoped_library_child_child_create(value, other_value, .cef_translator_test_scoped_library_child_child_create(value, other_value,
other_other_value); other_other_value);
@ -1727,14 +1720,14 @@ struct _cef_window_t* cef_window_create_top_level(
return g_libcef_pointers.cef_window_create_top_level(delegate); return g_libcef_pointers.cef_window_create_top_level(delegate);
} }
NO_SANITIZE("cfi-icall") int cef_version_info(int entry) {
return g_libcef_pointers.cef_version_info(entry);
}
NO_SANITIZE("cfi-icall") const char* cef_api_hash(int entry) { NO_SANITIZE("cfi-icall") const char* cef_api_hash(int entry) {
return g_libcef_pointers.cef_api_hash(entry); return g_libcef_pointers.cef_api_hash(entry);
} }
NO_SANITIZE("cfi-icall") int cef_version_info(int entry) {
return g_libcef_pointers.cef_version_info(entry);
}
NO_SANITIZE("cfi-icall") int cef_get_min_log_level() { NO_SANITIZE("cfi-icall") int cef_get_min_log_level() {
return g_libcef_pointers.cef_get_min_log_level(); return g_libcef_pointers.cef_get_min_log_level();
} }

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=a53efd61643236ca14fddb5541f23ef2d9d1dc54$ // $hash=32eea715f2566d1b6a4e3d263e35400cf7c53869$
// //
#include "include/capi/cef_app_capi.h" #include "include/capi/cef_app_capi.h"
@ -26,6 +26,7 @@
#include "include/capi/cef_v8_capi.h" #include "include/capi/cef_v8_capi.h"
#include "include/capi/cef_web_plugin_capi.h" #include "include/capi/cef_web_plugin_capi.h"
#include "include/capi/test/cef_test_helpers_capi.h" #include "include/capi/test/cef_test_helpers_capi.h"
#include "include/cef_api_hash.h"
#include "include/cef_app.h" #include "include/cef_app.h"
#include "include/cef_crash_util.h" #include "include/cef_crash_util.h"
#include "include/cef_file_util.h" #include "include/cef_file_util.h"
@ -38,7 +39,6 @@
#include "include/cef_task.h" #include "include/cef_task.h"
#include "include/cef_trace.h" #include "include/cef_trace.h"
#include "include/cef_v8.h" #include "include/cef_v8.h"
#include "include/cef_version.h"
#include "include/cef_web_plugin.h" #include "include/cef_web_plugin.h"
#include "include/test/cef_test_helpers.h" #include "include/test/cef_test_helpers.h"
#include "libcef_dll/cpptoc/app_cpptoc.h" #include "libcef_dll/cpptoc/app_cpptoc.h"

View File

@ -2,6 +2,7 @@
// reserved. Use of this source code is governed by a BSD-style license that // reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file. // can be found in the LICENSE file.
#include "include/cef_api_hash.h"
#include "include/cef_version.h" #include "include/cef_version.h"
#include "tests/gtest/include/gtest/gtest.h" #include "tests/gtest/include/gtest/gtest.h"

View File

@ -44,6 +44,7 @@ class cef_api_hash:
self.included_files = [] self.included_files = []
self.excluded_files = [ self.excluded_files = [
"cef_api_hash.h",
"cef_version.h", "cef_version.h",
"internal/cef_tuple.h", "internal/cef_tuple.h",
"internal/cef_types_wrappers.h", "internal/cef_types_wrappers.h",

View File

@ -246,7 +246,7 @@ def format_translation_includes(header, body):
result += '#include <algorithm>\n' result += '#include <algorithm>\n'
if body.find('cef_api_hash(') > 0: if body.find('cef_api_hash(') > 0:
result += '#include "include/cef_version.h"\n' result += '#include "include/cef_api_hash.h"\n'
# identify what CppToC classes are being used # identify what CppToC classes are being used
p = re.compile('([A-Za-z0-9_]{1,})CppToC') p = re.compile('([A-Za-z0-9_]{1,})CppToC')
@ -452,12 +452,47 @@ def get_next_function_impl(existing, name):
return result return result
def get_copyright(): def get_copyright(full=False):
result = \ if full:
result = \
"""// Copyright (c) $YEAR$ Marshall A. Greenblatt. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the name Chromium Embedded
// Framework nor the names of its contributors may be used to endorse
// or promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
else:
result = \
"""// Copyright (c) $YEAR$ The Chromium Embedded Framework Authors. All rights """// Copyright (c) $YEAR$ The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that // reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file. // can be found in the LICENSE file.
// """
result += \
"""//
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// //
// This file was generated by the CEF translator tool. If making changes by // This file was generated by the CEF translator tool. If making changes by

View File

@ -29,7 +29,7 @@ print "\nGenerating CEF version header file..."
cmd = [ cmd = [
'python', 'tools/make_version_header.py', '--header', 'python', 'tools/make_version_header.py', '--header',
'include/cef_version.h', '--cef_version', 'VERSION.in', '--chrome_version', 'include/cef_version.h', '--cef_version', 'VERSION.in', '--chrome_version',
'../chrome/VERSION', '--cpp_header_dir', 'include' '../chrome/VERSION'
] ]
RunAction(cef_dir, cmd) RunAction(cef_dir, cmd)

View File

@ -0,0 +1,77 @@
# Copyright (c) 2019 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_api_hash import cef_api_hash
from cef_parser import *
from file_util import *
def make_api_hash_header(cpp_header_dir):
# calculate api hashes
api_hash_calculator = cef_api_hash(cpp_header_dir, verbose=False)
api_hash = api_hash_calculator.calculate()
result = get_copyright(full=True) + \
"""#ifndef CEF_INCLUDE_API_HASH_H_
#define CEF_INCLUDE_API_HASH_H_
#include "include/internal/cef_export.h"
// The API hash is created by analyzing CEF header files for C API type
// definitions. The hash value will change when header files are modified in a
// way that may cause binary incompatibility with other builds. The universal
// hash value will change if any platform is affected whereas the platform hash
// values will change only if that particular platform is affected.
#define CEF_API_HASH_UNIVERSAL "$UNIVERSAL$"
#if defined(OS_WIN)
#define CEF_API_HASH_PLATFORM "$WINDOWS$"
#elif defined(OS_MACOSX)
#define CEF_API_HASH_PLATFORM "$MACOSX$"
#elif defined(OS_LINUX)
#define CEF_API_HASH_PLATFORM "$LINUX$"
#endif
#ifdef __cplusplus
extern "C" {
#endif
///
// Returns CEF API hashes for the libcef library. The returned string is owned
// by the library and should not be freed. The |entry| parameter describes which
// hash value will be returned:
// 0 - CEF_API_HASH_PLATFORM
// 1 - CEF_API_HASH_UNIVERSAL
// 2 - CEF_COMMIT_HASH (from cef_version.h)
///
CEF_EXPORT const char* cef_api_hash(int entry);
#ifdef __cplusplus
}
#endif
#endif // CEF_INCLUDE_API_HASH_H_
"""
# Substitute hash values for placeholders.
for platform, value in api_hash.iteritems():
result = result.replace('$%s$' % platform.upper(), value)
return result
def write_api_hash_header(header, cpp_header_dir):
newcontents = make_api_hash_header(cpp_header_dir)
return (header, newcontents)
# 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] + ' <cppheaderdir>')
sys.exit()
# Dump the result to stdout.
sys.stdout.write(make_api_hash_header(sys.argv[1]))

View File

@ -8,6 +8,7 @@ import os
# Other headers that export C API functions. # Other headers that export C API functions.
OTHER_HEADERS = [ OTHER_HEADERS = [
'cef_api_hash.h',
'cef_version.h', 'cef_version.h',
'internal/cef_logging_internal.h', 'internal/cef_logging_internal.h',
'internal/cef_string_list.h', 'internal/cef_string_list.h',
@ -205,7 +206,7 @@ if __name__ == "__main__":
# Create the header object. Should match the logic in translator.py. # Create the header object. Should match the logic in translator.py.
header = obj_header() header = obj_header()
header.set_root_directory(cpp_header_dir) header.set_root_directory(cpp_header_dir)
excluded_files = ['cef_application_mac.h', 'cef_version.h'] excluded_files = ['cef_api_hash.h', 'cef_application_mac.h', 'cef_version.h']
header.add_directory(cpp_header_dir, excluded_files) header.add_directory(cpp_header_dir, excluded_files)
header.add_directory(os.path.join(cpp_header_dir, 'test')) header.add_directory(os.path.join(cpp_header_dir, 'test'))
header.add_directory(os.path.join(cpp_header_dir, 'views')) header.add_directory(os.path.join(cpp_header_dir, 'views'))

View File

@ -5,7 +5,6 @@
from date_util import * from date_util import *
from file_util import * from file_util import *
from optparse import OptionParser from optparse import OptionParser
from cef_api_hash import cef_api_hash
import git_util as git import git_util as git
import sys import sys
@ -35,11 +34,6 @@ parser.add_option(
dest='chrome_version', dest='chrome_version',
metavar='FILE', metavar='FILE',
help='input Chrome version config file [required]') help='input Chrome version config file [required]')
parser.add_option(
'--cpp_header_dir',
dest='cpp_header_dir',
metavar='DIR',
help='input directory for C++ header files [required]')
parser.add_option( parser.add_option(
'-q', '-q',
'--quiet', '--quiet',
@ -50,12 +44,12 @@ parser.add_option(
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
# the header option is required # the header option is required
if options.header is None or options.cef_version is None or options.chrome_version is None or options.cpp_header_dir is None: if options.header is None or options.cef_version is None or options.chrome_version is None:
parser.print_help(sys.stdout) parser.print_help(sys.stdout)
sys.exit() sys.exit()
def write_version_header(header, chrome_version, cef_version, cpp_header_dir): def write_version_header(header, chrome_version, cef_version):
""" Creates the header file for the current revision and Chrome version information """ Creates the header file for the current revision and Chrome version information
if the information has changed or if the file doesn't already exist. """ if the information has changed or if the file doesn't already exist. """
@ -84,10 +78,6 @@ def write_version_header(header, chrome_version, cef_version, cpp_header_dir):
version = '%s.%s.%s.g%s' % (args['CEF_MAJOR'], args['BUILD'], commit_number, version = '%s.%s.%s.g%s' % (args['CEF_MAJOR'], args['BUILD'], commit_number,
commit_hash[:7]) commit_hash[:7])
# calculate api hashes
api_hash_calculator = cef_api_hash(cpp_header_dir, verbose=False)
api_hashes = api_hash_calculator.calculate()
newcontents = '// Copyright (c) '+year+' Marshall A. Greenblatt. All rights reserved.\n'+\ newcontents = '// Copyright (c) '+year+' Marshall A. Greenblatt. All rights reserved.\n'+\
'//\n'+\ '//\n'+\
'// Redistribution and use in source and binary forms, with or without\n'+\ '// Redistribution and use in source and binary forms, with or without\n'+\
@ -139,20 +129,6 @@ def write_version_header(header, chrome_version, cef_version, cpp_header_dir):
'#ifdef __cplusplus\n'+\ '#ifdef __cplusplus\n'+\
'extern "C" {\n'+\ 'extern "C" {\n'+\
'#endif\n\n'+\ '#endif\n\n'+\
'// The API hash is created by analyzing CEF header files for C API type\n'+\
'// definitions. The hash value will change when header files are modified\n'+\
'// in a way that may cause binary incompatibility with other builds. The\n'+\
'// universal hash value will change if any platform is affected whereas the\n'+\
'// platform hash values will change only if that particular platform is\n'+\
'// affected.\n'+\
'#define CEF_API_HASH_UNIVERSAL "' + api_hashes['universal'] + '"\n'+\
'#if defined(OS_WIN)\n'+\
'#define CEF_API_HASH_PLATFORM "' + api_hashes['windows'] + '"\n'+\
'#elif defined(OS_MACOSX)\n'+\
'#define CEF_API_HASH_PLATFORM "' + api_hashes['macosx'] + '"\n'+\
'#elif defined(OS_LINUX)\n'+\
'#define CEF_API_HASH_PLATFORM "' + api_hashes['linux'] + '"\n'+\
'#endif\n\n'+\
'// Returns CEF version information for the libcef library. The |entry|\n'+\ '// Returns CEF version information for the libcef library. The |entry|\n'+\
'// parameter describes which version component will be returned:\n'+\ '// parameter describes which version component will be returned:\n'+\
'// 0 - CEF_VERSION_MAJOR\n'+\ '// 0 - CEF_VERSION_MAJOR\n'+\
@ -163,15 +139,6 @@ def write_version_header(header, chrome_version, cef_version, cpp_header_dir):
'// 5 - CHROME_VERSION_PATCH\n'+\ '// 5 - CHROME_VERSION_PATCH\n'+\
'///\n'+\ '///\n'+\
'CEF_EXPORT int cef_version_info(int entry);\n\n'+\ 'CEF_EXPORT int cef_version_info(int entry);\n\n'+\
'///\n'+\
'// Returns CEF API hashes for the libcef library. The returned string is owned\n'+\
'// by the library and should not be freed. The |entry| parameter describes which\n'+\
'// hash value will be returned:\n'+\
'// 0 - CEF_API_HASH_PLATFORM\n'+\
'// 1 - CEF_API_HASH_UNIVERSAL\n'+\
'// 2 - CEF_COMMIT_HASH\n'+\
'///\n'+\
'CEF_EXPORT const char* cef_api_hash(int entry);\n\n'+\
'#ifdef __cplusplus\n'+\ '#ifdef __cplusplus\n'+\
'}\n'+\ '}\n'+\
'#endif\n\n'+\ '#endif\n\n'+\
@ -185,7 +152,7 @@ def write_version_header(header, chrome_version, cef_version, cpp_header_dir):
written = write_version_header(options.header, options.chrome_version, written = write_version_header(options.header, options.chrome_version,
options.cef_version, options.cpp_header_dir) options.cef_version)
if not options.quiet: if not options.quiet:
if written: if written:
sys.stdout.write('File ' + options.header + ' updated.\n') sys.stdout.write('File ' + options.header + ' updated.\n')

View File

@ -87,7 +87,7 @@ if __name__ == "__main__":
# Create the header object. Should match the logic in translator.py. # Create the header object. Should match the logic in translator.py.
header = obj_header() header = obj_header()
header.set_root_directory(cpp_header_dir) header.set_root_directory(cpp_header_dir)
excluded_files = ['cef_application_mac.h', 'cef_version.h'] excluded_files = ['cef_api_hash.h', 'cef_application_mac.h', 'cef_version.h']
header.add_directory(cpp_header_dir, excluded_files) header.add_directory(cpp_header_dir, excluded_files)
header.add_directory(os.path.join(cpp_header_dir, 'views')) header.add_directory(os.path.join(cpp_header_dir, 'views'))

View File

@ -42,7 +42,7 @@ if __name__ == "__main__":
# create the header object # create the header object
header = obj_header() header = obj_header()
excluded_files = ['cef_application_mac.h', 'cef_version.h'] excluded_files = ['cef_api_hash.h', 'cef_application_mac.h', 'cef_version.h']
header.add_directory(sys.argv[1], excluded_files) header.add_directory(sys.argv[1], excluded_files)
# dump the result to stdout # dump the result to stdout

View File

@ -7,6 +7,7 @@ from cef_parser import *
from clang_util import clang_format from clang_util import clang_format
from file_util import * from file_util import *
import hashlib import hashlib
from make_api_hash_header import *
from make_capi_header import * from make_capi_header import *
from make_cpptoc_header import * from make_cpptoc_header import *
from make_cpptoc_impl import * from make_cpptoc_impl import *
@ -72,6 +73,7 @@ cpp_header_dir = os.path.join(root_dir, 'include')
cpp_header_test_dir = os.path.join(cpp_header_dir, 'test') cpp_header_test_dir = os.path.join(cpp_header_dir, 'test')
cpp_header_views_dir = os.path.join(cpp_header_dir, 'views') cpp_header_views_dir = os.path.join(cpp_header_dir, 'views')
capi_header_dir = os.path.join(cpp_header_dir, 'capi') capi_header_dir = os.path.join(cpp_header_dir, 'capi')
api_hash_header = os.path.join(cpp_header_dir, 'cef_api_hash.h')
libcef_dll_dir = os.path.join(root_dir, 'libcef_dll') libcef_dll_dir = os.path.join(root_dir, 'libcef_dll')
cpptoc_global_impl = os.path.join(libcef_dll_dir, 'libcef_dll.cc') cpptoc_global_impl = os.path.join(libcef_dll_dir, 'libcef_dll.cc')
ctocpp_global_impl = os.path.join(libcef_dll_dir, 'wrapper', ctocpp_global_impl = os.path.join(libcef_dll_dir, 'wrapper',
@ -96,7 +98,7 @@ header = obj_header()
# add include files to be processed # add include files to be processed
header.set_root_directory(cpp_header_dir) header.set_root_directory(cpp_header_dir)
excluded_files = ['cef_application_mac.h', 'cef_version.h'] excluded_files = ['cef_api_hash.h', 'cef_application_mac.h', 'cef_version.h']
header.add_directory(cpp_header_dir, excluded_files) header.add_directory(cpp_header_dir, excluded_files)
header.add_directory(cpp_header_test_dir) header.add_directory(cpp_header_test_dir)
header.add_directory(cpp_header_views_dir) header.add_directory(cpp_header_views_dir)
@ -236,5 +238,11 @@ if not options.quiet:
sys.stdout.write('Generating ' + libcef_dll_dylib_impl + ' file...\n') sys.stdout.write('Generating ' + libcef_dll_dylib_impl + ' file...\n')
update_file(*write_libcef_dll_dylib_impl(header, libcef_dll_dylib_impl)) update_file(*write_libcef_dll_dylib_impl(header, libcef_dll_dylib_impl))
# Output the API hash header file. This must be done last because it reads files
# that were potentially written by proceeding operations.
if not options.quiet:
sys.stdout.write('Generating API hash header...\n')
update_file(*write_api_hash_header(api_hash_header, cpp_header_dir))
if not options.quiet: if not options.quiet:
sys.stdout.write('Done - Wrote ' + str(writect) + ' files.\n') sys.stdout.write('Done - Wrote ' + str(writect) + ' files.\n')