diff options
-rw-r--r-- | cmake/QtIRCommandLineHelpers.cmake | 1 | ||||
-rw-r--r-- | cmake/QtIRHelpers.cmake | 2 | ||||
-rw-r--r-- | cmake/QtIRProcessHelpers.cmake | 24 |
3 files changed, 24 insertions, 3 deletions
diff --git a/cmake/QtIRCommandLineHelpers.cmake b/cmake/QtIRCommandLineHelpers.cmake index 465a994b..65c5d6aa 100644 --- a/cmake/QtIRCommandLineHelpers.cmake +++ b/cmake/QtIRCommandLineHelpers.cmake @@ -244,6 +244,7 @@ endfunction() # Reads the command line arguments from the optfile_path. function(qt_ir_get_raw_args_from_optfile optfile_path out_var) file(STRINGS "${optfile_path}" args) + qt_ir_escape_semicolons(args "${args}") set(${out_var} "${args}" PARENT_SCOPE) endfunction() diff --git a/cmake/QtIRHelpers.cmake b/cmake/QtIRHelpers.cmake index 9f372932..8e2af7f8 100644 --- a/cmake/QtIRHelpers.cmake +++ b/cmake/QtIRHelpers.cmake @@ -225,7 +225,7 @@ endfunction() # to run the perly script manually. function(qt_ir_show_error_how_to_run_perl opt_file unsupported_option_name) qt_ir_get_raw_args_from_optfile("${opt_file}" args) - string(REPLACE ";" " " args "${args}") + qt_ir_prettify_command_args(args "${args}") set(perl_cmd "perl ./init-repository.pl ${args}") diff --git a/cmake/QtIRProcessHelpers.cmake b/cmake/QtIRProcessHelpers.cmake index db7bf2cb..cddd2736 100644 --- a/cmake/QtIRProcessHelpers.cmake +++ b/cmake/QtIRProcessHelpers.cmake @@ -53,10 +53,11 @@ function(qt_ir_execute_process) endif() endif() - string(REPLACE ";" " " command_args_string "${arg_COMMAND_ARGS}") + qt_ir_prettify_command_args(command_args_string "${arg_COMMAND_ARGS}") message("+ ${command_args_string}${working_dir_message}") endif() + qt_ir_unescape_semicolons(arg_COMMAND_ARGS "${arg_COMMAND_ARGS}") execute_process( COMMAND ${arg_COMMAND_ARGS} ${working_dir} @@ -76,6 +77,25 @@ function(qt_ir_execute_process) endif() endfunction() +# Guards the escaped semicolon sequences with square brackets. +function(qt_ir_escape_semicolons out_var input_string) + string(REPLACE "\;" "[[;]]" ${out_var} "${input_string}") + set(${out_var} "${${out_var}}" PARENT_SCOPE) +endfunction() + +# Removes the square bracket guards around semicolons and escape them. +function(qt_ir_unescape_semicolons out_var input_string) + string(REPLACE "[[;]]" "\;" ${out_var} "${input_string}") + set(${out_var} "${${out_var}}" PARENT_SCOPE) +endfunction() + +# Converts the command line arguments to a nice bash runnable string +function(qt_ir_prettify_command_args output args) + list(JOIN args " " ${output}) + qt_ir_unescape_semicolons(${output} "${${output}}") + set(${output} "${${output}}" PARENT_SCOPE) +endfunction() + # A higher level execute_process wrapper that can be used to execute a single command # that is a bit more opinionated and expects options related to init-repository # functionality. @@ -142,7 +162,7 @@ function(qt_ir_execute_process_and_log_and_handle_error) set(error_message "${arg_ERROR_MESSAGE}\n") endif() - string(REPLACE ";" " " cmd "${arg_COMMAND_ARGS}") + qt_ir_prettify_command_args(cmd "${arg_COMMAND_ARGS}") string(APPEND error_message "${cmd} exited with status: ${proc_result}\n") if(proc_output) string(APPEND error_message "stdout: ${proc_output}\n") |