From 11cf9b0736ec2b5c6aa923e2141560fb7fc121ec Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 12 Nov 2016 08:53:27 +0530 Subject: [PATCH] Only use the strong stack protector if gcc is new enough --- setup.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 524c594f6..0857e679e 100644 --- a/setup.py +++ b/setup.py @@ -27,12 +27,27 @@ def pkg_config(pkg, *args): return shlex.split(subprocess.check_output(['pkg-config', pkg] + list(args)).decode('utf-8')) +def cc_version(): + cc = os.environ.get('CC', 'gcc') + raw = subprocess.check_output([cc, '-dumpversion']).decode('utf-8') + ver = raw.split('.')[:2] + try: + ver = tuple(map(int, ver)) + except Exception: + ver = (0, 0) + return ver + + def init_env(debug=False): global cflags, ldflags, cc, ldpaths + ccver = cc_version() + stack_protector = '-fstack-protector' + if ccver >= (4, 9): + stack_protector += '-strong' cc = os.environ.get('CC', 'gcc') cflags = os.environ.get('OVERRIDE_CFLAGS', ( '-Wextra -Wno-missing-field-initializers -Wall -std=c99 -D_XOPEN_SOURCE=700' - ' -pedantic-errors -Werror {} -DNDEBUG -fwrapv -fstack-protector-strong -pipe').format('-ggdb' if debug else '-O3')) + ' -pedantic-errors -Werror {} -DNDEBUG -fwrapv {} -pipe').format('-ggdb' if debug else '-O3', stack_protector)) cflags = shlex.split(cflags) + shlex.split(sysconfig.get_config_var('CCSHARED')) ldflags = os.environ.get('OVERRIDE_LDFLAGS', '-Wall -O3') ldflags = shlex.split(ldflags)