Have the windows.resource_compiler() preprocesor write a depfile
When using binutils's windres, we can instruct it to invoke the preprocessor in such a way that it writes a depfile, so that dependencies on #included files are automatically tracked. Not implemented for MSVC tools, so skip testing it in that case.
This commit is contained in:
parent
7e08e958c0
commit
7a15214a69
|
@ -2,3 +2,6 @@
|
|||
|
||||
The `compile_resources()` function of the `windows` module now takes
|
||||
the `depend_files:` keyword.
|
||||
|
||||
When using binutils's `windres`, dependencies on files `#include`'d by the
|
||||
preprocessor are now automatically tracked.
|
||||
|
|
|
@ -100,6 +100,11 @@ class WindowsModule(ExtensionModule):
|
|||
# Path separators are not allowed in target names
|
||||
name = name.replace('/', '_').replace('\\', '_')
|
||||
|
||||
# instruct binutils windres to generate a preprocessor depfile
|
||||
if comp.id != 'msvc':
|
||||
res_kwargs['depfile'] = res_kwargs['output'] + '.d'
|
||||
res_kwargs['command'] += ['--preprocessor-arg=-MD', '--preprocessor-arg=-MQ@OUTPUT@', '--preprocessor-arg=-MF@DEPFILE@']
|
||||
|
||||
res_targets.append(build.CustomTarget('Windows resource for ' + name, state.subdir, state.subproject, res_kwargs))
|
||||
|
||||
add_target(args)
|
||||
|
|
|
@ -2397,9 +2397,15 @@ class WindowsTests(BasePlatformTests):
|
|||
self.build()
|
||||
# Immediately rebuilding should not do anything
|
||||
self.assertBuildIsNoop()
|
||||
# Changing mtime of sample.ico should rebuild everything
|
||||
# Changing mtime of sample.ico should rebuild prog
|
||||
self.utime(os.path.join(testdir, 'res', 'sample.ico'))
|
||||
self.assertRebuiltTarget('prog')
|
||||
# Changing mtime of resource.h should rebuild myres.rc and then prog
|
||||
# (resource compiler depfile generation is not yet implemented for msvc)
|
||||
env = Environment(testdir, self.builddir, get_fake_options(self.prefix), [])
|
||||
if env.detect_c_compiler(False).get_id() != 'msvc':
|
||||
self.utime(os.path.join(testdir, 'inc', 'resource', 'resource.h'))
|
||||
self.assertRebuiltTarget('prog')
|
||||
|
||||
|
||||
class LinuxlikeTests(BasePlatformTests):
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include<windows.h>
|
||||
|
||||
// deliberately don't get MY_ICON from resource.h so that depfile generation can
|
||||
// be exercised in the WindowsTests.test_rc_depends_files unit test
|
||||
#define MY_ICON 1
|
||||
|
||||
int APIENTRY
|
||||
|
|
Loading…
Reference in New Issue