Home | History | Annotate | Download | only in scripts
      1 # Copyright 2014 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import("//third_party/WebKit/Source/config.gni")
      6 
      7 # All paths in this file should be absolute so targets in any directory can use
      8 # them without worrying about the current directory.
      9 _scripts_dir = "//third_party/WebKit/Source/build/scripts"
     10 
     11 scripts_for_in_files = [
     12   # jinja2/__init__.py contains version string, so sufficient as
     13   # dependency for whole jinja2 package
     14   "//third_party/jinja2/__init__.py",
     15   "//third_party/markupsafe/__init__.py",  # jinja2 dep
     16   "$_scripts_dir/hasher.py",
     17   "$_scripts_dir/in_file.py",
     18   "$_scripts_dir/in_generator.py",
     19   "$_scripts_dir/license.py",
     20   "$_scripts_dir/name_macros.py",
     21   "$_scripts_dir/name_utilities.py",
     22   "$_scripts_dir/template_expander.py",
     23   "$_scripts_dir/templates/macros.tmpl",
     24 ]
     25 
     26 make_event_factory_files = scripts_for_in_files + [
     27   "$_scripts_dir/make_event_factory.py",
     28   "$_scripts_dir/templates/EventFactory.cpp.tmpl",
     29 ]
     30 
     31 make_names_files = scripts_for_in_files + [
     32   "$_scripts_dir/make_names.py",
     33   "$_scripts_dir/templates/MakeNames.cpp.tmpl",
     34   "$_scripts_dir/templates/MakeNames.h.tmpl",
     35 ]
     36 
     37 make_qualified_names_files = scripts_for_in_files + [
     38   "$_scripts_dir/make_qualified_names.py",
     39   "$_scripts_dir/templates/MakeQualifiedNames.cpp.tmpl",
     40   "$_scripts_dir/templates/MakeQualifiedNames.h.tmpl",
     41 ]
     42 
     43 make_element_factory_files = make_qualified_names_files + [
     44   "$_scripts_dir/make_element_factory.py",
     45   "$_scripts_dir/templates/ElementFactory.cpp.tmpl",
     46   "$_scripts_dir/templates/ElementFactory.h.tmpl",
     47   "$_scripts_dir/templates/ElementWrapperFactory.cpp.tmpl",
     48   "$_scripts_dir/templates/ElementWrapperFactory.h.tmpl",
     49 ]
     50 
     51 make_element_type_helpers_files = make_qualified_names_files + [
     52   "$_scripts_dir/make_element_type_helpers.py",
     53   "$_scripts_dir/templates/ElementTypeHelpers.h.tmpl",
     54 ]
     55 
     56 # The executables are relative to the build directory. Don't rebase it because
     57 # on Posix we want to run the system one on the path.
     58 if (is_win) {
     59   perl_exe = rebase_path("//third_party/perl/perl/bin/perl.exe", root_build_dir)
     60   gperf_exe = rebase_path("//third_party/gperf/bin/gperf.exe", root_build_dir)
     61   bison_exe = rebase_path("//third_party/bison/bin/bison.exe", root_build_dir)
     62   # Using cl instead of cygwin gcc cuts the processing time from
     63   # 1m58s to 0m52s.
     64   preprocessor = "--preprocessor \"cl.exe -nologo -EP -TP\""
     65 } else {
     66   perl_exe = "perl"
     67   gperf_exe = "gperf"
     68   bison_exe = "bison"
     69   # We specify a preprocess so it happens locally and won't get
     70   # distributed to goma.
     71   # FIXME: /usr/bin/gcc won't exist on OSX forever. We want to
     72   # use /usr/bin/clang once we require Xcode 4.x.
     73   preprocessor = "--preprocessor \"/usr/bin/gcc -E -P -x c++\""
     74 }
     75 
     76 # Templates --------------------------------------------------------------------
     77 
     78 _blink_gen_dir = "$root_gen_dir/blink"
     79 
     80 # The GYP target make_core_generated has some deps and a bunch of actions on
     81 # it, which means that the deps will be resolved before the actions run. Here
     82 # we have separate targets for each action. Its not clear which actions depend
     83 # on these deps, so for GYP compatibility, all of the below actions should
     84 # depend on the following deps.
     85 make_core_generated_deps = [
     86   "//third_party/WebKit/Source/core:generated_testing_idls",
     87   "//third_party/WebKit/Source/core:core_event_interfaces",
     88 ]
     89 
     90 # Template to run most of scripts that process "*.in" files.
     91 #   script: script to run.
     92 #   in_files: ".in" files to pass to the script
     93 #   other_inputs: (optional) other input files the script depends on
     94 #                 defaults to "scripts_for_in_files" (if specified, we assume
     95 #                 that the contents of "scripts_for_in_files" are included in
     96 #                 this list specified since this is how these lists are filled
     97 #                 from the GYP build.
     98 #   outputs: expected results. Note that the directory of the 0th item in this
     99 #            list will be taken to be the output path.
    100 #   other_args: (optional) other arguements to pass to the script.
    101 template("process_in_files") {
    102   action(target_name) {
    103     script = invoker.script
    104 
    105     source_prereqs = invoker.in_files
    106     if (defined(invoker.other_inputs)) {
    107       source_prereqs += invoker.other_inputs
    108     } else {
    109       source_prereqs += scripts_for_in_files
    110     }
    111     outputs = invoker.outputs
    112 
    113     # Extract the directory to write files to.
    114     output_dir = get_path_info(outputs[0], "dir")
    115 
    116     args = rebase_path(invoker.in_files, root_build_dir) + [
    117       "--output_dir", rebase_path(output_dir, root_build_dir),
    118     ]
    119     if (defined(invoker.other_args)) {
    120       args += invoker.other_args
    121     }
    122 
    123     deps = make_core_generated_deps
    124   }
    125 }
    126 
    127 # Template to run the make_names script. This is a special case of
    128 # process_in_files.
    129 #   in_files: files to pass to the script
    130 #   outputs: expected results
    131 template("make_names") {
    132   process_in_files(target_name) {
    133     script = "//third_party/WebKit/Source/build/scripts/make_names.py"
    134     in_files = invoker.in_files
    135     other_inputs = make_names_files
    136     outputs = invoker.outputs
    137     other_args = [ "--defines", feature_defines_string ]
    138   }
    139 }
    140 
    141 # Template to run the make_qualified_names script. This is a special case of
    142 # process_in_files.
    143 #   in_files: list of ".in" files to process.
    144 #   outputs: list of output files
    145 template("make_qualified_names") {
    146   process_in_files(target_name) {
    147     script = "//third_party/WebKit/Source/build/scripts/make_qualified_names.py"
    148     in_files = invoker.in_files
    149     other_inputs = make_qualified_names_files
    150     outputs = invoker.outputs
    151     other_args = [ "--defines", feature_defines_string ]
    152   }
    153 }
    154 
    155 # Calls the make_event_factory script. This is a special case of
    156 # process_in_files.
    157 #   in_files: list of ".in" files to process.
    158 #   outputs: list of output files
    159 template("make_event_factory") {
    160   process_in_files(target_name) {
    161     script = "//third_party/WebKit/Source/build/scripts/make_event_factory.py"
    162     in_files = invoker.in_files
    163     other_inputs = make_event_factory_files
    164     outputs = invoker.outputs
    165   }
    166 }
    167 
    168 # Calls the make_token_matcher script.
    169 #   input_file: The "*-in.cpp" file
    170 #   output_file: The output file
    171 template("make_token_matcher") {
    172   action(target_name) {
    173     script = "//third_party/WebKit/Source/build/scripts/make_token_matcher.py"
    174 
    175     source_prereqs = scripts_for_in_files + [ invoker.input_file ]
    176     outputs = [ invoker.output_file ]
    177 
    178     args = [
    179       rebase_path(invoker.input_file, root_build_dir),
    180       rebase_path(invoker.output_file, root_build_dir),
    181     ]
    182 
    183     deps = make_core_generated_deps
    184   }
    185 }
    186 
    187