summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/modules/windows.py26
1 files changed, 22 insertions, 4 deletions
diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py
index 17cb87524..f0d5113f8 100644
--- a/mesonbuild/modules/windows.py
+++ b/mesonbuild/modules/windows.py
@@ -12,7 +12,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import enum
import os
+import re
from .. import mlog
from .. import mesonlib, build
@@ -24,6 +26,10 @@ from ..interpreter import CustomTargetHolder
from ..interpreterbase import permittedKwargs, FeatureNewKwargs
from ..dependencies import ExternalProgram
+class ResourceCompilerType(enum.Enum):
+ windres = 1
+ rc = 2
+
class WindowsModule(ExtensionModule):
def detect_compiler(self, compilers):
@@ -62,7 +68,19 @@ class WindowsModule(ExtensionModule):
if not rescomp.found():
raise MesonException('Could not find Windows resource compiler')
- self._rescomp = rescomp
+ for (arg, match, type) in [
+ ('/?', '^.*Microsoft.*Resource Compiler.*$', ResourceCompilerType.rc),
+ ('--version', '^.*GNU windres.*$', ResourceCompilerType.windres),
+ ]:
+ p, o, e = mesonlib.Popen_safe(rescomp.get_command() + [arg])
+ m = re.search(match, o, re.MULTILINE)
+ if m:
+ mlog.log('Windows resource compiler: %s' % m.group())
+ self._rescomp = (rescomp, type)
+ break
+ else:
+ raise MesonException('Could not determine type of Windows resource compiler')
+
return self._rescomp
@FeatureNewKwargs('windows.compile_resources', '0.47.0', ['depend_files', 'depends'])
@@ -80,8 +98,8 @@ class WindowsModule(ExtensionModule):
raise MesonException('Resource include dirs should be include_directories().')
extra_args += get_include_args(inc_dirs)
- rescomp = self._find_resource_compiler(state)
- if 'rc' in rescomp.get_path():
+ rescomp, rescomp_type = self._find_resource_compiler(state)
+ if rescomp_type == ResourceCompilerType.rc:
# RC is used to generate .res files, a special binary resource
# format, which can be passed directly to LINK (apparently LINK uses
# CVTRES internally to convert this to a COFF object)
@@ -137,7 +155,7 @@ class WindowsModule(ExtensionModule):
}
# instruct binutils windres to generate a preprocessor depfile
- if 'windres' in rescomp.get_path():
+ if rescomp_type == ResourceCompilerType.windres:
res_kwargs['depfile'] = res_kwargs['output'] + '.d'
res_kwargs['command'] += ['--preprocessor-arg=-MD', '--preprocessor-arg=-MQ@OUTPUT@', '--preprocessor-arg=-MF@DEPFILE@']