summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozbuild/test/configure/data
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozbuild/test/configure/data')
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/decorators.configure53
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/empty_mozconfig0
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/extra.configure15
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/imply_option/imm.configure37
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/imply_option/infer.configure28
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/imply_option/infer_ko.configure36
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/imply_option/negative.configure40
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/imply_option/simple.configure28
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/imply_option/values.configure28
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/included.configure68
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/moz.configure205
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/set_config.configure51
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/set_define.configure51
-rw-r--r--python/mozbuild/mozbuild/test/configure/data/subprocess.configure24
14 files changed, 664 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/test/configure/data/decorators.configure b/python/mozbuild/mozbuild/test/configure/data/decorators.configure
new file mode 100644
index 0000000000..b98eb26f3f
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/decorators.configure
@@ -0,0 +1,53 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+@template
+def simple_decorator(func):
+ return func
+
+
+@template
+def wrapper_decorator(func):
+ def wrapper(*args, **kwargs):
+ return func(*args, **kwargs)
+
+ return wrapper
+
+
+@template
+def function_decorator(*args, **kwargs):
+ # We could return wrapper_decorator from above here, but then we wouldn't
+ # know if this works as expected because wrapper_decorator itself was
+ # modified or because the right thing happened here.
+ def wrapper_decorator(func):
+ def wrapper(*args, **kwargs):
+ return func(*args, **kwargs)
+
+ return wrapper
+
+ return wrapper_decorator
+
+
+@depends("--help")
+@simple_decorator
+def foo(help):
+ global FOO
+ FOO = 1
+
+
+@depends("--help")
+@wrapper_decorator
+def bar(help):
+ global BAR
+ BAR = 1
+
+
+@depends("--help")
+@function_decorator("a", "b", "c")
+def qux(help):
+ global QUX
+ QUX = 1
diff --git a/python/mozbuild/mozbuild/test/configure/data/empty_mozconfig b/python/mozbuild/mozbuild/test/configure/data/empty_mozconfig
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/empty_mozconfig
diff --git a/python/mozbuild/mozbuild/test/configure/data/extra.configure b/python/mozbuild/mozbuild/test/configure/data/extra.configure
new file mode 100644
index 0000000000..e54a93dbc3
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/extra.configure
@@ -0,0 +1,15 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--extra", help="Extra")
+
+
+@depends("--extra")
+def extra(extra):
+ return extra
+
+
+set_config("EXTRA", extra)
diff --git a/python/mozbuild/mozbuild/test/configure/data/imply_option/imm.configure b/python/mozbuild/mozbuild/test/configure/data/imply_option/imm.configure
new file mode 100644
index 0000000000..f20a4a7149
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/imply_option/imm.configure
@@ -0,0 +1,37 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+imply_option("--enable-foo", True)
+
+option("--enable-foo", help="enable foo")
+
+
+@depends("--enable-foo", "--help")
+def foo(value, help):
+ if value:
+ return True
+
+
+imply_option("--enable-bar", ("foo", "bar"))
+
+option("--enable-bar", nargs="*", help="enable bar")
+
+
+@depends("--enable-bar")
+def bar(value):
+ if value:
+ return value
+
+
+imply_option("--enable-baz", "BAZ")
+
+option("--enable-baz", nargs=1, help="enable baz")
+
+
+@depends("--enable-baz")
+def bar(value):
+ if value:
+ return value
diff --git a/python/mozbuild/mozbuild/test/configure/data/imply_option/infer.configure b/python/mozbuild/mozbuild/test/configure/data/imply_option/infer.configure
new file mode 100644
index 0000000000..b73be9a720
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/imply_option/infer.configure
@@ -0,0 +1,28 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--enable-foo", help="enable foo")
+
+
+@depends("--enable-foo", "--help")
+def foo(value, help):
+ if value:
+ return True
+
+
+imply_option("--enable-bar", foo)
+
+
+option("--enable-bar", help="enable bar")
+
+
+@depends("--enable-bar")
+def bar(value):
+ if value:
+ return value
+
+
+set_config("BAR", bar)
diff --git a/python/mozbuild/mozbuild/test/configure/data/imply_option/infer_ko.configure b/python/mozbuild/mozbuild/test/configure/data/imply_option/infer_ko.configure
new file mode 100644
index 0000000000..9b3761c3c3
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/imply_option/infer_ko.configure
@@ -0,0 +1,36 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--enable-hoge", help="enable hoge")
+
+
+@depends("--enable-hoge")
+def hoge(value):
+ return value
+
+
+option("--enable-foo", help="enable foo")
+
+
+@depends("--enable-foo", hoge)
+def foo(value, hoge):
+ if value:
+ return True
+
+
+imply_option("--enable-bar", foo)
+
+
+option("--enable-bar", help="enable bar")
+
+
+@depends("--enable-bar")
+def bar(value):
+ if value:
+ return value
+
+
+set_config("BAR", bar)
diff --git a/python/mozbuild/mozbuild/test/configure/data/imply_option/negative.configure b/python/mozbuild/mozbuild/test/configure/data/imply_option/negative.configure
new file mode 100644
index 0000000000..e953231f5e
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/imply_option/negative.configure
@@ -0,0 +1,40 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--enable-foo", help="enable foo")
+
+
+@depends("--enable-foo")
+def foo(value):
+ if value:
+ return False
+
+
+imply_option("--enable-bar", foo)
+
+
+option("--disable-hoge", help="enable hoge")
+
+
+@depends("--disable-hoge")
+def hoge(value):
+ if not value:
+ return False
+
+
+imply_option("--enable-bar", hoge)
+
+
+option("--enable-bar", default=True, help="enable bar")
+
+
+@depends("--enable-bar")
+def bar(value):
+ if not value:
+ return value
+
+
+set_config("BAR", bar)
diff --git a/python/mozbuild/mozbuild/test/configure/data/imply_option/simple.configure b/python/mozbuild/mozbuild/test/configure/data/imply_option/simple.configure
new file mode 100644
index 0000000000..6aa225cc45
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/imply_option/simple.configure
@@ -0,0 +1,28 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--enable-foo", help="enable foo")
+
+
+@depends("--enable-foo")
+def foo(value):
+ if value:
+ return True
+
+
+imply_option("--enable-bar", foo)
+
+
+option("--enable-bar", help="enable bar")
+
+
+@depends("--enable-bar")
+def bar(value):
+ if value:
+ return value
+
+
+set_config("BAR", bar)
diff --git a/python/mozbuild/mozbuild/test/configure/data/imply_option/values.configure b/python/mozbuild/mozbuild/test/configure/data/imply_option/values.configure
new file mode 100644
index 0000000000..93198a8295
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/imply_option/values.configure
@@ -0,0 +1,28 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--enable-foo", nargs="*", help="enable foo")
+
+
+@depends("--enable-foo")
+def foo(value):
+ if value:
+ return value
+
+
+imply_option("--enable-bar", foo)
+
+
+option("--enable-bar", nargs="*", help="enable bar")
+
+
+@depends("--enable-bar")
+def bar(value):
+ if value:
+ return value
+
+
+set_config("BAR", bar)
diff --git a/python/mozbuild/mozbuild/test/configure/data/included.configure b/python/mozbuild/mozbuild/test/configure/data/included.configure
new file mode 100644
index 0000000000..97166618ec
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/included.configure
@@ -0,0 +1,68 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# For more complex and repetitive things, we can create templates
+@template
+def check_compiler_flag(flag):
+ @depends(is_gcc)
+ def check(value):
+ if value:
+ return [flag]
+
+ set_config("CFLAGS", check)
+ return check
+
+
+check_compiler_flag("-Werror=foobar")
+
+# Normal functions can be used in @depends functions.
+def fortytwo():
+ return 42
+
+
+def twentyone():
+ yield 21
+
+
+@depends(is_gcc)
+def check(value):
+ if value:
+ return fortytwo()
+
+
+set_config("TEMPLATE_VALUE", check)
+
+
+@depends(is_gcc)
+def check(value):
+ if value:
+ for val in twentyone():
+ return val
+
+
+set_config("TEMPLATE_VALUE_2", check)
+
+# Normal functions can use @imports too to import modules.
+@imports("sys")
+def platform():
+ return sys.platform
+
+
+option("--enable-imports-in-template", help="Imports in template")
+
+
+@depends("--enable-imports-in-template")
+def check(value):
+ if value:
+ return platform()
+
+
+set_config("PLATFORM", check)
+
+
+@template
+def indirectly_define_option(*args, **kwargs):
+ option(*args, **kwargs)
diff --git a/python/mozbuild/mozbuild/test/configure/data/moz.configure b/python/mozbuild/mozbuild/test/configure/data/moz.configure
new file mode 100644
index 0000000000..4d57eabbb9
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/moz.configure
@@ -0,0 +1,205 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--enable-simple", help="Enable simple")
+
+# Setting MOZ_WITH_ENV in the environment has the same effect as passing
+# --enable-with-env.
+option("--enable-with-env", env="MOZ_WITH_ENV", help="Enable with env")
+
+# Optional values
+option("--enable-values", nargs="*", help="Enable values")
+
+# Everything supported in the Option class is supported in option(). Assume
+# the tests of the Option class are extensive about this.
+
+# Alternatively to --enable/--disable, there also is --with/--without. The
+# difference is semantic only. Behavior is the same as --enable/--disable.
+
+# When the option name starts with --disable/--without, the default is for
+# the option to be enabled.
+option("--without-thing", help="Build without thing")
+
+# A --enable/--with option with a default of False is equivalent to a
+# --disable/--without option. This can be used to change the defaults
+# depending on e.g. the target or the built application.
+option("--with-stuff", default=False, help="Build with stuff")
+
+# Other kinds of arbitrary options are also allowed. This is effectively
+# equivalent to --enable/--with, with no possibility of --disable/--without.
+option("--option", env="MOZ_OPTION", help="Option")
+
+# It is also possible to pass options through the environment only.
+option(env="CC", nargs=1, help="C Compiler")
+
+# Call the function when the --enable-simple option is processed, with its
+# OptionValue as argument.
+@depends("--enable-simple")
+def simple(simple):
+ if simple:
+ return simple
+
+
+set_config("ENABLED_SIMPLE", simple)
+
+# There can be multiple functions depending on the same option.
+@depends("--enable-simple")
+def simple(simple):
+ return simple
+
+
+set_config("SIMPLE", simple)
+
+
+@depends("--enable-with-env")
+def with_env(with_env):
+ return with_env
+
+
+set_config("WITH_ENV", with_env)
+
+# It doesn't matter if the dependency is on --enable or --disable
+@depends("--disable-values")
+def with_env2(values):
+ return values
+
+
+set_config("VALUES", with_env2)
+
+# It is possible to @depends on environment-only options.
+@depends("CC")
+def is_gcc(cc):
+ return cc and "gcc" in cc[0]
+
+
+set_config("IS_GCC", is_gcc)
+
+# It is possible to depend on the result from another function.
+@depends(with_env2)
+def with_env3(values):
+ return values
+
+
+set_config("VALUES2", with_env3)
+
+# @depends functions can also return results for use as input to another
+# @depends.
+@depends(with_env3)
+def with_env4(values):
+ return values
+
+
+@depends(with_env4)
+def with_env5(values):
+ return values
+
+
+set_config("VALUES3", with_env5)
+
+# The result from @depends functions can also be used as input to options.
+# The result must be returned, not implied.
+@depends("--enable-simple")
+def simple(simple):
+ return "simple" if simple else "not-simple"
+
+
+option("--with-returned-default", default=simple, help="Returned default")
+
+
+@depends("--with-returned-default")
+def default(value):
+ return value
+
+
+set_config("DEFAULTED", default)
+
+
+@depends("--enable-values")
+def choices(values):
+ if len(values):
+ return {
+ "alpha": ("a", "b", "c"),
+ "numeric": ("0", "1", "2"),
+ }.get(values[0])
+
+
+option("--returned-choices", choices=choices, help="Choices")
+
+
+@depends("--returned-choices")
+def returned_choices(values):
+ return values
+
+
+set_config("CHOICES", returned_choices)
+
+# All options must be referenced by some @depends function.
+# It is possible to depend on multiple options/functions
+@depends("--without-thing", "--with-stuff", with_env4, "--option")
+def remainder(*args):
+ return args
+
+
+set_config("REMAINDER", remainder)
+
+# It is possible to include other files to extend the configuration script.
+include("included.configure")
+
+# It is also possible for the include file path to come from the result of a
+# @depends function.
+option("--enable-include", nargs=1, help="Include")
+
+
+@depends("--enable-include")
+def include_path(path):
+ return path[0] if path else None
+
+
+include(include_path)
+
+# Sandboxed functions can import from modules through the use of the @imports
+# decorator.
+# The order of the decorators matter: @imports needs to appear after other
+# decorators.
+option("--with-imports", nargs="?", help="Imports")
+
+# A limited set of functions from os.path are exposed by default.
+@depends("--with-imports")
+def with_imports(value):
+ if len(value):
+ return hasattr(os.path, "abspath")
+
+
+set_config("HAS_ABSPATH", with_imports)
+
+# It is still possible to import the full set from os.path.
+# It is also possible to cherry-pick builtins.
+@depends("--with-imports")
+@imports("os.path")
+def with_imports(value):
+ if len(value):
+ return hasattr(os.path, "getatime")
+
+
+set_config("HAS_GETATIME", with_imports)
+
+
+@depends("--with-imports")
+def with_imports(value):
+ if len(value):
+ return hasattr(os.path, "getatime")
+
+
+set_config("HAS_GETATIME2", with_imports)
+
+# This option should be attributed to this file in the --help output even though
+# included.configure is the actual file that defines the option.
+indirectly_define_option("--indirect-option", help="Indirectly defined option")
+
+
+@depends("--indirect-option")
+def indirect_option(option):
+ return option
diff --git a/python/mozbuild/mozbuild/test/configure/data/set_config.configure b/python/mozbuild/mozbuild/test/configure/data/set_config.configure
new file mode 100644
index 0000000000..0ae5fef6d6
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/set_config.configure
@@ -0,0 +1,51 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--set-foo", help="set foo")
+
+
+@depends("--set-foo")
+def foo(value):
+ if value:
+ return True
+
+
+set_config("FOO", foo)
+
+
+option("--set-bar", help="set bar")
+
+
+@depends("--set-bar")
+def bar(value):
+ return bool(value)
+
+
+set_config("BAR", bar)
+
+
+option("--set-value", nargs=1, help="set value")
+
+
+@depends("--set-value")
+def set_value(value):
+ if value:
+ return value[0]
+
+
+set_config("VALUE", set_value)
+
+
+option("--set-name", nargs=1, help="set name")
+
+
+@depends("--set-name")
+def set_name(value):
+ if value:
+ return value[0]
+
+
+set_config(set_name, True)
diff --git a/python/mozbuild/mozbuild/test/configure/data/set_define.configure b/python/mozbuild/mozbuild/test/configure/data/set_define.configure
new file mode 100644
index 0000000000..ce9a60d7f1
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/set_define.configure
@@ -0,0 +1,51 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+option("--set-foo", help="set foo")
+
+
+@depends("--set-foo")
+def foo(value):
+ if value:
+ return True
+
+
+set_define("FOO", foo)
+
+
+option("--set-bar", help="set bar")
+
+
+@depends("--set-bar")
+def bar(value):
+ return bool(value)
+
+
+set_define("BAR", bar)
+
+
+option("--set-value", nargs=1, help="set value")
+
+
+@depends("--set-value")
+def set_value(value):
+ if value:
+ return value[0]
+
+
+set_define("VALUE", set_value)
+
+
+option("--set-name", nargs=1, help="set name")
+
+
+@depends("--set-name")
+def set_name(value):
+ if value:
+ return value[0]
+
+
+set_define(set_name, True)
diff --git a/python/mozbuild/mozbuild/test/configure/data/subprocess.configure b/python/mozbuild/mozbuild/test/configure/data/subprocess.configure
new file mode 100644
index 0000000000..3316fee087
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/data/subprocess.configure
@@ -0,0 +1,24 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+@depends("--help")
+@imports("codecs")
+@imports(_from="mozbuild.configure.util", _import="getpreferredencoding")
+@imports("os")
+@imports(_from="__builtin__", _import="open")
+def dies_when_logging(_):
+ test_file = "test.txt"
+ quote_char = "'"
+ if getpreferredencoding().lower() == "utf-8":
+ quote_char = "\u00B4"
+ try:
+ with open(test_file, "w+") as fh:
+ fh.write(quote_char)
+ out = check_cmd_output("cat", "test.txt")
+ log.info(out)
+ finally:
+ os.remove(test_file)