conan-package-tools icon indicating copy to clipboard operation
conan-package-tools copied to clipboard

No shared option name result in weird behavior

Open uilianries opened this issue 6 years ago • 1 comments

Hi!

@solvingj related an error during boost-date_time job on Travis CI.

The reported error is about a package not found (boost_base).

Actually we have a problem with remotes list, where bincrafters wasn't add into the list.

All things happen on load_cf_class. When in method is called, all build is started.

There is a condition saying to call if shared_option_name is not defined. Indeed is not defined to conan-date_time but it there are many dependencies.

@lasote could you explain what should happen in that piece of code? It looks a bug but I could be wrong.

uilianries avatar Oct 02 '18 19:10 uilianries

IMHO this method does the following: shared_option_name is None means default behavior that is to load recipe's ConanFile and look if its options contain attribute shared. If they do, set shared_option_name to <package>:shared.

This approach is not very correct. Say, I have a recipe:

class TestConan(ConanFile)
    options = {"shared": [True, False]}

    def config_options(self):
        if self.settings.os == "Windows":
            del self.options.shared

Under Windows add_common_builds() will still find shared attribute by default. So we need at least configure_options() call before checking the attribute presence. But even that is not enough. Consider:

class TestConan(ConanFile)
    options = {"shared": [True, False]}

    def config_options(self):
        if not self.options.shared and self.settings.os == "Windows":
            raise Exception("Only pkg:shared=True is supported on Windows")

How to detect that inside add_common_builds()? I have no idea.

db4 avatar Oct 04 '18 11:10 db4