Fortran: Fix .mod file comparison for Intel 16 format

The Intel 16 format starts with the 0x0A 0x00 sequence that we use to
skip past the timestamp.  This occurrence appears to be a version
number.  Skip the first byte to avoid matching the sequence early.

Ideally we should gain a better understanding of the format and avoid
depending on short sequences that are likely to appear early by
coincidence, but this approach will suffice for now.

Closes: #16263
This commit is contained in:
Brad King 2016-08-24 11:51:59 -04:00
parent f59513140b
commit f699323ade
1 changed files with 6 additions and 0 deletions

View File

@ -677,6 +677,12 @@ bool cmDependsFortran::ModulesDiffer(const char* modFile,
const char seq[2] = { '\n', '\0' }; const char seq[2] = { '\n', '\0' };
const int seqlen = 2; const int seqlen = 2;
// Skip the leading byte which appears to be a version number.
// We do not need to check for an error because the sequence search
// below will fail in that case.
finModFile.get();
finStampFile.get();
if (!cmFortranStreamContainsSequence(finModFile, seq, seqlen)) { if (!cmFortranStreamContainsSequence(finModFile, seq, seqlen)) {
// The module is of unexpected format. Assume it is different. // The module is of unexpected format. Assume it is different.
std::cerr << compilerId << " fortran module " << modFile std::cerr << compilerId << " fortran module " << modFile