Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix deduction of architecture and address-model #879

Merged
merged 1 commit into from
Apr 18, 2024

Conversation

grisumbras
Copy link
Member

@pdimov
Copy link
Member

pdimov commented Apr 2, 2024

Should be against develop.

@grisumbras grisumbras changed the base branch from master to develop April 2, 2024 15:51
@grisumbras
Copy link
Member Author

My understanding of what happened is this: originally conditional properties were evaluated only once, and so the composed features deduced-architecture/address-model were expanded, but ignored due to already present architecture/address-model in the property set. But now conditional properties are evaluated continously, so the composed feaure never goes away, and that somehow confuses the process of constructing the final property set.

@pdimov pdimov merged commit a2003c7 into boostorg:develop Apr 18, 2024
22 checks passed
@pdimov
Copy link
Member

pdimov commented Apr 18, 2024

@anarthal please test whether this change fixes things.

@anarthal
Copy link

This still fails - now differently: https://drone.cpp.al/boostorg/mysql/647/18/3
Looks like something's using a deprecated check in predef.

@grisumbras
Copy link
Member Author

error: This module (predef/check/predef.jam) is OBSOLETE. Use predef/tools/check/predef.jam instead.

I don't think this is a problem with address model deduction

@grisumbras
Copy link
Member Author

Actually, I think predef was not the issue, and this is the problem:

OpenSSL could not be found. Don't build target fail_if_no_openssl to skip this check

I suspect, you don't have 32bit OpenSSL installed.

@grisumbras
Copy link
Member Author

    - ssl                      : no
    - default address-model    : 64-bit (cached) [1]
    - default architecture     : x86 (cached) [1]
    - symlinks supported       : yes (cached)
    - ssl                      : no [2]
    - BOOST_COMP_GNUC >= 4.3.0 : no [3]
    - ssl                      : no  (cached) [2]

There's a file in build directory (in Boost it's BOOST_ROOT/bin.v2 by default) called config.log. That file contains output of the build commands that ac module uses to check availability of libraries. But it only shows the output from the most recent invocation of b2. It may contain more useful information.

@anarthal
Copy link

This is not the case, as everything passes if I re enable the explicit architecture feature specification. I implemented the explicit check I'm referring to to make inherently flawed builds like this fail instead of silently succeed ignoring my targets.

Does going through the reproduction steps described in bfgroup/b2#368 work?

@anarthal
Copy link

I'm not in my PC right now, when I have the time I'll try to post the config log here.

@anarthal
Copy link

This is config.log:

root@373b7047b37f:~/boost-root# cat bin.v2/config.log 
...found 1 target...
...found 15 targets...
...updating 12 targets...
clang-linux.compile.c++ bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/openssl/ssl_h.o
In file included from bin.v2/standalone/ac/openssl/ssl_h.cpp:1:
In file included from /usr/include/openssl/ssl.h:21:
/usr/include/openssl/macros.h:14:10: fatal error: 'openssl/opensslconf.h' file not found
#include <openssl/opensslconf.h>
         ^~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

    "clang++"   -std=c++20 -fvisibility-inlines-hidden -fPIC -pthread -O0 -fno-inline -Wall -Wextra -Werror -g -fvisibility=hidden       -c -o "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/openssl/ssl_h.o" "bin.v2/standalone/ac/openssl/ssl_h.cpp"

...failed clang-linux.compile.c++ bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/openssl/ssl_h.o...

...updated 11 targets...

...failed updating 1 target...
   clang-linux.compile.c++ bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/openssl/ssl_h.o
...found 5 targets...
...updating 3 targets...
clang-linux.compile.c++ bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/main-ssl.o
clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/ssl
/usr/bin/ld: cannot find -lssl: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)

    "clang++"    -o "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/ssl" -Wl,--start-group "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/main-ssl.o"  -Wl,-Bstatic  -Wl,-Bdynamic -lrt -lssl -Wl,--end-group -fPIC -pthread -std=c++20 -g -fvisibility=hidden -fvisibility-inlines-hidden 

...failed clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/ssl...

...updated 2 targets...

...failed updating 1 target...
   clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/ssl
...found 5 targets...
...updating 3 targets...
clang-linux.compile.c++ bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/main-ssleay32.o
clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/ssleay32
/usr/bin/ld: cannot find -lssleay32: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)

    "clang++"    -o "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/ssleay32" -Wl,--start-group "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/main-ssleay32.o"  -Wl,-Bstatic  -Wl,-Bdynamic -lrt -lssleay32 -Wl,--end-group -fPIC -pthread -std=c++20 -g -fvisibility=hidden -fvisibility-inlines-hidden 

...failed clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/ssleay32...

...updated 2 targets...

...failed updating 1 target...
   clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/ssleay32
...found 5 targets...
...updating 5 targets...
clang-linux.compile.c++ bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/main-ssl.o
clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/ssl
/usr/bin/ld: cannot find -lssl: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)

    "clang++"    -o "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/ssl" -Wl,--start-group "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/main-ssl.o"  -Wl,-Bstatic -lssl -Wl,-Bdynamic -lrt -Wl,--end-group -pthread -std=c++20 -g -fvisibility=hidden -fvisibility-inlines-hidden 

...failed clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/ssl...

...updated 4 targets...

...failed updating 1 target...
   clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/ssl
...found 2 targets...
...updating 2 targets...
clang-linux.compile.c++ bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/main-ssleay32.o
clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/ssleay32
/usr/bin/ld: cannot find -lssleay32: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)

    "clang++"    -o "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/ssleay32" -Wl,--start-group "bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/main-ssleay32.o"  -Wl,-Bstatic -lssleay32 -Wl,-Bdynamic -lrt -Wl,--end-group -pthread -std=c++20 -g -fvisibility=hidden -fvisibility-inlines-hidden 

...failed clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/ssleay32...

...updated 1 target...

...failed updating 1 target...
   clang-linux.link bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/ssleay32
...found 2 targets...
...updating 2 targets...
clang-linux.compile.c++ bin.v2/standalone/ac/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/openssl/ssl_h.o

...updated 2 targets...
...patience...
...found 170 targets...
...updating 10 targets...
clang-linux.compile.c++ bin.v2/check/predef/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/predef_check_cc_09a06289f4560e2f553bb0cbbec71436.o
In file included from /root/boost-root/libs/predef/tools/check/predef_check_cc_as_cpp.cpp:7:
/root/boost-root/libs/predef/tools/check/predef_check_cc.h:11:9: error: "FAILED"
#       error "FAILED"
        ^
1 error generated.

    "clang++"   -std=c++20 -fvisibility-inlines-hidden -m32 -pthread -O0 -fno-inline -Wall -g -fvisibility=hidden -march=i686 --target=i386-pc-linux  -DCHECK="BOOST_COMP_GNUC >= BOOST_VERSION_NUMBER(4,3,0)"   -I"/root/boost-root/libs/predef/include"  -c -o "bin.v2/check/predef/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/predef_check_cc_09a06289f4560e2f553bb0cbbec71436.o" "/root/boost-root/libs/predef/tools/check/predef_check_cc_as_cpp.cpp"

...failed clang-linux.compile.c++ bin.v2/check/predef/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/predef_check_cc_09a06289f4560e2f553bb0cbbec71436.o...

...updated 9 targets...

...failed updating 1 target...
   clang-linux.compile.c++ bin.v2/check/predef/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/lnk-sttc/thrd-mlt/vsblt-hdn/predef_check_cc_09a06289f4560e2f553bb0cbbec71436.o
...found 185 targets...
...updating 7 targets...
clang-linux.compile.c++ bin.v2/libs/config/checks/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/cxx11_constexpr.o

...updated 7 targets...
...found 1 target...
...updating 1 target...
clang-linux.compile.c++ bin.v2/libs/config/checks/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/cxx11_decltype.o

...updated 1 target...
...found 1 target...
...updating 1 target...
clang-linux.compile.c++ bin.v2/libs/config/checks/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/cxx11_hdr_tuple.o

...updated 1 target...
...found 1 target...
...updating 1 target...
clang-linux.compile.c++ bin.v2/libs/config/checks/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/cxx11_template_aliases.o

...updated 1 target...
...found 1 target...
...updating 1 target...
clang-linux.compile.c++ bin.v2/libs/config/checks/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/cxx11_variadic_templates.o

...updated 1 target...
...found 10 targets...
...updating 9 targets...
clang-linux.compile.c++ bin.v2/libs/json/build/clng-lnx-16/dbg/adrs-mdl-32/cxstd-20-iso/thrd-mlt/vsblt-hdn/cxx11_basic_alignas.o

...updated 9 targets...

The problem is again that -m32 is not being passed to the config check, as described in the original issue.

@grisumbras
Copy link
Member Author

This is actually very weird, because I see in the target paths that address-model=32 is being propagated to the check target. So, it should affect the build. I'm inclined to think that the problem isn't with deduction.

@pdimov
Copy link
Member

pdimov commented Apr 22, 2024

address-model=32 is propagated (as it's explicitly specified), but maybe the architecture is not.

@pdimov
Copy link
Member

pdimov commented Apr 22, 2024

I have a similar problem here locally: when I specify

using openssl : :
  <include>"C:/vcpkg/installed/x64-windows/include" <search>"C:/vcpkg/installed/x64-windows/lib" <ssl-name>libssl <crypto-name>libcrypto :
  <address-model>64 ;

using openssl : :
  <include>"C:/vcpkg/installed/x86-windows/include" <search>"C:/vcpkg/installed/x86-windows/lib" <ssl-name>libssl <crypto-name>libcrypto :
  <address-model>32 ;

in user-config.jam, then try the mysql tests with b2 --reconfigure libs/mysql/test, the first configure check for ssl fails, then a second succeeds. No address-model is passed in config.log (because I don't pass any on the command line.) The deduced architecture and address model checks occur prior to the failed ssl check in config.log.

This isn't fixed by this PR; as far as I can see the behavior is the same.

@pdimov
Copy link
Member

pdimov commented Apr 22, 2024

This is the beginning of the b2 output:

C:\boost-git\develop>rd/s/q bin.v2

C:\boost-git\develop>b2 libs/mysql/test
Performing configuration checks

    - default address-model    : 64-bit [1]
    - default architecture     : x86 [1]
    - ssl                      : no
    - ssl                      : no  (cached)
    - symlinks supported       : yes
    - ssl                      : yes [2]
    - crypto                   : yes [2]
    - cxx11_defaulted_moves    : yes [3]
    - cxx11_final              : yes [3]
    - cxx11_hdr_array          : yes [3]
    - cxx11_hdr_chrono         : yes [3]
    - cxx11_hdr_tuple          : yes [3]
    - cxx11_hdr_type_traits    : yes [3]
    - cxx11_numeric_limits     : yes [3]
    - cxx11_override           : yes [3]
    - cxx11_smart_ptr          : yes [3]
    - cxx11_trailing_result_types : yes [3]
    - cxx11_template_aliases   : yes [3]
    - cxx11_variadic_templates : yes [3]
    - crypto                   : yes
    - ssl                      : no  (cached)
    - cxx11_decltype           : yes [3]
    - GCC libquadmath and __float128 support : no [3]
    - BOOST_COMP_GNUC >= 4.3.0 : no [3]

[1] msvc-14.3
[2] link-static
[3] msvc-14.3/debug/link-static/python-2.7/threadapi-win32/threading-multi/visibility-hidden
...patience...
...patience...
...found 8172 targets...
...updating 188 targets...
compile-c-c++ bin.v2\libs\context\build\msvc-14.3\debug\threading-multi\dummy.obj
dummy.cpp

@pdimov
Copy link
Member

pdimov commented Apr 22, 2024

This is the abridged config.log output:

...found 17 targets...
...updating 13 targets...
msvc.write-setup-script bin.v2\standalone\msvc\msvc-14.3\msvc-setup.bat
compile-c-c++ bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\32.obj
32.cpp
libs\config\checks\architecture\32.cpp(9): error C2118: negative subscript

    call "bin.v2\standalone\msvc\msvc-14.3\msvc-setup.bat"  >nul
 cl /Zm800 -nologo "libs\config\checks\architecture\32.cpp" -c -Fo"bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\32.obj"     -TP /wd4675 /EHs /GR /Zc:throwingNew /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_COBALT_USE_STD_PMR=1 "-I." 

...failed compile-c-c++ bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\32.obj...

...updated 13 targets...

...failed updating 1 target...
   compile-c-c++ bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\32.obj
...found 2 targets...
...updating 1 target...
compile-c-c++ bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\64.obj
64.cpp

...updated 1 target...
...found 2 targets...
...updating 1 target...
compile-c-c++ bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\arm.obj
arm.cpp
libs\config\checks\architecture\arm.cpp(13): fatal error C1189: #error:  "Not ARM"

    call "bin.v2\standalone\msvc\msvc-14.3\msvc-setup.bat"  >nul
 cl /Zm800 -nologo "libs\config\checks\architecture\arm.cpp" -c -Fo"bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\arm.obj"     -TP /wd4675 /EHs /GR /Zc:throwingNew /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_COBALT_USE_STD_PMR=1 "-I." 

...failed compile-c-c++ bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\arm.obj...

...failed updating 1 target...
   compile-c-c++ bin.v2\libs\config\checks\architecture\msvc-14.3\debug\threading-multi\arm.obj

(more architecture checks elided)

...found 10 targets...
...updating 8 targets...
compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\openssl\ssl_h.obj
ssl_h.cpp
bin.v2\standalone\ac\openssl\ssl_h.cpp(1): fatal error C1083: Cannot open include file: 'openssl/ssl.h': No such file or directory

    call "bin.v2\standalone\msvc\msvc-14.3\msvc-setup.bat"  >nul
 cl /Zm800 -nologo "bin.v2\standalone\ac\openssl\ssl_h.cpp" -c -Fo"bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\openssl\ssl_h.obj"     -TP /wd4675 /EHs /GR /Zc:throwingNew /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_COBALT_USE_STD_PMR=1 

...failed compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\openssl\ssl_h.obj...

...updated 7 targets...

...failed updating 1 target...
   compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\openssl\ssl_h.obj
...found 6 targets...
...updating 4 targets...
compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\main-ssl.obj
main-ssl.cpp
msvc.link bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssl.exe
LINK : fatal error LNK1181: cannot open input file 'ssl.lib'

        call "bin.v2\standalone\msvc\msvc-14.3\msvc-setup.bat"  >nul
 link /NOLOGO /INCREMENTAL:NO "bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\main-ssl.obj"    "ssl.lib"  /DEBUG /MACHINE:X64 /MANIFEST /subsystem:console /out:"bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssl.exe"  
    
...failed msvc.link bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssl.exe bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssl.pdb...
...removing bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssl.pdb

...updated 2 targets...

...failed updating 1 target...
   msvc.link bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssl.exe bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssl.pdb
...found 6 targets...
...updating 4 targets...
compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\main-ssleay32.obj
main-ssleay32.cpp
msvc.link bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssleay32.exe
LINK : fatal error LNK1181: cannot open input file 'ssleay32.lib'

        call "bin.v2\standalone\msvc\msvc-14.3\msvc-setup.bat"  >nul
 link /NOLOGO /INCREMENTAL:NO "bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\main-ssleay32.obj"    "ssleay32.lib"  /DEBUG /MACHINE:X64 /MANIFEST /subsystem:console /out:"bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssleay32.exe"  
    
...failed msvc.link bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssleay32.exe bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssleay32.pdb...
...removing bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssleay32.pdb

...updated 2 targets...

...failed updating 1 target...
   msvc.link bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssleay32.exe bin.v2\standalone\ac\msvc-14.3\debug\threading-multi\ssleay32.pdb
...found 5 targets...
...updating 5 targets...
compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\main-ssl.obj
main-ssl.cpp
msvc.link bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssl.exe
LINK : fatal error LNK1181: cannot open input file 'ssl.lib'

        call "bin.v2\standalone\msvc\msvc-14.3\msvc-setup.bat"  >nul
 link /NOLOGO /INCREMENTAL:NO "bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\main-ssl.obj"   "ssl.lib"   /DEBUG /MACHINE:X64 /MANIFEST /subsystem:console /out:"bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssl.exe"  
    
...failed msvc.link bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssl.exe bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssl.pdb...
...removing bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssl.pdb

...updated 3 targets...

...failed updating 1 target...
   msvc.link bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssl.exe bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssl.pdb
...found 3 targets...
...updating 3 targets...
compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\main-ssleay32.obj
main-ssleay32.cpp
msvc.link bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssleay32.exe
LINK : fatal error LNK1181: cannot open input file 'ssleay32.lib'

        call "bin.v2\standalone\msvc\msvc-14.3\msvc-setup.bat"  >nul
 link /NOLOGO /INCREMENTAL:NO "bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\main-ssleay32.obj"   "ssleay32.lib"   /DEBUG /MACHINE:X64 /MANIFEST /subsystem:console /out:"bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssleay32.exe"  
    
...failed msvc.link bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssleay32.exe bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssleay32.pdb...
...removing bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssleay32.pdb

...updated 1 target...

...failed updating 1 target...
   msvc.link bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssleay32.exe bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\ssleay32.pdb
...found 2 targets...
...updating 2 targets...
link.touch bin.v2\test-symlink-source
link.mklink bin.v2\test-symlink
symbolic link created for bin.v2\test-symlink <<===>> test-symlink-source

...updated 2 targets...
...found 6 targets...
...updating 4 targets...
compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\main-libssl.obj
main-libssl.cpp
msvc.link bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\libssl.exe

...updated 4 targets...
...found 6 targets...
...updating 4 targets...
compile-c-c++ bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\main-libcrypto.obj
main-libcrypto.cpp
msvc.link bin.v2\standalone\ac\msvc-14.3\debug\link-static\threading-multi\libcrypto.exe

...updated 4 targets...

@grisumbras
Copy link
Member Author

grisumbras commented Apr 22, 2024

bfgroup/b2#375

The source of the problem is that module ac is calculating the list of relevant features (features that can affect compatibility of a target) incorrectly. It effectively only ever considers the <link> feature to be relevant for targets it checks. As a result, whatever the first property set is used to create a checked target, that one is used for any other property set.

So, given the fact that conditional properties are evaluated one after another, whether you got correct config checks is up to pure random chance. Unless you have a multiconfig build, in which case you are sure to get incorrect config checks.

Interestingly, it is only recently that conditional properties started to be evaluated repeatedly, until the property set "stabilizes". Before that they were only evaluated once, and so this random chance thing was unavoidable if you used deduced <address-model> or <architecture>.

@grisumbras grisumbras deleted the fix/platform-deduction branch April 22, 2024 14:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Config checks using address-model=32 in Linux don't use the right flags
3 participants