summaryrefslogtreecommitdiffstats
path: root/test cases/common/223 persubproject options
diff options
context:
space:
mode:
Diffstat (limited to 'test cases/common/223 persubproject options')
-rw-r--r--test cases/common/223 persubproject options/foo.c5
-rw-r--r--test cases/common/223 persubproject options/main.cpp3
-rw-r--r--test cases/common/223 persubproject options/meson.build20
-rw-r--r--test cases/common/223 persubproject options/subprojects/sub1/foo.c8
-rw-r--r--test cases/common/223 persubproject options/subprojects/sub1/meson.build10
-rw-r--r--test cases/common/223 persubproject options/subprojects/sub2/foo.c9
-rw-r--r--test cases/common/223 persubproject options/subprojects/sub2/foo.cpp10
-rw-r--r--test cases/common/223 persubproject options/subprojects/sub2/meson.build16
-rw-r--r--test cases/common/223 persubproject options/test.json7
9 files changed, 88 insertions, 0 deletions
diff --git a/test cases/common/223 persubproject options/foo.c b/test cases/common/223 persubproject options/foo.c
new file mode 100644
index 0000000..63e4de6
--- /dev/null
+++ b/test cases/common/223 persubproject options/foo.c
@@ -0,0 +1,5 @@
+int foo(void);
+
+int foo(void) {
+ return 0;
+}
diff --git a/test cases/common/223 persubproject options/main.cpp b/test cases/common/223 persubproject options/main.cpp
new file mode 100644
index 0000000..214f02b
--- /dev/null
+++ b/test cases/common/223 persubproject options/main.cpp
@@ -0,0 +1,3 @@
+int foo();
+
+int main(void) { return foo(); }
diff --git a/test cases/common/223 persubproject options/meson.build b/test cases/common/223 persubproject options/meson.build
new file mode 100644
index 0000000..25a0100
--- /dev/null
+++ b/test cases/common/223 persubproject options/meson.build
@@ -0,0 +1,20 @@
+project('persubproject options', 'c', 'cpp',
+ default_options : ['werror=true',
+ 'warning_level=3',
+ 'cpp_std=c++11'])
+
+assert(get_option('default_library') == 'both', 'Parent default_library should be "both"')
+assert(get_option('werror'))
+assert(get_option('warning_level') == '3')
+assert(get_option('cpp_std') == 'c++11')
+
+
+# Check it build both by calling a method only both_libraries target implement
+lib = library('lib1', 'foo.c')
+lib.get_static_lib()
+
+subproject('sub1')
+
+libcpp14_dep = dependency('libcpp14', fallback: 'sub2', default_options : ['default_library=static'])
+exe = executable('test1', 'main.cpp', dependencies : libcpp14_dep)
+test('mixing-cpp-version', exe)
diff --git a/test cases/common/223 persubproject options/subprojects/sub1/foo.c b/test cases/common/223 persubproject options/subprojects/sub1/foo.c
new file mode 100644
index 0000000..82ad2c2
--- /dev/null
+++ b/test cases/common/223 persubproject options/subprojects/sub1/foo.c
@@ -0,0 +1,8 @@
+int foo(void);
+
+int foo(void) {
+ /* This is built with -Werror, it would error if warning_level=3 was inherited
+ * from main project and not overridden by this subproject's default_options. */
+ int x;
+ return 0;
+}
diff --git a/test cases/common/223 persubproject options/subprojects/sub1/meson.build b/test cases/common/223 persubproject options/subprojects/sub1/meson.build
new file mode 100644
index 0000000..fb72837
--- /dev/null
+++ b/test cases/common/223 persubproject options/subprojects/sub1/meson.build
@@ -0,0 +1,10 @@
+project('sub1', 'c', 'cpp',
+ default_options : ['warning_level=0'])
+
+assert(get_option('default_library') == 'both', 'Should inherit parent project default_library')
+assert(get_option('warning_level') == '0')
+assert(get_option('cpp_std') == 'c++11')
+
+# Check it build both by calling a method only both_libraries target implement
+lib = library('lib1', 'foo.c')
+lib.get_static_lib()
diff --git a/test cases/common/223 persubproject options/subprojects/sub2/foo.c b/test cases/common/223 persubproject options/subprojects/sub2/foo.c
new file mode 100644
index 0000000..cf7201b
--- /dev/null
+++ b/test cases/common/223 persubproject options/subprojects/sub2/foo.c
@@ -0,0 +1,9 @@
+int foo(void);
+
+#ifdef __GNUC__
+#warning This should not produce error
+#endif
+
+int foo(void) {
+ return 0;
+}
diff --git a/test cases/common/223 persubproject options/subprojects/sub2/foo.cpp b/test cases/common/223 persubproject options/subprojects/sub2/foo.cpp
new file mode 100644
index 0000000..27d1720
--- /dev/null
+++ b/test cases/common/223 persubproject options/subprojects/sub2/foo.cpp
@@ -0,0 +1,10 @@
+#include <memory>
+
+class Dummy {
+ int x;
+};
+
+int foo() {
+ auto obj = std::make_unique<Dummy>();
+ return 0;
+}
diff --git a/test cases/common/223 persubproject options/subprojects/sub2/meson.build b/test cases/common/223 persubproject options/subprojects/sub2/meson.build
new file mode 100644
index 0000000..cf1435a
--- /dev/null
+++ b/test cases/common/223 persubproject options/subprojects/sub2/meson.build
@@ -0,0 +1,16 @@
+project('sub2', 'c', 'cpp',
+ default_options : ['default_library=shared',
+ 'werror=false',
+ 'cpp_std=c++14'])
+
+assert(get_option('default_library') == 'static', 'Parent should override default_library')
+assert(not get_option('werror'))
+assert(get_option('cpp_std') == 'c++14')
+
+# If it doesn't build only a static library, it would make target name clash.
+library('lib1', 'foo.c')
+shared_library('lib1', 'foo.c')
+
+# Parent project is c++11 but this one uses c++14 to build.
+libcpp14 = library('lib2', 'foo.cpp')
+meson.override_dependency('libcpp14', declare_dependency(link_with: libcpp14))
diff --git a/test cases/common/223 persubproject options/test.json b/test cases/common/223 persubproject options/test.json
new file mode 100644
index 0000000..ccfa9ff
--- /dev/null
+++ b/test cases/common/223 persubproject options/test.json
@@ -0,0 +1,7 @@
+{
+ "matrix": {
+ "options": {
+ "default_library": [ { "val": "both" } ]
+ }
+ }
+}