mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Add support for the GN configuration language (#3368)
* Add samples and definition for GN build files * Add grammar to provide GN syntax highlighting * Fix failing tests * Add Python extensions for GYP includes and .gclient configs
This commit is contained in:
		
				
					committed by
					
						 Brandon Black
						Brandon Black
					
				
			
			
				
	
			
			
			
						parent
						
							33ce2d7264
						
					
				
				
					commit
					45c27f26a2
				
			
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -803,3 +803,6 @@ | |||||||
| [submodule "vendor/grammars/language-fontforge"] | [submodule "vendor/grammars/language-fontforge"] | ||||||
| 	path = vendor/grammars/language-fontforge | 	path = vendor/grammars/language-fontforge | ||||||
| 	url = https://github.com/Alhadis/language-fontforge | 	url = https://github.com/Alhadis/language-fontforge | ||||||
|  | [submodule "vendor/grammars/language-gn"] | ||||||
|  | 	path = vendor/grammars/language-gn | ||||||
|  | 	url = https://github.com/devoncarew/language-gn | ||||||
|   | |||||||
| @@ -368,6 +368,8 @@ vendor/grammars/language-fontforge: | |||||||
| - text.sfd | - text.sfd | ||||||
| vendor/grammars/language-gfm: | vendor/grammars/language-gfm: | ||||||
| - source.gfm | - source.gfm | ||||||
|  | vendor/grammars/language-gn: | ||||||
|  | - source.gn | ||||||
| vendor/grammars/language-graphql: | vendor/grammars/language-graphql: | ||||||
| - source.graphql | - source.graphql | ||||||
| vendor/grammars/language-haml: | vendor/grammars/language-haml: | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ | |||||||
| # language_id       - Integer used as a language-name-independent indexed field so that we can rename | # language_id       - Integer used as a language-name-independent indexed field so that we can rename | ||||||
| #                     languages in Linguist without reindexing all the code on GitHub. Must not be | #                     languages in Linguist without reindexing all the code on GitHub. Must not be | ||||||
| #                     changed for existing languages without the explicit permission of GitHub staff. | #                     changed for existing languages without the explicit permission of GitHub staff. | ||||||
| # color             - CSS hex color to represent the language. Only used if type is "programming" or "prose" | # color             - CSS hex color to represent the language. Only used if type is "programming" or "prose". | ||||||
| # tm_scope          - The TextMate scope that represents this programming | # tm_scope          - The TextMate scope that represents this programming | ||||||
| #                     language. This should match one of the scopes listed in | #                     language. This should match one of the scopes listed in | ||||||
| #                     the grammars.yml file. Use "none" if there is no grammar | #                     the grammars.yml file. Use "none" if there is no grammar | ||||||
| @@ -1393,6 +1393,18 @@ GLSL: | |||||||
|   - ".vshader" |   - ".vshader" | ||||||
|   ace_mode: glsl |   ace_mode: glsl | ||||||
|   language_id: 124 |   language_id: 124 | ||||||
|  | GN: | ||||||
|  |   type: data | ||||||
|  |   extensions: | ||||||
|  |   - ".gn" | ||||||
|  |   - ".gni" | ||||||
|  |   interpreters: | ||||||
|  |   - gn | ||||||
|  |   tm_scope: source.gn | ||||||
|  |   ace_mode: python | ||||||
|  |   codemirror_mode: python | ||||||
|  |   codemirror_mime_type: text/x-python | ||||||
|  |   language_id: 302957008 | ||||||
| Game Maker Language: | Game Maker Language: | ||||||
|   type: programming |   type: programming | ||||||
|   color: "#8fb200" |   color: "#8fb200" | ||||||
| @@ -3392,6 +3404,7 @@ Python: | |||||||
|   - ".cgi" |   - ".cgi" | ||||||
|   - ".fcgi" |   - ".fcgi" | ||||||
|   - ".gyp" |   - ".gyp" | ||||||
|  |   - ".gypi" | ||||||
|   - ".lmi" |   - ".lmi" | ||||||
|   - ".py3" |   - ".py3" | ||||||
|   - ".pyde" |   - ".pyde" | ||||||
| @@ -3404,6 +3417,7 @@ Python: | |||||||
|   - ".wsgi" |   - ".wsgi" | ||||||
|   - ".xpy" |   - ".xpy" | ||||||
|   filenames: |   filenames: | ||||||
|  |   - .gclient | ||||||
|   - BUCK |   - BUCK | ||||||
|   - BUILD |   - BUILD | ||||||
|   - SConscript |   - SConscript | ||||||
|   | |||||||
							
								
								
									
										59
									
								
								samples/GN/BUILD.2.gn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								samples/GN/BUILD.2.gn
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | # Copyright 2016 the V8 project authors. All rights reserved. | ||||||
|  | # Use of this source code is governed by a BSD-style license that can be | ||||||
|  | # found in the LICENSE file. | ||||||
|  |  | ||||||
|  | import("../gni/isolate.gni") | ||||||
|  |  | ||||||
|  | group("gn_all") { | ||||||
|  |   testonly = true | ||||||
|  |  | ||||||
|  |   if (v8_test_isolation_mode != "noop") { | ||||||
|  |     deps = [ | ||||||
|  |       ":check-static-initializers_run", | ||||||
|  |       ":jsfunfuzz_run", | ||||||
|  |       ":run-deopt-fuzzer_run", | ||||||
|  |       ":run-gcmole_run", | ||||||
|  |       ":run-valgrind_run", | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | v8_isolate_run("check-static-initializers") { | ||||||
|  |   deps = [ | ||||||
|  |     "..:d8_run", | ||||||
|  |   ] | ||||||
|  |  | ||||||
|  |   isolate = "check-static-initializers.isolate" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | v8_isolate_run("jsfunfuzz") { | ||||||
|  |   deps = [ | ||||||
|  |     "..:d8_run", | ||||||
|  |   ] | ||||||
|  |  | ||||||
|  |   isolate = "jsfunfuzz/jsfunfuzz.isolate" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | v8_isolate_run("run-deopt-fuzzer") { | ||||||
|  |   deps = [ | ||||||
|  |     "..:d8_run", | ||||||
|  |   ] | ||||||
|  |  | ||||||
|  |   isolate = "run-deopt-fuzzer.isolate" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | v8_isolate_run("run-gcmole") { | ||||||
|  |   deps = [ | ||||||
|  |     "..:d8_run", | ||||||
|  |   ] | ||||||
|  |  | ||||||
|  |   isolate = "gcmole/run-gcmole.isolate" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | v8_isolate_run("run-valgrind") { | ||||||
|  |   deps = [ | ||||||
|  |     "..:d8_run", | ||||||
|  |   ] | ||||||
|  |  | ||||||
|  |   isolate = "run-valgrind.isolate" | ||||||
|  | } | ||||||
							
								
								
									
										1646
									
								
								samples/GN/BUILD.3.gn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1646
									
								
								samples/GN/BUILD.3.gn
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2583
									
								
								samples/GN/BUILD.gn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2583
									
								
								samples/GN/BUILD.gn
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2781
									
								
								samples/GN/android-rules.gni
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2781
									
								
								samples/GN/android-rules.gni
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										13
									
								
								samples/GN/clang.gni
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								samples/GN/clang.gni
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | # Copyright 2014 The Chromium Authors. All rights reserved. | ||||||
|  | # Use of this source code is governed by a BSD-style license that can be | ||||||
|  | # found in the LICENSE file. | ||||||
|  |  | ||||||
|  | import("//build/toolchain/toolchain.gni") | ||||||
|  |  | ||||||
|  | declare_args() { | ||||||
|  |   # Indicates if the build should use the Chrome-specific plugins for enforcing | ||||||
|  |   # coding guidelines, etc. Only used when compiling with Clang. | ||||||
|  |   clang_use_chrome_plugins = is_clang && !is_nacl && !use_xcode_clang | ||||||
|  |  | ||||||
|  |   clang_base_path = "//third_party/llvm-build/Release+Asserts" | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								samples/GN/filenames/.gn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								samples/GN/filenames/.gn
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | # This file is used by the GN meta build system to find the root of the source | ||||||
|  | # tree and to set startup options. For documentation on the values set in this | ||||||
|  | # file, run "gn help dotfile" at the command line. | ||||||
|  |  | ||||||
|  | import("//build/dotfile_settings.gni") | ||||||
|  |  | ||||||
|  | # The location of the build configuration file. | ||||||
|  | buildconfig = "//build/config/BUILDCONFIG.gn" | ||||||
|  |  | ||||||
|  | # The secondary source root is a parallel directory tree where | ||||||
|  | # GN build files are placed when they can not be placed directly | ||||||
|  | # in the source tree, e.g. for third party source trees. | ||||||
|  | secondary_source = "//build/secondary/" | ||||||
|  |  | ||||||
|  | # These are the targets to check headers for by default. The files in targets | ||||||
|  | # matching these patterns (see "gn help label_pattern" for format) will have | ||||||
|  | # their includes checked for proper dependencies when you run either | ||||||
|  | # "gn check" or "gn gen --check". | ||||||
|  | check_targets = [] | ||||||
|  |  | ||||||
|  | # These are the list of GN files that run exec_script. This whitelist exists | ||||||
|  | # to force additional review for new uses of exec_script, which is strongly | ||||||
|  | # discouraged except for gypi_to_gn calls. | ||||||
|  | exec_script_whitelist = | ||||||
|  |     build_dotfile_settings.exec_script_whitelist + [ "//test/test262/BUILD.gn" ] | ||||||
							
								
								
									
										503
									
								
								samples/GN/gcc_toolchain.gni
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										503
									
								
								samples/GN/gcc_toolchain.gni
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,503 @@ | |||||||
|  | # Copyright (c) 2013 The Chromium Authors. All rights reserved. | ||||||
|  | # Use of this source code is governed by a BSD-style license that can be | ||||||
|  | # found in the LICENSE file. | ||||||
|  |  | ||||||
|  | import("//build/config/android/config.gni") | ||||||
|  | import("//build/config/clang/clang.gni") | ||||||
|  | import("//build/config/nacl/config.gni") | ||||||
|  | import("//build/config/sanitizers/sanitizers.gni") | ||||||
|  | import("//build/config/v8_target_cpu.gni") | ||||||
|  | import("//build/toolchain/cc_wrapper.gni") | ||||||
|  | import("//build/toolchain/goma.gni") | ||||||
|  | import("//build/toolchain/toolchain.gni") | ||||||
|  |  | ||||||
|  | # This template defines a toolchain for something that works like gcc | ||||||
|  | # (including clang). | ||||||
|  | # | ||||||
|  | # It requires the following variables specifying the executables to run: | ||||||
|  | #  - ar | ||||||
|  | #  - cc | ||||||
|  | #  - cxx | ||||||
|  | #  - ld | ||||||
|  | # | ||||||
|  | # Optional parameters that control the tools: | ||||||
|  | # | ||||||
|  | #  - extra_cflags | ||||||
|  | #      Extra flags to be appended when compiling C files (but not C++ files). | ||||||
|  | #  - extra_cppflags | ||||||
|  | #      Extra flags to be appended when compiling both C and C++ files. "CPP" | ||||||
|  | #      stands for "C PreProcessor" in this context, although it can be | ||||||
|  | #      used for non-preprocessor flags as well. Not to be confused with | ||||||
|  | #      "CXX" (which follows). | ||||||
|  | #  - extra_cxxflags | ||||||
|  | #      Extra flags to be appended when compiling C++ files (but not C files). | ||||||
|  | #  - extra_ldflags | ||||||
|  | #      Extra flags to be appended when linking | ||||||
|  | # | ||||||
|  | #  - libs_section_prefix | ||||||
|  | #  - libs_section_postfix | ||||||
|  | #      The contents of these strings, if specified, will be placed around | ||||||
|  | #      the libs section of the linker line. It allows one to inject libraries | ||||||
|  | #      at the beginning and end for all targets in a toolchain. | ||||||
|  | #  - solink_libs_section_prefix | ||||||
|  | #  - solink_libs_section_postfix | ||||||
|  | #      Same as libs_section_{pre,post}fix except used for solink instead of link. | ||||||
|  | #  - link_outputs | ||||||
|  | #      The content of this array, if specified, will be added to the list of | ||||||
|  | #      outputs from the link command. This can be useful in conjunction with | ||||||
|  | #      the post_link parameter. | ||||||
|  | #  - post_link | ||||||
|  | #      The content of this string, if specified, will be run as a separate | ||||||
|  | #      command following the the link command. | ||||||
|  | #  - deps | ||||||
|  | #      Just forwarded to the toolchain definition. | ||||||
|  | #  - executable_extension | ||||||
|  | #      If this string is specified it will be used for the file extension | ||||||
|  | #      for an executable, rather than using no extension; targets will | ||||||
|  | #      still be able to override the extension using the output_extension | ||||||
|  | #      variable. | ||||||
|  | #  - rebuild_define | ||||||
|  | #      The contents of this string, if specified, will be passed as a #define | ||||||
|  | #      to the toolchain. It can be used to force recompiles whenever a | ||||||
|  | #      toolchain is updated. | ||||||
|  | #  - shlib_extension | ||||||
|  | #      If this string is specified it will be used for the file extension | ||||||
|  | #      for a shared library, rather than default value specified in | ||||||
|  | #      toolchain.gni | ||||||
|  | #  - strip | ||||||
|  | #      Location of the strip executable. When specified, strip will be run on | ||||||
|  | #      all shared libraries and executables as they are built. The pre-stripped | ||||||
|  | #      artifacts will be put in lib.unstripped/ and exe.unstripped/. | ||||||
|  | template("gcc_toolchain") { | ||||||
|  |   toolchain(target_name) { | ||||||
|  |     assert(defined(invoker.ar), "gcc_toolchain() must specify a \"ar\" value") | ||||||
|  |     assert(defined(invoker.cc), "gcc_toolchain() must specify a \"cc\" value") | ||||||
|  |     assert(defined(invoker.cxx), "gcc_toolchain() must specify a \"cxx\" value") | ||||||
|  |     assert(defined(invoker.ld), "gcc_toolchain() must specify a \"ld\" value") | ||||||
|  |  | ||||||
|  |     # This define changes when the toolchain changes, forcing a rebuild. | ||||||
|  |     # Nothing should ever use this define. | ||||||
|  |     if (defined(invoker.rebuild_define)) { | ||||||
|  |       rebuild_string = "-D" + invoker.rebuild_define + " " | ||||||
|  |     } else { | ||||||
|  |       rebuild_string = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # GN's syntax can't handle more than one scope dereference at once, like | ||||||
|  |     # "invoker.toolchain_args.foo", so make a temporary to hold the toolchain | ||||||
|  |     # args so we can do "invoker_toolchain_args.foo". | ||||||
|  |     assert(defined(invoker.toolchain_args), | ||||||
|  |            "Toolchains must specify toolchain_args") | ||||||
|  |     invoker_toolchain_args = invoker.toolchain_args | ||||||
|  |     assert(defined(invoker_toolchain_args.current_cpu), | ||||||
|  |            "toolchain_args must specify a current_cpu") | ||||||
|  |     assert(defined(invoker_toolchain_args.current_os), | ||||||
|  |            "toolchain_args must specify a current_os") | ||||||
|  |  | ||||||
|  |     # When invoking this toolchain not as the default one, these args will be | ||||||
|  |     # passed to the build. They are ignored when this is the default toolchain. | ||||||
|  |     toolchain_args = { | ||||||
|  |       # Populate toolchain args from the invoker. | ||||||
|  |       forward_variables_from(invoker_toolchain_args, "*") | ||||||
|  |  | ||||||
|  |       # The host toolchain value computed by the default toolchain's setup | ||||||
|  |       # needs to be passed through unchanged to all secondary toolchains to | ||||||
|  |       # ensure that it's always the same, regardless of the values that may be | ||||||
|  |       # set on those toolchains. | ||||||
|  |       host_toolchain = host_toolchain | ||||||
|  |  | ||||||
|  |       if (!defined(invoker_toolchain_args.v8_current_cpu)) { | ||||||
|  |         v8_current_cpu = invoker_toolchain_args.current_cpu | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # When the invoker has explicitly overridden use_goma or cc_wrapper in the | ||||||
|  |     # toolchain args, use those values, otherwise default to the global one. | ||||||
|  |     # This works because the only reasonable override that toolchains might | ||||||
|  |     # supply for these values are to force-disable them. | ||||||
|  |     if (defined(toolchain_args.use_goma)) { | ||||||
|  |       toolchain_uses_goma = toolchain_args.use_goma | ||||||
|  |     } else { | ||||||
|  |       toolchain_uses_goma = use_goma | ||||||
|  |     } | ||||||
|  |     if (defined(toolchain_args.cc_wrapper)) { | ||||||
|  |       toolchain_cc_wrapper = toolchain_args.cc_wrapper | ||||||
|  |     } else { | ||||||
|  |       toolchain_cc_wrapper = cc_wrapper | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # Compute the compiler prefix. | ||||||
|  |     if (toolchain_uses_goma) { | ||||||
|  |       assert(toolchain_cc_wrapper == "", | ||||||
|  |              "Goma and cc_wrapper can't be used together.") | ||||||
|  |       compiler_prefix = "$goma_dir/gomacc " | ||||||
|  |     } else if (toolchain_cc_wrapper != "") { | ||||||
|  |       compiler_prefix = toolchain_cc_wrapper + " " | ||||||
|  |     } else { | ||||||
|  |       compiler_prefix = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     cc = compiler_prefix + invoker.cc | ||||||
|  |     cxx = compiler_prefix + invoker.cxx | ||||||
|  |     ar = invoker.ar | ||||||
|  |     ld = invoker.ld | ||||||
|  |     if (defined(invoker.readelf)) { | ||||||
|  |       readelf = invoker.readelf | ||||||
|  |     } else { | ||||||
|  |       readelf = "readelf" | ||||||
|  |     } | ||||||
|  |     if (defined(invoker.nm)) { | ||||||
|  |       nm = invoker.nm | ||||||
|  |     } else { | ||||||
|  |       nm = "nm" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.shlib_extension)) { | ||||||
|  |       default_shlib_extension = invoker.shlib_extension | ||||||
|  |     } else { | ||||||
|  |       default_shlib_extension = shlib_extension | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.executable_extension)) { | ||||||
|  |       default_executable_extension = invoker.executable_extension | ||||||
|  |     } else { | ||||||
|  |       default_executable_extension = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # Bring these into our scope for string interpolation with default values. | ||||||
|  |     if (defined(invoker.libs_section_prefix)) { | ||||||
|  |       libs_section_prefix = invoker.libs_section_prefix | ||||||
|  |     } else { | ||||||
|  |       libs_section_prefix = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.libs_section_postfix)) { | ||||||
|  |       libs_section_postfix = invoker.libs_section_postfix | ||||||
|  |     } else { | ||||||
|  |       libs_section_postfix = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.solink_libs_section_prefix)) { | ||||||
|  |       solink_libs_section_prefix = invoker.solink_libs_section_prefix | ||||||
|  |     } else { | ||||||
|  |       solink_libs_section_prefix = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.solink_libs_section_postfix)) { | ||||||
|  |       solink_libs_section_postfix = invoker.solink_libs_section_postfix | ||||||
|  |     } else { | ||||||
|  |       solink_libs_section_postfix = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.extra_cflags) && invoker.extra_cflags != "") { | ||||||
|  |       extra_cflags = " " + invoker.extra_cflags | ||||||
|  |     } else { | ||||||
|  |       extra_cflags = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.extra_cppflags) && invoker.extra_cppflags != "") { | ||||||
|  |       extra_cppflags = " " + invoker.extra_cppflags | ||||||
|  |     } else { | ||||||
|  |       extra_cppflags = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.extra_cxxflags) && invoker.extra_cxxflags != "") { | ||||||
|  |       extra_cxxflags = " " + invoker.extra_cxxflags | ||||||
|  |     } else { | ||||||
|  |       extra_cxxflags = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (defined(invoker.extra_ldflags) && invoker.extra_ldflags != "") { | ||||||
|  |       extra_ldflags = " " + invoker.extra_ldflags | ||||||
|  |     } else { | ||||||
|  |       extra_ldflags = "" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # These library switches can apply to all tools below. | ||||||
|  |     lib_switch = "-l" | ||||||
|  |     lib_dir_switch = "-L" | ||||||
|  |  | ||||||
|  |     # Object files go in this directory. | ||||||
|  |     object_subdir = "{{target_out_dir}}/{{label_name}}" | ||||||
|  |  | ||||||
|  |     tool("cc") { | ||||||
|  |       depfile = "{{output}}.d" | ||||||
|  |       command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}${extra_cppflags}${extra_cflags} -c {{source}} -o {{output}}" | ||||||
|  |       depsformat = "gcc" | ||||||
|  |       description = "CC {{output}}" | ||||||
|  |       outputs = [ | ||||||
|  |         # The whitelist file is also an output, but ninja does not | ||||||
|  |         # currently support multiple outputs for tool("cc"). | ||||||
|  |         "$object_subdir/{{source_name_part}}.o", | ||||||
|  |       ] | ||||||
|  |       if (enable_resource_whitelist_generation) { | ||||||
|  |         compile_wrapper = | ||||||
|  |             rebase_path("//build/toolchain/gcc_compile_wrapper.py", | ||||||
|  |                         root_build_dir) | ||||||
|  |         command = "$python_path \"$compile_wrapper\" --resource-whitelist=\"{{output}}.whitelist\" $command" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     tool("cxx") { | ||||||
|  |       depfile = "{{output}}.d" | ||||||
|  |       command = "$cxx -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}${extra_cppflags}${extra_cxxflags} -c {{source}} -o {{output}}" | ||||||
|  |       depsformat = "gcc" | ||||||
|  |       description = "CXX {{output}}" | ||||||
|  |       outputs = [ | ||||||
|  |         # The whitelist file is also an output, but ninja does not | ||||||
|  |         # currently support multiple outputs for tool("cxx"). | ||||||
|  |         "$object_subdir/{{source_name_part}}.o", | ||||||
|  |       ] | ||||||
|  |       if (enable_resource_whitelist_generation) { | ||||||
|  |         compile_wrapper = | ||||||
|  |             rebase_path("//build/toolchain/gcc_compile_wrapper.py", | ||||||
|  |                         root_build_dir) | ||||||
|  |         command = "$python_path \"$compile_wrapper\" --resource-whitelist=\"{{output}}.whitelist\" $command" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     tool("asm") { | ||||||
|  |       # For GCC we can just use the C compiler to compile assembly. | ||||||
|  |       depfile = "{{output}}.d" | ||||||
|  |       command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{asmflags}} -c {{source}} -o {{output}}" | ||||||
|  |       depsformat = "gcc" | ||||||
|  |       description = "ASM {{output}}" | ||||||
|  |       outputs = [ | ||||||
|  |         "$object_subdir/{{source_name_part}}.o", | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     tool("alink") { | ||||||
|  |       rspfile = "{{output}}.rsp" | ||||||
|  |       whitelist_flag = " " | ||||||
|  |       if (enable_resource_whitelist_generation) { | ||||||
|  |         whitelist_flag = " --resource-whitelist=\"{{output}}.whitelist\"" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       # This needs a Python script to avoid using simple sh features in this | ||||||
|  |       # command, in case the host does not use a POSIX shell (e.g. compiling | ||||||
|  |       # POSIX-like toolchains such as NaCl on Windows). | ||||||
|  |       ar_wrapper = | ||||||
|  |           rebase_path("//build/toolchain/gcc_ar_wrapper.py", root_build_dir) | ||||||
|  |       command = "$python_path \"$ar_wrapper\"$whitelist_flag --output={{output}} --ar=\"$ar\" {{arflags}} rcsD @\"$rspfile\"" | ||||||
|  |       description = "AR {{output}}" | ||||||
|  |       rspfile_content = "{{inputs}}" | ||||||
|  |       outputs = [ | ||||||
|  |         "{{output_dir}}/{{target_output_name}}{{output_extension}}", | ||||||
|  |       ] | ||||||
|  |  | ||||||
|  |       # Shared libraries go in the target out directory by default so we can | ||||||
|  |       # generate different targets with the same name and not have them collide. | ||||||
|  |       default_output_dir = "{{target_out_dir}}" | ||||||
|  |       default_output_extension = ".a" | ||||||
|  |       output_prefix = "lib" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     tool("solink") { | ||||||
|  |       soname = "{{target_output_name}}{{output_extension}}"  # e.g. "libfoo.so". | ||||||
|  |       sofile = "{{output_dir}}/$soname"  # Possibly including toolchain dir. | ||||||
|  |       rspfile = sofile + ".rsp" | ||||||
|  |       pool = "//build/toolchain:link_pool($default_toolchain)" | ||||||
|  |       whitelist_flag = " " | ||||||
|  |       if (enable_resource_whitelist_generation) { | ||||||
|  |         whitelist_file = "$sofile.whitelist" | ||||||
|  |         whitelist_flag = " --resource-whitelist=\"$whitelist_file\"" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       if (defined(invoker.strip)) { | ||||||
|  |         unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" | ||||||
|  |       } else { | ||||||
|  |         unstripped_sofile = sofile | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       # These variables are not built into GN but are helpers that | ||||||
|  |       # implement (1) linking to produce a .so, (2) extracting the symbols | ||||||
|  |       # from that file (3) if the extracted list differs from the existing | ||||||
|  |       # .TOC file, overwrite it, otherwise, don't change it. | ||||||
|  |       tocfile = sofile + ".TOC" | ||||||
|  |  | ||||||
|  |       link_command = "$ld -shared {{ldflags}}${extra_ldflags} -o \"$unstripped_sofile\" -Wl,-soname=\"$soname\" @\"$rspfile\"" | ||||||
|  |  | ||||||
|  |       assert(defined(readelf), "to solink you must have a readelf") | ||||||
|  |       assert(defined(nm), "to solink you must have an nm") | ||||||
|  |       strip_switch = "" | ||||||
|  |       if (defined(invoker.strip)) { | ||||||
|  |         strip_switch = "--strip=${invoker.strip}" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       # This needs a Python script to avoid using a complex shell command | ||||||
|  |       # requiring sh control structures, pipelines, and POSIX utilities. | ||||||
|  |       # The host might not have a POSIX shell and utilities (e.g. Windows). | ||||||
|  |       solink_wrapper = rebase_path("//build/toolchain/gcc_solink_wrapper.py") | ||||||
|  |       command = "$python_path \"$solink_wrapper\" --readelf=\"$readelf\" --nm=\"$nm\" $strip_switch --sofile=\"$unstripped_sofile\" --tocfile=\"$tocfile\" --output=\"$sofile\"$whitelist_flag -- $link_command" | ||||||
|  |  | ||||||
|  |       rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix" | ||||||
|  |  | ||||||
|  |       description = "SOLINK $sofile" | ||||||
|  |  | ||||||
|  |       # Use this for {{output_extension}} expansions unless a target manually | ||||||
|  |       # overrides it (in which case {{output_extension}} will be what the target | ||||||
|  |       # specifies). | ||||||
|  |       default_output_extension = default_shlib_extension | ||||||
|  |  | ||||||
|  |       default_output_dir = "{{root_out_dir}}" | ||||||
|  |       if (shlib_subdir != ".") { | ||||||
|  |         default_output_dir += "/$shlib_subdir" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       output_prefix = "lib" | ||||||
|  |  | ||||||
|  |       # Since the above commands only updates the .TOC file when it changes, ask | ||||||
|  |       # Ninja to check if the timestamp actually changed to know if downstream | ||||||
|  |       # dependencies should be recompiled. | ||||||
|  |       restat = true | ||||||
|  |  | ||||||
|  |       # Tell GN about the output files. It will link to the sofile but use the | ||||||
|  |       # tocfile for dependency management. | ||||||
|  |       outputs = [ | ||||||
|  |         sofile, | ||||||
|  |         tocfile, | ||||||
|  |       ] | ||||||
|  |       if (enable_resource_whitelist_generation) { | ||||||
|  |         outputs += [ whitelist_file ] | ||||||
|  |       } | ||||||
|  |       if (sofile != unstripped_sofile) { | ||||||
|  |         outputs += [ unstripped_sofile ] | ||||||
|  |       } | ||||||
|  |       link_output = sofile | ||||||
|  |       depend_output = tocfile | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     tool("solink_module") { | ||||||
|  |       soname = "{{target_output_name}}{{output_extension}}"  # e.g. "libfoo.so". | ||||||
|  |       sofile = "{{output_dir}}/$soname" | ||||||
|  |       rspfile = sofile + ".rsp" | ||||||
|  |       pool = "//build/toolchain:link_pool($default_toolchain)" | ||||||
|  |  | ||||||
|  |       if (defined(invoker.strip)) { | ||||||
|  |         unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" | ||||||
|  |       } else { | ||||||
|  |         unstripped_sofile = sofile | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       command = "$ld -shared {{ldflags}}${extra_ldflags} -o \"$unstripped_sofile\" -Wl,-soname=\"$soname\" @\"$rspfile\"" | ||||||
|  |  | ||||||
|  |       if (defined(invoker.strip)) { | ||||||
|  |         strip_command = "${invoker.strip} --strip-unneeded -o \"$sofile\" \"$unstripped_sofile\"" | ||||||
|  |         command += " && " + strip_command | ||||||
|  |       } | ||||||
|  |       rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix" | ||||||
|  |  | ||||||
|  |       description = "SOLINK_MODULE $sofile" | ||||||
|  |  | ||||||
|  |       # Use this for {{output_extension}} expansions unless a target manually | ||||||
|  |       # overrides it (in which case {{output_extension}} will be what the target | ||||||
|  |       # specifies). | ||||||
|  |       if (defined(invoker.loadable_module_extension)) { | ||||||
|  |         default_output_extension = invoker.loadable_module_extension | ||||||
|  |       } else { | ||||||
|  |         default_output_extension = default_shlib_extension | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       default_output_dir = "{{root_out_dir}}" | ||||||
|  |       if (shlib_subdir != ".") { | ||||||
|  |         default_output_dir += "/$shlib_subdir" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       output_prefix = "lib" | ||||||
|  |  | ||||||
|  |       outputs = [ | ||||||
|  |         sofile, | ||||||
|  |       ] | ||||||
|  |       if (sofile != unstripped_sofile) { | ||||||
|  |         outputs += [ unstripped_sofile ] | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     tool("link") { | ||||||
|  |       exename = "{{target_output_name}}{{output_extension}}" | ||||||
|  |       outfile = "{{output_dir}}/$exename" | ||||||
|  |       rspfile = "$outfile.rsp" | ||||||
|  |       unstripped_outfile = outfile | ||||||
|  |       pool = "//build/toolchain:link_pool($default_toolchain)" | ||||||
|  |  | ||||||
|  |       # Use this for {{output_extension}} expansions unless a target manually | ||||||
|  |       # overrides it (in which case {{output_extension}} will be what the target | ||||||
|  |       # specifies). | ||||||
|  |       default_output_extension = default_executable_extension | ||||||
|  |  | ||||||
|  |       default_output_dir = "{{root_out_dir}}" | ||||||
|  |  | ||||||
|  |       if (defined(invoker.strip)) { | ||||||
|  |         unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       command = "$ld {{ldflags}}${extra_ldflags} -o \"$unstripped_outfile\" -Wl,--start-group @\"$rspfile\" {{solibs}} -Wl,--end-group $libs_section_prefix {{libs}} $libs_section_postfix" | ||||||
|  |       if (defined(invoker.strip)) { | ||||||
|  |         link_wrapper = | ||||||
|  |             rebase_path("//build/toolchain/gcc_link_wrapper.py", root_build_dir) | ||||||
|  |         command = "$python_path \"$link_wrapper\" --strip=\"${invoker.strip}\" --unstripped-file=\"$unstripped_outfile\" --output=\"$outfile\" -- $command" | ||||||
|  |       } | ||||||
|  |       description = "LINK $outfile" | ||||||
|  |       rspfile_content = "{{inputs}}" | ||||||
|  |       outputs = [ | ||||||
|  |         outfile, | ||||||
|  |       ] | ||||||
|  |       if (outfile != unstripped_outfile) { | ||||||
|  |         outputs += [ unstripped_outfile ] | ||||||
|  |       } | ||||||
|  |       if (defined(invoker.link_outputs)) { | ||||||
|  |         outputs += invoker.link_outputs | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # These two are really entirely generic, but have to be repeated in | ||||||
|  |     # each toolchain because GN doesn't allow a template to be used here. | ||||||
|  |     # See //build/toolchain/toolchain.gni for details. | ||||||
|  |     tool("stamp") { | ||||||
|  |       command = stamp_command | ||||||
|  |       description = stamp_description | ||||||
|  |     } | ||||||
|  |     tool("copy") { | ||||||
|  |       command = copy_command | ||||||
|  |       description = copy_description | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     forward_variables_from(invoker, [ "deps" ]) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # This is a shorthand for gcc_toolchain instances based on the Chromium-built | ||||||
|  | # version of Clang. Only the toolchain_cpu and toolchain_os variables need to | ||||||
|  | # be specified by the invoker, and optionally toolprefix if it's a | ||||||
|  | # cross-compile case. Note that for a cross-compile case this toolchain | ||||||
|  | # requires a config to pass the appropriate -target option, or else it will | ||||||
|  | # actually just be doing a native compile. The invoker can optionally override | ||||||
|  | # use_gold too. | ||||||
|  | template("clang_toolchain") { | ||||||
|  |   if (defined(invoker.toolprefix)) { | ||||||
|  |     toolprefix = invoker.toolprefix | ||||||
|  |   } else { | ||||||
|  |     toolprefix = "" | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   gcc_toolchain(target_name) { | ||||||
|  |     prefix = rebase_path("$clang_base_path/bin", root_build_dir) | ||||||
|  |     cc = "$prefix/clang" | ||||||
|  |     cxx = "$prefix/clang++" | ||||||
|  |     ld = cxx | ||||||
|  |  | ||||||
|  |     readelf = "${toolprefix}readelf" | ||||||
|  |     ar = "${toolprefix}ar" | ||||||
|  |     nm = "${toolprefix}nm" | ||||||
|  |  | ||||||
|  |     forward_variables_from(invoker, [ "strip" ]) | ||||||
|  |  | ||||||
|  |     toolchain_args = { | ||||||
|  |       if (defined(invoker.toolchain_args)) { | ||||||
|  |         forward_variables_from(invoker.toolchain_args, "*") | ||||||
|  |       } | ||||||
|  |       is_clang = true | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										235
									
								
								samples/GN/icu.gn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								samples/GN/icu.gn
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,235 @@ | |||||||
|  | # Copyright 2016 The Chromium Authors. All rights reserved. | ||||||
|  | # Use of this source code is governed by a BSD-style license that can be | ||||||
|  | # found in the LICENSE file. | ||||||
|  |  | ||||||
|  | import("//build/config/linux/pkg_config.gni") | ||||||
|  | import("//build/shim_headers.gni") | ||||||
|  |  | ||||||
|  | group("icu") { | ||||||
|  |   public_deps = [ | ||||||
|  |     ":icui18n", | ||||||
|  |     ":icuuc", | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | config("icu_config") { | ||||||
|  |   defines = [ | ||||||
|  |     "USING_SYSTEM_ICU=1", | ||||||
|  |     "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC", | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | pkg_config("system_icui18n") { | ||||||
|  |   packages = [ "icu-i18n" ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | pkg_config("system_icuuc") { | ||||||
|  |   packages = [ "icu-uc" ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | source_set("icui18n") { | ||||||
|  |   deps = [ | ||||||
|  |     ":icui18n_shim", | ||||||
|  |   ] | ||||||
|  |   public_configs = [ | ||||||
|  |     ":icu_config", | ||||||
|  |     ":system_icui18n", | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | source_set("icuuc") { | ||||||
|  |   deps = [ | ||||||
|  |     ":icuuc_shim", | ||||||
|  |   ] | ||||||
|  |   public_configs = [ | ||||||
|  |     ":icu_config", | ||||||
|  |     ":system_icuuc", | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | shim_headers("icui18n_shim") { | ||||||
|  |   root_path = "source/i18n" | ||||||
|  |   headers = [ | ||||||
|  |     # This list can easily be updated using the command below: | ||||||
|  |     # find third_party/icu/source/i18n/unicode \ | ||||||
|  |     # -iname '*.h' -printf '"%p",\n' | \ | ||||||
|  |     # sed -e 's|third_party/icu/i18n/common/||' | sort -u | ||||||
|  |     "unicode/alphaindex.h", | ||||||
|  |     "unicode/basictz.h", | ||||||
|  |     "unicode/calendar.h", | ||||||
|  |     "unicode/choicfmt.h", | ||||||
|  |     "unicode/coleitr.h", | ||||||
|  |     "unicode/coll.h", | ||||||
|  |     "unicode/compactdecimalformat.h", | ||||||
|  |     "unicode/curramt.h", | ||||||
|  |     "unicode/currpinf.h", | ||||||
|  |     "unicode/currunit.h", | ||||||
|  |     "unicode/datefmt.h", | ||||||
|  |     "unicode/dcfmtsym.h", | ||||||
|  |     "unicode/decimfmt.h", | ||||||
|  |     "unicode/dtfmtsym.h", | ||||||
|  |     "unicode/dtitvfmt.h", | ||||||
|  |     "unicode/dtitvinf.h", | ||||||
|  |     "unicode/dtptngen.h", | ||||||
|  |     "unicode/dtrule.h", | ||||||
|  |     "unicode/fieldpos.h", | ||||||
|  |     "unicode/fmtable.h", | ||||||
|  |     "unicode/format.h", | ||||||
|  |     "unicode/fpositer.h", | ||||||
|  |     "unicode/gender.h", | ||||||
|  |     "unicode/gregocal.h", | ||||||
|  |     "unicode/locdspnm.h", | ||||||
|  |     "unicode/measfmt.h", | ||||||
|  |     "unicode/measunit.h", | ||||||
|  |     "unicode/measure.h", | ||||||
|  |     "unicode/msgfmt.h", | ||||||
|  |     "unicode/numfmt.h", | ||||||
|  |     "unicode/numsys.h", | ||||||
|  |     "unicode/plurfmt.h", | ||||||
|  |     "unicode/plurrule.h", | ||||||
|  |     "unicode/rbnf.h", | ||||||
|  |     "unicode/rbtz.h", | ||||||
|  |     "unicode/regex.h", | ||||||
|  |     "unicode/region.h", | ||||||
|  |     "unicode/reldatefmt.h", | ||||||
|  |     "unicode/scientificnumberformatter.h", | ||||||
|  |     "unicode/search.h", | ||||||
|  |     "unicode/selfmt.h", | ||||||
|  |     "unicode/simpletz.h", | ||||||
|  |     "unicode/smpdtfmt.h", | ||||||
|  |     "unicode/sortkey.h", | ||||||
|  |     "unicode/stsearch.h", | ||||||
|  |     "unicode/tblcoll.h", | ||||||
|  |     "unicode/timezone.h", | ||||||
|  |     "unicode/tmunit.h", | ||||||
|  |     "unicode/tmutamt.h", | ||||||
|  |     "unicode/tmutfmt.h", | ||||||
|  |     "unicode/translit.h", | ||||||
|  |     "unicode/tzfmt.h", | ||||||
|  |     "unicode/tznames.h", | ||||||
|  |     "unicode/tzrule.h", | ||||||
|  |     "unicode/tztrans.h", | ||||||
|  |     "unicode/ucal.h", | ||||||
|  |     "unicode/ucol.h", | ||||||
|  |     "unicode/ucoleitr.h", | ||||||
|  |     "unicode/ucsdet.h", | ||||||
|  |     "unicode/ucurr.h", | ||||||
|  |     "unicode/udat.h", | ||||||
|  |     "unicode/udateintervalformat.h", | ||||||
|  |     "unicode/udatpg.h", | ||||||
|  |     "unicode/udisplaycontext.h", | ||||||
|  |     "unicode/ufieldpositer.h", | ||||||
|  |     "unicode/uformattable.h", | ||||||
|  |     "unicode/ugender.h", | ||||||
|  |     "unicode/uldnames.h", | ||||||
|  |     "unicode/ulocdata.h", | ||||||
|  |     "unicode/umsg.h", | ||||||
|  |     "unicode/unirepl.h", | ||||||
|  |     "unicode/unum.h", | ||||||
|  |     "unicode/unumsys.h", | ||||||
|  |     "unicode/upluralrules.h", | ||||||
|  |     "unicode/uregex.h", | ||||||
|  |     "unicode/uregion.h", | ||||||
|  |     "unicode/usearch.h", | ||||||
|  |     "unicode/uspoof.h", | ||||||
|  |     "unicode/utmscale.h", | ||||||
|  |     "unicode/utrans.h", | ||||||
|  |     "unicode/vtzone.h", | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | shim_headers("icuuc_shim") { | ||||||
|  |   root_path = "source/common" | ||||||
|  |   headers = [ | ||||||
|  |     # This list can easily be updated using the command below: | ||||||
|  |     # find third_party/icu/source/common/unicode \ | ||||||
|  |     # -iname '*.h' -printf '"%p",\n' | \ | ||||||
|  |     # sed -e 's|third_party/icu/source/common/||' | sort -u | ||||||
|  |     "unicode/appendable.h", | ||||||
|  |     "unicode/brkiter.h", | ||||||
|  |     "unicode/bytestream.h", | ||||||
|  |     "unicode/bytestrie.h", | ||||||
|  |     "unicode/bytestriebuilder.h", | ||||||
|  |     "unicode/caniter.h", | ||||||
|  |     "unicode/chariter.h", | ||||||
|  |     "unicode/dbbi.h", | ||||||
|  |     "unicode/docmain.h", | ||||||
|  |     "unicode/dtintrv.h", | ||||||
|  |     "unicode/enumset.h", | ||||||
|  |     "unicode/errorcode.h", | ||||||
|  |     "unicode/filteredbrk.h", | ||||||
|  |     "unicode/icudataver.h", | ||||||
|  |     "unicode/icuplug.h", | ||||||
|  |     "unicode/idna.h", | ||||||
|  |     "unicode/listformatter.h", | ||||||
|  |     "unicode/localpointer.h", | ||||||
|  |     "unicode/locid.h", | ||||||
|  |     "unicode/messagepattern.h", | ||||||
|  |     "unicode/normalizer2.h", | ||||||
|  |     "unicode/normlzr.h", | ||||||
|  |     "unicode/parseerr.h", | ||||||
|  |     "unicode/parsepos.h", | ||||||
|  |     "unicode/platform.h", | ||||||
|  |     "unicode/ptypes.h", | ||||||
|  |     "unicode/putil.h", | ||||||
|  |     "unicode/rbbi.h", | ||||||
|  |     "unicode/rep.h", | ||||||
|  |     "unicode/resbund.h", | ||||||
|  |     "unicode/schriter.h", | ||||||
|  |     "unicode/std_string.h", | ||||||
|  |     "unicode/strenum.h", | ||||||
|  |     "unicode/stringpiece.h", | ||||||
|  |     "unicode/stringtriebuilder.h", | ||||||
|  |     "unicode/symtable.h", | ||||||
|  |     "unicode/ubidi.h", | ||||||
|  |     "unicode/ubrk.h", | ||||||
|  |     "unicode/ucasemap.h", | ||||||
|  |     "unicode/ucat.h", | ||||||
|  |     "unicode/uchar.h", | ||||||
|  |     "unicode/ucharstrie.h", | ||||||
|  |     "unicode/ucharstriebuilder.h", | ||||||
|  |     "unicode/uchriter.h", | ||||||
|  |     "unicode/uclean.h", | ||||||
|  |     "unicode/ucnv.h", | ||||||
|  |     "unicode/ucnv_cb.h", | ||||||
|  |     "unicode/ucnv_err.h", | ||||||
|  |     "unicode/ucnvsel.h", | ||||||
|  |     "unicode/uconfig.h", | ||||||
|  |     "unicode/udata.h", | ||||||
|  |     "unicode/uenum.h", | ||||||
|  |     "unicode/uidna.h", | ||||||
|  |     "unicode/uiter.h", | ||||||
|  |     "unicode/ulistformatter.h", | ||||||
|  |     "unicode/uloc.h", | ||||||
|  |     "unicode/umachine.h", | ||||||
|  |     "unicode/umisc.h", | ||||||
|  |     "unicode/unifilt.h", | ||||||
|  |     "unicode/unifunct.h", | ||||||
|  |     "unicode/unimatch.h", | ||||||
|  |     "unicode/uniset.h", | ||||||
|  |     "unicode/unistr.h", | ||||||
|  |     "unicode/unorm.h", | ||||||
|  |     "unicode/unorm2.h", | ||||||
|  |     "unicode/uobject.h", | ||||||
|  |     "unicode/urename.h", | ||||||
|  |     "unicode/urep.h", | ||||||
|  |     "unicode/ures.h", | ||||||
|  |     "unicode/uscript.h", | ||||||
|  |     "unicode/uset.h", | ||||||
|  |     "unicode/usetiter.h", | ||||||
|  |     "unicode/ushape.h", | ||||||
|  |     "unicode/usprep.h", | ||||||
|  |     "unicode/ustring.h", | ||||||
|  |     "unicode/ustringtrie.h", | ||||||
|  |     "unicode/utext.h", | ||||||
|  |     "unicode/utf.h", | ||||||
|  |     "unicode/utf16.h", | ||||||
|  |     "unicode/utf32.h", | ||||||
|  |     "unicode/utf8.h", | ||||||
|  |     "unicode/utf_old.h", | ||||||
|  |     "unicode/utrace.h", | ||||||
|  |     "unicode/utypes.h", | ||||||
|  |     "unicode/uvernum.h", | ||||||
|  |     "unicode/uversion.h", | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										2788
									
								
								samples/GN/internal_rules.gni
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2788
									
								
								samples/GN/internal_rules.gni
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1422
									
								
								samples/GN/ios-rules.gni
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1422
									
								
								samples/GN/ios-rules.gni
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										193
									
								
								samples/GN/isolate.gni
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								samples/GN/isolate.gni
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,193 @@ | |||||||
|  | # Copyright 2016 the V8 project authors. All rights reserved. | ||||||
|  | # Use of this source code is governed by a BSD-style license that can be | ||||||
|  | # found in the LICENSE file. | ||||||
|  |  | ||||||
|  | import("//build/config/sanitizers/sanitizers.gni") | ||||||
|  | import("//third_party/icu/config.gni") | ||||||
|  | import("v8.gni") | ||||||
|  |  | ||||||
|  | declare_args() { | ||||||
|  |   # Sets the test isolation mode (noop|prepare|check). | ||||||
|  |   v8_test_isolation_mode = "noop" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template("v8_isolate_run") { | ||||||
|  |   forward_variables_from(invoker, | ||||||
|  |                          "*", | ||||||
|  |                          [ | ||||||
|  |                            "deps", | ||||||
|  |                            "isolate", | ||||||
|  |                          ]) | ||||||
|  |  | ||||||
|  |   # Remember target name as within the action scope the target name will be | ||||||
|  |   # different. | ||||||
|  |   name = target_name | ||||||
|  |  | ||||||
|  |   assert(defined(invoker.deps)) | ||||||
|  |   assert(defined(invoker.isolate)) | ||||||
|  |  | ||||||
|  |   if (name != "" && v8_test_isolation_mode != "noop") { | ||||||
|  |     action(name + "_run") { | ||||||
|  |       testonly = true | ||||||
|  |  | ||||||
|  |       deps = invoker.deps | ||||||
|  |  | ||||||
|  |       script = "//tools/isolate_driver.py" | ||||||
|  |  | ||||||
|  |       sources = [ | ||||||
|  |         invoker.isolate, | ||||||
|  |       ] | ||||||
|  |  | ||||||
|  |       inputs = [ | ||||||
|  |         # Files that are known to be involved in this step. | ||||||
|  |         "//tools/swarming_client/isolate.py", | ||||||
|  |         "//tools/swarming_client/run_isolated.py", | ||||||
|  |       ] | ||||||
|  |  | ||||||
|  |       if (v8_test_isolation_mode == "prepare") { | ||||||
|  |         outputs = [ | ||||||
|  |           "$root_out_dir/$name.isolated.gen.json", | ||||||
|  |         ] | ||||||
|  |       } else if (v8_test_isolation_mode == "check") { | ||||||
|  |         outputs = [ | ||||||
|  |           "$root_out_dir/$name.isolated", | ||||||
|  |           "$root_out_dir/$name.isolated.state", | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       # Translate gn to gyp variables. | ||||||
|  |       if (is_asan) { | ||||||
|  |         asan = "1" | ||||||
|  |       } else { | ||||||
|  |         asan = "0" | ||||||
|  |       } | ||||||
|  |       if (is_msan) { | ||||||
|  |         msan = "1" | ||||||
|  |       } else { | ||||||
|  |         msan = "0" | ||||||
|  |       } | ||||||
|  |       if (is_tsan) { | ||||||
|  |         tsan = "1" | ||||||
|  |       } else { | ||||||
|  |         tsan = "0" | ||||||
|  |       } | ||||||
|  |       if (is_cfi) { | ||||||
|  |         cfi_vptr = "1" | ||||||
|  |       } else { | ||||||
|  |         cfi_vptr = "0" | ||||||
|  |       } | ||||||
|  |       if (target_cpu == "x86") { | ||||||
|  |         target_arch = "ia32" | ||||||
|  |       } else { | ||||||
|  |         target_arch = target_cpu | ||||||
|  |       } | ||||||
|  |       if (is_debug) { | ||||||
|  |         configuration_name = "Debug" | ||||||
|  |       } else { | ||||||
|  |         configuration_name = "Release" | ||||||
|  |       } | ||||||
|  |       if (is_component_build) { | ||||||
|  |         component = "shared_library" | ||||||
|  |       } else { | ||||||
|  |         component = "static_library" | ||||||
|  |       } | ||||||
|  |       if (icu_use_data_file) { | ||||||
|  |         icu_use_data_file_flag = "1" | ||||||
|  |       } else { | ||||||
|  |         icu_use_data_file_flag = "0" | ||||||
|  |       } | ||||||
|  |       if (v8_enable_inspector) { | ||||||
|  |         enable_inspector = "1" | ||||||
|  |       } else { | ||||||
|  |         enable_inspector = "0" | ||||||
|  |       } | ||||||
|  |       if (v8_use_external_startup_data) { | ||||||
|  |         use_external_startup_data = "1" | ||||||
|  |       } else { | ||||||
|  |         use_external_startup_data = "0" | ||||||
|  |       } | ||||||
|  |       if (v8_use_snapshot) { | ||||||
|  |         use_snapshot = "true" | ||||||
|  |       } else { | ||||||
|  |         use_snapshot = "false" | ||||||
|  |       } | ||||||
|  |       if (v8_has_valgrind) { | ||||||
|  |         has_valgrind = "1" | ||||||
|  |       } else { | ||||||
|  |         has_valgrind = "0" | ||||||
|  |       } | ||||||
|  |       if (v8_gcmole) { | ||||||
|  |         gcmole = "1" | ||||||
|  |       } else { | ||||||
|  |         gcmole = "0" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       # Note, all paths will be rebased in isolate_driver.py to be relative to | ||||||
|  |       # the isolate file. | ||||||
|  |       args = [ | ||||||
|  |         v8_test_isolation_mode, | ||||||
|  |         "--isolated", | ||||||
|  |         rebase_path("$root_out_dir/$name.isolated", root_build_dir), | ||||||
|  |         "--isolate", | ||||||
|  |         rebase_path(invoker.isolate, root_build_dir), | ||||||
|  |  | ||||||
|  |         # Path variables are used to replace file paths when loading a .isolate | ||||||
|  |         # file | ||||||
|  |         "--path-variable", | ||||||
|  |         "DEPTH", | ||||||
|  |         rebase_path("//", root_build_dir), | ||||||
|  |         "--path-variable", | ||||||
|  |         "PRODUCT_DIR", | ||||||
|  |         rebase_path(root_out_dir, root_build_dir), | ||||||
|  |  | ||||||
|  |         # TODO(machenbach): Set variables for remaining features. | ||||||
|  |         "--config-variable", | ||||||
|  |         "CONFIGURATION_NAME=$configuration_name", | ||||||
|  |         "--config-variable", | ||||||
|  |         "OS=$target_os", | ||||||
|  |         "--config-variable", | ||||||
|  |         "asan=$asan", | ||||||
|  |         "--config-variable", | ||||||
|  |         "cfi_vptr=$cfi_vptr", | ||||||
|  |         "--config-variable", | ||||||
|  |         "gcmole=$gcmole", | ||||||
|  |         "--config-variable", | ||||||
|  |         "has_valgrind=$has_valgrind", | ||||||
|  |         "--config-variable", | ||||||
|  |         "icu_use_data_file_flag=$icu_use_data_file_flag", | ||||||
|  |         "--config-variable", | ||||||
|  |         "is_gn=1", | ||||||
|  |         "--config-variable", | ||||||
|  |         "msan=$msan", | ||||||
|  |         "--config-variable", | ||||||
|  |         "tsan=$tsan", | ||||||
|  |         "--config-variable", | ||||||
|  |         "coverage=0", | ||||||
|  |         "--config-variable", | ||||||
|  |         "sanitizer_coverage=0", | ||||||
|  |         "--config-variable", | ||||||
|  |         "component=$component", | ||||||
|  |         "--config-variable", | ||||||
|  |         "target_arch=$target_arch", | ||||||
|  |         "--config-variable", | ||||||
|  |         "v8_enable_inspector=$enable_inspector", | ||||||
|  |         "--config-variable", | ||||||
|  |         "v8_use_external_startup_data=$use_external_startup_data", | ||||||
|  |         "--config-variable", | ||||||
|  |         "v8_use_snapshot=$use_snapshot", | ||||||
|  |       ] | ||||||
|  |  | ||||||
|  |       if (is_win) { | ||||||
|  |         args += [ | ||||||
|  |           "--config-variable", | ||||||
|  |           "msvs_version=2015", | ||||||
|  |         ] | ||||||
|  |       } else { | ||||||
|  |         args += [ | ||||||
|  |           "--config-variable", | ||||||
|  |           "msvs_version=0", | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								samples/Python/filenames/.gclient
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								samples/Python/filenames/.gclient
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | solutions = [ | ||||||
|  |   { | ||||||
|  |     "url": "https://chromium.googlesource.com/v8/v8.git", | ||||||
|  |     "managed": False, | ||||||
|  |     "name": "v8", | ||||||
|  |     "deps_file": "DEPS", | ||||||
|  |     "custom_deps": {}, | ||||||
|  |   }, | ||||||
|  | ] | ||||||
							
								
								
									
										1522
									
								
								samples/Python/standalone.gypi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1522
									
								
								samples/Python/standalone.gypi
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1420
									
								
								samples/Python/toolchain.gypi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1420
									
								
								samples/Python/toolchain.gypi
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4
									
								
								vendor/README.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/README.md
									
									
									
									
										vendored
									
									
								
							| @@ -125,6 +125,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting | |||||||
| - **Gettext Catalog:** [textmate/gettext.tmbundle](https://github.com/textmate/gettext.tmbundle) | - **Gettext Catalog:** [textmate/gettext.tmbundle](https://github.com/textmate/gettext.tmbundle) | ||||||
| - **GLSL:** [euler0/sublime-glsl](https://github.com/euler0/sublime-glsl) | - **GLSL:** [euler0/sublime-glsl](https://github.com/euler0/sublime-glsl) | ||||||
| - **Glyph:** [textmate/tcl.tmbundle](https://github.com/textmate/tcl.tmbundle) | - **Glyph:** [textmate/tcl.tmbundle](https://github.com/textmate/tcl.tmbundle) | ||||||
|  | - **GN:** [devoncarew/language-gn](https://github.com/devoncarew/language-gn) | ||||||
| - **Gnuplot:** [mattfoster/gnuplot-tmbundle](https://github.com/mattfoster/gnuplot-tmbundle) | - **Gnuplot:** [mattfoster/gnuplot-tmbundle](https://github.com/mattfoster/gnuplot-tmbundle) | ||||||
| - **Go:** [AlanQuatermain/go-tmbundle](https://github.com/AlanQuatermain/go-tmbundle) | - **Go:** [AlanQuatermain/go-tmbundle](https://github.com/AlanQuatermain/go-tmbundle) | ||||||
| - **Golo:** [TypeUnsafe/sublime-golo](https://github.com/TypeUnsafe/sublime-golo) | - **Golo:** [TypeUnsafe/sublime-golo](https://github.com/TypeUnsafe/sublime-golo) | ||||||
| @@ -224,6 +225,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting | |||||||
| - **NewLisp:** [textmate/lisp.tmbundle](https://github.com/textmate/lisp.tmbundle) | - **NewLisp:** [textmate/lisp.tmbundle](https://github.com/textmate/lisp.tmbundle) | ||||||
| - **Nginx:** [brandonwamboldt/sublime-nginx](https://github.com/brandonwamboldt/sublime-nginx) | - **Nginx:** [brandonwamboldt/sublime-nginx](https://github.com/brandonwamboldt/sublime-nginx) | ||||||
| - **Nimrod:** [Varriount/NimLime](https://github.com/Varriount/NimLime) | - **Nimrod:** [Varriount/NimLime](https://github.com/Varriount/NimLime) | ||||||
|  | - **Ninja:** [khyo/language-ninja](https://github.com/khyo/language-ninja) | ||||||
| - **Nit:** [R4PaSs/Sublime-Nit](https://github.com/R4PaSs/Sublime-Nit) | - **Nit:** [R4PaSs/Sublime-Nit](https://github.com/R4PaSs/Sublime-Nit) | ||||||
| - **Nix:** [wmertens/sublime-nix](https://github.com/wmertens/sublime-nix) | - **Nix:** [wmertens/sublime-nix](https://github.com/wmertens/sublime-nix) | ||||||
| - **NSIS:** [github-linguist/NSIS](https://github.com/github-linguist/NSIS) | - **NSIS:** [github-linguist/NSIS](https://github.com/github-linguist/NSIS) | ||||||
| @@ -239,6 +241,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting | |||||||
| - **OpenCL:** [textmate/c.tmbundle](https://github.com/textmate/c.tmbundle) | - **OpenCL:** [textmate/c.tmbundle](https://github.com/textmate/c.tmbundle) | ||||||
| - **OpenEdge ABL:** [jfairbank/Sublime-Text-2-OpenEdge-ABL](https://github.com/jfairbank/Sublime-Text-2-OpenEdge-ABL) | - **OpenEdge ABL:** [jfairbank/Sublime-Text-2-OpenEdge-ABL](https://github.com/jfairbank/Sublime-Text-2-OpenEdge-ABL) | ||||||
| - **OpenRC runscript:** [atom/language-shellscript](https://github.com/atom/language-shellscript) | - **OpenRC runscript:** [atom/language-shellscript](https://github.com/atom/language-shellscript) | ||||||
|  | - **OpenType Feature File:** [Alhadis/language-fontforge](https://github.com/Alhadis/language-fontforge) | ||||||
| - **Ox:** [andreashetland/sublime-text-ox](https://github.com/andreashetland/sublime-text-ox) | - **Ox:** [andreashetland/sublime-text-ox](https://github.com/andreashetland/sublime-text-ox) | ||||||
| - **Oz:** [eregon/oz-tmbundle](https://github.com/eregon/oz-tmbundle) | - **Oz:** [eregon/oz-tmbundle](https://github.com/eregon/oz-tmbundle) | ||||||
| - **Papyrus:** [Kapiainen/SublimePapyrus](https://github.com/Kapiainen/SublimePapyrus) | - **Papyrus:** [Kapiainen/SublimePapyrus](https://github.com/Kapiainen/SublimePapyrus) | ||||||
| @@ -306,6 +309,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting | |||||||
| - **SMT:** [SRI-CSL/SMT.tmbundle](https://github.com/SRI-CSL/SMT.tmbundle) | - **SMT:** [SRI-CSL/SMT.tmbundle](https://github.com/SRI-CSL/SMT.tmbundle) | ||||||
| - **SourcePawn:** [github-linguist/sublime-sourcepawn](https://github.com/github-linguist/sublime-sourcepawn) | - **SourcePawn:** [github-linguist/sublime-sourcepawn](https://github.com/github-linguist/sublime-sourcepawn) | ||||||
| - **SPARQL:** [peta/turtle.tmbundle](https://github.com/peta/turtle.tmbundle) | - **SPARQL:** [peta/turtle.tmbundle](https://github.com/peta/turtle.tmbundle) | ||||||
|  | - **Spline Font Database:** [Alhadis/language-fontforge](https://github.com/Alhadis/language-fontforge) | ||||||
| - **SQF:** [JonBons/Sublime-SQF-Language](https://github.com/JonBons/Sublime-SQF-Language) | - **SQF:** [JonBons/Sublime-SQF-Language](https://github.com/JonBons/Sublime-SQF-Language) | ||||||
| - **SQL:** [textmate/sql.tmbundle](https://github.com/textmate/sql.tmbundle) | - **SQL:** [textmate/sql.tmbundle](https://github.com/textmate/sql.tmbundle) | ||||||
| - **SQLPL:** [textmate/sql.tmbundle](https://github.com/textmate/sql.tmbundle) | - **SQLPL:** [textmate/sql.tmbundle](https://github.com/textmate/sql.tmbundle) | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								vendor/grammars/language-gn
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/grammars/language-gn
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/grammars/language-gn added at e1a3008505
									
								
							
							
								
								
									
										32
									
								
								vendor/licenses/grammar/language-gn.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								vendor/licenses/grammar/language-gn.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | --- | ||||||
|  | type: grammar | ||||||
|  | name: language-gn | ||||||
|  | license: bsd-3-clause | ||||||
|  | --- | ||||||
|  | Copyright (c) 2015, Devon Carew | ||||||
|  | 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 the organization 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 HOLDER 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. | ||||||
							
								
								
									
										14
									
								
								vendor/licenses/grammar/xquery.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/licenses/grammar/xquery.txt
									
									
									
									
										vendored
									
									
								
							| @@ -1,14 +0,0 @@ | |||||||
| --- |  | ||||||
| type: grammar |  | ||||||
| name: xquery |  | ||||||
| license: permissive |  | ||||||
| curated: true |  | ||||||
| --- |  | ||||||
| If not otherwise specified (see below), files in this repository fall under the following license: |  | ||||||
|  |  | ||||||
| 	Permission to copy, use, modify, sell and distribute this |  | ||||||
| 	software is granted. This software is provided "as is" without |  | ||||||
| 	express or implied warranty, and with no claim as to its |  | ||||||
| 	suitability for any purpose. |  | ||||||
|  |  | ||||||
| An exception is made for files in readable text which contain their own license information, or files where an accompanying file exists (in the same directory) with a “-license” suffix added to the base-name name of the original file, and an extension of txt, html, or similar. For example “tidy” is accompanied by “tidy-license.txt”. |  | ||||||
		Reference in New Issue
	
	Block a user