Updated the "For Windows Users" section with helpful hints, OK to commit?
Anton,
Thanks for the investigation.
Please, send the proposed wording as a patch. (Not sure if it would be
possible to describe the symptoms of the problem.)
Anna.
On Oct 18, 2014, at 1:56 AM, Anton Yartsev <[email protected]
<mailto:[email protected]>> wrote:
As I was explained in the MSYS community the MSYS utils are dependent
on the MSYS runtime and their usage from cmd.exe is unsupported. "You
are welcome to try it, but if you observe odd behaviour, such as
here, then you are out of luck".
I performed several tests and found out that proper processing is
performed with either running scan-build with MSYS make in the
following way:
scan-build ... sh -c "make"
or with using mingw32-make and removal of MSYS from PATH (otherwise
mingw32-make tries to use MSYS utils).
from the MinGW FAQ:
"What's the difference between make and mingw32-make?
The "native" (i.e.: MSVCRT dependent) port of make is lacking in some
functionality and has modified functionality due to the lack of POSIX
on Win32. There also exists a version of make in the MSYS
distribution that is dependent on the MSYS runtime. This port
operates more as make was intended to operate and gives less
headaches during execution. Based on this, the MinGW
developers/maintainers/packagers decided it would be best to rename
the native version so that both the "native" version and the MSYS
version could be present at the same time without file name collision."
Is it OK to add the recommendations to the scan-build: running the
analyzer from the command line
<http://clang-analyzer.llvm.org/scan-build.html#scanbuild_forwindowsusers>,
"For Windows Users" section?
Sorry, that's not a solution.
The goal of the patch is to pass unmodified arguments to compilers
as they were written in the makefile. Arguments taken from @ARGV
may be modified by the system and Perl, at least quotes and
backslash sequences are processed. Using this arguments may cause
compiler errors. Sometimes system+Perl corrupt arguments
completely, for example, using perl from MSYS 1.0 on Windows I got:
Line from makefile:
$(CXX) -DMACRO=\"string\" file.cpp "asd dff ghh" -o file.exe
arguments red from @ARGV by c++-analyzer:
"-DMACRO=\string\" file.cpp -o file.exe"
Please review!
--
Anton
--
Anton
Index: scan-build.html
===================================================================
--- scan-build.html (revision 218624)
+++ scan-build.html (working copy)
@@ -124,12 +124,36 @@
<h3 id="scanbuild_forwindowsusers">For Windows Users</h3>
-<p>Windows users must have Perl installed to use scan-build. Currently scan-build
-is known to work with the msys perl port.</p>
+<p>Windows users must have Perl installed to use scan-build.</p>
-<p>scan-build.bat script allows you to launch scan-build in the same way as it described in the Basic Usage section above.
-All you need to be able to invoke scan-build from an arbitrary location is to add the path to scan-build to your PATH environment variable.</p>
+<p><tt>scan-build.bat</tt> script allows you to launch scan-build in the same
+way as it described in the Basic Usage section above. All you need to be able
+to invoke scan-build from an arbitrary location is to add the path to scan-build
+to your PATH environment variable.</p>
+<p>If you have unexpected compilation/make problems when running scan-build
+with MinGW/MSYS the following information may be helpful:</p>
+
+<ul>
+ <li> Try using MinGW <tt>mingw32-make</tt> instead of MSYS <tt>make</tt>,
+exclude path to MSYS from PATH to prevent <tt>mingw32-make</tt> from using MSYS
+utils. MSYS utils are dependent on the MSYS runtime and they are not intended
+for being run from the Windows cmd. Specifically, makefile commands with
+backslashed quotes may be seriously corrupted when passed for execution. (One
+of the symptoms: unexpected <i>"g++: fatal error: no input files."</i> compiler
+error).
+<br>See <a href="http://www.mingw.org/wiki/FAQ">MinGW FAQ</a>,
+"What's the difference between make and mingw32-make?" section for additional
+information about <tt>make</tt> and <tt>mingw32-make</tt>.
+ <li> Run <tt>make</tt> from the sh shell '<tt>scan-build ... sh -c "make
+..."</tt>'. As was said above, MSYS utils are dependent on the MSYS runtime and
+they are not intended for being run from the Windows cmd.
+ <li> If you get unexpected <i>"Error : *** target pattern contains no `%'."</i>
+ try to use another version of <tt>make</tt>. There are versions of
+<tt>make</tt> that do not support windows paths, the error may appear due to a
+presence of a ":" in windows path.
+</ul>
+
<h3 id="scanbuild_otheroptions">Other Options</h3>
<p>As mentioned above, extra options can be passed to <tt>scan-build</tt>. These
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits