cmake_minimum_required(VERSION 2.8) project(ArgumentExpansion) function (argument_tester expected expected_len) list(LENGTH ARGN argn_len) list(LENGTH ${expected} expected_received_len) if (NOT ${expected_received_len} EQUAL ${expected_len}) message(STATUS "Unexpected: Expanding expected values isn't working") endif (NOT ${expected_received_len} EQUAL ${expected_len}) if (${argn_len} EQUAL ${expected_len}) set(i 0) while (i LESS ${argn_len}) list(GET ARGN ${i} argn_value) list(GET ${expected} ${i} expected_value) if (NOT ${argn_value} STREQUAL ${expected_value}) message(STATUS "Unexpected: Argument ${i} doesn't match") message(STATUS " Expected: ${expected_value}") message(STATUS " Received: ${argn_value}") endif (NOT ${argn_value} STREQUAL ${expected_value}) math(EXPR i "${i} + 1") endwhile (i LESS ${argn_len}) else (${argn_len} EQUAL ${expected_len}) message(STATUS "Unexpected: Lengths of arguments don't match") message(STATUS " Expected: ${expected_len}") message(STATUS " Received: ${argn_len}") endif (${argn_len} EQUAL ${expected_len}) endfunction (argument_tester expected) set(empty_test) message(STATUS "Test: Empty arguments") argument_tester(empty_test 0 ${empty_test}) set(single_arg_test "single arg") message(STATUS "Test: Single argument") argument_tester(single_arg_test 1 ${single_arg_test}) set(multiple_arg_test "first arg" "second arg") message(STATUS "Test: Multiple arguments") argument_tester(multiple_arg_test 2 ${multiple_arg_test}) set(nested_list_arg_test "${multiple_arg_test}" "first arg" "second arg") message(STATUS "Test: Nested list argument") argument_tester(nested_list_arg_test 3 ${nested_list_arg_test}) set(semicolon_arg_test "pre\;post") message(STATUS "Test: Semicolon argument") argument_tester(semicolon_arg_test 1 ${semicolon_arg_test})