Move devtools resources to a separate devtools_resources.pak file (issue #714).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@762 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2012-09-05 22:34:30 +00:00
parent 234acdd760
commit 5ac06eb984
13 changed files with 551 additions and 552 deletions

View File

@ -49,6 +49,7 @@
], ],
'mac_bundle_resources': [ 'mac_bundle_resources': [
'<@(cefclient_bundle_resources_mac)', '<@(cefclient_bundle_resources_mac)',
'<(grit_out_dir)/devtools_resources.pak',
], ],
'mac_bundle_resources!': [ 'mac_bundle_resources!': [
# TODO(mark): Come up with a fancier way to do this (mac_info_plist?) # TODO(mark): Come up with a fancier way to do this (mac_info_plist?)
@ -87,24 +88,6 @@
'<@(locales)', '<@(locales)',
], ],
}, },
{
# On Windows chrome.pak will contain only the inspector resources.
# Other resources are built into libcef.dll.
'action_name': 'repack_resources',
'variables': {
'pak_inputs': [
'<(grit_out_dir)/devtools_resources.pak',
],
},
'inputs': [
'<(repack_path)',
'<@(pak_inputs)',
],
'outputs': [
'<(INTERMEDIATE_DIR)/repack/chrome.pak',
],
'action': ['python', '<(repack_path)', '<@(_outputs)', '<@(pak_inputs)'],
},
], ],
'copies': [ 'copies': [
{ {
@ -116,7 +99,7 @@
{ {
'destination': '<(PRODUCT_DIR)', 'destination': '<(PRODUCT_DIR)',
'files': [ 'files': [
'<(INTERMEDIATE_DIR)/repack/chrome.pak' '<(grit_out_dir)/devtools_resources.pak'
], ],
}, },
], ],
@ -175,7 +158,6 @@
'process_outputs_as_mac_bundle_resources': 1, 'process_outputs_as_mac_bundle_resources': 1,
'variables': { 'variables': {
'pak_inputs': [ 'pak_inputs': [
'<(grit_out_dir)/devtools_resources.pak',
'<(SHARED_INTERMEDIATE_DIR)/net/net_resources.pak', '<(SHARED_INTERMEDIATE_DIR)/net/net_resources.pak',
'<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_resources_100_percent.pak', '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_resources_100_percent.pak',
'<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_chromium_resources.pak', '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_chromium_resources.pak',
@ -255,7 +237,6 @@
'action_name': 'repack_resources', 'action_name': 'repack_resources',
'variables': { 'variables': {
'pak_inputs': [ 'pak_inputs': [
'<(grit_out_dir)/devtools_resources.pak',
'<(SHARED_INTERMEDIATE_DIR)/net/net_resources.pak', '<(SHARED_INTERMEDIATE_DIR)/net/net_resources.pak',
'<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_resources_100_percent.pak', '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_resources_100_percent.pak',
'<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_chromium_resources.pak', '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_chromium_resources.pak',
@ -282,7 +263,8 @@
{ {
'destination': '<(PRODUCT_DIR)', 'destination': '<(PRODUCT_DIR)',
'files': [ 'files': [
'<(INTERMEDIATE_DIR)/repack/chrome.pak' '<(INTERMEDIATE_DIR)/repack/chrome.pak',
'<(grit_out_dir)/devtools_resources.pak',
], ],
}, },
{ {

View File

@ -188,18 +188,18 @@ typedef struct _cef_settings_t {
#endif #endif
/// ///
// The fully qualified path for the cef.pak file. If this value is empty // The fully qualified path for the resources directory. If this value is
// the cef.pak file must be located in the module directory. This value is // empty the chrome.pak and/or devtools_resources.pak files must be located in
// ignored on Mac OS X where pack files are always loaded from the app bundle // the module directory on Windows/Linux or the app bundle Resources directory
// resource directory. // on Mac OS X.
/// ///
cef_string_t pack_file_path; cef_string_t resources_dir_path;
/// ///
// The fully qualified path for the locales directory. If this value is empty // The fully qualified path for the locales directory. If this value is empty
// the locales directory must be located in the module directory. This value // the locales directory must be located in the module directory. This value
// is ignored on Mac OS X where pack files are always loaded from the app // is ignored on Mac OS X where pack files are always loaded from the app
// bundle resource directory. // bundle Resources directory.
/// ///
cef_string_t locales_dir_path; cef_string_t locales_dir_path;

View File

@ -259,7 +259,7 @@ struct CefSettingsTraits {
cef_string_list_free(s->extra_plugin_paths); cef_string_list_free(s->extra_plugin_paths);
cef_string_clear(&s->log_file); cef_string_clear(&s->log_file);
cef_string_clear(&s->javascript_flags); cef_string_clear(&s->javascript_flags);
cef_string_clear(&s->pack_file_path); cef_string_clear(&s->resources_dir_path);
cef_string_clear(&s->locales_dir_path); cef_string_clear(&s->locales_dir_path);
} }
@ -294,8 +294,8 @@ struct CefSettingsTraits {
src->auto_detect_proxy_settings_enabled; src->auto_detect_proxy_settings_enabled;
#endif #endif
cef_string_set(src->pack_file_path.str, src->pack_file_path.length, cef_string_set(src->resources_dir_path.str, src->resources_dir_path.length,
&target->pack_file_path, copy); &target->resources_dir_path, copy);
cef_string_set(src->locales_dir_path.str, src->locales_dir_path.length, cef_string_set(src->locales_dir_path.str, src->locales_dir_path.length,
&target->locales_dir_path, copy); &target->locales_dir_path, copy);
target->pack_loading_disabled = src->pack_loading_disabled; target->pack_loading_disabled = src->pack_loading_disabled;

View File

@ -37,31 +37,6 @@ namespace {
// to initialize or reset to the same value. // to initialize or reset to the same value.
const int kNextBrowserIdReset = 1; const int kNextBrowserIdReset = 1;
#if defined(OS_MACOSX)
FilePath GetDefaultPackPath() {
// Start out with the path to the running executable.
FilePath execPath;
PathService::Get(base::FILE_EXE, &execPath);
// Get the main bundle path.
FilePath bundlePath = base::mac::GetAppBundlePath(execPath);
// Go into the Contents/Resources directory.
return bundlePath.Append(FILE_PATH_LITERAL("Contents"))
.Append(FILE_PATH_LITERAL("Resources"));
}
#else // !defined(OS_MACOSX)
FilePath GetDefaultPackPath() {
FilePath pak_dir;
PathService::Get(base::DIR_MODULE, &pak_dir);
return pak_dir;
}
#endif // !defined(OS_MACOSX)
// Used in multi-threaded message loop mode to observe shutdown of the UI // Used in multi-threaded message loop mode to observe shutdown of the UI
// thread. // thread.
class DestructionObserver : public MessageLoop::DestructionObserver { class DestructionObserver : public MessageLoop::DestructionObserver {
@ -392,14 +367,26 @@ CefRefPtr<CefBrowserImpl> CefContext::GetBrowserByID(int id) {
} }
void CefContext::InitializeResourceBundle() { void CefContext::InitializeResourceBundle() {
FilePath pak_file, locales_dir; #if !defined(OS_WIN)
FilePath chrome_pak_file;
#endif
FilePath devtools_pak_file, locales_dir;
if (!settings_.pack_loading_disabled) { if (!settings_.pack_loading_disabled) {
if (settings_.pack_file_path.length > 0) FilePath resources_dir_path;
pak_file = FilePath(CefString(&settings_.pack_file_path)); if (settings_.resources_dir_path.length > 0)
resources_dir_path = FilePath(CefString(&settings_.resources_dir_path));
if (resources_dir_path.empty())
resources_dir_path = GetResourcesFilePath();
if (pak_file.empty()) if (!resources_dir_path.empty()) {
pak_file = GetDefaultPackPath().Append(FILE_PATH_LITERAL("chrome.pak")); #if !defined(OS_WIN)
chrome_pak_file = resources_dir_path.Append(
FILE_PATH_LITERAL("chrome.pak"));
#endif
devtools_pak_file = resources_dir_path.Append(
FILE_PATH_LITERAL("devtools_resources.pak"));
}
if (settings_.locales_dir_path.length > 0) if (settings_.locales_dir_path.length > 0)
locales_dir = FilePath(CefString(&settings_.locales_dir_path)); locales_dir = FilePath(CefString(&settings_.locales_dir_path));
@ -420,14 +407,25 @@ void CefContext::InitializeResourceBundle() {
CHECK(!loaded_locale.empty()) << "Locale could not be found for " CHECK(!loaded_locale.empty()) << "Locale could not be found for "
<< locale_str; << locale_str;
if (file_util::PathExists(pak_file)) { resource_bundle_delegate_->set_allow_pack_file_load(true);
resource_bundle_delegate_->set_allow_pack_file_load(true);
// The chrome.pak file is required on non-Windows platforms.
#if !defined(OS_WIN)
if (file_util::PathExists(chrome_pak_file)) {
ResourceBundle::GetSharedInstance().AddDataPackFromPath( ResourceBundle::GetSharedInstance().AddDataPackFromPath(
pak_file, ui::SCALE_FACTOR_NONE); chrome_pak_file, ui::SCALE_FACTOR_NONE);
resource_bundle_delegate_->set_allow_pack_file_load(false);
} else { } else {
NOTREACHED() << "Could not load chrome.pak"; NOTREACHED() << "Could not load chrome.pak";
} }
#endif
// The devtools_resources.pak file is optional.
if (file_util::PathExists(devtools_pak_file)) {
ResourceBundle::GetSharedInstance().AddDataPackFromPath(
devtools_pak_file, ui::SCALE_FACTOR_NONE);
}
resource_bundle_delegate_->set_allow_pack_file_load(false);
} }
} }
@ -536,25 +534,24 @@ base::StringPiece CefContext::GetDataResource(int resource_id) const {
return value; return value;
} }
#if defined(OS_MACOSX)
FilePath CefContext::GetResourcesFilePath() const { FilePath CefContext::GetResourcesFilePath() const {
FilePath path; #if defined(OS_MACOSX)
// We need to know if we're bundled or not to know which path to use. // Start out with the path to the running executable.
if (base::mac::AmIBundled()) { FilePath execPath;
PathService::Get(base::DIR_EXE, &path); PathService::Get(base::FILE_EXE, &execPath);
path = path.Append(FilePath::kParentDirectory);
return path.AppendASCII("Resources"); // Get the main bundle path.
} else { FilePath bundlePath = base::mac::GetAppBundlePath(execPath);
// TODO(port): Allow the embedder to customize the resource path.
PathService::Get(base::DIR_SOURCE_ROOT, &path); // Go into the Contents/Resources directory.
path = path.AppendASCII("src"); return bundlePath.Append(FILE_PATH_LITERAL("Contents"))
path = path.AppendASCII("cef"); .Append(FILE_PATH_LITERAL("Resources"));
path = path.AppendASCII("tests"); #else
path = path.AppendASCII("cefclient"); FilePath pak_dir;
return path.AppendASCII("res"); PathService::Get(base::DIR_MODULE, &pak_dir);
} return pak_dir;
#endif
} }
#endif // defined(OS_MACOSX)
std::string CefContext::locale() const { std::string CefContext::locale() const {
std::string localeStr = CefString(&settings_.locale); std::string localeStr = CefString(&settings_.locale);

View File

@ -59,9 +59,7 @@ class CefContext : public CefBase {
string16 GetLocalizedString(int message_id) const; string16 GetLocalizedString(int message_id) const;
base::StringPiece GetDataResource(int resource_id) const; base::StringPiece GetDataResource(int resource_id) const;
#if defined(OS_MACOSX)
FilePath GetResourcesFilePath() const; FilePath GetResourcesFilePath() const;
#endif
// Retrieve the path at which cache data will be stored on disk. If empty, // Retrieve the path at which cache data will be stored on disk. If empty,
// cache data will be stored in-memory. // cache data will be stored in-memory.

View File

@ -250,8 +250,8 @@ void AppGetSettings(CefSettings& settings, CefRefPtr<CefApp>& app) {
CefString(&settings.javascript_flags) = CefString(&settings.javascript_flags) =
g_command_line->GetSwitchValue(cefclient::kJavascriptFlags); g_command_line->GetSwitchValue(cefclient::kJavascriptFlags);
CefString(&settings.pack_file_path) = CefString(&settings.resources_dir_path) =
g_command_line->GetSwitchValue(cefclient::kPackFilePath); g_command_line->GetSwitchValue(cefclient::kResourcesDirPath);
CefString(&settings.locales_dir_path) = CefString(&settings.locales_dir_path) =
g_command_line->GetSwitchValue(cefclient::kLocalesDirPath); g_command_line->GetSwitchValue(cefclient::kLocalesDirPath);

View File

@ -30,7 +30,7 @@ const char kGraphicsImpl_DesktopCmdBuffer[] = "desktop-command-buffer";
const char kLocalStorageQuota[] = "local-storage-quota"; const char kLocalStorageQuota[] = "local-storage-quota";
const char kSessionStorageQuota[] = "session-storage-quota"; const char kSessionStorageQuota[] = "session-storage-quota";
const char kJavascriptFlags[] = "javascript-flags"; const char kJavascriptFlags[] = "javascript-flags";
const char kPackFilePath[] = "pack-file-path"; const char kResourcesDirPath[] = "resources-dir-path";
const char kLocalesDirPath[] = "locales-dir-path"; const char kLocalesDirPath[] = "locales-dir-path";
const char kPackLoadingDisabled[] = "pack-loading-disabled"; const char kPackLoadingDisabled[] = "pack-loading-disabled";

View File

@ -32,7 +32,7 @@ extern const char kGraphicsImpl_DesktopCmdBuffer[];
extern const char kLocalStorageQuota[]; extern const char kLocalStorageQuota[];
extern const char kSessionStorageQuota[]; extern const char kSessionStorageQuota[];
extern const char kJavascriptFlags[]; extern const char kJavascriptFlags[];
extern const char kPackFilePath[]; extern const char kResourcesDirPath[];
extern const char kLocalesDirPath[]; extern const char kLocalesDirPath[];
extern const char kPackLoadingDisabled[]; extern const char kPackLoadingDisabled[];

View File

@ -117,8 +117,8 @@ void CefTestSuite::GetSettings(CefSettings& settings) {
javascript_flags += " " + other_javascript_flags; javascript_flags += " " + other_javascript_flags;
CefString(&settings.javascript_flags) = javascript_flags; CefString(&settings.javascript_flags) = javascript_flags;
CefString(&settings.pack_file_path) = CefString(&settings.resources_dir_path) =
commandline_->GetSwitchValueASCII(cefclient::kPackFilePath); commandline_->GetSwitchValueASCII(cefclient::kResourcesDirPath);
CefString(&settings.locales_dir_path) = CefString(&settings.locales_dir_path) =
commandline_->GetSwitchValueASCII(cefclient::kLocalesDirPath); commandline_->GetSwitchValueASCII(cefclient::kLocalesDirPath);

View File

@ -63,14 +63,21 @@ Required components:
* Localized resources * Localized resources
locales/ locales/
Note: A .pak file is loaded from this folder based on the value of Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
CefSettings.locale. Only configured locales need to be distributed. If no from this folder based on the value of environment variables which are read
locale is configured the default locale of "en-US" will be used. The with the following precedence order: LANGUAGE, LC_ALL, LC_MESSAGES and LANG.
locales folder must exist in the same directory as the executable. Only configured locales need to be distributed. If no locale is configured the
default locale of "en-US" will be used. Locale file loading can be disabled
completely using CefSettings.pack_loading_disabled. The locales folder path
can be customized using CefSettings.locales_dir_path.
* Other resources * Other resources
chrome.pak chrome.pak
Note: The chrome.pak file must exist in the same directory as the executable. devtools_resources.pak
Note: The devtools_resources.pak file contains WebKit inspector resources and
is optional. All other resources are required. Pack file loading can be
disabled completely using CefSettings.pack_loading_disabled. The resources
directory path can be customized using CefSettings.resources_dir_path.
LICENSING LICENSING

View File

@ -68,14 +68,21 @@ Required components:
* Localized resources * Localized resources
Resources/*.lproj/ Resources/*.lproj/
Note: A .pak file is loaded from this folder based on the value of Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
CefSettings.locale. Only configured locales need to be distributed. If no from this folder based on the CefSettings.locale value. Only configured
locale is configured the default locale of "en" will be used. locales need to be distributed. If no locale is configured the default locale
of "en" will be used. Locale file loading can be disabled completely using
CefSettings.pack_loading_disabled.
* Other resources * Other resources
Resources/chrome.pak Resources/chrome.pak
Resources/devtools_resources.pak
Resources/*.png Resources/*.png
Resources/*.tiff Resources/*.tiff
Note: The devtools_resources.pak file contains WebKit inspector resources and
is optional. All other resources are required. Pack file loading can be
disabled completely using CefSettings.pack_loading_disabled. The resources
directory path can be customized using CefSettings.resources_dir_path.
Optional components: Optional components:

View File

@ -74,17 +74,22 @@ Required components:
* Localized resources * Localized resources
locales/ locales/
Note: A .pak file is loaded from this folder based on the value of Note: Contains localized strings for WebKit UI controls. A .pak file is loaded
CefSettings.locale. Only configured locales need to be distributed. If no from this folder based on the CefSettings.locale value. Only configured
locale is configured the default locale of "en-US" will be used. The locales need to be distributed. If no locale is configured the default locale
locales folder must exist in the same directory as libcef.dll. of "en-US" will be used. Locale file loading can be disabled completely using
CefSettings.pack_loading_disabled. The locales folder path can be customized
* Other resources using CefSettings.locales_dir_path.
chrome.pak
Note: The chrome.pak file must exist in the same directory as libcef.dll.
Optional components: Optional components:
* Other resources
devtools_resources.pak
Note: The devtools_resources.pak file contains WebKit inspector resources.
Pack file loading can be disabled completely using CefSettings.
pack_loading_disabled. The resources directory path can be customized using
CefSettings.resources_dir_path.
* FFmpeg audio and video support * FFmpeg audio and video support
avcodec-54.dll avcodec-54.dll
avformat-54.dll avformat-54.dll

View File

@ -1,446 +1,449 @@
# Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights # Copyright (c) 2011 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.
from date_util import * from date_util import *
from file_util import * from file_util import *
from gclient_util import * from gclient_util import *
from optparse import OptionParser from optparse import OptionParser
import os import os
import re import re
import shlex import shlex
import subprocess import subprocess
from svn_util import * from svn_util import *
import sys import sys
import zipfile import zipfile
def create_archive(input_dir, zip_file): def create_archive(input_dir, zip_file):
""" Creates a zip archive of the specified input directory. """ """ Creates a zip archive of the specified input directory. """
zf = zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED) zf = zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED)
def addDir(dir): def addDir(dir):
for f in os.listdir(dir): for f in os.listdir(dir):
full_path = os.path.join(dir, f) full_path = os.path.join(dir, f)
if os.path.isdir(full_path): if os.path.isdir(full_path):
addDir(full_path) addDir(full_path)
else: else:
zf.write(full_path, os.path.relpath(full_path, \ zf.write(full_path, os.path.relpath(full_path, \
os.path.join(input_dir, os.pardir))) os.path.join(input_dir, os.pardir)))
addDir(input_dir) addDir(input_dir)
zf.close() zf.close()
def create_readme(src, output_dir, cef_url, cef_rev, cef_ver, chromium_url, \ def create_readme(src, output_dir, cef_url, cef_rev, cef_ver, chromium_url, \
chromium_rev, chromium_ver, date): chromium_rev, chromium_ver, date):
""" Creates the README.TXT file. """ """ Creates the README.TXT file. """
data = read_file(src) data = read_file(src)
data = data.replace('$CEF_URL$', cef_url) data = data.replace('$CEF_URL$', cef_url)
data = data.replace('$CEF_REV$', cef_rev) data = data.replace('$CEF_REV$', cef_rev)
data = data.replace('$CEF_VER$', cef_ver) data = data.replace('$CEF_VER$', cef_ver)
data = data.replace('$CHROMIUM_URL$', chromium_url) data = data.replace('$CHROMIUM_URL$', chromium_url)
data = data.replace('$CHROMIUM_REV$', chromium_rev) data = data.replace('$CHROMIUM_REV$', chromium_rev)
data = data.replace('$CHROMIUM_VER$', chromium_ver) data = data.replace('$CHROMIUM_VER$', chromium_ver)
data = data.replace('$DATE$', date) data = data.replace('$DATE$', date)
write_file(os.path.join(output_dir, 'README.txt'), data) write_file(os.path.join(output_dir, 'README.txt'), data)
if not options.quiet: if not options.quiet:
sys.stdout.write('Creating README.TXT file.\n') sys.stdout.write('Creating README.TXT file.\n')
def eval_file(src): def eval_file(src):
""" Loads and evaluates the contents of the specified file. """ """ Loads and evaluates the contents of the specified file. """
return eval(read_file(src), {'__builtins__': None}, None) return eval(read_file(src), {'__builtins__': None}, None)
def transfer_gypi_files(src_dir, gypi_paths, gypi_path_prefix, dst_dir, quiet): def transfer_gypi_files(src_dir, gypi_paths, gypi_path_prefix, dst_dir, quiet):
""" Transfer files from one location to another. """ """ Transfer files from one location to another. """
for path in gypi_paths: for path in gypi_paths:
# skip gyp includes # skip gyp includes
if path[:2] == '<@': if path[:2] == '<@':
continue continue
src = os.path.join(src_dir, path) src = os.path.join(src_dir, path)
dst = os.path.join(dst_dir, path.replace(gypi_path_prefix, '')) dst = os.path.join(dst_dir, path.replace(gypi_path_prefix, ''))
dst_path = os.path.dirname(dst) dst_path = os.path.dirname(dst)
make_dir(dst_path, quiet) make_dir(dst_path, quiet)
copy_file(src, dst, quiet) copy_file(src, dst, quiet)
def normalize_headers(file, new_path = ''): def normalize_headers(file, new_path = ''):
""" Normalize headers post-processing. Remove the path component from any """ Normalize headers post-processing. Remove the path component from any
project include directives. """ project include directives. """
data = read_file(file) data = read_file(file)
data = re.sub(r'''#include \"(?!include\/)[a-zA-Z0-9_\/]+\/+([a-zA-Z0-9_\.]+)\"''', \ data = re.sub(r'''#include \"(?!include\/)[a-zA-Z0-9_\/]+\/+([a-zA-Z0-9_\.]+)\"''', \
"// Include path modified for CEF Binary Distribution.\n#include \""+new_path+"\\1\"", data) "// Include path modified for CEF Binary Distribution.\n#include \""+new_path+"\\1\"", data)
write_file(file, data) write_file(file, data)
def transfer_files(cef_dir, script_dir, transfer_cfg, output_dir, quiet): def transfer_files(cef_dir, script_dir, transfer_cfg, output_dir, quiet):
""" Transfer files based on the specified configuration. """ """ Transfer files based on the specified configuration. """
if not path_exists(transfer_cfg): if not path_exists(transfer_cfg):
return return
configs = eval_file(transfer_cfg) configs = eval_file(transfer_cfg)
for cfg in configs: for cfg in configs:
dst = os.path.join(output_dir, cfg['target']) dst = os.path.join(output_dir, cfg['target'])
# perform a copy if source is specified # perform a copy if source is specified
if not cfg['source'] is None: if not cfg['source'] is None:
src = os.path.join(cef_dir, cfg['source']) src = os.path.join(cef_dir, cfg['source'])
dst_path = os.path.dirname(dst) dst_path = os.path.dirname(dst)
make_dir(dst_path, quiet) make_dir(dst_path, quiet)
copy_file(src, dst, quiet) copy_file(src, dst, quiet)
# place a readme file in the destination directory # place a readme file in the destination directory
readme = os.path.join(dst_path, 'README-TRANSFER.txt') readme = os.path.join(dst_path, 'README-TRANSFER.txt')
if not path_exists(readme): if not path_exists(readme):
copy_file(os.path.join(script_dir, 'distrib/README-TRANSFER.txt'), readme) copy_file(os.path.join(script_dir, 'distrib/README-TRANSFER.txt'), readme)
open(readme, 'ab').write(cfg['source']+"\n") open(readme, 'ab').write(cfg['source']+"\n")
# perform any required post-processing # perform any required post-processing
if 'post-process' in cfg: if 'post-process' in cfg:
post = cfg['post-process'] post = cfg['post-process']
if post == 'normalize_headers': if post == 'normalize_headers':
new_path = '' new_path = ''
if cfg.has_key('new_header_path'): if cfg.has_key('new_header_path'):
new_path = cfg['new_header_path'] new_path = cfg['new_header_path']
normalize_headers(dst, new_path) normalize_headers(dst, new_path)
def generate_msvs_projects(version): def generate_msvs_projects(version):
""" Generate MSVS projects for the specified version. """ """ Generate MSVS projects for the specified version. """
sys.stdout.write('Generating '+version+' project files...') sys.stdout.write('Generating '+version+' project files...')
os.environ['GYP_MSVS_VERSION'] = version os.environ['GYP_MSVS_VERSION'] = version
gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ] gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ]
RunAction(cef_dir, gyper); RunAction(cef_dir, gyper);
move_file(os.path.relpath(os.path.join(output_dir, 'cefclient.sln')), \ move_file(os.path.relpath(os.path.join(output_dir, 'cefclient.sln')), \
os.path.relpath(os.path.join(output_dir, 'cefclient'+version+'.sln'))) os.path.relpath(os.path.join(output_dir, 'cefclient'+version+'.sln')))
def fix_msvs_projects(): def fix_msvs_projects():
""" Fix the output directory path in all .vcproj and .vcxproj files. """ """ Fix the output directory path in all .vcproj and .vcxproj files. """
files = [] files = []
for file in get_files(os.path.join(output_dir, '*.vcproj')): for file in get_files(os.path.join(output_dir, '*.vcproj')):
files.append(file) files.append(file)
for file in get_files(os.path.join(output_dir, '*.vcxproj')): for file in get_files(os.path.join(output_dir, '*.vcxproj')):
files.append(file) files.append(file)
for file in files: for file in files:
data = read_file(file) data = read_file(file)
data = data.replace('../../..\\build\\', '') data = data.replace('../../..\\build\\', '')
write_file(file, data) write_file(file, data)
def run(command_line, working_dir): def run(command_line, working_dir):
""" Run a command. """ """ Run a command. """
sys.stdout.write('-------- Running "'+command_line+'" in "'+\ sys.stdout.write('-------- Running "'+command_line+'" in "'+\
working_dir+'"...'+"\n") working_dir+'"...'+"\n")
args = shlex.split(command_line.replace('\\', '\\\\')) args = shlex.split(command_line.replace('\\', '\\\\'))
return subprocess.check_call(args, cwd=working_dir, env=os.environ, return subprocess.check_call(args, cwd=working_dir, env=os.environ,
shell=(sys.platform == 'win32')) shell=(sys.platform == 'win32'))
# cannot be loaded as a module # cannot be loaded as a module
if __name__ != "__main__": if __name__ != "__main__":
sys.stderr.write('This file cannot be loaded as a module!') sys.stderr.write('This file cannot be loaded as a module!')
sys.exit() sys.exit()
# parse command-line options # parse command-line options
disc = """ disc = """
This utility builds the CEF Binary Distribution. This utility builds the CEF Binary Distribution.
""" """
parser = OptionParser(description=disc) parser = OptionParser(description=disc)
parser.add_option('--output-dir', dest='outputdir', metavar='DIR', parser.add_option('--output-dir', dest='outputdir', metavar='DIR',
help='output directory [required]') help='output directory [required]')
parser.add_option('--allow-partial', parser.add_option('--allow-partial',
action='store_true', dest='allowpartial', default=False, action='store_true', dest='allowpartial', default=False,
help='allow creation of partial distributions') help='allow creation of partial distributions')
parser.add_option('-q', '--quiet', parser.add_option('-q', '--quiet',
action='store_true', dest='quiet', default=False, action='store_true', dest='quiet', default=False,
help='do not output detailed status information') help='do not output detailed status information')
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
# the outputdir option is required # the outputdir option is required
if options.outputdir is None: if options.outputdir is None:
parser.print_help(sys.stdout) parser.print_help(sys.stdout)
sys.exit() sys.exit()
# script directory # script directory
script_dir = os.path.dirname(__file__) script_dir = os.path.dirname(__file__)
# CEF root directory # CEF root directory
cef_dir = os.path.abspath(os.path.join(script_dir, os.pardir)) cef_dir = os.path.abspath(os.path.join(script_dir, os.pardir))
# retrieve url, revision and date information # retrieve url, revision and date information
cef_info = get_svn_info(cef_dir) cef_info = get_svn_info(cef_dir)
cef_url = cef_info['url'] cef_url = cef_info['url']
cef_rev = cef_info['revision'] cef_rev = cef_info['revision']
chromium_info = get_svn_info(os.path.join(cef_dir, os.pardir)) chromium_info = get_svn_info(os.path.join(cef_dir, os.pardir))
chromium_url = chromium_info['url'] chromium_url = chromium_info['url']
chromium_rev = chromium_info['revision'] chromium_rev = chromium_info['revision']
date = get_date() date = get_date()
# Read and parse the version file (key=value pairs, one per line) # Read and parse the version file (key=value pairs, one per line)
chrome = {} chrome = {}
lines = read_file(os.path.join(cef_dir, '../chrome/VERSION')).split("\n") lines = read_file(os.path.join(cef_dir, '../chrome/VERSION')).split("\n")
for line in lines: for line in lines:
parts = line.split('=', 1) parts = line.split('=', 1)
if len(parts) == 2: if len(parts) == 2:
chrome[parts[0]] = parts[1] chrome[parts[0]] = parts[1]
cef_ver = '1.'+chrome['BUILD']+'.'+cef_rev cef_ver = '1.'+chrome['BUILD']+'.'+cef_rev
chromium_ver = chrome['MAJOR']+'.'+chrome['MINOR']+'.'+chrome['BUILD']+'.'+chrome['PATCH'] chromium_ver = chrome['MAJOR']+'.'+chrome['MINOR']+'.'+chrome['BUILD']+'.'+chrome['PATCH']
# Test the operating system. # Test the operating system.
platform = ''; platform = '';
if sys.platform == 'win32': if sys.platform == 'win32':
platform = 'windows' platform = 'windows'
elif sys.platform == 'darwin': elif sys.platform == 'darwin':
platform = 'macosx' platform = 'macosx'
elif sys.platform.startswith('linux'): elif sys.platform.startswith('linux'):
platform = 'linux' platform = 'linux'
# output directory # output directory
output_dir = os.path.abspath(os.path.join(options.outputdir, \ output_dir = os.path.abspath(os.path.join(options.outputdir, \
'cef_binary_'+cef_ver+'_'+platform)) 'cef_binary_'+cef_ver+'_'+platform))
remove_dir(output_dir, options.quiet) remove_dir(output_dir, options.quiet)
make_dir(output_dir, options.quiet) make_dir(output_dir, options.quiet)
# symbol directory # symbol directory
symbol_dir = os.path.abspath(os.path.join(options.outputdir, \ symbol_dir = os.path.abspath(os.path.join(options.outputdir, \
'cef_binary_'+cef_ver+'_'+platform+'_symbols')) 'cef_binary_'+cef_ver+'_'+platform+'_symbols'))
remove_dir(symbol_dir, options.quiet) remove_dir(symbol_dir, options.quiet)
make_dir(symbol_dir, options.quiet) make_dir(symbol_dir, options.quiet)
# transfer the LICENSE.txt file # transfer the LICENSE.txt file
copy_file(os.path.join(cef_dir, 'LICENSE.txt'), output_dir, options.quiet) copy_file(os.path.join(cef_dir, 'LICENSE.txt'), output_dir, options.quiet)
# read the variables list from the autogenerated cef_paths.gypi file # read the variables list from the autogenerated cef_paths.gypi file
cef_paths = eval_file(os.path.join(cef_dir, 'cef_paths.gypi')) cef_paths = eval_file(os.path.join(cef_dir, 'cef_paths.gypi'))
cef_paths = cef_paths['variables'] cef_paths = cef_paths['variables']
# read the variables list from the manually edited cef_paths2.gypi file # read the variables list from the manually edited cef_paths2.gypi file
cef_paths2 = eval_file(os.path.join(cef_dir, 'cef_paths2.gypi')) cef_paths2 = eval_file(os.path.join(cef_dir, 'cef_paths2.gypi'))
cef_paths2 = cef_paths2['variables'] cef_paths2 = cef_paths2['variables']
# create the include directory # create the include directory
include_dir = os.path.join(output_dir, 'include') include_dir = os.path.join(output_dir, 'include')
make_dir(include_dir, options.quiet) make_dir(include_dir, options.quiet)
# create the cefclient directory # create the cefclient directory
cefclient_dir = os.path.join(output_dir, 'cefclient') cefclient_dir = os.path.join(output_dir, 'cefclient')
make_dir(cefclient_dir, options.quiet) make_dir(cefclient_dir, options.quiet)
# create the libcef_dll_wrapper directory # create the libcef_dll_wrapper directory
wrapper_dir = os.path.join(output_dir, 'libcef_dll') wrapper_dir = os.path.join(output_dir, 'libcef_dll')
make_dir(wrapper_dir, options.quiet) make_dir(wrapper_dir, options.quiet)
# transfer common include files # transfer common include files
transfer_gypi_files(cef_dir, cef_paths2['includes_common'], \ transfer_gypi_files(cef_dir, cef_paths2['includes_common'], \
'include/', include_dir, options.quiet) 'include/', include_dir, options.quiet)
transfer_gypi_files(cef_dir, cef_paths2['includes_capi'], \ transfer_gypi_files(cef_dir, cef_paths2['includes_capi'], \
'include/', include_dir, options.quiet) 'include/', include_dir, options.quiet)
transfer_gypi_files(cef_dir, cef_paths2['includes_wrapper'], \ transfer_gypi_files(cef_dir, cef_paths2['includes_wrapper'], \
'include/', include_dir, options.quiet) 'include/', include_dir, options.quiet)
transfer_gypi_files(cef_dir, cef_paths['autogen_cpp_includes'], \ transfer_gypi_files(cef_dir, cef_paths['autogen_cpp_includes'], \
'include/', include_dir, options.quiet) 'include/', include_dir, options.quiet)
transfer_gypi_files(cef_dir, cef_paths['autogen_capi_includes'], \ transfer_gypi_files(cef_dir, cef_paths['autogen_capi_includes'], \
'include/', include_dir, options.quiet) 'include/', include_dir, options.quiet)
# transfer common cefclient files # transfer common cefclient files
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_common'], \ transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_common'], \
'tests/cefclient/', cefclient_dir, options.quiet) 'tests/cefclient/', cefclient_dir, options.quiet)
# transfer common libcef_dll_wrapper files # transfer common libcef_dll_wrapper files
transfer_gypi_files(cef_dir, cef_paths2['libcef_dll_wrapper_sources_common'], \ transfer_gypi_files(cef_dir, cef_paths2['libcef_dll_wrapper_sources_common'], \
'libcef_dll/', wrapper_dir, options.quiet) 'libcef_dll/', wrapper_dir, options.quiet)
transfer_gypi_files(cef_dir, cef_paths['autogen_client_side'], \ transfer_gypi_files(cef_dir, cef_paths['autogen_client_side'], \
'libcef_dll/', wrapper_dir, options.quiet) 'libcef_dll/', wrapper_dir, options.quiet)
# transfer gyp files # transfer gyp files
copy_file(os.path.join(script_dir, 'distrib/cefclient.gyp'), output_dir, options.quiet) copy_file(os.path.join(script_dir, 'distrib/cefclient.gyp'), output_dir, options.quiet)
paths_gypi = os.path.join(cef_dir, 'cef_paths2.gypi') paths_gypi = os.path.join(cef_dir, 'cef_paths2.gypi')
data = read_file(paths_gypi) data = read_file(paths_gypi)
data = data.replace('tests/cefclient/', 'cefclient/') data = data.replace('tests/cefclient/', 'cefclient/')
write_file(os.path.join(output_dir, 'cef_paths2.gypi'), data) write_file(os.path.join(output_dir, 'cef_paths2.gypi'), data)
copy_file(os.path.join(cef_dir, 'cef_paths.gypi'), \ copy_file(os.path.join(cef_dir, 'cef_paths.gypi'), \
os.path.join(output_dir, 'cef_paths.gypi'), options.quiet) os.path.join(output_dir, 'cef_paths.gypi'), options.quiet)
# transfer additional files # transfer additional files
transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/transfer.cfg'), \ transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/transfer.cfg'), \
output_dir, options.quiet) output_dir, options.quiet)
if platform == 'windows': if platform == 'windows':
# create the README.TXT file # create the README.TXT file
create_readme(os.path.join(script_dir, 'distrib/win/README.txt'), output_dir, cef_url, \ create_readme(os.path.join(script_dir, 'distrib/win/README.txt'), output_dir, cef_url, \
cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date) cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date)
# transfer include files # transfer include files
transfer_gypi_files(cef_dir, cef_paths2['includes_win'], \ transfer_gypi_files(cef_dir, cef_paths2['includes_win'], \
'include/', include_dir, options.quiet) 'include/', include_dir, options.quiet)
# transfer cefclient files # transfer cefclient files
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_win'], \ transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_win'], \
'tests/cefclient/', cefclient_dir, options.quiet) 'tests/cefclient/', cefclient_dir, options.quiet)
# transfer build/Debug files # transfer build/Debug files
if not options.allowpartial or path_exists(os.path.join(cef_dir, 'Debug')): if not options.allowpartial or path_exists(os.path.join(cef_dir, 'Debug')):
dst_dir = os.path.join(output_dir, 'Debug') dst_dir = os.path.join(output_dir, 'Debug')
make_dir(dst_dir, options.quiet) make_dir(dst_dir, options.quiet)
copy_files(os.path.join(script_dir, 'distrib/win/*.dll'), dst_dir, options.quiet) copy_files(os.path.join(script_dir, 'distrib/win/*.dll'), dst_dir, options.quiet)
copy_files(os.path.join(cef_dir, 'Debug/*.dll'), dst_dir, options.quiet) copy_files(os.path.join(cef_dir, 'Debug/*.dll'), dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, 'Debug/cefclient.exe'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, 'Debug/cefclient.exe'), dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, 'Debug/chrome.pak'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, 'Debug/devtools_resources.pak'), dst_dir, options.quiet)
copy_dir(os.path.join(cef_dir, 'Debug/locales'), os.path.join(dst_dir, 'locales'), \ copy_dir(os.path.join(cef_dir, 'Debug/locales'), os.path.join(dst_dir, 'locales'), \
options.quiet) options.quiet)
# transfer lib/Debug files # transfer lib/Debug files
dst_dir = os.path.join(output_dir, 'lib/Debug') dst_dir = os.path.join(output_dir, 'lib/Debug')
make_dir(dst_dir, options.quiet) make_dir(dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, 'Debug/lib/libcef.lib'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, 'Debug/lib/libcef.lib'), dst_dir, options.quiet)
else: else:
sys.stderr.write("No Debug build files.\n") sys.stderr.write("No Debug build files.\n")
# transfer build/Release files # transfer build/Release files
if not options.allowpartial or path_exists(os.path.join(cef_dir, 'Release')): if not options.allowpartial or path_exists(os.path.join(cef_dir, 'Release')):
dst_dir = os.path.join(output_dir, 'Release') dst_dir = os.path.join(output_dir, 'Release')
make_dir(dst_dir, options.quiet) make_dir(dst_dir, options.quiet)
copy_files(os.path.join(script_dir, 'distrib/win/*.dll'), dst_dir, options.quiet) copy_files(os.path.join(script_dir, 'distrib/win/*.dll'), dst_dir, options.quiet)
copy_files(os.path.join(cef_dir, 'Release/*.dll'), dst_dir, options.quiet) copy_files(os.path.join(cef_dir, 'Release/*.dll'), dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, 'Release/cefclient.exe'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, 'Release/cefclient.exe'), dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, 'Release/chrome.pak'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, 'Release/devtools_resources.pak'), dst_dir, options.quiet)
copy_dir(os.path.join(cef_dir, 'Release/locales'), os.path.join(dst_dir, 'locales'), \ copy_dir(os.path.join(cef_dir, 'Release/locales'), os.path.join(dst_dir, 'locales'), \
options.quiet) options.quiet)
# transfer lib/Release files # transfer lib/Release files
dst_dir = os.path.join(output_dir, 'lib/Release') dst_dir = os.path.join(output_dir, 'lib/Release')
make_dir(dst_dir, options.quiet) make_dir(dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, 'Release/lib/libcef.lib'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, 'Release/lib/libcef.lib'), dst_dir, options.quiet)
# transfer symbols # transfer symbols
copy_file(os.path.join(cef_dir, 'Release/libcef.pdb'), symbol_dir, options.quiet) copy_file(os.path.join(cef_dir, 'Release/libcef.pdb'), symbol_dir, options.quiet)
else: else:
sys.stderr.write("No Release build files.\n") sys.stderr.write("No Release build files.\n")
# generate doc files # generate doc files
os.popen('make_cppdocs.bat '+cef_rev) os.popen('make_cppdocs.bat '+cef_rev)
# transfer docs files # transfer docs files
dst_dir = os.path.join(output_dir, 'docs') dst_dir = os.path.join(output_dir, 'docs')
src_dir = os.path.join(cef_dir, 'docs') src_dir = os.path.join(cef_dir, 'docs')
if path_exists(src_dir): if path_exists(src_dir):
copy_dir(src_dir, dst_dir, options.quiet) copy_dir(src_dir, dst_dir, options.quiet)
# transfer additional files, if any # transfer additional files, if any
transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/win/transfer.cfg'), \ transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/win/transfer.cfg'), \
output_dir, options.quiet) output_dir, options.quiet)
# generate the project files # generate the project files
generate_msvs_projects('2005'); generate_msvs_projects('2005');
generate_msvs_projects('2008'); generate_msvs_projects('2008');
generate_msvs_projects('2010'); generate_msvs_projects('2010');
fix_msvs_projects(); fix_msvs_projects();
elif platform == 'macosx': elif platform == 'macosx':
# create the README.TXT file # create the README.TXT file
create_readme(os.path.join(script_dir, 'distrib/mac/README.txt'), output_dir, cef_url, \ create_readme(os.path.join(script_dir, 'distrib/mac/README.txt'), output_dir, cef_url, \
cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date) cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date)
# transfer include files # transfer include files
transfer_gypi_files(cef_dir, cef_paths2['includes_mac'], \ transfer_gypi_files(cef_dir, cef_paths2['includes_mac'], \
'include/', include_dir, options.quiet) 'include/', include_dir, options.quiet)
# transfer cefclient files # transfer cefclient files
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_mac'], \ transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_mac'], \
'tests/cefclient/', cefclient_dir, options.quiet) 'tests/cefclient/', cefclient_dir, options.quiet)
# transfer cefclient/mac files # transfer cefclient/mac files
copy_dir(os.path.join(cef_dir, 'tests/cefclient/mac/'), os.path.join(output_dir, 'cefclient/mac/'), \ copy_dir(os.path.join(cef_dir, 'tests/cefclient/mac/'), os.path.join(output_dir, 'cefclient/mac/'), \
options.quiet) options.quiet)
# transfer xcodebuild/Debug files # transfer xcodebuild/Debug files
if not options.allowpartial or path_exists(os.path.join(cef_dir, '../xcodebuild/Debug')): if not options.allowpartial or path_exists(os.path.join(cef_dir, '../xcodebuild/Debug')):
dst_dir = os.path.join(output_dir, 'Debug') dst_dir = os.path.join(output_dir, 'Debug')
make_dir(dst_dir, options.quiet) make_dir(dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, '../xcodebuild/Debug/ffmpegsumo.so'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, '../xcodebuild/Debug/ffmpegsumo.so'), dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, '../xcodebuild/Debug/libcef.dylib'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, '../xcodebuild/Debug/libcef.dylib'), dst_dir, options.quiet)
# transfer xcodebuild/Release files # transfer xcodebuild/Release files
if not options.allowpartial or path_exists(os.path.join(cef_dir, '../xcodebuild/Release')): if not options.allowpartial or path_exists(os.path.join(cef_dir, '../xcodebuild/Release')):
dst_dir = os.path.join(output_dir, 'Release') dst_dir = os.path.join(output_dir, 'Release')
make_dir(dst_dir, options.quiet) make_dir(dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, '../xcodebuild/Release/ffmpegsumo.so'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, '../xcodebuild/Release/ffmpegsumo.so'), dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, '../xcodebuild/Release/libcef.dylib'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, '../xcodebuild/Release/libcef.dylib'), dst_dir, options.quiet)
# create the real dSYM file from the "fake" dSYM file # create the real dSYM file from the "fake" dSYM file
sys.stdout.write("Creating the real dSYM file...\n") sys.stdout.write("Creating the real dSYM file...\n")
src_path = os.path.join(cef_dir, '../xcodebuild/Release/libcef.dylib.dSYM/Contents/Resources/DWARF/libcef.dylib') src_path = os.path.join(cef_dir, '../xcodebuild/Release/libcef.dylib.dSYM/Contents/Resources/DWARF/libcef.dylib')
dst_path = os.path.join(symbol_dir, 'libcef.dylib.dSYM') dst_path = os.path.join(symbol_dir, 'libcef.dylib.dSYM')
run('dsymutil '+src_path+' -o '+dst_path, cef_dir) run('dsymutil '+src_path+' -o '+dst_path, cef_dir)
# transfer resource files # transfer resource files
dst_dir = os.path.join(output_dir, 'Resources') dst_dir = os.path.join(output_dir, 'Resources')
make_dir(dst_dir, options.quiet) make_dir(dst_dir, options.quiet)
copy_files(os.path.join(cef_dir, '../third_party/WebKit/Source/WebCore/Resources/*.*'), dst_dir, options.quiet) copy_files(os.path.join(cef_dir, '../third_party/WebKit/Source/WebCore/Resources/*.*'), dst_dir, options.quiet)
copy_file(os.path.join(cef_dir, '../xcodebuild/Release/cefclient.app/Contents/Resources/chrome.pak'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, '../xcodebuild/Release/cefclient.app/Contents/Resources/chrome.pak'), dst_dir, options.quiet)
copy_files(os.path.join(cef_dir, '../xcodebuild/Release/cefclient.app/Contents/Resources/*.lproj'), dst_dir, options.quiet) copy_file(os.path.join(cef_dir, '../xcodebuild/Release/cefclient.app/Contents/Resources/devtools_resources.pak'), dst_dir, options.quiet)
remove_dir(os.path.join(dst_dir, 'English.lproj')) copy_files(os.path.join(cef_dir, '../xcodebuild/Release/cefclient.app/Contents/Resources/*.lproj'), dst_dir, options.quiet)
remove_dir(os.path.join(dst_dir, 'English.lproj'))
# transfer additional files, if any
transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/mac/transfer.cfg'), \ # transfer additional files, if any
output_dir, options.quiet) transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/mac/transfer.cfg'), \
output_dir, options.quiet)
# Generate Xcode project files
sys.stdout.write('Generating Xcode project files...') # Generate Xcode project files
gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ] sys.stdout.write('Generating Xcode project files...')
RunAction(cef_dir, gyper); gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ]
RunAction(cef_dir, gyper);
# Post-process the Xcode project to fix file paths
src_file = os.path.join(output_dir, 'cefclient.xcodeproj/project.pbxproj') # Post-process the Xcode project to fix file paths
data = read_file(src_file) src_file = os.path.join(output_dir, 'cefclient.xcodeproj/project.pbxproj')
data = data.replace('../../../build/mac/', 'tools/') data = read_file(src_file)
data = data.replace('../../../', '') data = data.replace('../../../build/mac/', 'tools/')
write_file(src_file, data) data = data.replace('../../../', '')
write_file(src_file, data)
elif platform == 'linux':
linux_build_dir = os.path.join(cef_dir, os.pardir, 'out') elif platform == 'linux':
linux_build_dir = os.path.join(cef_dir, os.pardir, 'out')
# create the README.TXT file
create_readme(os.path.join(script_dir, 'distrib/linux/README.txt'), output_dir, cef_url, \ # create the README.TXT file
cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date) create_readme(os.path.join(script_dir, 'distrib/linux/README.txt'), output_dir, cef_url, \
cef_rev, cef_ver, chromium_url, chromium_rev, chromium_ver, date)
# transfer build/Debug files
if not options.allowpartial or path_exists(os.path.join(linux_build_dir, 'Debug')): # transfer build/Debug files
dst_dir = os.path.join(output_dir, 'Debug') if not options.allowpartial or path_exists(os.path.join(linux_build_dir, 'Debug')):
make_dir(dst_dir, options.quiet) dst_dir = os.path.join(output_dir, 'Debug')
copy_dir(os.path.join(linux_build_dir, 'Debug/lib.target'), os.path.join(dst_dir, 'lib.target'), options.quiet) make_dir(dst_dir, options.quiet)
copy_file(os.path.join(linux_build_dir, 'Debug/cefclient'), dst_dir, options.quiet) copy_dir(os.path.join(linux_build_dir, 'Debug/lib.target'), os.path.join(dst_dir, 'lib.target'), options.quiet)
copy_file(os.path.join(linux_build_dir, 'Debug/chrome.pak'), dst_dir, options.quiet) copy_file(os.path.join(linux_build_dir, 'Debug/cefclient'), dst_dir, options.quiet)
copy_dir(os.path.join(linux_build_dir, 'Debug/locales'), os.path.join(dst_dir, 'locales'), options.quiet) copy_file(os.path.join(linux_build_dir, 'Debug/chrome.pak'), dst_dir, options.quiet)
copy_file(os.path.join(linux_build_dir, 'Debug/devtools_resources.pak'), dst_dir, options.quiet)
else: copy_dir(os.path.join(linux_build_dir, 'Debug/locales'), os.path.join(dst_dir, 'locales'), options.quiet)
sys.stderr.write("No Debug build files.\n")
else:
# transfer build/Release files sys.stderr.write("No Debug build files.\n")
if not options.allowpartial or path_exists(os.path.join(linux_build_dir, 'Release')):
dst_dir = os.path.join(output_dir, 'Release') # transfer build/Release files
make_dir(dst_dir, options.quiet) if not options.allowpartial or path_exists(os.path.join(linux_build_dir, 'Release')):
copy_dir(os.path.join(linux_build_dir, 'Release/lib.target'), os.path.join(dst_dir, 'lib.target'), options.quiet) dst_dir = os.path.join(output_dir, 'Release')
copy_file(os.path.join(linux_build_dir, 'Release/cefclient'), dst_dir, options.quiet) make_dir(dst_dir, options.quiet)
copy_file(os.path.join(linux_build_dir, 'Release/chrome.pak'), dst_dir, options.quiet) copy_dir(os.path.join(linux_build_dir, 'Release/lib.target'), os.path.join(dst_dir, 'lib.target'), options.quiet)
copy_dir(os.path.join(linux_build_dir, 'Release/locales'), os.path.join(dst_dir, 'locales'), options.quiet) copy_file(os.path.join(linux_build_dir, 'Release/cefclient'), dst_dir, options.quiet)
copy_file(os.path.join(linux_build_dir, 'Release/chrome.pak'), dst_dir, options.quiet)
else: copy_file(os.path.join(linux_build_dir, 'Release/devtools_resources.pak'), dst_dir, options.quiet)
sys.stderr.write("No Release build files.\n") copy_dir(os.path.join(linux_build_dir, 'Release/locales'), os.path.join(dst_dir, 'locales'), options.quiet)
# transfer include files else:
transfer_gypi_files(cef_dir, cef_paths2['includes_linux'], \ sys.stderr.write("No Release build files.\n")
'include/', include_dir, options.quiet)
# transfer include files
# transfer cefclient files transfer_gypi_files(cef_dir, cef_paths2['includes_linux'], \
transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_linux'], \ 'include/', include_dir, options.quiet)
'tests/cefclient/', cefclient_dir, options.quiet)
# transfer cefclient files
# transfer additional files, if any transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_linux'], \
transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/linux/transfer.cfg'), \ 'tests/cefclient/', cefclient_dir, options.quiet)
output_dir, options.quiet)
# transfer additional files, if any
# Create an archive of the output directory transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/linux/transfer.cfg'), \
zip_file = os.path.split(output_dir)[1] + '.zip' output_dir, options.quiet)
if not options.quiet:
sys.stdout.write('Creating '+zip_file+"...\n") # Create an archive of the output directory
create_archive(output_dir, os.path.join(output_dir, os.pardir, zip_file)) zip_file = os.path.split(output_dir)[1] + '.zip'
if not options.quiet:
# Create an archive of the symbol directory sys.stdout.write('Creating '+zip_file+"...\n")
zip_file = os.path.split(symbol_dir)[1] + '.zip' create_archive(output_dir, os.path.join(output_dir, os.pardir, zip_file))
if not options.quiet:
sys.stdout.write('Creating '+zip_file+"...\n") # Create an archive of the symbol directory
create_archive(symbol_dir, os.path.join(symbol_dir, os.pardir, zip_file)) zip_file = os.path.split(symbol_dir)[1] + '.zip'
if not options.quiet:
sys.stdout.write('Creating '+zip_file+"...\n")
create_archive(symbol_dir, os.path.join(symbol_dir, os.pardir, zip_file))