mirror of
https://github.com/reactos/CMake.git
synced 2024-11-25 04:29:52 +00:00
ENH: Adding test for non-trivial custom command line arguments. This is for bug#3786.
This commit is contained in:
parent
b9fc06735d
commit
ca22f0f14b
@ -164,3 +164,42 @@ TARGET_LINK_LIBRARIES(CustomCommand GeneratedHeader)
|
|||||||
# the CustomCommand executable really needs doc1.h
|
# the CustomCommand executable really needs doc1.h
|
||||||
ADD_DEPENDENCIES(CustomCommand TDocument)
|
ADD_DEPENDENCIES(CustomCommand TDocument)
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Test non-trivial command line arguments in custom commands.
|
||||||
|
SET(EXPECTED_ARGUMENTS)
|
||||||
|
SET(CHECK_ARGS
|
||||||
|
c:/posix/path
|
||||||
|
c:\\windows\\path
|
||||||
|
'single-quotes'
|
||||||
|
single'quote
|
||||||
|
\"double-quotes\"
|
||||||
|
double\"quote
|
||||||
|
"\\;semi-colons\\;"
|
||||||
|
"semi\\;colon"
|
||||||
|
"c:/posix/path/with space"
|
||||||
|
"c:\\windows\\path\\with space"
|
||||||
|
"'single quotes with space'"
|
||||||
|
"single'quote with space"
|
||||||
|
"\"double-quotes with space\""
|
||||||
|
"double\"quote with space"
|
||||||
|
"\\;semi-colons with space\\;"
|
||||||
|
"semi\\;colon with space"
|
||||||
|
)
|
||||||
|
FOREACH(arg ${CHECK_ARGS})
|
||||||
|
SET(ARG "${arg}")
|
||||||
|
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARG "${ARG}")
|
||||||
|
STRING(REGEX REPLACE "\"" "\\\\\"" ARG "${ARG}")
|
||||||
|
SET(EXPECTED_ARGUMENTS
|
||||||
|
"${EXPECTED_ARGUMENTS} \"${ARG}\",
|
||||||
|
")
|
||||||
|
ENDFOREACH(arg)
|
||||||
|
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/check_command_line.c.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/check_command_line.c
|
||||||
|
@ONLY IMMEDIATE)
|
||||||
|
ADD_EXECUTABLE(check_command_line
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/check_command_line.c)
|
||||||
|
ADD_CUSTOM_TARGET(do_check_command_line ALL
|
||||||
|
COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/check_command_line
|
||||||
|
${CHECK_ARGS}
|
||||||
|
)
|
||||||
|
ADD_DEPENDENCIES(do_check_command_line check_command_line)
|
||||||
|
32
Tests/CustomCommand/check_command_line.c.in
Normal file
32
Tests/CustomCommand/check_command_line.c.in
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
const char* expected_arguments[] =
|
||||||
|
{
|
||||||
|
@EXPECTED_ARGUMENTS@ 0
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, const char* argv[])
|
||||||
|
{
|
||||||
|
const char** a = argv+1;
|
||||||
|
const char** e = expected_arguments;
|
||||||
|
(void)argc;
|
||||||
|
for(;*a && *e; ++a, ++e)
|
||||||
|
{
|
||||||
|
if(strcmp(*a, *e) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Argument [%s] does not match expected [%s].\n",
|
||||||
|
*a, *e);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("[%s]\n", *a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(*a || *e)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Number of arguments does not match expected.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user