preserve quotes in setup_command; closes #169
This commit is contained in:
parent
09b2ebf8db
commit
32f4562704
@ -52,7 +52,29 @@ def setup_build_path(build_path):
|
|||||||
os.makedirs(build_path, 0o755)
|
os.makedirs(build_path, 0o755)
|
||||||
|
|
||||||
|
|
||||||
def run_cmake(command, build_path, default_build_path):
|
def add_quotes_to_argv(argv, arguments):
|
||||||
|
"""
|
||||||
|
This function tries to solve this problem:
|
||||||
|
https://stackoverflow.com/questions/19120247/python-sys-argv-to-preserve-or
|
||||||
|
|
||||||
|
The problem is that sys.argv has been stripped of quotes by the shell but
|
||||||
|
docopt's arguments contains quotes.
|
||||||
|
|
||||||
|
So what we do is cycle through all docopt arguments: if they are also
|
||||||
|
present in sys.argv and contain spaces, we add quotes.
|
||||||
|
"""
|
||||||
|
setup_command = ' '.join(argv[:])
|
||||||
|
|
||||||
|
for k, v in arguments.items():
|
||||||
|
if isinstance(v, str):
|
||||||
|
if ' ' in v:
|
||||||
|
if v in setup_command:
|
||||||
|
setup_command = setup_command.replace(v, '"{}"'.format(v))
|
||||||
|
|
||||||
|
return setup_command
|
||||||
|
|
||||||
|
|
||||||
|
def run_cmake(command, build_path, default_build_path, arguments):
|
||||||
"""
|
"""
|
||||||
Execute CMake command.
|
Execute CMake command.
|
||||||
"""
|
"""
|
||||||
@ -88,7 +110,8 @@ def run_cmake(command, build_path, default_build_path):
|
|||||||
configuration_successful = configuring_done and generating_done and build_files_written
|
configuration_successful = configuring_done and generating_done and build_files_written
|
||||||
|
|
||||||
if configuration_successful:
|
if configuration_successful:
|
||||||
save_setup_command(sys.argv, build_path)
|
setup_command = add_quotes_to_argv(sys.argv, arguments)
|
||||||
|
save_setup_command(setup_command, build_path)
|
||||||
print_build_help(build_path, default_build_path)
|
print_build_help(build_path, default_build_path)
|
||||||
|
|
||||||
|
|
||||||
@ -105,16 +128,16 @@ def print_build_help(build_path, default_build_path):
|
|||||||
print(' $ make')
|
print(' $ make')
|
||||||
|
|
||||||
|
|
||||||
def save_setup_command(argv, build_path):
|
def save_setup_command(setup_command, build_path):
|
||||||
"""
|
"""
|
||||||
Save setup command to a file.
|
Save setup command to a file.
|
||||||
"""
|
"""
|
||||||
file_name = os.path.join(build_path, 'setup_command')
|
file_name = os.path.join(build_path, 'setup_command')
|
||||||
with open(file_name, 'w') as f:
|
with open(file_name, 'w') as f:
|
||||||
f.write(' '.join(argv[:]) + '\n')
|
f.write(setup_command + '\n')
|
||||||
|
|
||||||
|
|
||||||
def configure(root_directory, build_path, cmake_command, only_show):
|
def configure(root_directory, build_path, cmake_command, arguments):
|
||||||
"""
|
"""
|
||||||
Main configure function.
|
Main configure function.
|
||||||
"""
|
"""
|
||||||
@ -126,12 +149,12 @@ def configure(root_directory, build_path, cmake_command, only_show):
|
|||||||
# deal with build path
|
# deal with build path
|
||||||
if build_path is None:
|
if build_path is None:
|
||||||
build_path = default_build_path
|
build_path = default_build_path
|
||||||
if not only_show:
|
if not arguments['--show']:
|
||||||
setup_build_path(build_path)
|
setup_build_path(build_path)
|
||||||
|
|
||||||
cmake_command += ' -B' + build_path
|
cmake_command += ' -B' + build_path
|
||||||
print('{0}\n'.format(cmake_command))
|
print('{0}\n'.format(cmake_command))
|
||||||
if only_show:
|
if arguments['--show']:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
run_cmake(cmake_command, build_path, default_build_path)
|
run_cmake(cmake_command, build_path, default_build_path, arguments)
|
||||||
|
@ -150,7 +150,7 @@ def gen_setup(config, default_build_type, relative_path, setup_script_name):
|
|||||||
s.append("cmake_command = '{0} -H{1}'.format(gen_cmake_command(options, arguments), root_directory)")
|
s.append("cmake_command = '{0} -H{1}'.format(gen_cmake_command(options, arguments), root_directory)")
|
||||||
s.append("\n")
|
s.append("\n")
|
||||||
s.append("# run cmake")
|
s.append("# run cmake")
|
||||||
s.append("configure.configure(root_directory, build_path, cmake_command, arguments['--show'])")
|
s.append("configure.configure(root_directory, build_path, cmake_command, arguments)")
|
||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user