From ef5142d9b3c60fd3f54184e84b25b979e05ed670 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Wed, 10 Apr 2013 23:46:50 +0000 Subject: [PATCH] - Fix ninja build on all platforms (issue #922). - Update make_distrib.py to support ninja builds via a new "ninja-build" flag (issue #922). - Improvements to automate.py: -- Allow specification of the depot_tools directory via a "depot-tools" flag (issue #592). -- Add ninja build support via a "ninja-build" flag (issue #922). -- Allow relative paths for download directories (issue #942). -- Add the ability to print commands without executing them via a "dry-run" flag. -- Specifying the "force-clean" flag will also remove the build output directory. -- Add support for a minimal distribution mode where only release binaries and resources are packaged. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1203 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- cef1/VERSION | 1 + cef1/cef.gyp | 107 ++- cef1/patch/patch.cfg | 5 + cef1/patch/patches/gyp_331.patch | 22 + cef1/tools/automate/automate.py | 166 +++-- cef1/tools/distrib/cefclient.gyp | 68 +- cef1/tools/distrib/linux/build.sh | 8 + cef1/tools/file_util.py | 19 + cef1/tools/make_distrib.py | 1015 ++++++++++++++++------------- 9 files changed, 837 insertions(+), 574 deletions(-) create mode 100644 cef1/VERSION create mode 100644 cef1/patch/patches/gyp_331.patch create mode 100755 cef1/tools/distrib/linux/build.sh diff --git a/cef1/VERSION b/cef1/VERSION new file mode 100644 index 000000000..ffc67b41a --- /dev/null +++ b/cef1/VERSION @@ -0,0 +1 @@ +CEF_MAJOR=1 diff --git a/cef1/cef.gyp b/cef1/cef.gyp index 810b51e53..c3cfdea16 100644 --- a/cef1/cef.gyp +++ b/cef1/cef.gyp @@ -132,6 +132,7 @@ 'product_name': 'cefclient', 'variables': { 'repack_path': '../tools/grit/grit/format/repack.py', + 'PRODUCT_NAME': 'cefclient', }, 'actions': [ { @@ -186,11 +187,15 @@ '<(PRODUCT_DIR)/libcef.dylib', ], }, + ], + 'postbuilds': [ { - # Add the WebCore resources to the bundle. - 'destination': '<(PRODUCT_DIR)/cefclient.app/Contents/', - 'files': [ - '../third_party/WebKit/Source/WebCore/Resources/', + 'postbuild_name': 'Copy WebCore Resources', + 'action': [ + 'cp', + '-Rf', + '${BUILT_PRODUCTS_DIR}/../../third_party/WebKit/Source/WebCore/Resources/', + '${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/Resources/' ], }, ], @@ -206,6 +211,9 @@ ], }], [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd"', { + 'dependencies':[ + '<(DEPTH)/build/linux/system.gyp:gtk', + ], 'sources': [ '<@(includes_linux)', '<@(cefclient_sources_linux)', @@ -324,6 +332,7 @@ 'tests/unittests/mac/English.lproj/InfoPlist.strings', 'tests/unittests/mac/English.lproj/MainMenu.xib', 'tests/unittests/mac/Info.plist', + '<(grit_out_dir)/devtools_resources.pak', ], 'mac_bundle_resources!': [ # TODO(mark): Come up with a fancier way to do this (mac_info_plist?) @@ -342,6 +351,7 @@ 'product_name': 'cef_unittests', 'variables': { 'repack_path': '../tools/grit/grit/format/repack.py', + 'PRODUCT_NAME': 'cef_unittests', }, 'run_as': { 'action': ['${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/MacOS/${PRODUCT_NAME}'], @@ -395,12 +405,23 @@ 'copies': [ { # Add library dependencies to the bundle. - 'destination': '<(PRODUCT_DIR)/cef_unittests.app/Contents/MacOS/', + 'destination': '<(PRODUCT_DIR)/<(PRODUCT_NAME).app/Contents/MacOS/', 'files': [ '<(PRODUCT_DIR)/libcef.dylib', ], }, ], + 'postbuilds': [ + { + 'postbuild_name': 'Copy WebCore Resources', + 'action': [ + 'cp', + '-Rf', + '${BUILT_PRODUCTS_DIR}/../../third_party/WebKit/Source/WebCore/Resources/', + '${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/Resources/' + ], + }, + ], 'link_settings': { 'libraries': [ '$(SDKROOT)/System/Library/Frameworks/AppKit.framework', @@ -410,6 +431,11 @@ 'tests/unittests/run_all_unittests_mac.mm', ], }], + [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd"', { + 'dependencies':[ + '<(DEPTH)/build/linux/system.gyp:gtk', + ], + }], ], }, { @@ -417,35 +443,6 @@ 'type': 'shared_library', 'msvs_guid': 'C13650D5-CF1A-4259-BE45-B1EBA6280E47', 'dependencies': [ - '<(DEPTH)/base/base.gyp:base', - '<(DEPTH)/base/base.gyp:base_i18n', - '<(DEPTH)/build/temp_gyp/googleurl.gyp:googleurl', - '<(DEPTH)/net/net.gyp:net', - '<(DEPTH)/net/net.gyp:net_resources', - '<(DEPTH)/printing/printing.gyp:printing', - '<(DEPTH)/sdch/sdch.gyp:sdch', - '<(DEPTH)/skia/skia.gyp:skia', - '<(DEPTH)/third_party/bzip2/bzip2.gyp:bzip2', - '<(DEPTH)/third_party/icu/icu.gyp:icui18n', - '<(DEPTH)/third_party/icu/icu.gyp:icuuc', - '<(DEPTH)/third_party/leveldatabase/leveldatabase.gyp:leveldatabase', - '<(DEPTH)/third_party/libjpeg_turbo/libjpeg.gyp:libjpeg', - '<(DEPTH)/third_party/libpng/libpng.gyp:libpng', - '<(DEPTH)/third_party/libxml/libxml.gyp:libxml', - '<(DEPTH)/third_party/libxslt/libxslt.gyp:libxslt', - '<(DEPTH)/third_party/modp_b64/modp_b64.gyp:modp_b64', - '<(DEPTH)/third_party/WebKit/Source/WebCore/WebCore.gyp/WebCore.gyp:webcore', - '<(DEPTH)/third_party/WebKit/Source/WebKit/chromium/WebKit.gyp:webkit', - '<(DEPTH)/third_party/zlib/zlib.gyp:minizip', - '<(DEPTH)/third_party/zlib/zlib.gyp:zlib', - '<(DEPTH)/ui/ui.gyp:ui_resources', - '<(DEPTH)/ui/ui.gyp:ui', - '<(DEPTH)/v8/tools/gyp/v8.gyp:v8', - '<(DEPTH)/webkit/support/webkit_support.gyp:glue', - '<(DEPTH)/webkit/support/webkit_support.gyp:user_agent', - '<(DEPTH)/webkit/support/webkit_support.gyp:webkit_resources', - '<(DEPTH)/webkit/support/webkit_support.gyp:webkit_storage', - '<(DEPTH)/webkit/support/webkit_support.gyp:webkit_strings', 'libcef_static', ], 'defines': [ @@ -454,12 +451,6 @@ 'include_dirs': [ '.', ], - # Avoid "RC1102: internal error : too many arguments to RCPP" error by - # explicitly specifying a short list of resource include directories. - 'resource_include_dirs' : [ - '.', - '..', - ], 'sources': [ '<@(includes_common)', '<@(includes_capi)', @@ -477,18 +468,17 @@ 'DYLIB_CURRENT_VERSION': '<(version_mac_dylib)', }, 'conditions': [ - ['OS=="win"', { + ['OS=="win" and win_use_allocator_shim==1', { 'dependencies': [ '<(DEPTH)/base/allocator/allocator.gyp:allocator', - '<(DEPTH)/breakpad/breakpad.gyp:breakpad_handler', - '<(DEPTH)/third_party/angle/src/build_angle.gyp:libEGL', - '<(DEPTH)/third_party/angle/src/build_angle.gyp:libGLESv2', ], + }], + ['OS=="win"', { 'sources': [ '<@(includes_win)', - '$(OutDir)/obj/global_intermediate/ui/ui_resources/ui_unscaled_resources.rc', - '$(OutDir)/obj/global_intermediate/webkit/webkit_chromium_resources.rc', - '$(OutDir)/obj/global_intermediate/webkit/webkit_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_unscaled_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_chromium_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_resources.rc', 'libcef_dll/libcef_dll.rc', ], 'link_settings': { @@ -505,22 +495,10 @@ }, }], [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd"', { - 'dependencies':[ + 'dependencies':[ '<(DEPTH)/base/allocator/allocator.gyp:allocator', + '<(DEPTH)/build/linux/system.gyp:gtk', ], - 'direct_dependent_settings': { - 'cflags': [ - '= 0: + epos = str.find(data, '#', pos) + if epos >= 0: + data = data[0:pos] + data[epos:] + write_file(file, data) + +def run(command_line, working_dir): + """ Run a command. """ + sys.stdout.write('-------- Running "'+command_line+'" in "'+\ + working_dir+'"...'+"\n") + args = shlex.split(command_line.replace('\\', '\\\\')) + return subprocess.check_call(args, cwd=working_dir, env=os.environ, + shell=(sys.platform == 'win32')) + +# cannot be loaded as a module +if __name__ != "__main__": + sys.stderr.write('This file cannot be loaded as a module!') + sys.exit() + +# parse command-line options +disc = """ +This utility builds the CEF Binary Distribution. +""" + +parser = OptionParser(description=disc) +parser.add_option('--output-dir', dest='outputdir', metavar='DIR', + help='output directory [required]') +parser.add_option('--allow-partial', + action='store_true', dest='allowpartial', default=False, + help='allow creation of partial distributions') +parser.add_option('--no-symbols', + action='store_true', dest='nosymbols', default=False, + help='do not create symbol files') +parser.add_option('--ninja-build', + action='store_true', dest='ninjabuild', default=False, + help='build was created using ninja') +parser.add_option('--minimal', + action='store_true', dest='minimal', default=False, + help='include only release build binary files') +parser.add_option('-q', '--quiet', + action='store_true', dest='quiet', default=False, + help='do not output detailed status information') +(options, args) = parser.parse_args() + +# the outputdir option is required +if options.outputdir is None: + parser.print_help(sys.stdout) + sys.exit() + +# script directory +script_dir = os.path.dirname(__file__) + +# CEF root directory +cef_dir = os.path.abspath(os.path.join(script_dir, os.pardir)) + +# src directory +src_dir = os.path.abspath(os.path.join(cef_dir, os.pardir)) + +# retrieve url, revision and date information +cef_info = get_svn_info(cef_dir) +cef_url = cef_info['url'] +cef_rev = cef_info['revision'] +chromium_info = get_svn_info(os.path.join(cef_dir, os.pardir)) +chromium_url = chromium_info['url'] +chromium_rev = chromium_info['revision'] +date = get_date() + +# Read and parse the version file (key=value pairs, one per line) +args = {} +read_version_file(os.path.join(cef_dir, 'VERSION'), args) +read_version_file(os.path.join(cef_dir, '../chrome/VERSION'), args) + +cef_ver = args['CEF_MAJOR']+'.'+args['BUILD']+'.'+cef_rev +chromium_ver = args['MAJOR']+'.'+args['MINOR']+'.'+args['BUILD']+'.'+args['PATCH'] + +# Test the operating system. +platform = ''; +if sys.platform == 'win32': + platform = 'windows' +elif sys.platform == 'darwin': + platform = 'macosx' +elif sys.platform.startswith('linux'): + platform = 'linux' + +# output directory +output_dir_name = 'cef_binary_'+cef_ver+'_'+platform +if options.minimal: + output_dir_name = output_dir_name + '_minimal' +output_dir = os.path.abspath(os.path.join(options.outputdir, output_dir_name)) +remove_dir(output_dir, options.quiet) +make_dir(output_dir, options.quiet) + +if not options.nosymbols: + # symbol directory + symbol_dir_name = output_dir_name + '_symbols' + symbol_dir = os.path.abspath(os.path.join(options.outputdir, symbol_dir_name)) + remove_dir(symbol_dir, options.quiet) + make_dir(symbol_dir, options.quiet) + +# transfer the LICENSE.txt file +copy_file(os.path.join(cef_dir, 'LICENSE.txt'), output_dir, options.quiet) + +# 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 = cef_paths['variables'] + +# 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 = cef_paths2['variables'] + +if not options.minimal: + # create the include directory + include_dir = os.path.join(output_dir, 'include') + make_dir(include_dir, options.quiet) + + # create the cefclient directory + cefclient_dir = os.path.join(output_dir, 'cefclient') + make_dir(cefclient_dir, options.quiet) + + # create the libcef_dll_wrapper directory + wrapper_dir = os.path.join(output_dir, 'libcef_dll') + make_dir(wrapper_dir, options.quiet) + + # transfer common include files + transfer_gypi_files(cef_dir, cef_paths2['includes_common'], \ + 'include/', include_dir, options.quiet) + transfer_gypi_files(cef_dir, cef_paths2['includes_capi'], \ + 'include/', include_dir, options.quiet) + transfer_gypi_files(cef_dir, cef_paths2['includes_wrapper'], \ + 'include/', include_dir, options.quiet) + transfer_gypi_files(cef_dir, cef_paths['autogen_cpp_includes'], \ + 'include/', include_dir, options.quiet) + transfer_gypi_files(cef_dir, cef_paths['autogen_capi_includes'], \ + 'include/', include_dir, options.quiet) + + # transfer common cefclient files + transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_common'], \ + 'tests/cefclient/', cefclient_dir, options.quiet) + transfer_gypi_files(cef_dir, cef_paths2['cefclient_bundle_resources_common'], \ + 'tests/cefclient/', cefclient_dir, options.quiet) + + # transfer common libcef_dll_wrapper files + transfer_gypi_files(cef_dir, cef_paths2['libcef_dll_wrapper_sources_common'], \ + 'libcef_dll/', wrapper_dir, options.quiet) + transfer_gypi_files(cef_dir, cef_paths['autogen_client_side'], \ + 'libcef_dll/', wrapper_dir, options.quiet) + + # transfer gyp files + copy_file(os.path.join(script_dir, 'distrib/cefclient.gyp'), output_dir, options.quiet) + paths_gypi = os.path.join(cef_dir, 'cef_paths2.gypi') + data = read_file(paths_gypi) + data = data.replace('tests/cefclient/', 'cefclient/') + write_file(os.path.join(output_dir, 'cef_paths2.gypi'), data) + copy_file(os.path.join(cef_dir, 'cef_paths.gypi'), \ + os.path.join(output_dir, 'cef_paths.gypi'), options.quiet) + + # transfer additional files + transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/transfer.cfg'), \ + output_dir, options.quiet) + +if platform == 'windows': + # create the README.TXT file + 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) + + if not options.minimal: + # transfer include files + transfer_gypi_files(cef_dir, cef_paths2['includes_win'], \ + 'include/', include_dir, options.quiet) + + # transfer cefclient files + transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_win'], \ + 'tests/cefclient/', cefclient_dir, options.quiet) + + if options.ninjabuild: + out_dir = os.path.join(src_dir, 'out') + libcef_dll_file = 'libcef.dll.lib' + else: + out_dir = cef_dir + libcef_dll_file = 'lib/libcef.lib' + + if not options.minimal: + # transfer build/Debug files + build_dir = os.path.join(out_dir, 'Debug'); + if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.exe')): + dst_dir = os.path.join(output_dir, 'Debug') + 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(build_dir, '*.dll'), dst_dir, options.quiet) + copy_file(os.path.join(build_dir, 'cefclient.exe'), dst_dir, options.quiet) + copy_file(os.path.join(build_dir, 'devtools_resources.pak'), dst_dir, options.quiet) + copy_dir(os.path.join(build_dir, 'locales'), os.path.join(dst_dir, 'locales'), \ + options.quiet) + + # transfer lib/Debug files + dst_dir = os.path.join(output_dir, 'lib/Debug') + make_dir(dst_dir, options.quiet) + copy_file(os.path.join(build_dir, libcef_dll_file), os.path.join(dst_dir, 'libcef.lib'), \ + options.quiet) + else: + sys.stderr.write("No Debug build files.\n") + + # transfer build/Release files + build_dir = os.path.join(out_dir, 'Release'); + if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.exe')): + dst_dir = os.path.join(output_dir, 'Release') + 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(build_dir, '*.dll'), dst_dir, options.quiet) + if not options.minimal: + copy_file(os.path.join(build_dir, 'cefclient.exe'), dst_dir, options.quiet) + copy_file(os.path.join(build_dir, 'devtools_resources.pak'), dst_dir, options.quiet) + copy_dir(os.path.join(build_dir, 'locales'), os.path.join(dst_dir, 'locales'), \ + options.quiet) + + # transfer lib/Release files + dst_dir = os.path.join(output_dir, 'lib/Release') + make_dir(dst_dir, options.quiet) + copy_file(os.path.join(build_dir, libcef_dll_file), os.path.join(dst_dir, 'libcef.lib'), \ + options.quiet) + + if not options.nosymbols: + # transfer symbols + copy_file(os.path.join(build_dir, 'libcef.dll.pdb'), symbol_dir, options.quiet) + else: + sys.stderr.write("No Release build files.\n") + + if not options.minimal: + # generate doc files + os.popen('make_cppdocs.bat '+cef_rev) + + # transfer docs files + dst_dir = os.path.join(output_dir, 'docs') + src_dir = os.path.join(cef_dir, 'docs') + if path_exists(src_dir): + copy_dir(src_dir, dst_dir, options.quiet) + + # transfer additional files, if any + transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/win/transfer.cfg'), \ + output_dir, options.quiet) + + # generate the project files + generate_msvs_projects('2005'); + generate_msvs_projects('2008'); + generate_msvs_projects('2010'); + fix_msvs_projects(); + +elif platform == 'macosx': + # create the README.TXT file + 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) + + if not options.minimal: + # transfer include files + transfer_gypi_files(cef_dir, cef_paths2['includes_mac'], \ + 'include/', include_dir, options.quiet) + + # transfer cefclient files + transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_mac'], \ + 'tests/cefclient/', cefclient_dir, options.quiet) + transfer_gypi_files(cef_dir, cef_paths2['cefclient_bundle_resources_mac'], \ + 'tests/cefclient/', cefclient_dir, options.quiet) + + # transfer cefclient/mac files + copy_dir(os.path.join(cef_dir, 'tests/cefclient/mac/'), os.path.join(output_dir, 'cefclient/mac/'), \ + options.quiet) + + if options.ninjabuild: + out_dir = os.path.join(src_dir, 'out') + else: + out_dir = os.path.join(src_dir, 'xcodebuild') + + valid_build_dir = None + + if not options.minimal: + # transfer xcodebuild/Debug files + build_dir = os.path.join(out_dir, 'Debug') + if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.app')): + valid_build_dir = build_dir + dst_dir = os.path.join(output_dir, 'Debug') + make_dir(dst_dir, options.quiet) + copy_file(os.path.join(build_dir, 'libcef.dylib'), dst_dir, options.quiet) + + # transfer xcodebuild/Release files + build_dir = os.path.join(out_dir, 'Release') + if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient.app')): + valid_build_dir = build_dir + dst_dir = os.path.join(output_dir, 'Release') + make_dir(dst_dir, options.quiet) + copy_file(os.path.join(build_dir, 'libcef.dylib'), dst_dir, options.quiet) + + if not options.nosymbols: + # create the real dSYM file from the "fake" dSYM file + sys.stdout.write("Creating the real dSYM file...\n") + src_path = os.path.join(build_dir, 'libcef.dylib.dSYM/Contents/Resources/DWARF/libcef.dylib') + dst_path = os.path.join(symbol_dir, 'libcef.dylib.dSYM') + run('dsymutil '+src_path+' -o '+dst_path, cef_dir) + + if not valid_build_dir is None: + # transfer resource files + build_dir = valid_build_dir + dst_dir = os.path.join(output_dir, 'Resources') + make_dir(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(build_dir, 'cefclient.app/Contents/Resources/chrome.pak'), dst_dir, options.quiet) + copy_file(os.path.join(build_dir, 'cefclient.app/Contents/Resources/devtools_resources.pak'), dst_dir, options.quiet) + copy_files(os.path.join(build_dir, 'cefclient.app/Contents/Resources/*.lproj'), dst_dir, options.quiet) + remove_dir(os.path.join(dst_dir, 'English.lproj')) + + + if not options.minimal: + # transfer additional files, if any + 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...') + os.environ['GYP_GENERATORS'] = 'xcode' + 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') + data = read_file(src_file) + data = data.replace('../../../build/mac/', 'tools/') + data = data.replace('../../../build', 'build') + data = data.replace('../../../xcodebuild', 'xcodebuild') + write_file(src_file, data) + +elif platform == 'linux': + # create the README.TXT file + 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) + + out_dir = os.path.join(src_dir, 'out') + if options.ninjabuild: + lib_dir_name = 'lib' + else: + lib_dir_name = 'lib.target' + + valid_build_dir = None + + if not options.minimal: + # transfer out/Debug files + build_dir = os.path.join(out_dir, 'Debug'); + if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient')): + valid_build_dir = build_dir + dst_dir = os.path.join(output_dir, 'Debug') + make_dir(dst_dir, options.quiet) + copy_file(os.path.join(build_dir, lib_dir_name, 'libcef.so'), dst_dir, options.quiet) + else: + sys.stderr.write("No Debug build files.\n") + + # transfer out/Release files + build_dir = os.path.join(out_dir, 'Release'); + if not options.allowpartial or path_exists(os.path.join(build_dir, 'cefclient')): + valid_build_dir = build_dir + dst_dir = os.path.join(output_dir, 'Release') + make_dir(dst_dir, options.quiet) + copy_file(os.path.join(build_dir, lib_dir_name, 'libcef.so'), dst_dir, options.quiet) + else: + sys.stderr.write("No Release build files.\n") + + if not valid_build_dir is None: + # transfer resource files + build_dir = valid_build_dir + dst_dir = os.path.join(output_dir, 'Resources') + make_dir(dst_dir, options.quiet) + copy_file(os.path.join(build_dir, 'chrome.pak'), dst_dir, options.quiet) + copy_file(os.path.join(build_dir, 'devtools_resources.pak'), dst_dir, options.quiet) + copy_dir(os.path.join(build_dir, 'locales'), os.path.join(dst_dir, 'locales'), options.quiet) + + if not options.minimal: + # transfer include files + transfer_gypi_files(cef_dir, cef_paths2['includes_linux'], \ + 'include/', include_dir, options.quiet) + + # transfer cefclient files + transfer_gypi_files(cef_dir, cef_paths2['cefclient_sources_linux'], \ + 'tests/cefclient/', cefclient_dir, options.quiet) + transfer_gypi_files(cef_dir, cef_paths2['cefclient_bundle_resources_linux'], \ + 'tests/cefclient/', cefclient_dir, options.quiet) + + # transfer additional files, if any + copy_file(os.path.join(script_dir, 'distrib/linux/build.sh'), output_dir, options.quiet) + transfer_files(cef_dir, script_dir, os.path.join(script_dir, 'distrib/linux/transfer.cfg'), \ + output_dir, options.quiet) + + makefile = os.path.join(src_dir, 'Makefile') + makefile_tmp = '' + if path_exists(makefile): + # Back up the existing Makefile + makefile_tmp = makefile + '.cef_bak' + copy_file(makefile, makefile_tmp, options.quiet) + + # Generate make project files + sys.stdout.write('Generating make project files...') + os.environ['GYP_GENERATORS'] = 'make' + gyper = [ 'python', 'tools/gyp_cef', os.path.relpath(os.path.join(output_dir, 'cefclient.gyp'), cef_dir) ] + RunAction(cef_dir, gyper); + + # Copy the resulting Makefile to the destination directory + copy_file(makefile, output_dir, options.quiet) + + remove_file(makefile, options.quiet) + if makefile_tmp != '': + # Restore the original Makefile + move_file(makefile_tmp, makefile, options.quiet) + + # Post-process the make files + fix_make_projects() + +# Create an archive of the output directory +zip_file = output_dir_name + '.zip' +if not options.quiet: + sys.stdout.write('Creating '+zip_file+"...\n") +create_archive(output_dir, os.path.join(output_dir, os.pardir, zip_file)) + +if not options.nosymbols: + # Create an archive of the symbol directory + zip_file = symbol_dir_name + '.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))