[cmake-developers] Any plans to remove the limitation in command line length for the cmake -E remove command?

Alan W. Irwin irwin at beluga.phys.uvic.ca
Thu May 15 16:23:10 EDT 2014


I have recently been reminded that the "cmake -E remove" command has a
limitation due to the length of command line that is acceptable to
whatever shell is being used.  Is there any willingness to remove that
limitation (in which case it would be worthwhile for me to make a
formal bug report) or is this limitation something that should just be
accepted indefinitely?

The reason I ask is the PLplot test suite has a combinatorial issue
with the number of different tests that are possible.  As currently
implemented we are careful not to explore all combinations of the
possibilities in our testing.  Nevertheless, the typical result of
ctest is ~5000 files which consume ~3GB of disk space.  Therefore, I
have implemented a convenience custom target to remove all those files
as follows:

add_custom_target(clean_ctest_plot_files
   COMMAND ${CMAKE_COMMAND} -E remove ${test_output_files_LIST}
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
   )

where test_output_files_LIST contains the list of all the file names
generated by ctest.

When test_output_files_LIST was generated with absolute paths on
Linux, the result was the (bash) shell line-length limit was exceeded,
and the custom target failed.  I was able to work around that issue by
using relative paths instead, and the result has worked fine for
several years using the "Unix Makefiles" generator on Linux and the
"MSYS Makefiles" generator on Windows (in this case Wine, but that
should not make a difference).  But I have recently started doing
comprehensive testing of the "MinGW Makefiles" generator on Wine, and
for that cmd "shell" I run into the command-length limit yet again
with this target.  Here is the start of the relevant error message:

Line in Batch processing possibly truncated. Using:
cd /d Z:\home\wine\newstart\build_script\build_dir-1.6.1_mingw\epa_build\Source\comprehensive_test_disposeable\shared\build_tree\plplot_test
  && Z:\home\wine\newstart\cmake-2.8.12.1-win32-x86\bin\cmake.exe -E remove ./x01c.psc ./x01c_psc.txt ./x02c.psc ./x02c_psc.txt ./x03c.psc ./
x03c_psc.txt ./x04c.psc ./x04c_psc.txt ./x05c.psc ./x05c_psc.txt ./x06c.psc ./x06c_psc.txt ./x07c.psc ./x07c_psc.txt ./x08c.psc ./x08c_psc.t
xt ./x09c.psc ./x09c_psc.txt ./x10c.psc ./x10c_psc.txt ./x11c.psc ./x11c_psc.txt ./x12c.psc ./x12c_psc.txt ./x13c.psc ./x13c_psc.txt ./x14c.
psc ./x14c_psc.txt ./x14ac.psc ./x15c.psc ./x15c_psc.txt ./x16c.psc ./x16c_psc.txt ./x17c.psc ./x17c_psc.txt ./x18c.psc ./x18c_psc.txt ./x19
c [....]

+ subsequent crash.

In the short term I plan to work around the issue by dividing
test_output_files_LIST into sublists which are small enough not to
exceed the line length limitation even for a cmd environment (although
I don't know what that limit is at the moment), and then running cmake
-E remove on each of those sublists.  But in the long run my opinion
is it would be better if the cmake -E remove command was given the
smarts inside to do the same (especially since cmake is already well
aware of command-line length limitations for various shell
environments in other contexts).  So if there is some chance that the
cmake developers are willing to deal with this issue, then I am
willing to start the ball rolling with a formal bug report.

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
__________________________


More information about the cmake-developers mailing list