aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2019-06-07 09:43:21 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2019-06-07 09:43:21 +0200
commite6bb0d21f1865a389b82296823cf2ea555580a92 (patch)
tree15db9398743d83fb4f7e5dd1fa772c5c8a647334 /tests
parentdaa35c9e4b592f055b42e482fe1398527cfdf90b (diff)
Complete and normalize paths in cxx.importable_headers
Also add more header unit include/import tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/cc/modules/common.testscript8
-rw-r--r--tests/cc/modules/headers.testscript139
2 files changed, 133 insertions, 14 deletions
diff --git a/tests/cc/modules/common.testscript b/tests/cc/modules/common.testscript
index 4f043c9..b7501c1 100644
--- a/tests/cc/modules/common.testscript
+++ b/tests/cc/modules/common.testscript
@@ -12,12 +12,12 @@ using test
EOI
+cat <<EOI >=build/root.build
-cxx.std = experimental
-
-cxx.features.symexport = true
+using in
# Force modules.
#
+cxx.std = experimental
+cxx.features.symexport = true
cxx.features.modules = true
using cxx
@@ -32,6 +32,8 @@ hxx{*}: extension = hxx
mxx{*}: extension = mxx
cxx{*}: extension = cxx
+cxx.poptions =+ "-I$out_root" "-I$src_root"
+
if ($cxx.target.class == 'windows')
bmis{*}: cxx.poptions += '-DLIBFOO_EXPORT=__declspec(dllexport)'
diff --git a/tests/cc/modules/headers.testscript b/tests/cc/modules/headers.testscript
index d4eb919..439c919 100644
--- a/tests/cc/modules/headers.testscript
+++ b/tests/cc/modules/headers.testscript
@@ -19,25 +19,50 @@
inline int f () {return 1;}
EOI
-: import
-:
-ln -s ../core.hxx ./;
-cat <<EOI >=driver.cxx;
++cat <<EOI >=base.mxx
#define CORE_IN 1
- import "core.hxx";
+
+ #ifdef BASE_INCLUDE
+ // Cannot include (even if translated) in module purview.
+ //
+ module;
+ #include "core.hxx"
+ export module foo.base;
+ #else
+ export module foo.base;
+ #ifdef BASE_RE_EXPORT
+ export import "core.hxx";
+ #else
+ import "core.hxx";
+ #endif
+ #endif
+
#ifndef CORE_OUT
# error macro export
#endif
- int main () {return f () - CORE_OUT;}
+
+ export inline int g () {return f () - 1 /*CORE_OUT*/;} //@@ MODGCC
EOI
-$* test clean <<EOI
- exe{test}: cxx{driver}
+
++cat <<EOI >=core.hxx.in
+ #ifdef CORE_IN
+ # error macro isolation
+ #endif
+ inline int f () {return 0;}
EOI
-: include-translation
+: basics
:
ln -s ../core.hxx ./;
-cat <<EOI >=driver.cxx;
+cat <<EOI >=driver-imp.cxx;
+ #define CORE_IN 1
+ import "core.hxx";
+ #ifndef CORE_OUT
+ # error macro export
+ #endif
+ int main () {return f () - CORE_OUT;}
+ EOI
+cat <<EOI >=driver-inc.cxx;
#define CORE_IN 1
#include "core.hxx"
#ifndef CORE_OUT
@@ -46,8 +71,100 @@ cat <<EOI >=driver.cxx;
int main () {return f () - CORE_OUT;}
EOI
$* test clean config.cxx.importable_headers="$~/core.hxx" <<EOI
- exe{test}: cxx{driver}
+ ./: exe{test-imp}: cxx{driver-imp} hxx{core}
+ ./: exe{test-inc}: cxx{driver-inc} hxx{core}
+ EOI
+
+: module
+:
+{
+ +cat <<EOI >=driver.cxx
+ #define CORE_IN 1
+ import foo.base;
+ #ifdef CORE_OUT
+ # error macro export
+ #endif
+ EOI
+
+ : import
+ :
+ ln -s ../../core.hxx ../../base.mxx ./;
+ cat ../driver.cxx - <<EOI >=driver.cxx;
+ int main () {return g ();}
+ EOI
+ $* test clean <<EOI
+ exe{test}: cxx{driver} hxx{core} mxx{base}
+ EOI
+
+ #\
+ #@@ MODGCC
+ : include
+ :
+ ln -s ../../core.hxx ../../base.mxx ./;
+ cat ../driver.cxx - <<EOI >=driver.cxx;
+ int main () {return g ();}
+ EOI
+ $* test clean config.cxx.poptions=-DBASE_INCLUDE \
+ config.cxx.importable_headers="$~/core.hxx" <<EOI
+ exe{test}: cxx{driver} hxx{core} mxx{base}
+ EOI
+ #\
+
+ : re-export
+ :
+ ln -s ../../core.hxx ../../base.mxx ./;
+ cat ../driver.cxx - <<EOI >=driver.cxx;
+ int main () {return g () + (f () - 1);}
+ EOI
+ $* test clean config.cxx.poptions=-DBASE_RE_EXPORT <<EOI
+ exe{test}: cxx{driver} hxx{core} mxx{base}
+ EOI
+}
+
+: generated
+:
+ln -s ../core.hxx.in ./;
+cat <<EOI >=driver-imp.cxx;
+ import <generated/core.hxx>;
+ int main () {return f ();}
+ EOI
+cat <<EOI >=driver-inc.cxx;
+ #define CORE_IN 1
+ #include <generated/core.hxx>
+ int main () {return f ();}
+ EOI
+$* test clean config.cxx.importable_headers="$~/core.hxx" <<EOI
+ ./: exe{test-imp}: cxx{driver-imp} hxx{core}
+ ./: exe{test-inc}: cxx{driver-inc} hxx{core}
+ hxx{core}: in{core}
+ EOI
+
+: remapped
+:
+ln -s ../core.hxx.in ./;
+cat <<EOI >=core.hxx;
+ #error poison
+ EOI
+cat <<EOI >=driver-imp.cxx;
+ import <remapped/core.hxx>;
+ int main () {return f ();}
+ EOI
+cat <<EOI >=driver-inc.cxx;
+ #define CORE_IN 1
+ #include <remapped/core.hxx>
+ int main () {return f ();}
+ EOI
+# Remapping can only be tested with an out of source build. Note that we
+# need a private out because of module sidebuilds.
+#
+out = ../../headers-remapped-out;
+$* 'test:' ./@$out/remapped/ \
+ config.cxx.importable_headers=$out/remapped/core.hxx <<EOI;
+ ./: exe{test-imp}: cxx{driver-imp} hxx{core}
+ ./: exe{test-inc}: cxx{driver-inc} hxx{core}
+ hxx{core}: in{core}
EOI
+rm -r -f $out
# Clean module sidebuilds.
#