[[ Fix build for multi-arch macOS binaries For example, in order to be compatible with both x86-64 and new Apple M1, serf would be compiled with: CFLAGS ="-arch x86_64 -arch arm64" CPPFLAGS ="-arch x86_64 -arch arm64" LINKFLAGS="-arch x86_64 -arch arm64"
Counter-intuitively, when scons 'MergeFlags()' is called with 'unique=1', it also affects already present flags and not just the merged ones. This causes flags to become 'x86_64 -arch arm64', where the first '-arch' is now gone, which in turn causes build error error: no such file or directory: 'x86_64' Fix that by passing 'unique=0'. In my case, it was sufficient to fix in 'parse_libs()' only, but I decided to apply it to the other 'ParseConfig()' as well. See also r1712172, which fixed SERF-160. The bugreport there is not very detailed, but it also involved breaking linker flags. * SConstruct When merging additional build flags, use 'unique=0' to avoid corrupting existing flags. ]]
Index: SConstruct =================================================================== --- SConstruct (revision 1893403) +++ SConstruct (working copy) @@ -532,8 +532,8 @@ # If build with gssapi, get its information and define SERF_HAVE_GSSAPI if gssapi and CALLOUT_OKAY: - env.ParseConfig('$GSSAPI --cflags gssapi') - def parse_libs(env, cmd, unique=1): + env.ParseConfig('$GSSAPI --cflags gssapi', unique=0) + def parse_libs(env, cmd, unique=0): env['GSSAPI_LIBS'] = cmd.strip() return env.MergeFlags(cmd, unique) env.ParseConfig('$GSSAPI --libs gssapi', parse_libs)