Conan: Lib order in conanbuildinfo.props is generated randomly every time

Created on 18 Feb 2019  路  19Comments  路  Source: conan-io/conan

To help us debug your issue please explain:

  • [x] I've read the CONTRIBUTING guide.
  • [x] I've specified the Conan version, operating system version and any tool that can be relevant.
  • [x] I've explained the steps to reproduce the error or the motivation/use case of the question/suggestion.

I'm using conan-1.12.2 on Windows-10.

conanfile.py

from conans import ConanFile

class MyConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"

    requires = (
        "OpenSSL/1.0.2q@conan/stable",
        "boost/1.69.0@conan/stable",
        "cpprestsdk/2.10.10@bincrafters/stable",
        "libzip/1.5.1@bincrafters/stable",
        "zlib/1.2.11@conan/stable",
        "gsl_microsoft/2.0.0@bincrafters/stable",
    )

    generators = "visual_studio"

    default_options = (
        "libzip:shared=True",
        "zlib:shared=True"
    )

    def imports(self):
        self.copy("*.dll", "..\\..\\" + str(self.settings.build_type), "bin")

The order of libboost_math libs is different each time I run conan install. It is annoying when using source control tool.

-      <AdditionalDependencies>libboost_wave.lib;libboost_contract.lib;libboost_graph.lib;libboost_iostreams.lib;libboost_log.lib;libboost_program_options.lib;libboost_serialization.lib;libboost_wserialization.lib;libboost_fiber.lib;libboost_timer.lib;libboost_type_erasure.lib;libboost_log_setup.lib;libboost_stacktrace_noop.lib;libboost_stacktrace_windbg.lib;libboost_stacktrace_windbg_cached.lib;libboost_unit_test_framework.lib;cpprest140_2_10.lib;winhttp.lib;httpapi.lib;bcrypt.lib;zip.lib;ssleay32.lib;libeay32.lib;crypt32.lib;msi.lib;ws2_32.lib;libboost_random.lib;libboost_date_time.lib;libboost_coroutine.lib;libboost_context.lib;libboost_thread.lib;zlib.lib;bz2.lib;libboost_filesystem.lib;libboost_chrono.lib;libboost_locale.lib;libboost_math_c99l.lib;libboost_math_c99f.lib;libboost_math_tr1l.lib;libboost_math_tr1.lib;libboost_math_tr1f.lib;libboost_math_c99.lib;liblzma.lib;zstd_static.lib;libboost_system.lib;libboost_atomic.lib;libboost_regex.lib;libboost_exception.lib;libboost_container.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>libboost_wave.lib;libboost_contract.lib;libboost_graph.lib;libboost_iostreams.lib;libboost_log.lib;libboost_program_options.lib;libboost_serialization.lib;libboost_wserialization.lib;libboost_fiber.lib;libboost_timer.lib;libboost_type_erasure.lib;libboost_log_setup.lib;libboost_stacktrace_noop.lib;libboost_stacktrace_windbg.lib;libboost_stacktrace_windbg_cached.lib;libboost_unit_test_framework.lib;cpprest140_2_10.lib;winhttp.lib;httpapi.lib;bcrypt.lib;zip.lib;ssleay32.lib;libeay32.lib;crypt32.lib;msi.lib;ws2_32.lib;libboost_random.lib;libboost_date_time.lib;libboost_coroutine.lib;libboost_context.lib;libboost_thread.lib;zlib.lib;bz2.lib;libboost_filesystem.lib;libboost_chrono.lib;libboost_locale.lib;libboost_math_c99f.lib;libboost_math_c99l.lib;libboost_math_tr1f.lib;libboost_math_tr1l.lib;libboost_math_c99.lib;libboost_math_tr1.lib;liblzma.lib;zstd_static.lib;libboost_system.lib;libboost_atomic.lib;libboost_regex.lib;libboost_exception.lib;libboost_container.lib;%(AdditionalDependencies)</AdditionalDependencies>

low Build medium bug

Most helpful comment

I'm ok ordering the list of collect_libs().

All 19 comments

Hi @sinall

Thanks for reporting this issue.

It seems that this is mostly a boost package issue, not a conan issue, but I would discuss here and wait for feedback:

  • The boost package is using tools.collect_libs(), which internally uses files = os.listdir(lib_folder), which file order is not guaranteed.
  • The boost package is later iterating like this:
        gen_libs = tools.collect_libs(self)

        # List of lists, so if more than one matches the lib like serialization and wserialization
        # both will be added to the list
        ordered_libs = [[] for _ in range(len(lib_list))]

        # The order is important, reorder following the lib_list order
        missing_order_info = []
        for real_lib_name in gen_libs:
            for pos, alib in enumerate(lib_list):
                if os.path.splitext(real_lib_name)[0].split("-")[0].endswith(alib):
                    ordered_libs[pos].append(real_lib_name)
                    break

Possible fixes:

  • Change the boost recipe and make it use the same order always.
  • Fix the tools.collect_libs() to do a sort(os.listdir()) while iterating, to force it to return always the same order.

Will discuss with @lasote

I'm ok ordering the list of collect_libs().

Perfect, yes, I agree, having a deterministic collect_libs() make sense.

Implemented, will be released in Conan 1.14

@memsharded I have installed Conan 1.14, but the issue still exists.
Is there any guide to resolve this issue?

Hi @sinall

This is really weird, now the output of collect_libs is sorted, so it should be deterministic. It is tested in the test suite.

Could you please provide more data to reproduce it? Besides your OS which is Windows 10, which python version are you using? How did you install Conan? Could you please double check that you don't have another Conan version in the python that might be executing (conan --version)?

BTW, something that I noticed, is that the issue was because of source control. The thing is that conanbuildinfo.props shouldn't be put under source control, because it can change for every user of the code, that might have the conan cache in a different place. Whenever possible, it will be the same, using %USERPROFILE% variables, but it the cache is somewhere else, it might not work, please take that into account.

@memsharded

conanfile.py

from conans import ConanFile

class MyConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"

    requires = (
        "OpenSSL/1.0.2q@conan/stable",
        "boost/1.69.0@conan/stable",
        "cpprestsdk/2.10.10@bincrafters/stable",
        "libzip/1.5.1@bincrafters/stable",
        "zlib/1.2.11@conan/stable",
        "gsl_microsoft/2.0.0@bincrafters/stable",
    )

    generators = "visual_studio"

    default_options = (
        "libzip:shared=True",
        "zlib:shared=True"
    )

    def imports(self):
        self.copy("*.dll", "..\\..\\" + str(self.settings.build_type), "bin")

PS D:\Documents\Visual_Studio_2015\Projects\App> python --version
Python 3.5.5 :: Anaconda custom (64-bit)
PS D:\Documents\Visual_Studio_2015\Projects\App> conan --version
WARN: Migration: Updating settings.yml
WARN: ****************************************
WARN: settings.yml is locally modified, can't be updated
WARN: The new settings.yml has been stored in: C:\Users\Administrator\.conan\settings.yml.new
WARN: ****************************************
WARN: Migration: Generating missing metadata files
Migration: Generating missing metadata files finished OK!

Conan version 1.14.0
git diff conaninfo/Debug/conanbuildinfo.props
-      <AdditionalDependencies>cpprest140_2_10d.lib;winhttp.lib;httpapi.lib;zip.lib;wbemuuid.lib;libboost_wave.lib;libboost_contract.lib;libboost_graph.lib;libboost_iostreams.lib;libboost_log.lib;libboost_program_options.lib;libboost_serialization.lib;libboost_wserialization.lib;libboost_fiber.lib;libboost_timer.lib;libboost_type_erasure.lib;libboost_log_setup.lib;libboost_stacktrace_noop.lib;libboost_stacktrace_windbg.lib;libboost_stacktrace_windbg_cached.lib;libboost_unit_test_framework.lib;bcrypt.lib;ssleay32.lib;libeay32.lib;crypt32.lib;msi.lib;ws2_32.lib;libboost_random.lib;libboost_date_time.lib;libboost_coroutine.lib;libboost_context.lib;libboost_thread.lib;zlibd.lib;bz2.lib;libboost_filesystem.lib;libboost_chrono.lib;libboost_locale.lib;libboost_math_c99.lib;libboost_math_c99f.lib;libboost_math_c99l.lib;libboost_math_tr1.lib;libboost_math_tr1f.lib;libboost_math_tr1l.lib;liblzma.lib;zstd_static.lib;libboost_system.lib;libboost_atomic.lib;libboost_regex.lib;libboost_exception.lib;libboost_container.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>cpprest140_2_10d.lib;winhttp.lib;httpapi.lib;zip.lib;wbemuuid.lib;libboost_wave.lib;libboost_contract.lib;libboost_graph.lib;libboost_iostreams.lib;libboost_log.lib;libboost_program_options.lib;libboost_serialization.lib;libboost_wserialization.lib;libboost_fiber.lib;libboost_timer.lib;libboost_type_erasure.lib;libboost_log_setup.lib;libboost_stacktrace_noop.lib;libboost_stacktrace_windbg.lib;libboost_stacktrace_windbg_cached.lib;libboost_unit_test_framework.lib;bcrypt.lib;ssleay32.lib;libeay32.lib;crypt32.lib;msi.lib;ws2_32.lib;libboost_random.lib;libboost_coroutine.lib;libboost_date_time.lib;libboost_context.lib;libboost_thread.lib;zlibd.lib;bz2.lib;libboost_chrono.lib;libboost_filesystem.lib;libboost_locale.lib;libboost_math_c99f.lib;libboost_math_tr1f.lib;libboost_math_c99l.lib;libboost_math_c99.lib;libboost_math_tr1.lib;libboost_math_tr1l.lib;liblzma.lib;zstd_static.lib;libboost_system.lib;libboost_atomic.lib;libboost_exception.lib;libboost_regex.lib;libboost_container.lib;%(AdditionalDependencies)</AdditionalDependencies>

The 'libboost_math' libs in the updated conanbuildinfo.props is not sorted.

Thanks for the feedback.

I have just realized what the issue is. The issue is not generated by tools.collect_libs() (though it was real that it was not deterministic enough), but from a different reason.

I am afraid you are hitting a problem by pulling 2 different versions of boost, you are using the modular boost from bincrafters, transitively from cpprestsdk, and the monolithic boost that is in conan-center. This can't be done, as both boost can be version incompatible, but they do not conflict because they have different names.

You'd need to decide which boost do you want to use, and then follow that. If you are going with the monolithic boost you have explicitly declared, you'd need to adapt (to fork) the cpprestsdk to use that boost.

Even if using the modular boost, the result shouldn't vary from consecutive installs. Was that the diff between different conan installs (both using Conan 1.14)? Or was it the result of Conan 1.14 with the previous stored version with a previous Conan version? Because if it is the latter, it makes sense, as the previous version was not deterministic.

The diff is between Conan 1.12 and Conan 1.14 (maybe 1.13 above).
Even with 1.12 they are not sorted, I manually modified the order before.

I will use monolithic boost. I have already declared it in conanfile.py. I thought Conan could resolve the conflict and manage the dependencies for me.

The diff is between Conan 1.12 and Conan 1.14 (maybe 1.13 above).
Even with 1.12 they are not sorted, I manually modified the order before.

Yes, they are not sorted, they will never be. Only from Conan 1.14 and newer, the output will be deterministic. It doesn't make sense to compare with previous Conan versions, but from Conan 1.14 and newer only.

Also, please take the above comment into account: it is not recommended to put the conanbuildinfo.props file in source control. It is a temporary file that should be generated in the user machine, not intended to be reused in different machines, as it might contain absolute paths.

I will use monolithic boost. I have already declared it in conanfile.py. I thought Conan could resolve the conflict and manage the dependencies for me.

That is the thing, Conan is not aware that the modular packages from bincrafters are packaging the same. If you decide to create a package for zlib, that is called "MyZCompression", conan doesn't have a way to know that it will collide with the zlib package. If the packages don't have the same name, they don't collide, and the modular boost packages have different names.

@memsharded I will consider ignoring conanbuildinfo.props. Since different branches may have different conanfile.py, I will regenerate those temp files once I switch to a different branch.
So what I really need to add into source control is 'conanfile.py', right?

On the other hand, I still expect Conan could generate deterministic <AdditionalDependencies> for the above conanfile.py.

So what I really need to add into source control is 'conanfile.py', right?

Yes, exactly. The conanfiles should be in source control. You also want to put in source control other things, like the profiles, or custom configuration (that you can install with conan config install)

On the other hand, I still expect Conan could generate deterministic for the above conanfile.py.

Yes, totally. From now on (versions Conan 1.14 and newer), Conan should generate always the same order for the <AdditionalDependencies>. It was previous versions that lacked that determinism.

@memsharded If I have only boost in requires, then they are sorted. But for above conanfile.py, <AdditionalDependencies> generated by Conan 1.14 is not sorted on my computer. Could you please have a try?

Hi @sinall

I have just tried again, with exactly your conanfile.py above. I add the conanbuildinfo.props to my source control, and do consecutive calls to conan install, with Conan 1.14. The result is always deterministic, it doesn't change.

Regarding the order, you should know that there are 2 orders:

  • the order of libraries defined within each package, and if a package contains more than one library, then the order is defined by the order declared in package_info() in self.cpp_info.libs. If you define it explicitly in a list, it will use that order. From conan 1.14 collect_libs will produce a sorted order.
  • the order of packages within the graph. In this case, the order is defined by the graph, according to graph levels (number of dependencies above), and between levels, by the order requires are defined in recipes.

In either case, from now the result is deterministic, and ordered according to the macro scale (graph) first, and by micro scale (libs within a package) second.

@memsharded libboost_math related libs change order every time with Conan 1.14.1 on my computer, is it because I use previously installed boost? You mentioned:

It seems that this is mostly a boost package issue, not a conan issue, but I would discuss here and wait for feedback:

In that case, how can I re-download and install boost?

Just tried to conan remove "boost/1.69.0@conan/stable", and re-install it again.
It still generate unsorted <AdditionalDependencies> every time.

PS D:\Documents\Visual_Studio_2015\Projects\ConanTest2> conan --version
Conan version 1.14.1
PS D:\Documents\Visual_Studio_2015\Projects\ConanTest2> git diff conaninfo/Debug/conanbuildinfo.props
diff --git a/conaninfo/Debug/conanbuildinfo.props b/conaninfo/Debug/conanbuildinfo.props
index 11c9061..6a2b112 100644
--- a/conaninfo/Debug/conanbuildinfo.props
+++ b/conaninfo/Debug/conanbuildinfo.props
@@ -95,7 +95,7 @@
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>D:/.conan/060347/1/lib;D:/.conan/d5dcfe/1/lib;D:/.conan/data/libzip/1.5.1/bincrafte
rs/stable/package/3b2d343bfedc571aeac400a58bde6ad445a22446/lib;D:/.conan/data/websocketpp/0.7.0/bincrafters/stable/packa
ge/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/lib;D:/.conan/data/OpenSSL/1.0.2q/conan/stable/package/905af0349b2753e6dc595
39d1317f5af5de9dba9/lib;D:/.conan/a391b1/1/asio/lib;D:/.conan/acb686/1/coroutine/lib;D:/.conan/958977/1/context/lib;D:/.
conan/48b596/1/date_time/lib;D:/.conan/48b596/1/dynamic_bitset/lib;D:/.conan/48b596/1/iostreams/lib;D:/.conan/48b596/1/m
ultiprecision/lib;D:/.conan/48b596/1/random/lib;D:/.conan/48b596/1/serialization/lib;D:/.conan/48b596/1/spirit/lib;D:/.c
onan/48b596/1/thread/lib;D:/.conan/data/zlib/1.2.11/conan/stable/package/80166202f625101565fba7a537eb34961fbcaf89/lib;D:
/.conan/data/bzip2/1.0.6/conan/stable/package/ed382184232e3773ca604a5ef301b5d4c04bd866/lib;D:/.conan/49c082/1/chrono/lib
;D:/.conan/68f0df/1/endian/lib;D:/.conan/b13e7a/1/filesystem/lib;D:/.conan/3a306a/1/foreach/lib;D:/.conan/e2381f/1/local
e/lib;D:/.conan/0745d5/1/phoenix/lib;D:/.conan/523de6/1/pool/lib;D:/.conan/e65077/1/tokenizer/lib;D:/.conan/c26aae/1/tti
/lib;D:/.conan/16042b/1/variant/lib;D:/.conan/data/lzma/5.2.4/bincrafters/stable/package/a8aed829304fe5cc95659bc2d44fa16
28511899a/lib;D:/.conan/data/zstd/1.3.5/bincrafters/stable/package/a8aed829304fe5cc95659bc2d44fa1628511899a/lib;D:/.cona
n/7bba52/1/ratio/lib;D:/.conan/1fb3d2/1/system/lib;D:/.conan/4dd529/1/io/lib;D:/.conan/ead9fa/1/lexical_cast/lib;D:/.con
an/ead9fa/1/math/lib;D:/.conan/e173bd/1/proto/lib;D:/.conan/0e986d/1/atomic/lib;D:/.conan/287a23/1/rational/lib;D:/.cona
n/7df410/1/winapi/lib;D:/.conan/8df570/1/lambda/lib;D:/.conan/bb8cc6/1/algorithm/lib;D:/.conan/bb8cc6/1/range/lib;D:/.co
nan/49b8b3/1/array/lib;D:/.conan/fef55c/1/exception/lib;D:/.conan/affc08/1/function/lib;D:/.conan/eae6dd/1/numeric_conve
rsion/lib;D:/.conan/ddd774/1/regex/lib;D:/.conan/67ab8e/1/unordered/lib;D:/.conan/1d5e1f/1/bind/lib;D:/.conan/9bd617/1/t
ype_index/lib;D:/.conan/275c88/1/iterator/lib;D:/.conan/886f5a/1/container/lib;D:/.conan/2abfc1/1/concept_check/lib;D:/.
conan/483f18/1/conversion/lib;D:/.conan/53fe7b/1/fusion/lib;D:/.conan/15980a/1/optional/lib;D:/.conan/4da81e/1/intrusive
/lib;D:/.conan/205753/1/smart_ptr/lib;D:/.conan/e0a42f/1/tuple/lib;D:/.conan/a50c06/1/typeof/lib;D:/.conan/5b9b9d/1/func
tion_types/lib;D:/.conan/cb5616/1/move/lib;D:/.conan/d5ef0d/1/mpl/lib;D:/.conan/23e736/1/predef/lib;D:/.conan/8d3fd3/1/u
tility/lib;D:/.conan/4417b1/1/throw_exception/lib;D:/.conan/600597/1/container_hash/lib;D:/.conan/da0a74/1/detail/lib;D:
/.conan/cb9569/1/integer/lib;D:/.conan/38491a/1/core/lib;D:/.conan/a7c6bf/1/preprocessor/lib;D:/.conan/e742fa/1/type_tra
its/lib;D:/.conan/87a1fa/1/assert/lib;D:/.conan/d7119c/1/static_assert/lib;D:/.conan/16fe35/1/config/lib;%(AdditionalLib
raryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>libboost_wave.lib;libboost_contract.lib;libboost_graph.lib;libboost_iostreams.lib;libboos
t_log.lib;libboost_program_options.lib;libboost_serialization.lib;libboost_wserialization.lib;libboost_fiber.lib;libboos
t_timer.lib;libboost_type_erasure.lib;libboost_log_setup.lib;libboost_stacktrace_noop.lib;libboost_stacktrace_windbg.lib
;libboost_stacktrace_windbg_cached.lib;libboost_unit_test_framework.lib;cpprest140_2_10d.lib;winhttp.lib;httpapi.lib;bcr
ypt.lib;zip.lib;ssleay32.lib;libeay32.lib;crypt32.lib;msi.lib;ws2_32.lib;libboost_random.lib;libboost_coroutine.lib;libb
oost_date_time.lib;libboost_context.lib;libboost_thread.lib;zlibd.lib;bz2.lib;libboost_chrono.lib;libboost_filesystem.li
b;libboost_locale.lib;libboost_math_c99l.lib;libboost_math_tr1f.lib;libboost_math_c99.lib;libboost_math_tr1l.lib;libboos
t_math_c99f.lib;libboost_math_tr1.lib;liblzma.lib;zstd_static.lib;libboost_system.lib;libboost_atomic.lib;libboost_excep
tion.lib;libboost_regex.lib;libboost_container.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>libboost_wave.lib;libboost_contract.lib;libboost_graph.lib;libboost_iostreams.lib;libboos
t_log.lib;libboost_program_options.lib;libboost_serialization.lib;libboost_wserialization.lib;libboost_fiber.lib;libboos
t_timer.lib;libboost_type_erasure.lib;libboost_log_setup.lib;libboost_stacktrace_noop.lib;libboost_stacktrace_windbg.lib
;libboost_stacktrace_windbg_cached.lib;libboost_unit_test_framework.lib;cpprest140_2_10d.lib;winhttp.lib;httpapi.lib;bcr
ypt.lib;zip.lib;ssleay32.lib;libeay32.lib;crypt32.lib;msi.lib;ws2_32.lib;libboost_random.lib;libboost_coroutine.lib;libb
oost_date_time.lib;libboost_context.lib;libboost_thread.lib;zlibd.lib;bz2.lib;libboost_chrono.lib;libboost_filesystem.li
b;libboost_locale.lib;libboost_math_tr1l.lib;libboost_math_tr1f.lib;libboost_math_c99l.lib;libboost_math_c99f.lib;libboo
st_math_tr1.lib;libboost_math_c99.lib;liblzma.lib;zstd_static.lib;libboost_system.lib;libboost_atomic.lib;libboost_excep
tion.lib;libboost_regex.lib;libboost_container.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
     </Link>
     <Midl>
PS D:\Documents\Visual_Studio_2015\Projects\ConanTest2> git diff
diff --git a/conaninfo/Debug/conanbuildinfo.props b/conaninfo/Debug/conanbuildinfo.props
index 11c9061..6a2b112 100644
--- a/conaninfo/Debug/conanbuildinfo.props
+++ b/conaninfo/Debug/conanbuildinfo.props
@@ -95,7 +95,7 @@
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>D:/.conan/060347/1/lib;D:/.conan/d5dcfe/1/lib;D:/.conan/data/libzip/1.5.1/bincrafte
rs/stable/package/3b2d343bfedc571aeac400a58bde6ad445a22446/lib;D:/.conan/data/websocketpp/0.7.0/bincrafters/stable/packa
ge/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/lib;D:/.conan/data/OpenSSL/1.0.2q/conan/stable/package/905af0349b2753e6dc595
39d1317f5af5de9dba9/lib;D:/.conan/a391b1/1/asio/lib;D:/.conan/acb686/1/coroutine/lib;D:/.conan/958977/1/context/lib;D:/.
conan/48b596/1/date_time/lib;D:/.conan/48b596/1/dynamic_bitset/lib;D:/.conan/48b596/1/iostreams/lib;D:/.conan/48b596/1/m
ultiprecision/lib;D:/.conan/48b596/1/random/lib;D:/.conan/48b596/1/serialization/lib;D:/.conan/48b596/1/spirit/lib;D:/.c
onan/48b596/1/thread/lib;D:/.conan/data/zlib/1.2.11/conan/stable/package/80166202f625101565fba7a537eb34961fbcaf89/lib;D:
/.conan/data/bzip2/1.0.6/conan/stable/package/ed382184232e3773ca604a5ef301b5d4c04bd866/lib;D:/.conan/49c082/1/chrono/lib
;D:/.conan/68f0df/1/endian/lib;D:/.conan/b13e7a/1/filesystem/lib;D:/.conan/3a306a/1/foreach/lib;D:/.conan/e2381f/1/local
e/lib;D:/.conan/0745d5/1/phoenix/lib;D:/.conan/523de6/1/pool/lib;D:/.conan/e65077/1/tokenizer/lib;D:/.conan/c26aae/1/tti
/lib;D:/.conan/16042b/1/variant/lib;D:/.conan/data/lzma/5.2.4/bincrafters/stable/package/a8aed829304fe5cc95659bc2d44fa16
28511899a/lib;D:/.conan/data/zstd/1.3.5/bincrafters/stable/package/a8aed829304fe5cc95659bc2d44fa1628511899a/lib;D:/.cona
n/7bba52/1/ratio/lib;D:/.conan/1fb3d2/1/system/lib;D:/.conan/4dd529/1/io/lib;D:/.conan/ead9fa/1/lexical_cast/lib;D:/.con
an/ead9fa/1/math/lib;D:/.conan/e173bd/1/proto/lib;D:/.conan/0e986d/1/atomic/lib;D:/.conan/287a23/1/rational/lib;D:/.cona
n/7df410/1/winapi/lib;D:/.conan/8df570/1/lambda/lib;D:/.conan/bb8cc6/1/algorithm/lib;D:/.conan/bb8cc6/1/range/lib;D:/.co
nan/49b8b3/1/array/lib;D:/.conan/fef55c/1/exception/lib;D:/.conan/affc08/1/function/lib;D:/.conan/eae6dd/1/numeric_conve
rsion/lib;D:/.conan/ddd774/1/regex/lib;D:/.conan/67ab8e/1/unordered/lib;D:/.conan/1d5e1f/1/bind/lib;D:/.conan/9bd617/1/t
ype_index/lib;D:/.conan/275c88/1/iterator/lib;D:/.conan/886f5a/1/container/lib;D:/.conan/2abfc1/1/concept_check/lib;D:/.
conan/483f18/1/conversion/lib;D:/.conan/53fe7b/1/fusion/lib;D:/.conan/15980a/1/optional/lib;D:/.conan/4da81e/1/intrusive
/lib;D:/.conan/205753/1/smart_ptr/lib;D:/.conan/e0a42f/1/tuple/lib;D:/.conan/a50c06/1/typeof/lib;D:/.conan/5b9b9d/1/func
tion_types/lib;D:/.conan/cb5616/1/move/lib;D:/.conan/d5ef0d/1/mpl/lib;D:/.conan/23e736/1/predef/lib;D:/.conan/8d3fd3/1/u
tility/lib;D:/.conan/4417b1/1/throw_exception/lib;D:/.conan/600597/1/container_hash/lib;D:/.conan/da0a74/1/detail/lib;D:
/.conan/cb9569/1/integer/lib;D:/.conan/38491a/1/core/lib;D:/.conan/a7c6bf/1/preprocessor/lib;D:/.conan/e742fa/1/type_tra
its/lib;D:/.conan/87a1fa/1/assert/lib;D:/.conan/d7119c/1/static_assert/lib;D:/.conan/16fe35/1/config/lib;%(AdditionalLib
raryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>libboost_wave.lib;libboost_contract.lib;libboost_graph.lib;libboost_iostreams.lib;libboos
t_log.lib;libboost_program_options.lib;libboost_serialization.lib;libboost_wserialization.lib;libboost_fiber.lib;libboos
t_timer.lib;libboost_type_erasure.lib;libboost_log_setup.lib;libboost_stacktrace_noop.lib;libboost_stacktrace_windbg.lib
;libboost_stacktrace_windbg_cached.lib;libboost_unit_test_framework.lib;cpprest140_2_10d.lib;winhttp.lib;httpapi.lib;bcr
ypt.lib;zip.lib;ssleay32.lib;libeay32.lib;crypt32.lib;msi.lib;ws2_32.lib;libboost_random.lib;libboost_coroutine.lib;libb
oost_date_time.lib;libboost_context.lib;libboost_thread.lib;zlibd.lib;bz2.lib;libboost_chrono.lib;libboost_filesystem.li
b;libboost_locale.lib;libboost_math_c99l.lib;libboost_math_tr1f.lib;libboost_math_c99.lib;libboost_math_tr1l.lib;libboos
t_math_c99f.lib;libboost_math_tr1.lib;liblzma.lib;zstd_static.lib;libboost_system.lib;libboost_atomic.lib;libboost_excep
tion.lib;libboost_regex.lib;libboost_container.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>libboost_wave.lib;libboost_contract.lib;libboost_graph.lib;libboost_iostreams.lib;libboos
t_log.lib;libboost_program_options.lib;libboost_serialization.lib;libboost_wserialization.lib;libboost_fiber.lib;libboos
t_timer.lib;libboost_type_erasure.lib;libboost_log_setup.lib;libboost_stacktrace_noop.lib;libboost_stacktrace_windbg.lib
;libboost_stacktrace_windbg_cached.lib;libboost_unit_test_framework.lib;cpprest140_2_10d.lib;winhttp.lib;httpapi.lib;bcr
ypt.lib;zip.lib;ssleay32.lib;libeay32.lib;crypt32.lib;msi.lib;ws2_32.lib;libboost_random.lib;libboost_coroutine.lib;libb
oost_date_time.lib;libboost_context.lib;libboost_thread.lib;zlibd.lib;bz2.lib;libboost_chrono.lib;libboost_filesystem.li
b;libboost_locale.lib;libboost_math_tr1l.lib;libboost_math_tr1f.lib;libboost_math_c99l.lib;libboost_math_c99f.lib;libboo
st_math_tr1.lib;libboost_math_c99.lib;liblzma.lib;zstd_static.lib;libboost_system.lib;libboost_atomic.lib;libboost_excep
tion.lib;libboost_regex.lib;libboost_container.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
     </Link>
     <Midl>
diff --git a/conaninfo/Debug/conanbuildinfo.txt b/conaninfo/Debug/conanbuildinfo.txt
index d99b63a..e39dcf5 100644
--- a/conaninfo/Debug/conanbuildinfo.txt
+++ b/conaninfo/Debug/conanbuildinfo.txt
@@ -340,12 +340,12 @@ bz2
 libboost_chrono
 libboost_filesystem
 libboost_locale
-libboost_math_c99l
-libboost_math_tr1f
-libboost_math_c99
 libboost_math_tr1l
+libboost_math_tr1f
+libboost_math_c99l
 libboost_math_c99f
 libboost_math_tr1
+libboost_math_c99
 liblzma
 zstd_static
 libboost_system
@@ -1457,12 +1457,12 @@ D:/.conan/ead9fa/1/math/lib
 D:/.conan/9d09df/1/

 [libs_boost_math]
-libboost_math_c99l
-libboost_math_tr1f
-libboost_math_c99
 libboost_math_tr1l
+libboost_math_tr1f
+libboost_math_c99l
 libboost_math_c99f
 libboost_math_tr1
+libboost_math_c99

 [defines_boost_math]
 BOOST_ALL_NO_LIB=1
(END)

Can't reproduce here.

My output is always the same:

[libs_boost_math]
libboost_math_c99
libboost_math_tr1
libboost_math_c99f
libboost_math_tr1f
libboost_math_c99l
libboost_math_tr1l

I'll try to come up with a script so we can both test it exactly the same way.

OK.

Should it be?

[libs_boost_math]
libboost_math_c99
libboost_math_c99f
libboost_math_c99l
libboost_math_tr1
libboost_math_tr1f
libboost_math_tr1l

@memsharded Any findings? Previously, if I have only boost in conanfile.py, then it generates libs in order. So I guess there's something wrong.

Was this page helpful?
0 / 5 - 0 ratings