diff options
Diffstat (limited to 'build/gyp_qtwebengine')
-rwxr-xr-x | build/gyp_qtwebengine | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/build/gyp_qtwebengine b/build/gyp_qtwebengine new file mode 100755 index 000000000..89d0cfcd3 --- /dev/null +++ b/build/gyp_qtwebengine @@ -0,0 +1,127 @@ +#!/usr/bin/env python + +import glob +import os +import subprocess +import sys + +qtwebengine_src = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) +chrome_src = os.path.abspath(os.environ.get('CHROMIUM_SRC_DIR')) # null-checked in build.pro +script_dir = os.path.abspath(os.path.join(chrome_src, 'build')) +if not os.path.isdir(script_dir): + print script_dir + " is not a valid directory" + sys.exit(1) +root_dir = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) + +sys.path.insert(0, script_dir) +import gyp_helper +sys.path.insert(0, os.path.join(chrome_src, 'tools', 'gyp', 'pylib')) +import gyp + +# Add paths so that pymod_do_main(...) can import files. +sys.path.insert(1, os.path.join(chrome_src, 'tools', 'grit')) +sys.path.insert(1, os.path.join(chrome_src, 'third_party', 'WebKit', + 'Source', 'core', 'core.gyp', 'scripts')) +sys.path.insert(1, os.path.join(chrome_src, 'chrome', 'tools', 'build')) + +import repack_locales + +def additional_include_files(args=[]): + """ + Returns a list of additional (.gypi) files to include, without + duplicating ones that are already specified on the command line. + """ + # Determine the include files specified on the command line. + # This doesn't cover all the different option formats you can use, + # but it's mainly intended to avoid duplicating flags on the automatic + # makefile regeneration which only uses this format. + specified_includes = set() + for arg in args: + if arg.startswith('-I') and len(arg) > 2: + specified_includes.add(os.path.realpath(arg[2:])) + + result = [] + def AddInclude(path): + if os.path.realpath(path) not in specified_includes: + result.append(path) + + # Always include common.gypi. + AddInclude(os.path.join(script_dir, 'common.gypi')) + + # Files to exclude from the chromium build. + AddInclude(os.path.join(os.getcwd(), 'exclude_chromium_sources.gypi')) + + # Optionally add supplemental .gypi files if present. + supplements = glob.glob(os.path.join(chrome_src, '*', 'supplement.gypi')) + for supplement in supplements: + AddInclude(supplement) + + return result + +# TODO: later we probably want to hook that up with qmake to allow shadow builds. (Might not play nice with the rest of chromium though) +def get_output_dir(): + outdir = os.path.join(root_dir, "out") # Hardcode for now + if not os.path.isdir(outdir): + os.mkdir(outdir) + + return outdir + +if __name__ == '__main__': + args = sys.argv[1:] + + gyp_helper.apply_chromium_gyp_env() + + # This could give false positives since it doesn't actually do real option + # parsing. Oh well. + gyp_file_specified = False + for arg in args: + if arg.endswith('.gyp'): + gyp_file_specified = True + break + + if not gyp_file_specified: + args.append(os.path.join(root_dir, 'qtwebengine.gyp')) + + args.extend(['-I' + i for i in additional_include_files(args)]) + + # There shouldn't be a circular dependency relationship between .gyp files, + # but in Chromium's .gyp files, on non-Mac platforms, circular relationships + # currently exist. The check for circular dependencies is currently + # bypassed on other platforms, but is left enabled on the Mac, where a + # violation of the rule causes Xcode to misbehave badly. + # TODO(mark): Find and kill remaining circular dependencies, and remove this + # option. http://crbug.com/35878. + # TODO(tc): Fix circular dependencies in ChromiumOS then add linux2 to the + # list. + if sys.platform not in ('darwin',): + args.append('--no-circular-check') + + args.extend(['-D', 'webkit_src_dir=' + chrome_src + '/third_party/WebKit']) + # the top_level source directory is the first common ancestor of our module and the chromium source tree for the build to be sane. + # commonprefix works on a character basis, so it might return a phony common prefix (not the common parent directory we expect), + toplevel= os.path.commonprefix([root_dir, chrome_src]) + if not os.path.exists(toplevel): + toplevel = os.path.join(toplevel, os.pardir) + args.extend(["--toplevel-dir=" + toplevel]) + # Chromium specific Hack: for Chromium to build, the depth has to be set to the chromium src dir. + args.extend(["--depth=" + chrome_src]) + args.extend(['-D', 'qtwebengine_src_dir=' + qtwebengine_src]) + args.extend(['-D', 'chromium_src_dir=' + chrome_src]) + # Tweak the output location and format (hardcode ninja for now) + args.extend(['--generator-output', os.path.abspath(get_output_dir())]) + args.extend(['-Goutput_dir='+ os.path.abspath(get_output_dir())]) + args.extend(['--format=ninja']) + if "QTWEBENGINE_GYP_DEBUG" in os.environ: + args.append("--check") + args.append("-d all") + print args + ret_code = gyp.main(args) + sys.exit(ret_code) + + ################################### + + print 'Updating projects from gyp files...' + #sys.stdout.flush() + + # Off we go... + sys.exit(gyp.main(args)) |