Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Xavier Thompson
cython
Commits
c828e80a
Commit
c828e80a
authored
6 years ago
by
Jerome Kieffer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Exposes compile_time_env to the command line
close #2314
parent
6c6574c7
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
100 additions
and
15 deletions
+100
-15
Cython/Build/Cythonize.py
Cython/Build/Cythonize.py
+3
-0
Cython/Compiler/CmdLine.py
Cython/Compiler/CmdLine.py
+13
-1
Cython/Compiler/Options.py
Cython/Compiler/Options.py
+84
-14
No files found.
Cython/Build/Cythonize.py
View file @
c828e80a
...
@@ -139,6 +139,9 @@ def parse_args(args):
...
@@ -139,6 +139,9 @@ def parse_args(args):
parser
.
add_option
(
'-X'
,
'--directive'
,
metavar
=
'NAME=VALUE,...'
,
dest
=
'directives'
,
parser
.
add_option
(
'-X'
,
'--directive'
,
metavar
=
'NAME=VALUE,...'
,
dest
=
'directives'
,
type
=
str
,
action
=
'callback'
,
callback
=
parse_directives
,
default
=
{},
type
=
str
,
action
=
'callback'
,
callback
=
parse_directives
,
default
=
{},
help
=
'set a compiler directive'
)
help
=
'set a compiler directive'
)
parser
.
add_option
(
'-E'
,
'--compile-time-env'
,
metavar
=
'NAME=VALUE,...'
,
dest
=
'compile_time_env'
,
type
=
str
,
action
=
'callback'
,
callback
=
Options
.
parse_compile_time_env
,
default
=
{},
help
=
'set a compile time environment variables'
)
parser
.
add_option
(
'-s'
,
'--option'
,
metavar
=
'NAME=VALUE'
,
dest
=
'options'
,
parser
.
add_option
(
'-s'
,
'--option'
,
metavar
=
'NAME=VALUE'
,
dest
=
'options'
,
type
=
str
,
action
=
'callback'
,
callback
=
parse_options
,
default
=
{},
type
=
str
,
action
=
'callback'
,
callback
=
parse_options
,
default
=
{},
help
=
'set a cythonize option'
)
help
=
'set a cythonize option'
)
...
...
This diff is collapsed.
Click to expand it.
Cython/Compiler/CmdLine.py
View file @
c828e80a
...
@@ -47,10 +47,11 @@ Options:
...
@@ -47,10 +47,11 @@ Options:
--warning-errors, -Werror Make all warnings into errors
--warning-errors, -Werror Make all warnings into errors
--warning-extra, -Wextra Enable extra warnings
--warning-extra, -Wextra Enable extra warnings
-X, --directive <name>=<value>[,<name=value,...] Overrides a compiler directive
-X, --directive <name>=<value>[,<name=value,...] Overrides a compiler directive
-E, --compile-time-env name=value[,<name=value,...] Provides compile time env like DEF would do.
"""
"""
#The following experimental options are supported only on MacOSX:
#
The following experimental options are supported only on MacOSX:
# -C, --compile Compile generated .c file to .o file
# -C, --compile Compile generated .c file to .o file
# --link Link .o file to produce extension module (implies -C)
# --link Link .o file to produce extension module (implies -C)
# -+, --cplus Use C++ compiler for compiling and linking
# -+, --cplus Use C++ compiler for compiling and linking
...
@@ -174,6 +175,17 @@ def parse_command_line(args):
...
@@ -174,6 +175,17 @@ def parse_command_line(args):
except
ValueError
as
e
:
except
ValueError
as
e
:
sys
.
stderr
.
write
(
"Error in compiler directive: %s
\
n
"
%
e
.
args
[
0
])
sys
.
stderr
.
write
(
"Error in compiler directive: %s
\
n
"
%
e
.
args
[
0
])
sys
.
exit
(
1
)
sys
.
exit
(
1
)
elif
option
==
"--compile-time-env"
or
option
.
startswith
(
'-E'
):
if
option
.
startswith
(
'-E'
)
and
option
[
2
:].
strip
():
x_args
=
option
[
2
:]
else
:
x_args
=
pop_value
()
try
:
options
.
compile_time_env
=
Options
.
parse_compile_time_env
(
x_args
,
current_settings
=
options
.
compile_time_env
)
except
ValueError
as
e
:
sys
.
stderr
.
write
(
"Error in compile-time-env: %s
\
n
"
%
e
.
args
[
0
])
sys
.
exit
(
1
)
elif
option
.
startswith
(
'--debug'
):
elif
option
.
startswith
(
'--debug'
):
option
=
option
[
2
:].
replace
(
'-'
,
'_'
)
option
=
option
[
2
:].
replace
(
'-'
,
'_'
)
from
.
import
DebugFlags
from
.
import
DebugFlags
...
...
This diff is collapsed.
Click to expand it.
Cython/Compiler/Options.py
View file @
c828e80a
...
@@ -423,7 +423,7 @@ def parse_directive_list(s, relaxed_bool=False, ignore_unknown=False,
...
@@ -423,7 +423,7 @@ def parse_directive_list(s, relaxed_bool=False, ignore_unknown=False,
item
=
item
.
strip
()
item
=
item
.
strip
()
if
not
item
:
if
not
item
:
continue
continue
if
not
'='
in
item
:
if
'='
not
in
item
:
raise
ValueError
(
'Expected "=" in option "%s"'
%
item
)
raise
ValueError
(
'Expected "=" in option "%s"'
%
item
)
name
,
value
=
[
s
.
strip
()
for
s
in
item
.
strip
().
split
(
'='
,
1
)]
name
,
value
=
[
s
.
strip
()
for
s
in
item
.
strip
().
split
(
'='
,
1
)]
if
name
not
in
_directive_defaults
:
if
name
not
in
_directive_defaults
:
...
@@ -441,3 +441,73 @@ def parse_directive_list(s, relaxed_bool=False, ignore_unknown=False,
...
@@ -441,3 +441,73 @@ def parse_directive_list(s, relaxed_bool=False, ignore_unknown=False,
parsed_value
=
parse_directive_value
(
name
,
value
,
relaxed_bool
=
relaxed_bool
)
parsed_value
=
parse_directive_value
(
name
,
value
,
relaxed_bool
=
relaxed_bool
)
result
[
name
]
=
parsed_value
result
[
name
]
=
parsed_value
return
result
return
result
def
parse_variable_value
(
value
):
"""
Parses value as an option value for the given name and returns
the interpreted value.
>>> parse_variable_value('True')
True
>>> parse_variable_value('true')
'true'
>>> parse_variable_value('us-ascii')
'us-ascii'
>>> parse_variable_value('str')
'str'
>>> parse_variable_value('123')
123
>>> parse_variable_value('1.23')
1.23
"""
if
value
==
"True"
:
return
True
elif
value
==
"False"
:
return
False
elif
value
==
"None"
:
return
None
elif
value
.
isdigit
():
return
int
(
value
)
else
:
try
:
value
=
float
(
value
)
except
Exception
:
# Not a float
pass
return
value
def
parse_compile_time_env
(
s
,
current_settings
=
None
):
"""
Parses a comma-separated list of pragma options. Whitespace
is not considered.
>>> parse_compile_time_env(' ')
{}
>>> (parse_compile_time_env('boundscheck=True') ==
... {'boundscheck': True})
True
>>> parse_compile_time_env(' asdf')
Traceback (most recent call last):
...
ValueError: Expected "=" in option "asdf"
>>> parse_compile_time_env('boundscheck=hey') == {'boundscheck': 'hey'}
True
>>> parse_compile_time_env('unknown=True') == {'unknown': True}
True
"""
if
current_settings
is
None
:
result
=
{}
else
:
result
=
current_settings
for
item
in
s
.
split
(
','
):
item
=
item
.
strip
()
if
not
item
:
continue
if
'='
not
in
item
:
raise
ValueError
(
'Expected "=" in option "%s"'
%
item
)
name
,
value
=
[
s
.
strip
()
for
s
in
item
.
strip
().
split
(
'='
,
1
)]
result
[
name
]
=
parse_variable_value
(
value
)
return
result
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment