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