summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Modules/SortSubset.cmake25
1 files changed, 25 insertions, 0 deletions
diff --git a/cmake/Modules/SortSubset.cmake b/cmake/Modules/SortSubset.cmake
new file mode 100644
index 000000000000..af65c27e715b
--- /dev/null
+++ b/cmake/Modules/SortSubset.cmake
@@ -0,0 +1,25 @@
+# Sort a subset of a list according to the ordering in the full list.
+#
+# Given a list and a subset of that list, this function sorts the subset
+# according to the order in the full list, and returns that in the given
+# output variable.
+#
+# full_list:
+# The list containing the desired order of elements in the sub-list.
+#
+# sub_list:
+# A subset of the elements in `full_list`. Those elements will be sorted
+# according to the order in `full_list`.
+#
+# out_var:
+# A variable to store the resulting sorted sub-list in.
+function(sort_subset full_list sub_list out_var)
+ set(result "${full_list}")
+ foreach(project IN LISTS full_list)
+ if (NOT project IN_LIST sub_list)
+ list(REMOVE_ITEM result ${project})
+ endif()
+ endforeach()
+
+ set(${out_var} "${result}" PARENT_SCOPE)
+endfunction()