diff --git a/CHANGES.current b/CHANGES.current index 3f52d2748..d647226a5 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -7,6 +7,11 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ Version 4.1.0 (in progress) =========================== +2022-02-06: olly + #2193 -DFOO on the SWIG command line now sets FOO to 1 for + consistency with C/C++ compiler preprocessors. Previously + SWIG set FOO to an empty value. + 2022-02-06: sethrj #2194 Classes that are non-assignable due to const data or const reference members are now automatically detected. diff --git a/Examples/test-suite/command_line_define.i b/Examples/test-suite/command_line_define.i new file mode 100644 index 000000000..842add7fd --- /dev/null +++ b/Examples/test-suite/command_line_define.i @@ -0,0 +1,7 @@ +%module command_line_define + +// Test handling of -D without a value specified. + +#if FOO-0 != 1 +# error "-DFOO didn't set FOO to 1" +#endif diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index d06766b34..25ca2d512 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -692,6 +692,7 @@ C_TEST_CASES += \ c_delete \ c_delete_function \ char_constant \ + command_line_define \ const_const \ constant_expr_c \ default_args_c \ @@ -761,6 +762,7 @@ MULTI_CPP_TEST_CASES += \ # Custom tests - tests with additional commandline options wallkw.cpptest: SWIGOPT += -Wallkw preproc_include.ctest: SWIGOPT += -includeall +command_line_define.ctest: SWIGOPT += -DFOO # Allow modules to define temporarily failing tests. C_TEST_CASES := $(filter-out $(FAILING_C_TESTS),$(C_TEST_CASES)) diff --git a/Source/Modules/main.cxx b/Source/Modules/main.cxx index ca5ec8c3c..ebd788d35 100644 --- a/Source/Modules/main.cxx +++ b/Source/Modules/main.cxx @@ -477,7 +477,10 @@ static void getoptions(int argc, char *argv[]) { Swig_mark_arg(i); } else if (strncmp(argv[i], "-D", 2) == 0) { String *d = NewString(argv[i] + 2); - Replace(d, "=", " ", DOH_REPLACE_FIRST); + if (Replace(d, "=", " ", DOH_REPLACE_FIRST) == 0) { + // Match C preprocessor behaviour whereby -DFOO sets FOO=1. + Append(d, " 1"); + } Preprocessor_define((DOH *) d, 0); Delete(d); // Create a symbol