# HG changeset patch # User Matt Harbison # Date 1584761423 14400 # Node ID 2a98b0cd4995d725104ea1e42b5009f7ee26ac4c # Parent 090a1a78be4a021f88ceb07efc2c72bbc7f4fdf1 setup: build C extensions with -Werror=declaration-after-statement MSVC 2008 still needs declarations at the top of the scope. I added it to the 3rd party code too in case somebody vendors a new version with a problem- they'll get an early warning. Clang seems to ignore this (at least on 10.14 with Xcode 10), and gcc 7.4 will error out as desired on Ubuntu 18.04. Thanks to Yuya for remembering the name of the option. Differential Revision: https://phab.mercurial-scm.org/D8318 diff -r 090a1a78be4a -r 2a98b0cd4995 setup.py --- a/setup.py Tue Mar 24 21:41:24 2020 +0900 +++ b/setup.py Fri Mar 20 23:30:23 2020 -0400 @@ -1268,6 +1268,12 @@ ] common_include_dirs = ['mercurial'] +common_cflags = [] + +# MSVC 2008 still needs declarations at the top of the scope. +if os.name != 'nt': + common_cflags = ['-Werror=declaration-after-statement'] + osutil_cflags = [] osutil_ldflags = [] @@ -1441,18 +1447,21 @@ 'mercurial.cext.base85', ['mercurial/cext/base85.c'], include_dirs=common_include_dirs, + extra_compile_args=common_cflags, depends=common_depends, ), Extension( 'mercurial.cext.bdiff', ['mercurial/bdiff.c', 'mercurial/cext/bdiff.c'] + xdiff_srcs, include_dirs=common_include_dirs, + extra_compile_args=common_cflags, depends=common_depends + ['mercurial/bdiff.h'] + xdiff_headers, ), Extension( 'mercurial.cext.mpatch', ['mercurial/mpatch.c', 'mercurial/cext/mpatch.c'], include_dirs=common_include_dirs, + extra_compile_args=common_cflags, depends=common_depends, ), Extension( @@ -1466,6 +1475,7 @@ 'mercurial/cext/revlog.c', ], include_dirs=common_include_dirs, + extra_compile_args=common_cflags, depends=common_depends + ['mercurial/cext/charencode.h', 'mercurial/cext/revlog.h',], ), @@ -1473,7 +1483,7 @@ 'mercurial.cext.osutil', ['mercurial/cext/osutil.c'], include_dirs=common_include_dirs, - extra_compile_args=osutil_cflags, + extra_compile_args=common_cflags + osutil_cflags, extra_link_args=osutil_ldflags, depends=common_depends, ), @@ -1482,6 +1492,7 @@ [ 'mercurial/thirdparty/zope/interface/_zope_interface_coptimizations.c', ], + extra_compile_args=common_cflags, ), Extension( 'mercurial.thirdparty.sha1dc', @@ -1490,9 +1501,12 @@ 'mercurial/thirdparty/sha1dc/lib/sha1.c', 'mercurial/thirdparty/sha1dc/lib/ubc_check.c', ], + extra_compile_args=common_cflags, ), Extension( - 'hgext.fsmonitor.pywatchman.bser', ['hgext/fsmonitor/pywatchman/bser.c'] + 'hgext.fsmonitor.pywatchman.bser', + ['hgext/fsmonitor/pywatchman/bser.c'], + extra_compile_args=common_cflags, ), RustStandaloneExtension( 'mercurial.rustext', 'hg-cpython', 'librusthg', py3_features='python3' @@ -1503,11 +1517,11 @@ sys.path.insert(0, 'contrib/python-zstandard') import setup_zstd -extmodules.append( - setup_zstd.get_c_extension( - name='mercurial.zstd', root=os.path.abspath(os.path.dirname(__file__)) - ) +zstd = setup_zstd.get_c_extension( + name='mercurial.zstd', root=os.path.abspath(os.path.dirname(__file__)) ) +zstd.extra_compile_args += common_cflags +extmodules.append(zstd) try: from distutils import cygwinccompiler