On 7/21/2015 7:55 AM, Branko Čibej wrote:
> On 20.07.2015 16:20, Stefan Hett wrote:
>> Hi,
>>
>> following several hours of investigation and discussion on IRC with
>> danielsh, philipm and bert I believe there to be some issue in the
>> build generator for Windows.
>>
>> Running the python command:
>> python gen-make.py -t vcproj --with-zlib=..\zlib --with-apr=..\apr
>> --with-apr-util=..\apr-util --vsnet-version=2010
>>
>> followed by building (using VS 2010 SP1):
>> msbuild subversion_vcnet.sln /t:__ALL_TESTS__ /p:Configuration=Release
>>
>> I get 8 project errors:
>> - libsvn_ra_dll: LINK : fatal error LNK1181: cannot open input file
>> 'ssleay32.lib'
>> [E:\[delete]SVNTest\SVN\src-trunk\build\win32\vcnet-vcproj\libsvn_ra_dll.vcxproj]
>> - test_client: LINK : fatal error LNK1181: cannot open input file
>> 'ssleay32.lib'
>> [E:\[delete]SVNTest\SVN\src-trunk\build\win32\vcnet-vcproj\test_client.vcxproj]
>> - conflict-data-test: LINK : fatal error LNK1181: cannot open input
>> file 'ssleay32.lib'
>> [E:\[delete]SVNTest\SVN\src-trunk\build\win32\vcnet-vcproj\test_conflict_data.vcxproj]
>> - some more tests - all with ssleay32.lib missing
>>
>> ssleay32.lib is an OpenSSL library specified in build.conf in the
>> openssl-section alongside libeay32.lib for the "msvc-libs"-option.
>>
>> Looking at the generated libsvn_ra_dll.vcxproj-file actually shows the
>> additional linker dependencies being set to:
>> [...]ssleay32.lib;libeay32.lib;secur32.lib[...]
>>
>> IMHO this is wrong. I'm explicitly building without OpenSSL as well as
>> without serf and still these OpenSSL/Serf librarie references are
>> being generated in the project files.
>>
>> Taken from build.conf:
>> libsvn_ra specifies "ra_libs" as a libs dependency and "ra-libs"
>> specifies "libsvn_ra_serf" as a libs-dependency which then specifies
>> "serf" as a lib-dependency which defines msvc-libs as secur32.lib.
>> "serf" then also defines "openssl" as the dependency which in effect
>> takes ssleay32.lib and libeay32.lib as the setting for msvc-libs.
>>
>> gen_win.py:get_win_libs: takes the msvc-libs conditionless as the
>> required dependencies *UNLESS* the target specifies msvc_static (in
>> which case get_win_libs returns an empty array).
>>
>> Originally my thought was that the generated dependency tree should be
>> adjusted so it correctly reflects the build-parameter-state (aka: drop
>> serf/openSSL completely) but danielsh clarified to me that he believes
>> the issue rather to be in the part generating the project output since
>> the dependency tree should simply reflect exactly what is specified in
>> the build.conf-file.
>>
>> So I guess that the issue is located in gen_win.py:get_win_libs() not
>> omitting the libraries, if these are not specified by the gen-make
>> commands.
>>
>> I've tested the attached patch and with that applied, running the two
>> build commands stated above succeed with no errors (also verified that
>> the generated project files then no longer contain the lib-references).
>> However, I'm not 100% convinced yet that this is the correct approach
>> or whether some more generic solution would be more suitable (aka one
>> which would handle any optional library not present and the
>> corresponding entry in the build dependency tree).
>> Given that there's already another special case command omitting the
>> ra-serf-install target if "serf" is not found, I guess the patch might
>> be acceptable though.
>> Nevertheless, I think some SVN developer is better of with providing
>> more input on this so to find the right solution.
>>
>> (note: the issue also exists in 1.9 and currently results in the fact
>> that building without OpenSSL fails on Windows - assuming this is not
>> a problem in 1.8, it's a regression of 1.9 compared to 1.8).
> It's very likely not a regression but a long-standing missing feature of
> the Windows build generator.
>
> Note that these days, the only thing that uses OpenSSL is Serf; so, the
> libsvn_ra DLL should only link OpenSSL if we're statically linking Serf
> and if Serf was build with OpenSSL support. Even then, I believe that
> OpenSSL should be in the Serf library dependency list. I'd have expected
> that there'd be no need to mention the OpenSSL importlib dependencies in
> the libsvn_ra project at all ... but ISTR they're needed on Windows
> despite the explicit dependency in Serf?
>
> -- Brane
>
I think I can't follow you here. openssl is only listed as a dependency
in [serf] in build.conf. There's no explicit dependency to openSSL in
libsvn_ra. Only the implicit one via serf.
And yes, as far as my understanding with Windows/DLLs goes that's
needed, unless you build openssl statically and link it that way into serf.
For the record: I didn't test whether building openSSL statically and
linking it that way with Serf is possible/supported at all.
Regards,
Stefan
Received on 2015-07-21 11:49:47 CEST