@@ -18,22 +18,47 @@ class CPPCompilerBase(CCompilerBase):
1818 default_executable = None
1919
2020 @classmethod
21- def add_standard_flag (cls , flags ):
22- r"""Add a standard flag to the list of flags.
21+ def find_standard_flag (cls , flags ):
22+ r"""Locate the standard flag in a list of flags.
2323
2424 Args:
2525 flags (list): Compilation flags.
2626
27+ Returns:
28+ int: Index of the standard flag. -1 if not present.
29+
2730 """
28- std_flag = None
2931 for i , a in enumerate (flags ):
3032 if a .startswith ('-std=' ):
31- std_flag = i
32- break
33- if std_flag is None :
33+ return i
34+ return - 1
35+
36+ @classmethod
37+ def add_standard_flag (cls , flags ):
38+ r"""Add a standard flag to the list of flags.
39+
40+ Args:
41+ flags (list): Compilation flags.
42+
43+ """
44+ std_flag_idx = cls .find_standard_flag (flags )
45+ if std_flag_idx == - 1 :
3446 flags .append ('-std=%s' % cls .cpp_std )
3547 return flags
3648
49+ def remove_standard_flag (cls , flags ):
50+ r"""Remove the standard flag from a list of flags if one is
51+ present.
52+
53+ Args:
54+ flags (list): Compilation flags.
55+
56+ """
57+ std_flag_idx = cls .find_standard_flag (flags )
58+ if std_flag_idx != - 1 :
59+ del flags [std_flag_idx ]
60+ return flags
61+
3762
3863class GPPCompiler (CPPCompilerBase , GCCCompiler ):
3964 r"""Interface class for G++ compiler/linker."""
@@ -55,8 +80,10 @@ def get_flags(cls, skip_standard_flag=False, **kwargs):
5580
5681 """
5782 out = super (GPPCompiler , cls ).get_flags (** kwargs )
58- # Add standard library flag
59- if not skip_standard_flag :
83+ # Add/remove standard library flag
84+ if skip_standard_flag :
85+ out = cls .remove_standard_flag (out )
86+ else :
6087 out = cls .add_standard_flag (out )
6188 return out
6289
@@ -94,8 +121,10 @@ def get_flags(cls, skip_standard_flag=False, **kwargs):
94121
95122 """
96123 out = super (ClangPPCompiler , cls ).get_flags (** kwargs )
97- # Add standard library flag
98- if not skip_standard_flag :
124+ # Add/remove standard library flag
125+ if skip_standard_flag :
126+ out = cls .remove_standard_flag (out )
127+ else :
99128 out = cls .add_standard_flag (out )
100129 return out
101130
0 commit comments