Beispiel #1
0
    def test_basic_with_linked_dir(self):
        folder1 = temp_folder()
        sub1 = os.path.join(folder1, "subdir1")
        sub2 = os.path.join(folder1, "subdir2")
        os.makedirs(sub1)
        os.symlink("subdir1", sub2)
        save(os.path.join(sub1, "file1.txt"), "hello1")
        save(os.path.join(sub1, "file2.c"), "Hello2")
        save(os.path.join(sub1, "sub1/file1.txt"), "Hello1 sub")
        folder2 = temp_folder()
        copy(None, "*.txt", folder1, os.path.join(folder2, "texts"))
        self.assertEqual(os.readlink(os.path.join(folder2, "texts/subdir2")),
                         "subdir1")
        self.assertEqual(
            "hello1", load(os.path.join(folder2, "texts/subdir1/file1.txt")))
        self.assertEqual(
            "Hello1 sub",
            load(os.path.join(folder2, "texts/subdir1/sub1/file1.txt")))
        self.assertEqual(
            "hello1", load(os.path.join(folder2, "texts/subdir2/file1.txt")))
        self.assertEqual(['file1.txt', 'sub1'].sort(),
                         os.listdir(os.path.join(folder2,
                                                 "texts/subdir2")).sort())

        folder2 = temp_folder()
        copy(None, "*.txt", os.path.join(folder1, "subdir1"),
             os.path.join(folder2, "texts"))
        self.assertEqual("hello1",
                         load(os.path.join(folder2, "texts/file1.txt")))
        self.assertEqual("Hello1 sub",
                         load(os.path.join(folder2, "texts/sub1/file1.txt")))
        self.assertNotIn("subdir2", os.listdir(os.path.join(folder2, "texts")))
Beispiel #2
0
    def test_excludes_camelcase_folder(self):
        # https://github.com/conan-io/conan/issues/8153
        folder1 = temp_folder()
        save(os.path.join(folder1, "UPPER.txt"), "")
        save(os.path.join(folder1, "lower.txt"), "")
        sub2 = os.path.join(folder1, "CamelCaseIgnore")
        save(os.path.join(sub2, "file3.txt"), "")

        folder2 = temp_folder()
        copy(None,
             "*",
             folder1,
             folder2,
             excludes=["CamelCaseIgnore", "UPPER.txt"])
        self.assertFalse(
            os.path.exists(os.path.join(folder2, "CamelCaseIgnore")))
        self.assertFalse(os.path.exists(os.path.join(folder2, "UPPER.txt")))
        self.assertTrue(os.path.exists(os.path.join(folder2, "lower.txt")))

        folder2 = temp_folder()
        copy(None, "*", folder1, folder2)
        self.assertTrue(
            os.path.exists(os.path.join(folder2, "CamelCaseIgnore")))
        self.assertTrue(os.path.exists(os.path.join(folder2, "UPPER.txt")))
        self.assertTrue(os.path.exists(os.path.join(folder2, "lower.txt")))
Beispiel #3
0
    def test_basic(self):
        folder1 = temp_folder()
        sub1 = os.path.join(folder1, "subdir1")
        sub2 = os.path.join(folder1, "subdir2")
        save(os.path.join(sub1, "file1.txt"), "hello1")
        save(os.path.join(sub1, "file2.c"), "Hello2")
        save(os.path.join(sub1, "sub1/file1.txt"), "Hello1 sub")
        save(os.path.join(sub1, "sub1/file2.c"), "Hello2 sub")
        save(os.path.join(sub2, "file1.txt"), "2 Hello1")
        save(os.path.join(sub2, "file2.c"), "2 Hello2")

        folder2 = temp_folder()
        copy(None, "*.txt", folder1, os.path.join(folder2, "texts"))
        self.assertEqual(
            "hello1", load(os.path.join(folder2, "texts/subdir1/file1.txt")))
        self.assertEqual(
            "Hello1 sub",
            load(os.path.join(folder2, "texts/subdir1/sub1/file1.txt")))
        self.assertEqual(
            "2 Hello1", load(os.path.join(folder2, "texts/subdir2/file1.txt")))
        self.assertEqual(['file1.txt'],
                         os.listdir(os.path.join(folder2, "texts/subdir2")))

        folder2 = temp_folder()
        copy(None, "*.txt", os.path.join(folder1, "subdir1"),
             os.path.join(folder2, "texts"))
        self.assertEqual("hello1",
                         load(os.path.join(folder2, "texts/file1.txt")))
        self.assertEqual("Hello1 sub",
                         load(os.path.join(folder2, "texts/sub1/file1.txt")))
        self.assertNotIn("subdir2", os.listdir(os.path.join(folder2, "texts")))
Beispiel #4
0
 def package(self):
     copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
     autotools = Autotools(self)
     autotools.install()
     # TODO: replace by conan.tools.files.rm (conan 1.50.0)
     tools_legacy.remove_files_by_mask(os.path.join(self.package_folder, "lib"), "*.la")
     rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
     rmdir(self, os.path.join(self.package_folder, "share"))
Beispiel #5
0
 def package(self):
     copy(self, "COPYING", self.build_folder,
          os.path.join(self.package_folder, "licenses"))
     cmake = CMake(self)
     cmake.install()
     rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
     rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
     rmdir(self, os.path.join(self.package_folder, "share"))
Beispiel #6
0
 def package(self):
     copy(self,
          pattern="LICENSE",
          src=self.source_folder,
          dst=os.path.join(self.package_folder, "licenses"))
     copy(self,
          pattern="*.proto",
          src=self.source_folder,
          dst=os.path.join(self.package_folder, "res"))
Beispiel #7
0
 def package(self):
     copy(self,
          pattern="LICENSE",
          src=os.path.join(self.source_folder, self._source_subfolder),
          dst=os.path.join(self.package_folder, "licenses"))
     copy(self,
          pattern="*",
          src=os.path.join(self.source_folder, self._source_subfolder,
                           "src"),
          dst=os.path.join(self.package_folder, "include"))
Beispiel #8
0
    def test_multifolder(self):
        src_folder1 = temp_folder()
        src_folder2 = temp_folder()
        save(os.path.join(src_folder1, "file1.txt"), "hello1")
        save(os.path.join(src_folder2, "file2.txt"), "Hello2")

        dst_folder = temp_folder()
        copy(None, "*", src_folder1, dst_folder)
        copy(None, "*", src_folder2, dst_folder)
        self.assertEqual(['file1.txt', 'file2.txt'],
                         sorted(os.listdir(dst_folder)))
Beispiel #9
0
    def test_linked_relative(self):
        folder1 = temp_folder()
        sub1 = os.path.join(folder1, "foo/other/file")
        save(os.path.join(sub1, "file.txt"), "Hello")
        sub2 = os.path.join(folder1, "foo/symlink")
        os.symlink("other/file", sub2)  # @UndefinedVariable

        folder2 = temp_folder()
        copy(None, "*", folder1, folder2)
        symlink = os.path.join(folder2, "foo", "symlink")
        self.assertTrue(os.path.islink(symlink))
        self.assertTrue(load(os.path.join(symlink, "file.txt")), "Hello")
Beispiel #10
0
    def test_avoid_repeat_copies(self, copy2_mock):
        src_folders = [temp_folder() for _ in range(2)]
        for index, src_folder in enumerate(src_folders):
            save(os.path.join(src_folder, "sub", "file%d.txt" % index),
                 "Hello%d" % index)

        dst_folder = temp_folder()

        for src_folder in src_folders:
            copy(None, "*", os.path.join(src_folder, "sub"), dst_folder)

        self.assertEqual(copy2_mock.call_count, len(src_folders))
Beispiel #11
0
    def test_linked_folder_copy_from_linked_folder(self):
        # https://github.com/conan-io/conan/issues/5114
        folder1 = temp_folder(path_with_spaces=False)
        sub_src = os.path.join(folder1, "sub/src")

        src = os.path.join(folder1, "src")
        src_dir = os.path.join(folder1, "src/dir")
        src_dir_link = os.path.join(folder1, "src/dir_link")
        src_dir_file = os.path.join(src_dir, "file.txt")

        dst = os.path.join(folder1, "dst")
        dst_dir = os.path.join(folder1, "dst/dir")
        dst_dir_link = os.path.join(folder1, "dst/dir_link")
        dst_dir_file = os.path.join(dst_dir, "file.txt")

        os.makedirs(dst)
        os.makedirs(sub_src)
        # input src folder should be a symlink
        os.symlink(sub_src, src)
        # folder, file and folder link to copy
        os.mkdir(src_dir)
        save(src_dir_file, "file")
        os.symlink(src_dir, src_dir_link)

        copied = copy(None, "*", src, dst)

        self.assertEqual(copied, [dst_dir_file])
        self.assertEqual(os.listdir(dst), os.listdir(src))
        self.assertTrue(os.path.islink(dst_dir_link))
Beispiel #12
0
    def test_linked_folder_nested(self):
        # https://github.com/conan-io/conan/issues/2959
        folder1 = temp_folder()
        sub1 = os.path.join(folder1, "lib/icu/60.2")
        sub2 = os.path.join(folder1, "lib/icu/current")
        os.makedirs(sub1)
        os.symlink("60.2", sub2)  # @UndefinedVariable

        folder2 = temp_folder()
        copied = copy(None, "*.cpp", folder1, folder2)
        self.assertEqual(copied, [])
Beispiel #13
0
    def test_excludes(self):
        folder1 = temp_folder()
        sub1 = os.path.join(folder1, "subdir1")
        save(os.path.join(sub1, "file1.txt"), "hello1")
        save(os.path.join(sub1, "file2.c"), "Hello2")

        folder2 = temp_folder()
        copy(None,
             "*.*",
             folder1,
             os.path.join(folder2, "texts"),
             excludes="*.c")
        self.assertEqual(['file1.txt'],
                         os.listdir(os.path.join(folder2, "texts/subdir1")))

        folder1 = temp_folder()
        save(os.path.join(folder1, "MyLib.txt"), "")
        save(os.path.join(folder1, "MyLibImpl.txt"), "")
        save(os.path.join(folder1, "MyLibTests.txt"), "")
        folder2 = temp_folder()
        copy(None, "*.txt", folder1, folder2, excludes="*Test*.txt")
        self.assertEqual({'MyLib.txt', 'MyLibImpl.txt'},
                         set(os.listdir(folder2)))

        folder2 = temp_folder()
        copy(None,
             "*.txt",
             folder1,
             folder2,
             excludes=("*Test*.txt", "*Impl*"))
        self.assertEqual(['MyLib.txt'], os.listdir(folder2))
Beispiel #14
0
    def test_linked_folder_missing_error(self):
        folder1 = temp_folder()
        sub1 = os.path.join(folder1, "subdir1")
        sub2 = os.path.join(folder1, "subdir2")
        os.makedirs(sub1)
        os.symlink("subdir1", sub2)  # @UndefinedVariable
        save(os.path.join(sub1, "file1.txt"), "hello1")
        save(os.path.join(sub1, "file2.c"), "Hello2")
        save(os.path.join(sub1, "sub1/file1.txt"), "Hello1 sub")

        folder2 = temp_folder()
        copy(None, "*.cpp", folder1, folder2)
        # If we don't specify anything, the "subdir2" (symlinked folder) will be there even if it
        # points to an empty folder
        self.assertEqual(os.listdir(folder2), ["subdir2"])
        sub2_abs = os.path.join(folder2, "subdir2")
        assert os.path.islink(sub2_abs)
        assert os.readlink(sub2_abs) == "subdir1"

        # If we specify anything, the "subdir2" (symlinked folder) will be there even if it
        # points to an empty folder
        os.remove(sub2_abs)
        copy(None, "*.cpp", folder1, folder2, copy_symlink_folders=False)
        self.assertEqual(os.listdir(folder2), [])

        copy(None, "*.txt", folder1, folder2)
        self.assertEqual(sorted(os.listdir(folder2)),
                         sorted(["subdir1", "subdir2"]))
        self.assertEqual(os.readlink(os.path.join(folder2, "subdir2")),
                         "subdir1")
        self.assertEqual("hello1",
                         load(os.path.join(folder2, "subdir1/file1.txt")))
        self.assertEqual("hello1",
                         load(os.path.join(folder2, "subdir2/file1.txt")))
Beispiel #15
0
    def test_ignore_case_excludes(self):
        src_folder = temp_folder()
        save(os.path.join(src_folder, "file.h"), "")
        save(os.path.join(src_folder, "AttributeStorage.h"), "")
        save(os.path.join(src_folder, "sub/file.h"), "")
        save(os.path.join(src_folder, "sub/AttributeStorage.h"), "")

        dst_folder = temp_folder()
        # Exclude pattern will match AttributeStorage
        copy(None,
             "*.h",
             src_folder,
             os.path.join(dst_folder, "include"),
             excludes="*Test*")
        self.assertEqual(["include"], os.listdir(dst_folder))
        self.assertEqual(
            sorted(["file.h", "sub"]),
            sorted(os.listdir(os.path.join(dst_folder, "include"))))
        self.assertEqual(["file.h"],
                         os.listdir(os.path.join(dst_folder, "include",
                                                 "sub")))

        dst_folder = temp_folder()
        # Exclude pattern will not match AttributeStorage if ignore_case=False
        copy(None,
             "*.h",
             src_folder,
             os.path.join(dst_folder, "include"),
             excludes="*Test*",
             ignore_case=False)
        self.assertEqual(["include"], os.listdir(dst_folder))
        self.assertEqual(
            sorted(["AttributeStorage.h", "file.h", "sub"]),
            sorted(os.listdir(os.path.join(dst_folder, "include"))))
        self.assertEqual(
            sorted(["AttributeStorage.h", "file.h"]),
            sorted(os.listdir(os.path.join(dst_folder, "include", "sub"))))
Beispiel #16
0
    def test_linked_folder_copy_from_linked_folder(self):
        # https://github.com/conan-io/conan/issues/5114
        folder1 = temp_folder(path_with_spaces=False)
        sub_src = os.path.join(folder1, "sub/src")

        src = os.path.join(folder1, "src")
        src_dir = os.path.join(folder1, "src/dir")
        src_dir_link = os.path.join(folder1, "src/dir_link")
        src_dir_file = os.path.join(src_dir, "file.txt")

        dst = os.path.join(folder1, "dst")
        dst_dir = os.path.join(folder1, "dst/dir")
        dst_dir_link = os.path.join(folder1, "dst/dir_link")
        dst_dir_file = os.path.join(dst_dir, "file.txt")

        os.makedirs(dst)
        os.makedirs(sub_src)
        # input src folder should be a symlink
        os.symlink(sub_src, src)
        # folder, file and folder link to copy
        os.mkdir(src_dir)
        save(src_dir_file, "file")
        os.symlink(src_dir, src_dir_link)

        copied = copy(None, "dir/*", src, dst)

        # The pattern "dir/*" doesn't match to the symlink file "dir_link" so it is not copied
        self.assertEqual(copied, [dst_dir_file])
        self.assertFalse(os.path.exists(dst_dir_link))

        # This pattern "dir*" match both the symlink "dir_link" and the folder "dir/"
        copied = copy(None, "dir*", src, dst)

        self.assertEqual(copied, [dst_dir_file, dst_dir_link])
        self.assertEqual(os.listdir(dst), os.listdir(src))
        self.assertTrue(os.path.islink(dst_dir_link))
Beispiel #17
0
    def test_symlinks_folder_behavior(self):
        """
        https://github.com/conan-io/conan/issues/11150

        test.h
        inc/test2.h
        gen/test.bin
        sym/ => gen
        """

        build_folder = temp_folder()
        test = os.path.join(build_folder, "test.h")
        save(test, "")
        inc_folder = os.path.join(build_folder, "inc")
        mkdir(inc_folder)
        test2 = os.path.join(inc_folder, "test2.h")
        save(test2, "")
        gen_folder = os.path.join(build_folder, "gen")
        mkdir(gen_folder)
        bin = os.path.join(gen_folder, "test.bin")
        save(bin, "")
        sym_folder = os.path.join(build_folder, "sym")
        os.symlink(gen_folder, sym_folder)

        package_folder = temp_folder()
        # Pattern with the sym/*.bin won't work, "sym" is a file (symlink to folder), not a folder
        copy(None, "sym/*.bin", build_folder, package_folder)
        assert not os.path.exists(os.path.join(package_folder, "sym"))

        # Pattern searches in the "inc/" subfolder, "sym/" shouldn't be copied
        copy(None, "inc/*.h", build_folder, package_folder)
        assert not os.path.exists(os.path.join(package_folder, "sym")), \
            "The sym file shouldn't exist in package_folder"

        # Even if there is a test.bin "inside" the "sym/" (gen/), the "sym" file shouldn't be copied
        # because it is a file, the pattern has to match the file
        copy(None, "*.bin", build_folder, package_folder)
        assert not os.path.exists(os.path.join(package_folder, "sym")), \
            "The sym file shouldn't exist in package_folder"

        # If the pattern matches the "sym" file, it will be copied (as a symlink)
        copy(None, "s*", build_folder, package_folder)
        assert os.path.exists(os.path.join(package_folder, "sym"))
        assert os.path.islink(os.path.join(package_folder, "sym"))
    def _patch_sources(self):
        for patch in self.conan_data.get("patches", {}).get(self.version, []):
            tools.patch(**patch)

        # Copy status.proto (TODO: Other protos are used in the test suite)
        status_proto_dir = os.path.join(self._source_subfolder, "src", "proto",
                                        "grpc", "status")
        os.remove(os.path.join(status_proto_dir, "status.proto"))
        copy(self,
             "status.proto",
             src=os.path.join(
                 self.dependencies["googleapis"].cpp_info.resdirs[0], "google",
                 "rpc"),
             dst=status_proto_dir)

        if Version(self.version) >= "1.47":
            # Take googleapis from requirement instead of vendored/hardcoded version
            tools.replace_in_file(
                os.path.join(self._source_subfolder, "CMakeLists.txt"),
                "if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googleapis)",
                "if (FALSE)  # Do not download, it is provided by Conan")
            copy(self,
                 "*",
                 src=self.dependencies["googleapis"].cpp_info.resdirs[0],
                 dst=os.path.join(self._source_subfolder, "third_party",
                                  "googleapis"))

        # Copy from grpc-proto
        copy(self,
             "*",
             src=os.path.join(
                 self.dependencies["grpc-proto"].cpp_info.resdirs[0], "grpc"),
             dst=os.path.join(self._source_subfolder, "src", "proto", "grpc"))

        # We are fine with protobuf::protoc coming from conan generated Find/config file
        # TODO: to remove when moving to CMakeToolchain (see https://github.com/conan-io/conan/pull/10186)
        tools.replace_in_file(
            os.path.join(self._source_subfolder, "cmake", "protobuf.cmake"),
            "find_program(_gRPC_PROTOBUF_PROTOC_EXECUTABLE protoc)",
            "set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protobuf::protoc>)"
        )
        if tools.Version(self.version) >= "1.39.0" and tools.Version(
                self.version) < "1.42.0":
            # Bug introduced in https://github.com/grpc/grpc/pull/26148
            # Reverted in https://github.com/grpc/grpc/pull/27626
            tools.replace_in_file(
                os.path.join(self._source_subfolder, "CMakeLists.txt"),
                "if(gRPC_INSTALL AND NOT CMAKE_CROSSCOMPILING)",
                "if(gRPC_INSTALL)")
Beispiel #19
0
    def test_ignore_case(self):
        src_folder = temp_folder()
        save(os.path.join(src_folder, "FooBar.txt"), "Hello")

        dst_folder = temp_folder()
        copy(None, "foobar.txt", src_folder, dst_folder, ignore_case=False)
        self.assertEqual([], os.listdir(dst_folder))

        dst_folder = temp_folder()
        copy(None, "FooBar.txt", src_folder, dst_folder, ignore_case=False)
        self.assertEqual(["FooBar.txt"], os.listdir(dst_folder))

        dst_folder = temp_folder()
        copy(None, "foobar.txt", src_folder, dst_folder, ignore_case=True)
        self.assertEqual(["FooBar.txt"], os.listdir(dst_folder))
Beispiel #20
0
 def export_sources(self):
     for p in self.conan_data.get("patches", {}).get(self.version, []):
         copy(self, p["patch_file"], self.recipe_folder,
              self.export_sources_folder)
Beispiel #21
0
 def package(self):
     copy(self, "LICENSE", self.source_folder,
          os.path.join(self.package_folder, "licenses"))
     cmake = CMake(self)
     cmake.install()
Beispiel #22
0
    def package(self):
        copy(self,
             pattern="LICENSE",
             src=self.source_folder,
             dst=os.path.join(self.package_folder, "licenses"))
        copy(self,
             pattern="*.proto",
             src=self.source_folder,
             dst=os.path.join(self.package_folder, "res"))
        copy(self,
             pattern="*.pb.h",
             src=self.build_folder,
             dst=os.path.join(self.package_folder, "include"))

        copy(self,
             pattern="*.lib",
             src=self.build_folder,
             dst=os.path.join(self.package_folder, "lib"),
             keep_path=False)
        copy(self,
             pattern="*.dll",
             src=self.build_folder,
             dst=os.path.join(self.package_folder, "bin"),
             keep_path=False)
        copy(self,
             pattern="*.so*",
             src=self.build_folder,
             dst=os.path.join(self.package_folder, "lib"),
             keep_path=False)
        copy(self,
             pattern="*.dylib",
             src=self.build_folder,
             dst=os.path.join(self.package_folder, "lib"),
             keep_path=False)
        copy(self,
             pattern="*.a",
             src=self.build_folder,
             dst=os.path.join(self.package_folder, "lib"),
             keep_path=False)
Beispiel #23
0
 def export_sources(self):
     for p in self.conan_data.get("patches", {}).get(self.version, []):
         copy(self, p["patch_file"], self.recipe_folder,
              self.export_sources_folder)
     copy(self, "CMakeLists.txt", self.recipe_folder,
          os.path.join(self.export_sources_folder, self._source_subfolder))