浏览代码

Merge topic 'get_filename_component_last_ext'

2a9220c34d Help: Add notes for topic 'get_filename_component_last_ext'
edda30d0f5 Tests: Add tests for LAST_EXT and NAME_WLE
7a25ef326b Help: Add documentation for new get_filename_component components
e50a36df48 cmGetFilenameComponentCommand: Add more components

Acked-by: Kitware Robot <[email protected]>
Merge-request: !2853
Brad King 6 年之前
父节点
当前提交
1593e16d88

+ 2 - 0
Help/command/get_filename_component.rst

@@ -15,6 +15,8 @@ Sets ``<var>`` to a component of ``<FileName>``, where ``<mode>`` is one of:
  NAME      = File name without directory
  EXT       = File name longest extension (.b.c from d/a.b.c)
  NAME_WE   = File name without directory or longest extension
+ LAST_EXT  = File name last extention (.c from d/a.b.c)
+ NAME_WLE  = File name without directory or last extension
  PATH      = Legacy alias for DIRECTORY (use for CMake <= 2.8.11)
 
 Paths are returned with forward slashes and have no trailing slashes.

+ 6 - 0
Help/release/dev/get_filename_component_last_ext.rst

@@ -0,0 +1,6 @@
+get_filename_component_last_ext
+-------------------------------
+
+* The :command:`get_filename_component` command gained new
+  ``LAST_EXT`` and ``NAME_WLE`` variants to work with the
+  extension after the last ``.`` in the name.

+ 4 - 0
Source/cmGetFilenameComponentCommand.cxx

@@ -88,6 +88,10 @@ bool cmGetFilenameComponentCommand::InitialPass(
     result = cmSystemTools::GetFilenameExtension(filename);
   } else if (args[2] == "NAME_WE") {
     result = cmSystemTools::GetFilenameWithoutExtension(filename);
+  } else if (args[2] == "LAST_EXT") {
+    result = cmSystemTools::GetFilenameLastExtension(filename);
+  } else if (args[2] == "NAME_WLE") {
+    result = cmSystemTools::GetFilenameWithoutLastExtension(filename);
   } else if (args[2] == "ABSOLUTE" || args[2] == "REALPATH") {
     // If the path given is relative, evaluate it relative to the
     // current source directory unless the user passes a different

+ 3 - 1
Tests/RunCMake/get_filename_component/KnownComponents.cmake

@@ -11,8 +11,10 @@ set(expect_DIRECTORY "/path/to")
 set(expect_NAME "filename.ext.in")
 set(expect_EXT ".ext.in")
 set(expect_NAME_WE "filename")
+set(expect_LAST_EXT ".in")
+set(expect_NAME_WLE "filename.ext")
 set(expect_PATH "/path/to")
-foreach(c DIRECTORY NAME EXT NAME_WE PATH)
+foreach(c DIRECTORY NAME EXT NAME_WE LAST_EXT NAME_WLE PATH)
   get_filename_component(actual_${c} "${filename}" ${c})
   check("${c}" "${actual_${c}}" "${expect_${c}}")
   list(APPEND non_cache_vars actual_${c})