On Sun, Apr 19, 2020 at 5:47 PM Johan Corveleyn <jcor...@gmail.com> wrote:
> On Sun, Apr 19, 2020 at 5:12 AM Nathan Hartman <hartman.nat...@gmail.com> > wrote: > > > > On Thu, Apr 16, 2020 at 2:07 PM Johan Corveleyn <jcor...@gmail.com> > wrote: > > > Perhaps that needs at least a mention in some "known issues" section. > > > For normal users this doesn't matter much of course, and judging from > > > the amount of Windows sigs for 1.14 I doubt even one single other > > > person beside me is building and running tests on Windows :-). > > > > Would you be willing to send me whatever notes you have on the steps > > to set up a Windows dev/testing environment, even if they're rough? I > > know it's a frightening process. But between INSTALL, > > tools/dev/windows-build, and any hints you can provide, I'll try to > > get something going. > > Hi Nathan, > > Sure! Any help on the Windows-side of things would be definitely > appreciated. > > For context: I'm not a very experienced C developer (I do have 20+ years > of java development experience). I understand the syntax and can come up > with small patches, but I lose most of the time with trivial "setup" > things, like bootstrapping a decent build environment, finding my way > around the IDE, and solving linker problems etc. Things that might be > obvious for seasoned C people, but look like a big impenetrable mess to me > sometimes :-). > > I'm using an adapted version of the Makefile from tools/dev/windows-build. > I put this in the root folder of the subversion checkout / zip-extraction. > I use Visual Studio 2019 Community Edition (Version 16.5.3, or whatever > the last one is). > > INSTALL contains a lot of info, but I've learned to ignore some of it > (because it refers to "old stuff"). I know I should probably start editing > / patching it to get it in a better shape, but usually I'm pretty exhausted > after finally having been able to complete setting up a build (it took me 4 > days this time), that I just cannot muster up the energy anymore. > > Building the dependencies is the hard part. > I'm a bit short on time right now, so I'll just dump some rough notes here > (might contain some hidden assumptions, but I'm not sure): > > - Get the following tools, and make sure they are in your PATH: > * Perl (I've taken the last Strawberry distribution from perl.org) > * Python from python.org (download both a 2.7 and a 3.x build, you'll > probably need both, as there are still problems with 3.x for svn builds). > * awk (from https://www.cs.princeton.edu/~bwk/btl.mirror/awk95.exe) > * test.exe, from GnuWin32 (used by that Makefile from > tools/dev/windows-build) > > For the moment, I started with a x86 (32-bit) build, mainly in Release > configuration (some builds do both). Later I'll try to go for x64 build. > > zlib: > # clean: nmake -f win32/Makefile.msc clean > nmake -f win32/Makefile.msc > nmake -f win32/Makefile.msc test > (workaround for svn build: it looks for zlibstat.lib) nmake /nologo -f > win32/Makefile.msc STATICLIB=zlibstat.lib all > > building DEBUG configuration: > set CC_OPTS=/MDd /Gm /ZI /Od /GZ /D_DEBUG > nmake /nologo -f win32/Makefile.msc STATICLIB=zlibstatD.lib all > > Do not try to build the assembler optimized versions, it causes > headaches > > openssl: > Need Netwide Assembler, a.k.a. NASM, available from > https://www.nasm.us (after install, put in PATH) > perl Configure enable-zlib --with-zlib-include=../zlib-1.2.11 > --with-zlib-lib=../zlib-1.2.11/zlib.lib VC-WIN32 > For openssl 1.0.2*: > call ms\do_nasm > nmake -f ms\ntdll.mak > nmake -f ms\ntdll.mak test > For openssl 1.1.x: > nmake > nmake test > > PCRE (from pcre.org, needed for httpd -- not pcre2, only pcre (version 1) > works): > cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo > -DBUILD_SHARED_LIBS:BOOL=ON -DPCRE_NO_RECURSE:BOOL=ON . > nmake > nmake test > > expat (needed for httpd / apr-util): > download and extract expat (https://libexpat.github.io/) > (Follow instructions from cmake.README): > cd expat > mkdir build > cd build > cmake .. > msbuild expat.sln (debug build) > msbuild expat.sln /p:Configuration=Release > >>>> This is 64-bit build!! httpd now also needs to be built 64bit > >>>> or: open expat.sln > Configuration Mgr > Add x86 (win32) > configuration, save & exit + edit all vcprojx files and remove " > /machine:x64" > > httpd: > download and extract httpd > download and extract apr, apr-util, apr-iconv into httpd\srclib\apr > ..\apr-util ..\apr-iconv > Attention: Do not try to use junctions (windows symlinks), just copy > the directories > Attention 2: Check if the downloaded / extracted files are marked by > Windows as "Blocked" (rightclick -> Properties). If so unblock them in bulk > from within Powershell (Run as Administrator), with "dir -s | Unblock-File". > put built pcre under httpd\srclib > I see I forgot two "copies" here: put built openssl under httpd\srclib (and name it 'openssl') put built zlib under httpd\srclib (and name it 'zlib') The directories below srclib should be: apr apr-iconv apr-util openssl pcre zlib > put built expat under httpd\srclib\apr-util\xml > copy libexpat.lib into srclib/apr-util > copy libexpat.lib from Release and libexpatD.pdb from Debug into > expat\lib\LibR, and name them xml.lib and xml.pdb > (for debug build) copy libexpatd.lib and libexpatD.pdb from Debug into > expat\lib\LibD, and name them xml.lib and xml.pdb > edit apr-util\Makefile.win, and unquote libexpat in > XML_PARSER="libexpat" > see https://www.mail-archive.com/dev@apr.apache.org/msg27347.html > perl srclib\apr\build\lineends.pl > perl srclib\apr\build\cvtdsp.pl -2005 > (for openssl 1.1.x) perl srclib\apr\build\cvtdsp.pl -ossl11 > Open Apache.dsw in VS2019 to let it be converted / upgrade to .sln > with .vcxproj files (made from de .dsp files) > Strip "/Yuiconv" en "Yciconv" out of > srclib/apr-iconv/build/modules.mk.win (not sure if this is still needed) > Insert > "<PropertyGroup><GenerateManifest>false</GenerateManifest></PropertyGroup>" > in support/win32/ApacheMonitor.vcxproj > Insert > "<PropertyGroup><TargetName>libapr-1</TargetName></PropertyGroup>" in > srclib/apr/libapr.vcxproj > Insert > "<PropertyGroup><TargetName>apr_ldap-1</TargetName></PropertyGroup>" in > srclib/aprutil/ldap/apr_ldap.vcxproj > Insert > "<PropertyGroup><TargetName>libapriconv-1</TargetName></PropertyGroup>" in > srclib/apr-iconv/libapriconv.vcxproj > Insert > "<PropertyGroup><TargetName>libaprutil-1</TargetName></PropertyGroup>" in > srclib/aprutil/libaprutil.vcxproj > > Create directory C:\Apache2.4.43 in which the httpd build can be > installed. > # Add XML_PARSER="libexpat" to nmake commando ( > https://www.mail-archive.com/dev@apr.apache.org/msg27346.html) > nmake /f Makefile.win installr INSTDIR=C:\Apache2.4.43 > XML_PARSER="libexpat" > # If anything fails, first try it again: > nmake /f Makefile.win installr INSTDIR=C:\Apache2.4.43 > XML_PARSER="libexpat" > > Possibly: Rerun _install like this: nmake /f Makefile.win SHORT=R > LONG=Release _install INSTDIR=C:\Apache2.4.43 XML_PARSER="libexpat" > Possibly: copy apr-util\xml\expat\Release\expat.dll to > C:\Apache2.4.43\bin > > serf (the problems here below were just reported to dev@serf.a.o): > > Download and install latest scons version, in your Python 2.7 > installation (so first make sure Python 2.7 is first in PATH, then run the > installation of scons). > The serf build does not work with Python 3.x. > If using openssl 1.1.x, patch serf/SConstruct as follows: > [[[ > --- SConstruct.orig 2020-04-19 15:36:16.257450600 +0200 > +++ SConstruct 2020-04-19 15:36:51.855740800 +0200 > @@ -335,7 +335,7 @@ > LIBPATH=['$ZLIB']) > > # openssl > - env.Append(LIBS=['libeay32.lib', 'ssleay32.lib']) > + env.Append(LIBS=['libcrypto.lib', 'libssl.lib']) > if not env.get('SOURCE_LAYOUT', None): > env.Append(CPPPATH=['$OPENSSL/include/openssl'], > LIBPATH=['$OPENSSL/lib']) > @@ -343,8 +343,8 @@ > env.Append(CPPPATH=['$OPENSSL/inc32'], > LIBPATH=['$OPENSSL/out32']) > else: > - env.Append(CPPPATH=['$OPENSSL/inc32'], > - LIBPATH=['$OPENSSL/out32dll']) > + env.Append(CPPPATH=['$OPENSSL/include'], > + LIBPATH=['$OPENSSL']) > else: > if os.path.isdir(apr): > apr = os.path.join(apr, 'bin', 'apr-1-config') > ]]] > > With Python 2.7 in PATH, run: > scons APR=..\httpd-2.4.43\srclib\apr > APU=..\httpd-2.4.43\srclib\apr-util OPENSSL=..\openssl-1.1.1f > ZLIB=..\zlib-1.2.11 > > If you get this error: > scons: *** Invalid value for option MSVC_VERSION: 14.2. Valid > values are: ('14.0', '12.0', '11.0', '10.0', '9.0', '8.0', '6.0') > File "C:\research\svn\dev\deps\serf-1.3.9\SConstruct", line 157, > in <module> > Delete the file .saved_config, and try again. > > That's it :-). > I'll look up the difference between the Makefile in > tools/dev/windows-build and mine later ... > > -- > Johan > -- Johan