# file : tests/cc/preprocessed/testscript # copyright : Copyright (c) 2014-2018 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file crosstest = false test.arguments = config.cxx="$recall($cxx.path)" update .include ../../common.test # Trace filter. # # trace: cxx::compile::extract_(headers|modules): target: .../obje{(test).o...} # filter = sed -n -e \ \''s/^trace: cxx::compile_rule::extract_([^:]+): target:[^{]+\{([^.]+).*/\1 \2/p'\' +cat <=build/root.build cxx.std = latest using cxx hxx{*}: extension = hxx cxx{*}: extension = cxx cxx.poptions =+ "-I$src_root" EOI : none : : Include a header (makes sure headers are handled) which defines the : TEST_VALUE macro. Import a non-existent module unless this macro is : defined (makes sure modules are extracted from preprocessed source). : Use the macro (makes sure compilation happens on preprocessed source). : cat <=test.hxx &!test.hxx; #define TEST_VALUE 0 EOI cat <=test.cxx &!test.cxx; #include #ifndef TEST_VALUE import foo; #endif int main () {return TEST_VALUE;} EOI $* --verbose 5 &test* <&1 | $filter >>EOO exe{test}: cxx{test} EOI headers test modules test EOO : includes : cat <=test.cxx &!test.cxx; #ifndef TEST_VALUE import foo; #endif int main () {return TEST_VALUE;} EOI $* --verbose 5 &test* <&1 | $filter >>EOO cxx.preprocessed = includes cxx.poptions += -DTEST_VALUE=0 exe{test}: cxx{test} EOI modules test EOO : modules : : Define and use macro to test that compilation inclused the preprocessor. : cat <=test.cxx &!test.cxx; int main () {return TEST_VALUE;} EOI $* --verbose 5 &test* <&1 | $filter >>EOO cxx.preprocessed = modules cxx.poptions += -DTEST_VALUE=0 exe{test}: cxx{test} EOI modules test EOO : modules-extract : : Define macro that would have disabled the module import (makes sure : modules are extracted directly from source). : cat <=test.cxx &!test.cxx; #define TEST_VALUE #ifndef TEST_VALUE import foo; #endif EOI $* &test* <>EOE != 0 cxx.preprocessed = modules exe{test}: cxx{test} EOI test.cxx: error: modules support not enabled/available EOE : all : : Test handling of comments and line continuations. Define macro on the : command line that would have affected the result. : cat <=test.cxx &!test.cxx; // C++ comment /* C comment */ int ma\ in () {} EOI $* --verbose &test* 5 <&1 | $filter >>EOO cxx.preprocessed = all cxx.poptions += -Dmain=foo exe{test}: cxx{test} EOI modules test EOO