Skip to content
Success

Changes

Summary

  1. Use diversion when calling external tools with a very long argument list (#9492) (commit: 68c6f89) (details)
Commit 68c6f894095a393d2c60704cfe58184b961cd749 by noreply
Use diversion when calling external tools with a very long argument list (#9492)

It's not just on Windows that the length of the command passed to Sys.command
can exceed system limits:
- On Linux there is a per-argument limit of 2^17 bytes
  (the whole command is a single argument to /bin/sh)
- On macOS with default parameters, the limit is between 70000 and 80000
- On BSDs with default parameters, the limit is around 2^18.

In parallel, response files (@file) are supported by all the C compilers
we've encountered: GCC, Clang, Intel's ICC, and even CompCert.  They all
seem to follow quoting rules similar to that of the native shell
for the contents of the response file.

This commit forces the use of a response file when the total size of
the arguments to the linker is greater than 2^16.

Arguments passed via a response file are quoted using Filename.quote
as if they were passed on the command line.

Closes: #9482
Closes: #8549
(commit: 68c6f89)
The file was modifiedutils/ccomp.ml (diff)
The file was modifiedChanges (diff)