On 2017-07-31 07:13-0000 Arjen Markus wrote:

Here are some results from my most recent, i.e. yesterday's, testing session.

Hi Arjen:

Here is my promised detailed response to your recent noninteractive
comprehensive test report for MinGW-w64/MSYS2.


II. The noninteractive comprehensive test for MinGW-w64/MSYS2
[...]

One slightly problematic issue I noted for this platform
was you put
/d/cmake3.4.3/bin first on your PATH.  It appears
that your script invocation used

--cmake_command "/mingw64/bin/cmake"

and your resulting CMakeCache.txt files found that same correct
version, but nevertheless, to remove this source of uncertainty I
would highly recommend removing this path (/d/cmake3.4.3/bin) to an
incorrect (and severely dated) version of CMake from the PATH in your
launch script for this platform.



* ERROR: Traditional make test_noninteractive failed in the installed examples 
tree
(for the nondynamic case)

A google search for the term <"gcc.exe: Bad address"> didn't appear to find
anything relevant.  (There was one issue in Cygwin for 2012 involving commands
separated with a semicolon, but we don't use a semicolon in the present case.)

I tried the following:


- Run the build command explicitly (it is 1800+ characters long!) -
this succeeded without any complaint and the resulting program did its
job.


- Run make so that the program would be built. That failed with the "Bad 
address" message.


My current conclusion is that the length of the command is causing a
problem in make. It may just go over some internal edge. There is not
much PLplot-ish about this, except for the length of the directory
names, it would seem.

Thanks for that extremely useful extra bit of research.  So it appears
bash is not complaining about those 1800+ characters, but
make is.

Here is some more research on the issue:

irwin@raven> grep x00c.exe 
nondynamic/noninteractive/output_tree/traditional_make_noninteractive.out | grep 
-v 'Error 126' | wc
      1      78    1882

irwin@raven> grep x00c.exe 
shared/noninteractive/output_tree/traditional_make_noninteractive.out | wc
      1      32     682

That last grep stanza on that first command was to eliminate the error
message from the count.

So indeed, the non-working nondynamic case has a much longer command
line (than the working shared case (because in the nondynamic case, the
driver object code is in the shared library so _all_ driver library
dependencies have to be mentioned (for the default **transitive** linking
that occurs for the MinGW-w64/MSYS2 platform).

So for this case as well, you might want to try -DNON_TRANSITIVE=ON.
That might work around this issue (there will be a much shorter
command line, if the command-line length really is the issue here),
but I have no clue whether non-transitive linking is as well-supported
by the GNU build tools on MinGW-w64/MSYS2 (and Cygwin for that matter)
as it is on Linux so I wait for your reports concerning
-DNON_TRANSITIVE=ON for both the MinGW-w64/MSYS2 and Cygwin
platforms with a great deal of interest.

Meanwhile, assuming the fundamental issue is command-line length,
I just checked, and all Makefile*.in files in our source tree
contain the following line:

SHELL = @SH_EXECUTABLE@

and for your MinGW-w64/MSYS2 case

# Check for all POSIX tool commands that have been found from the MSYS2 side
irwin@raven> find . -name CMakeCache.txt |xargs grep 'usr/bin'
./shared/noninteractive/build_tree/CMakeCache.txt:CMAKE_MAKE_PROGRAM:FILEPATH=D:/mingw64/usr/bin/make.exe
./shared/noninteractive/build_tree/CMakeCache.txt:ENV_FOR_ONSGMLS:FILEPATH=D:/mingw64/usr/bin/env.exe
./shared/noninteractive/build_tree/CMakeCache.txt:SED_EXECUTABLE:FILEPATH=D:/mingw64/usr/bin/sed.exe
./shared/noninteractive/build_tree/CMakeCache.txt:SH_EXECUTABLE:FILEPATH=D:/mingw64/usr/bin/bash.exe
./shared/noninteractive/build_tree/CMakeCache.txt:TAIL_EXECUTABLE:FILEPATH=D:/mingw64/usr/bin/tail.exe
./shared/noninteractive/install_build_tree/CMakeCache.txt:CMAKE_MAKE_PROGRAM:FILEPATH=D:/mingw64/usr/bin/make.exe
./nondynamic/noninteractive/build_tree/CMakeCache.txt:CMAKE_MAKE_PROGRAM:FILEPATH=D:/mingw64/usr/bin/make.exe
./nondynamic/noninteractive/build_tree/CMakeCache.txt:ENV_FOR_ONSGMLS:FILEPATH=D:/mingw64/usr/bin/env.exe
./nondynamic/noninteractive/build_tree/CMakeCache.txt:SED_EXECUTABLE:FILEPATH=D:/mingw64/usr/bin/sed.exe
./nondynamic/noninteractive/build_tree/CMakeCache.txt:SH_EXECUTABLE:FILEPATH=D:/mingw64/usr/bin/bash.exe
./nondynamic/noninteractive/build_tree/CMakeCache.txt:TAIL_EXECUTABLE:FILEPATH=D:/mingw64/usr/bin/tail.exe
./nondynamic/noninteractive/install_build_tree/CMakeCache.txt:CMAKE_MAKE_PROGRAM:FILEPATH=D:/mingw64/usr/bin/make.exe

So all should be well there, i.e., CMake has found the POSIX version
of the make command rather than the incorrect "mingw" native windows
version of the make command which presumably would have serious
command-line length issues if used for a traditional build (i.e., not
a cmake-based build where all sorts of measures are typically deployed
by CMake to beat Windows command-line limitations for both the POSIX
make case and the native Windows make case).

But I did notice that one possible issue is you simply used "make" for your 
comprehensive test.

What does "which make" give you for that platform?  Does it refer to
that above D:/mingw64/usr/bin/make.exe POSIX version or something else?

(To avoid this question in future, your invocation scripts for all
platforms should specify the exact make command that is being
used.), e.g.,

--build_command D:/mingw64/usr/bin/make.exe

for MinGW-w64/MSYS2.

But assuming that is not the issue, my working hypothesis is this
command-line length limitation is a MinGW-w64/MSYS2 bug since it does
not appear to be an issue for Cygwin's version of the POSIX make
command.

To investigate that hypothesis further, please
take a look at the extremely simple attached Makefile test case I have created.

On Linux the result (from the otherwise empty directory where this Makefile
is created) is

software@raven> make |wc
      1       1    2001

i.e., there is one line with no blanks so there is also one
blank-delimited word generated by that "echo" command inside that
Makefile, and that one line (and word) consists of 2001 bytes.

What happens if you run that test with SHELL suitably modified to the
Cygwin location for bash.exe from the same Cygwin environment you use
to test PLplot?

What happens if you run that test with SHELL changed to
D:/mingw64/usr/bin/bash.exe, see above from the same MinGW-w64/MSYS2
environment you use to test PLplot?

1.  If you get good results in the Cygwin case, but not the
MinGW-w64/MSYS2 case, then that is pretty good evidence of a bug in
the MinGW-w64/MSYS2 "make" package.

2. If both don't work, then that means long command lines work in
neither, and perhaps we have to write off this PLplot issue for the
MinGW-w64/MSYS2 case to longer path names/longer command lines in
that case compared to the Cygwin case.  But I consider this
result to be unlikely because according to
<https://stackoverflow.com/questions/19354870/bash-command-line-and-input-limit>
the Cygwin bash line limit is 32000 bytes, i.e., well above the 2001
bytes generated above.

3. But if both work, then you will have to dig deeper.

For example, you would need to double-check you could execute that
"echo" command in the Makefile without issues from bash.exe, and that
version of bash.exe was identical to what is specified for the SHELL
variable in the

10 relevant install-tree locations, i.e.,

irwin@raven> grep 'Makefile$' comprehensive_test_listing.out |grep install_tree
-rw-r--r-- 1 markus DIRECTORY+Group(513)    3432 Jul 30 12:09 
./nondynamic/noninteractive/install_tree/share/plplot5.12.0/examples/c/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)    4145 Jul 30 12:09 
./nondynamic/noninteractive/install_tree/share/plplot5.12.0/examples/c++/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)    2952 Jul 30 12:09 
./nondynamic/noninteractive/install_tree/share/plplot5.12.0/examples/fortran/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)    8742 Jul 30 12:09 
./nondynamic/noninteractive/install_tree/share/plplot5.12.0/examples/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)    2615 Jul 30 12:09 
./nondynamic/noninteractive/install_tree/share/plplot5.12.0/examples/tk/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)    3411 Jul 30 11:08 
./shared/noninteractive/install_tree/share/plplot5.12.0/examples/c/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)    4124 Jul 30 11:08 
./shared/noninteractive/install_tree/share/plplot5.12.0/examples/c++/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)    2927 Jul 30 11:08 
./shared/noninteractive/install_tree/share/plplot5.12.0/examples/fortran/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)  8738 Jul 30 11:08 
./shared/noninteractive/install_tree/share/plplot5.12.0/examples/Makefile
-rw-r--r-- 1 markus DIRECTORY+Group(513)  2577 Jul 30 11:08 
./shared/noninteractive/install_tree/share/plplot5.12.0/examples/tk/Makefile

So I have described three possible debugging trails to follow with the
attached simple test case, but my bet is you will find 1. to be true
which should be easy to deal with (e.g., with a bug report to the
MinGW-w64/MSYS2 which I can advise you about) assuming we have also
figured out a PLplot workaround such as -DNON_TRANSITIVE=ON for that
MinGW-w64/MSYS2 bug

Good luck, and I look forward to your next report for the
noninteractive MinGW-w64/MSYS2 case as well as the results of
the above simple tests for the attached Makefile

Alan
__________________________
Alan W. Irwin

Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).

Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.sf.net); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________

Linux-powered Science
__________________________

Attachment: Makefile.gz
Description: Compressed simple Makefile to test potential line length issues

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to