Browse Source

Merge topic 'source_group-TREE-no-FILES'

87788353cc source_group: Add test/example for TREE without FILES
d85238a2f2 source_group: Fix TREE without FILES

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !8599
Brad King 2 years ago
parent
commit
b8b53db1b3

+ 20 - 3
Source/cmSourceGroupCommand.cxx

@@ -4,6 +4,7 @@
 
 #include <cstddef>
 #include <map>
+#include <memory>
 #include <set>
 #include <utility>
 
@@ -11,6 +12,8 @@
 
 #include "cmExecutionStatus.h"
 #include "cmMakefile.h"
+#include "cmSourceFile.h"
+#include "cmSourceFileLocation.h"
 #include "cmSourceGroup.h"
 #include "cmStringAlgorithms.h"
 #include "cmSystemTools.h"
@@ -194,7 +197,10 @@ bool cmSourceGroupCommand(std::vector<std::string> const& args,
 
   // If only two arguments are given, the pre-1.8 version of the
   // command is being invoked.
-  if (args.size() == 2 && args[1] != "FILES") {
+  bool isShortTreeSyntax =
+    ((args.size() == 2) && (args[0] == kTreeOptionName) &&
+     cmSystemTools::FileIsDirectory(args[1]));
+  if (args.size() == 2 && args[1] != kFilesOptionName && !isShortTreeSyntax) {
     cmSourceGroup* sg = mf.GetOrCreateSourceGroup(args[0]);
 
     if (!sg) {
@@ -274,8 +280,19 @@ static bool processTree(cmMakefile& mf, ParsedArguments& parsedArguments,
     ? ""
     : parsedArguments[kPrefixOptionName].front();
 
-  const std::vector<std::string> filesVector = prepareFilesPathsForTree(
-    parsedArguments[kFilesOptionName], mf.GetCurrentSourceDirectory());
+  std::vector<std::string> files = parsedArguments[kFilesOptionName];
+  if (files.empty()) {
+    const std::vector<std::unique_ptr<cmSourceFile>>& srcFiles =
+      mf.GetSourceFiles();
+    for (const auto& srcFile : srcFiles) {
+      if (!srcFile->GetIsGenerated()) {
+        files.push_back(srcFile->GetLocation().GetFullPath());
+      }
+    }
+  }
+
+  const std::vector<std::string> filesVector =
+    prepareFilesPathsForTree(files, mf.GetCurrentSourceDirectory());
 
   if (!rootIsPrefix(root, filesVector, errorMsg)) {
     return false;

+ 2 - 0
Tests/SourceGroups/CMakeLists.txt

@@ -63,3 +63,5 @@ add_executable(SourceGroups main.c bar.c foo.c sub1/foo.c sub1/foobar.c baz.c
                             ${tree_files_with_prefix} ${tree_files_without_prefix}
                             ${tree_files_with_empty_prefix} README.txt
                             nested.c)
+
+add_subdirectory(sub2)

+ 4 - 0
Tests/SourceGroups/sub2/CMakeLists.txt

@@ -0,0 +1,4 @@
+add_executable(SourceGroups2 main.c
+                             qux.c subsub/qax.c)
+
+source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" ) #PREFIX TheSubDir2 )

+ 11 - 0
Tests/SourceGroups/sub2/main.c

@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+extern int qax(void);
+extern int qux(void);
+
+int main()
+{
+  printf("qux: %d qax: %d\n", qux(), qax());
+
+  return 0;
+}

+ 4 - 0
Tests/SourceGroups/sub2/qux.c

@@ -0,0 +1,4 @@
+int qux(void)
+{
+  return 1234;
+}

+ 4 - 0
Tests/SourceGroups/sub2/subsub/qax.c

@@ -0,0 +1,4 @@
+int qax(void)
+{
+  return 123;
+}