Opened 5 years ago

Closed 4 years ago

#57493 closed defect (worksforme)

esmf @7_1_0r +gcc8: build error: 'size_t' does not name a type

Reported by: Dave-Allured (Dave Allured) Owned by: tenomoto (Takeshi Enomoto)
Priority: Normal Milestone:
Component: ports Version: 2.5.4
Keywords: Cc:
Port: esmf

Description (last modified by Dave-Allured (Dave Allured))

port -v install esmf +gcc8 fails with multiple C++ errors like this. I shortened several long sequences for readability. See main.log for the full details:

:info:build /Users/dallured/macports/254/bin/g++-mp-8 -c [OPTIONS] [INCLUDES] [LONG_PATH]/ESMCI_CoordSys.C
:info:build In file included from [LONG_PATH]/ESMC_Util.h:23,
:info:build                  from [LONG_PATH]/ESMCI_Fraction.h:52,
:info:build                  from [LONG_PATH]/ESMCI_Fraction.C:25:
:info:build [LONG_PATH]/ESMC_Conf.h:34:9: error: 'size_t' does not name a type
:info:build  typedef size_t ESMCI_FortranStrLenArg;
:info:build          ^~~~~~
:info:build [LONG_PATH]/ESMC_Conf.h:34:9:
        note: 'size_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
:info:build [LONG_PATH]/ESMC_Conf.h:1:1:
:info:build +#include <cstddef>
:info:build  #ifdef ESMC_RCS_HEADER

Starting from an empty Macports directory, port -v install esmf +gcc8 installs 58 ports successfully, then ESMF fails as above. The default ESMF variant seems to install fine for me, and does not get these errors. Here is my configuration:

sw_vers:
ProductName:	Mac OS X
ProductVersion:	10.13.6
BuildVersion:	17G65

Xcode 10.0
Build version 10A255

I am installing to a private user directory, not /opt/local. Root privileges are disabled. I ran port selfupdate in advance, of course.

Attachments (3)

main.log (394.6 KB) - added by Dave-Allured (Dave Allured) 5 years ago.
main.log from ESMF build failure
main.log.esmf-7_1_0r_1.1114a.txt (399.2 KB) - added by Dave-Allured (Dave Allured) 5 years ago.
The same build failure occurs with esmf @7_1_0r_1 and the upgrade to cctools @921_0+llvm70. New build log is attached.
ESMC_Conf.h (1.3 KB) - added by Dave-Allured (Dave Allured) 5 years ago.
Patched config file. There are many different versions with the same file name in ESMF source. For Macports using +gcc8, this must go to the specific location esmf/build_config/Darwin.gfortran.default/ESMC_Conf.h, replacing the original file.

Download all attachments as: .zip

Change History (14)

Changed 5 years ago by Dave-Allured (Dave Allured)

Attachment: main.log added

main.log from ESMF build failure

comment:1 Changed 5 years ago by Dave-Allured (Dave Allured)

Description: modified (diff)

comment:2 Changed 5 years ago by Dave-Allured (Dave Allured)

Possible duplicate: #57582

Changed 5 years ago by Dave-Allured (Dave Allured)

The same build failure occurs with esmf @7_1_0r_1 and the upgrade to cctools @921_0+llvm70. New build log is attached.

comment:3 Changed 5 years ago by tenomoto (Takeshi Enomoto)

+gcc7 also fails. This must be related to removal of /usr/include in Mojave. clang probably points headers from SDK. Setting isysroot may help.

comment:4 Changed 5 years ago by Dave-Allured (Dave Allured)

Owner: changed from tenomoto to Dave-Allured

comment:5 Changed 5 years ago by Dave-Allured (Dave Allured)

Owner: changed from Dave-Allured to tenomoto

<comment deleted, erroneous and no longer relevant>

Last edited 5 years ago by Dave-Allured (Dave Allured) (previous) (diff)

comment:6 Changed 5 years ago by Dave-Allured (Dave Allured)

<comment deleted, posted in error>

Last edited 5 years ago by Dave-Allured (Dave Allured) (previous) (diff)

comment:7 Changed 5 years ago by Dave-Allured (Dave Allured)

The cause of this problem was found. It is simply a missing include statement for cstddef in ESMC_Conf.h. However, because of the unusual use of many customized copies of this file, the missing include should probably go into a few higher level files, not into ESMC_Conf.h directly.

This bug is triggered by all GCC 8 and higher versions, due to a specific test for GCC version number in ESMC_Conf.h. This bug can be avoided by installing either the port esmf default variant, which uses clang, or else +gcc7 or earlier variants.

ESMF developers already fixed this in their own code base. I am waiting for a pubic release to update Macports. If someone needs a fix sooner, please request or submit a patch to the current version.

comment:8 Changed 5 years ago by Dave-Allured (Dave Allured)

I said: "or else +gcc7 or earlier variants" but this may be in error. This would contradict what Takeshi said. I did not test the +gcc7 variant. I said this on the basis of the test for specific GCC versions in the code in ESMC_Conf.h.

Changed 5 years ago by Dave-Allured (Dave Allured)

Attachment: ESMC_Conf.h added

Patched config file. There are many different versions with the same file name in ESMF source. For Macports using +gcc8, this must go to the specific location esmf/build_config/Darwin.gfortran.default/ESMC_Conf.h, replacing the original file.

comment:9 Changed 5 years ago by Dave-Allured (Dave Allured)

ESMF developers said they will not make a maintenance release for this problem. Port maintainer, can you please add a patch for the specific ESMC_Conf.h file above? It is a one-line fix. Thank you.

Also see the other ESMF fix in #58306.

comment:10 Changed 4 years ago by Dave-Allured (Dave Allured)

This problem magically disappeared for me a few months ago. I do not know what changed. I suspect that it had something do with all the recent libc++ changes, but who knows.

I recently built this successfully at Mac OS 10.14.6, Xcode 11.3. ESMF in Macports is still at source version 7_1_0r as originally reported in this ticket.

Please close this ticket.

comment:11 Changed 4 years ago by mf2k (Frank Schima)

Resolution: worksforme
Status: assignedclosed
Note: See TracTickets for help on using tickets.