From 38b6f24d7392f9231a4b39ac0cb463928b201d04 Mon Sep 17 00:00:00 2001 From: Thomas Nagy Date: Sun, 10 Nov 2019 10:40:54 +0100 Subject: [PATCH] Update msvc_pdb.py from the master branch --- waflib/extras/msvc_pdb.py | 67 +++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/waflib/extras/msvc_pdb.py b/waflib/extras/msvc_pdb.py index 881a2d53..077656b4 100644 --- a/waflib/extras/msvc_pdb.py +++ b/waflib/extras/msvc_pdb.py @@ -2,46 +2,45 @@ # encoding: utf-8 # Rafaƫl Kooi 2019 -from waflib import TaskGen, Tools +from waflib import TaskGen + @TaskGen.feature('c', 'cxx', 'fc') @TaskGen.after_method('propagate_uselib_vars') def add_pdb_per_object(self): - """For msvc/fortran, specify a unique compile pdb per object, to work - around LNK4099. Flags are updated with a unique /Fd flag based on the - task output name. This is separate from the link pdb. - """ - if not hasattr(self, 'compiled_tasks'): - return + """For msvc/fortran, specify a unique compile pdb per object, to work + around LNK4099. Flags are updated with a unique /Fd flag based on the + task output name. This is separate from the link pdb. + """ + if not hasattr(self, 'compiled_tasks'): + return - link_task = getattr(self, 'link_task', None) + link_task = getattr(self, 'link_task', None) - for task in self.compiled_tasks: - node = task.outputs[0].change_ext('.pdb') - pdb_flag = '/Fd:' + node.abspath() + for task in self.compiled_tasks: + if task.inputs and task.inputs[0].name.lower().endswith('.rc'): + continue - canAddNode = False - for flagname in ('CFLAGS', 'CXXFLAGS', 'FCFLAGS'): - if not flagname in task.env: - continue + add_pdb = False + for flagname in ('CFLAGS', 'CXXFLAGS', 'FCFLAGS'): + # several languages may be used at once + for flag in task.env[flagname]: + if flag[1:].lower() == 'zi': + add_pdb = True + break - flags = task.env[flagname] + if add_pdb: + node = task.outputs[0].change_ext('.pdb') + pdb_flag = '/Fd:' + node.abspath() - for i, flag in reversed(list(enumerate(flags))): - # Capture both /Zi and /ZI, which cause the compiler to emit a PDB file. - if flag[1:].lower() == 'zi': - canAddNode = True - task.env.append_unique(flagname, pdb_flag) + for flagname in ('CFLAGS', 'CXXFLAGS', 'FCFLAGS'): + buf = [pdb_flag] + for flag in task.env[flagname]: + if flag[1:3] == 'Fd' or flag[1:].lower() == 'fs' or flag[1:].lower() == 'mp': + continue + buf.append(flag) + task.env[flagname] = buf - # Strip existing /Fd, /FS, or /MP flags. - # We have to check for /Fd case sensitive, so that we won't accidentally - # overwrite GCC flags such as "-fdata-sections". - if flag[1:3] == 'Fd' \ - or flag[1:].lower() == 'fs' \ - or flag[1:].lower() == 'mp': - del task.env[flagname][i] - - if canAddNode: - if link_task and not node in link_task.dep_nodes: - link_task.dep_nodes.append(node) - if not node in task.outputs: - task.outputs.append(node) + if link_task and not node in link_task.dep_nodes: + link_task.dep_nodes.append(node) + if not node in task.outputs: + task.outputs.append(node)