Opened 4 years ago
Last modified 4 years ago
#61775 closed defect
mame: 0.226 build fails on 10.8, due to host libstdc++ bug (_DARWIN_C_SOURCE needs to be defined) — at Initial Version
Reported by: | mascguy (Christopher Nielsen) | Owned by: | mascguy (Christopher Nielsen) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | |
Keywords: | Cc: | ||
Port: | mame |
Description
Mame 0.226 fails to build on 10.8, due to compilation errors in file 'src/osd/modules/files/posixfile.cpp'.
Here's one example:
In file included from ../../../../../src/osd/modules/file/posixfile.cpp:41: In file included from ../../../../../src/osd/modules/file/posixfile.h:12: In file included from ../../../../../src/osd/osdcore.h:17: In file included from ../../../../../src/lib/util/strformat.h:174: In file included from ../../../../../src/lib/util/vecstream.h:25: In file included from /opt/local/libexec/llvm-9.0/bin/../include/c++/v1/istream:163: In file included from /opt/local/libexec/llvm-9.0/bin/../include/c++/v1/ostream:140: /opt/local/libexec/llvm-9.0/bin/../include/c++/v1/locale:1455:16: error: use of undeclared identifier 'snprintf_l'; did you mean 'vswprintf_l'? int __nc = __libcpp_snprintf_l(__nar, sizeof(__nar), _LIBCPP_GET_C_LOCALE, __fmt, __v); ^
In short, the issue relates to a bug in the host libstdc++: When '_XOPEN_SOURCE' is defined, certain items aren't declared unless '_DARWIN_C_SOURCE' is also defined. So far, this bug seems to be isolated to MacOS 10.8.x.
Proposed immediate-term solution: Patch the source file(s) in question, adding the following at the appropriate place:
// MacPorts: Fix for libstdc++ bug in MacOS 10.8.x, which causes compilation errors #if defined(__APPLE__) #define _DARWIN_C_SOURCE #endif
In parallel, I'll also discuss the fixes with the Mame project. And ultimately submit a pull request, to permanently fix this for future releases.
Note: While we could certainly define '_DARWIN_C_SOURCE' globally, that seems more risky. And unnecessary, if only a small number of source files are involved.
Currently building on a 10.8 VM, to verify the latter.