diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b7f2a77f6..cb441597c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -124,8 +124,8 @@ jobs: displayName: Install Dependencies - script: | set PATH=%CYGWIN_ROOT%\bin;%SYSTEMROOT%\system32 - env.exe -- python3 -m pip --disable-pip-version-check install pytest-xdist - displayName: pip install pytest-xdist + env.exe -- python3 -m pip --disable-pip-version-check install pefile pytest-xdist + displayName: pip install pefile pytest-xdist - script: | set BOOST_ROOT= set PATH=%CYGWIN_ROOT%\bin;%SYSTEMROOT%\system32 @@ -188,7 +188,9 @@ jobs: mingw-w64-$(MSYS2_ARCH)-python2 ^ mingw-w64-$(MSYS2_ARCH)-python3 ^ mingw-w64-$(MSYS2_ARCH)-python3-setuptools ^ + mingw-w64-$(MSYS2_ARCH)-python3-pip ^ %TOOLCHAIN% + %MSYS2_ROOT%\usr\bin\bash -lc "python3 -m pip --disable-pip-version-check install pefile" displayName: Install Dependencies - powershell: | # https://github.com/mesonbuild/meson/issues/5807 diff --git a/ci/azure-steps.yml b/ci/azure-steps.yml index ff34c4566..ef312082d 100644 --- a/ci/azure-steps.yml +++ b/ci/azure-steps.yml @@ -152,7 +152,7 @@ steps: python --version # Needed for running unit tests in parallel. - python -m pip --disable-pip-version-check install --upgrade pytest-xdist + python -m pip --disable-pip-version-check install --upgrade pefile pytest-xdist echo "" diff --git a/run_unittests.py b/run_unittests.py index b2b255783..ad3d2a34a 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -4655,6 +4655,34 @@ class WindowsTests(BasePlatformTests): def test_link_environment_variable_rust(self): self._check_ld('link', 'rust', 'link') + def test_pefile_checksum(self): + try: + import pefile + except ImportError: + if is_ci(): + raise + raise unittest.SkipTest('pefile module not found') + testdir = os.path.join(self.common_test_dir, '6 linkshared') + self.init(testdir) + self.build() + # Test that binaries have a non-zero checksum + env = get_fake_env() + cc = env.detect_c_compiler(MachineChoice.HOST) + cc_id = cc.get_id() + ld_id = cc.get_linker_id() + dll = glob(os.path.join(self.builddir, '*mycpplib.dll'))[0] + exe = os.path.join(self.builddir, 'cppprog.exe') + for f in (dll, exe): + pe = pefile.PE(f) + msg = 'PE file: {!r}, compiler: {!r}, linker: {!r}'.format(f, cc_id, ld_id) + if cc_id == 'clang-cl': + # Latest clang-cl tested (7.0) does not write checksums out + self.assertFalse(pe.verify_checksum(), msg=msg) + else: + # Verify that a valid checksum was written by all other compilers + self.assertTrue(pe.verify_checksum(), msg=msg) + + @unittest.skipUnless(is_osx(), "requires Darwin") class DarwinTests(BasePlatformTests): '''