/* concatenating with "" ensures that only literal strings are accepte +d as * argument */ #define STR_WITH_LEN(s) ("" s ""), (sizeof(s)-1)
is passed a non-literal string (i.e. something which is not quoted, for example the XS_VERSION => 0.011 (via XS_VERSION_BOOTCHECK) which is just a naked 0.011 . Actually this is mentioned in the comments before the macro def (see above code).
By double-quoting contents of -DVERSION and -DXS_VERSION, the command line you pasted succeeds for me:
The complete command line:-DVERSION="\"0.011\"" -DXS_VERSION="\"0.011\""
cc -I/opt/perlbrew/perls/perl-5.18.0/lib/5.18.0/darwin-2level/CORE -DV +ERSION="\"0.011\"" -DXS_VERSION="\"0.011\"" -c -fno-common -DPERL_DAR +WIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include + -I/opt/local/include -arch x86_64 -framework System -Wa,--noexecstac +k -I/opt/local/include -I/opt/X11/include -O3 -o lib/PerlIO/Layers.o + lib/PerlIO/Layers.c
Of course I am not sure if "causes no error" or "succeeds" is the same as "works as intended". But an unquoted 0.011 can be found in the resultant object file:
bliako$ strings lib/PerlIO/Layers.o 0.011 v5.18.0 ...
In reply to Re: PerlIO::Layers 0.011 fails to build in macOS 10.13.3
by bliako
in thread PerlIO::Layers 0.011 fails to build in macOS 10.13.3
by perlboy_emeritus
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |