alliedmodders / ambuild

AlliedModders C++ Build System
BSD 3-Clause "New" or "Revised" License
60 stars 31 forks source link

[clang/macOS/2.2 API] does not output build errors from individual source files #128

Closed ErikMinekus closed 4 years ago

ErikMinekus commented 4 years ago

Using clang on macOS and the 2.2 API, if an individual source file fails to build there are no build errors indicating why it failed. This is caused by #123.

Commit a66fa6f:

[70439] clang -m64 -arch x86_64 -pipe -fno-strict-aliasing -Wall -Werror -Wno-unused -Wno-switch -Wno-array-bounds -msse -fvisibility=hidden -Wno-narrowing -Wno-sometimes-uninitialized -mmacosx-version-min=10.7 -fPIC -Wno-attributes -g3 -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -DHAVE_STDINT_H -DGNUC -DOSX -D_OSX -DPOSIX -DHAVE_CONFIG_H -I /Users/Tsunami/dev/sourcemod/public -I /Users/Tsunami/dev/sm-ripext/jansson/src -I /Users/Tsunami/dev/sm-ripext/jansson/include -I /Users/Tsunami/dev/sm-ripext/jansson/private_include -H -c /Users/Tsunami/dev/sm-ripext/jansson/src/hashtable.c -o hashtable.o
In file included from /Users/Tsunami/dev/sm-ripext/jansson/src/hashtable.c:34:
/Users/Tsunami/dev/sm-ripext/jansson/src/lookup3.h:52:11: fatal error: 'endian.h' file not found
# include <endian.h>    /* attempt to define endianness */
          ^~~~~~~~~~
1 error generated.
Build failed: libjansson/jansson/mac-x86_64/hashtable.o

Commit 6bd2f33:

[71229] clang -m64 -arch x86_64 -pipe -fno-strict-aliasing -Wall -Werror -Wno-unused -Wno-switch -Wno-array-bounds -msse -fvisibility=hidden -Wno-narrowing -Wno-sometimes-uninitialized -mmacosx-version-min=10.7 -fPIC -Wno-attributes -g3 -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -DHAVE_STDINT_H -DGNUC -DOSX -D_OSX -DPOSIX -DHAVE_CONFIG_H -I /Users/Tsunami/dev/sourcemod/public -I /Users/Tsunami/dev/sm-ripext/jansson/src -I /Users/Tsunami/dev/sm-ripext/jansson/include -I /Users/Tsunami/dev/sm-ripext/jansson/private_include -MD -MF hashtable.d -c /Users/Tsunami/dev/sm-ripext/jansson/src/hashtable.c -o hashtable.o
Traceback (most recent call last):
  File "/Users/Tsunami/Library/Python/3.8/lib/python/site-packages/ambuild2/task.py", line 85, in receive_task
    return self.process_task(channel, message)
  File "/Users/Tsunami/Library/Python/3.8/lib/python/site-packages/ambuild2/task.py", line 120, in process_task
    response = self.taskMap[task_type](message)
  File "/Users/Tsunami/Library/Python/3.8/lib/python/site-packages/ambuild2/task.py", line 70, in <lambda>
    'cxx': lambda message: self.doCompile(message),
  File "/Users/Tsunami/Library/Python/3.8/lib/python/site-packages/ambuild2/task.py", line 279, in doCompile
    out, err, paths = self.parseDependencies(tools_env, out, err, dep_type, dep_info)
  File "/Users/Tsunami/Library/Python/3.8/lib/python/site-packages/ambuild2/task.py", line 292, in parseDependencies
    with open(dep_info) as fp:
FileNotFoundError: [Errno 2] No such file or directory: 'hashtable.d'
Build failed: libjansson/jansson/mac-x86_64/hashtable.d

As you can see it only mentions that hashtable.d could not be found, not why hashtable.c failed to build.

dvander commented 4 years ago

Thanks - when Clang can't find an #include directive, it apparently skips generating the dependency file. I've fixed this on master, the new behavior is to allow dependency parsing failures if the compile job failed as well.