blob: 72ae5607a667c8d53a3b9cab9685aa014a3e6156 [file]
# Define a transform function: add source prefix
function(add_src_prefix in out)
set(${out} "src/${in}" PARENT_SCOPE)
endfunction()
# Define a transform function: add prefix
function(add_prefix in out)
set(${out} "prefix_${in}" PARENT_SCOPE)
endfunction()
set(mylist alpha bravo charlie delta)
# Basic APPLY - all elements
list(TRANSFORM mylist APPLY add_src_prefix OUTPUT_VARIABLE output)
if(NOT output STREQUAL "src/alpha;src/bravo;src/charlie;src/delta")
message(FATAL_ERROR "TRANSFORM(APPLY) is \"${output}\", expected is \"src/alpha;src/bravo;src/charlie;src/delta\"")
endif()
# APPLY with OUTPUT_VARIABLE (verify original unchanged)
if(NOT mylist STREQUAL "alpha;bravo;charlie;delta")
message(FATAL_ERROR "Original list modified: \"${mylist}\", expected \"alpha;bravo;charlie;delta\"")
endif()
# APPLY in-place
list(TRANSFORM mylist APPLY add_src_prefix)
if(NOT mylist STREQUAL "src/alpha;src/bravo;src/charlie;src/delta")
message(FATAL_ERROR "TRANSFORM(APPLY) in-place is \"${mylist}\", expected is \"src/alpha;src/bravo;src/charlie;src/delta\"")
endif()
# APPLY with AT selector
set(mylist alpha bravo charlie delta)
list(TRANSFORM mylist APPLY add_src_prefix AT 1 3 OUTPUT_VARIABLE output)
if(NOT output STREQUAL "alpha;src/bravo;charlie;src/delta")
message(FATAL_ERROR "TRANSFORM(APPLY AT) is \"${output}\", expected is \"alpha;src/bravo;charlie;src/delta\"")
endif()
# APPLY with AT selector and negative index
unset(output)
list(TRANSFORM mylist APPLY add_src_prefix AT 1 -2 OUTPUT_VARIABLE output)
if(NOT output STREQUAL "alpha;src/bravo;src/charlie;delta")
message(FATAL_ERROR "TRANSFORM(APPLY AT neg) is \"${output}\", expected is \"alpha;src/bravo;src/charlie;delta\"")
endif()
# APPLY with FOR selector
unset(output)
list(TRANSFORM mylist APPLY add_src_prefix FOR 1 2 OUTPUT_VARIABLE output)
if(NOT output STREQUAL "alpha;src/bravo;src/charlie;delta")
message(FATAL_ERROR "TRANSFORM(APPLY FOR) is \"${output}\", expected is \"alpha;src/bravo;src/charlie;delta\"")
endif()
# APPLY with FOR selector and step
unset(output)
list(TRANSFORM mylist APPLY add_src_prefix FOR 0 3 2 OUTPUT_VARIABLE output)
if(NOT output STREQUAL "src/alpha;bravo;src/charlie;delta")
message(FATAL_ERROR "TRANSFORM(APPLY FOR step) is \"${output}\", expected is \"src/alpha;bravo;src/charlie;delta\"")
endif()
# APPLY with REGEX selector
unset(output)
list(TRANSFORM mylist APPLY add_src_prefix REGEX "(r|t)a" OUTPUT_VARIABLE output)
if(NOT output STREQUAL "alpha;src/bravo;charlie;src/delta")
message(FATAL_ERROR "TRANSFORM(APPLY REGEX) is \"${output}\", expected is \"alpha;src/bravo;charlie;src/delta\"")
endif()
# APPLY with a different function
unset(output)
list(TRANSFORM mylist APPLY add_prefix OUTPUT_VARIABLE output)
if(NOT output STREQUAL "prefix_alpha;prefix_bravo;prefix_charlie;prefix_delta")
message(FATAL_ERROR "TRANSFORM(APPLY add_prefix) is \"${output}\", expected is \"prefix_alpha;prefix_bravo;prefix_charlie;prefix_delta\"")
endif()
# APPLY on empty list
set(empty_list "")
list(TRANSFORM empty_list APPLY add_src_prefix OUTPUT_VARIABLE output)
if(NOT output STREQUAL "")
message(FATAL_ERROR "TRANSFORM(APPLY empty) is \"${output}\", expected is \"\"")
endif()
# APPLY with function that returns empty string
function(make_empty in out)
set(${out} "" PARENT_SCOPE)
endfunction()
set(mylist alpha bravo charlie)
list(TRANSFORM mylist APPLY make_empty)
if(NOT mylist STREQUAL ";;")
message(FATAL_ERROR "TRANSFORM(APPLY make_empty) is \"${mylist}\", expected is \";;\"")
endif()
# Recursive APPLY: an APPLY function that itself calls list(TRANSFORM APPLY).
# The inner function returns the output variable name it was given.
function(return_out_var_name in out)
set(${out} "${out}" PARENT_SCOPE)
endfunction()
# The outer function triggers a nested APPLY and verifies that the inner
# output variable name differs from its own.
function(inner_name_is_different in out)
set(_inner x)
list(TRANSFORM _inner APPLY return_out_var_name OUTPUT_VARIABLE _inner_out)
# _inner_out now holds the inner output variable name
if("${out}" STREQUAL "${_inner_out}")
set(${out} "FALSE" PARENT_SCOPE)
else()
set(${out} "TRUE" PARENT_SCOPE)
endif()
endfunction()
set(mylist a b c)
list(TRANSFORM mylist APPLY inner_name_is_different OUTPUT_VARIABLE output)
if(NOT output STREQUAL "TRUE;TRUE;TRUE")
message(FATAL_ERROR "TRANSFORM(APPLY nested smoke) is \"${output}\", expected \"TRUE;TRUE;TRUE\"")
endif()