Author |
|
mec4
Joined: 20 Nov 2017 Posts: 5 Location: UK
|
Posted: Mon 20 Nov '17 14:07 Post subject: VS: missing expat with apr-util 1.6 |
|
|
I am trying to build apache 2.4.29 and subversion with VS2008 to support python 2.7 and am having trouble with apr-util 1.6. In [thread=35509]another thread[/thread] I read about copying the expat source into the apr-util tree but now I have issues with the library not linking.
"glsmith" said Quote: | Once I added the expat source it built fine in x86 | but I cannot find how to do this.
Can anyone point me to any docs to explain how to get the build to work? It looks like I am missing two environment variables (XML_PARSER and XML_OPTIONS) but am not sure what these need to be nor if I need to build expat first.
I have already fixed the line endings and built openssl and pcre. Then I ran Code: | cvtdsp -2005 -ossl11 | before opening the DSW and letting VS2008 convert the projects.
Thanks for any help! |
|
Back to top |
|
mec4
Joined: 20 Nov 2017 Posts: 5 Location: UK
|
Posted: Tue 21 Nov '17 10:37 Post subject: Some progress... |
|
|
Looks like expat no longer provides a VS2008 compatible project file (and the VS2013 files cannot be downgraded). Instead I made a new VS2008 solution and include just the `expat` project files to build into the "srclib\expat\win32\release" folder.
Code: | set XML_PARSER=libexpat | in the command prompt before starting the solution file then linked libaprutil OK.
I still get a warning about missing "XML_OPTIONS" but I do not know what I should set these to, can anyone help? |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1265 Location: Amsterdam, NL, EU
|
Posted: Tue 21 Nov '17 22:26 Post subject: Re: Some progress... |
|
|
mec4 wrote: | Looks like expat no longer provides a VS2008 compatible project file (and the VS2013 files cannot be downgraded). |
Actually, the project files can be downgraded. Just replace every 'v141' in the *.vcxproj files with 'v90'. Open the expat.sln in VC14 or VC15 and it will compile OK.
mec4 wrote: | I still get a warning about missing "XML_OPTIONS" but I do not know what I should set these to, can anyone help? |
I was wondering the same. In the end I removed the XML_OPTIONS from the preprocessor definitions of libaprutil. |
|
Back to top |
|
mec4
Joined: 20 Nov 2017 Posts: 5 Location: UK
|
Posted: Wed 22 Nov '17 10:39 Post subject: |
|
|
I know I can downgrade the toolset but the project files will not open in VC2008, the structure of the files has changed too much.
Thanks for the info ref XML_OPTIONS. I have left it for now as it is "only" a warning and does not stop compilation. |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1265 Location: Amsterdam, NL, EU
|
Posted: Wed 22 Nov '17 10:47 Post subject: |
|
|
mec4 wrote: | I know I can downgrade the toolset but the project files will not open in VC2008, the structure of the files has changed too much. |
True. Apart from OpenSSL and PCRE you have to build Expat now separately as well. Or make you own *.vcproj. |
|
Back to top |
|
mec4
Joined: 20 Nov 2017 Posts: 5 Location: UK
|
Posted: Wed 22 Nov '17 11:33 Post subject: |
|
|
Do you know where in the httpd tree I should copy the built libexpat files? At the moment I am editing the httpd projects to add the expat\win32\Release folder to the search paths but I would rather copy files than edit projects!
I tried running `cvtdsp.pl -apr16` but that only updated one file and the text displayed referenced openssl 1.1.0! |
|
Back to top |
|
glsmith Moderator
Joined: 16 Oct 2007 Posts: 2268 Location: Sun Diego, USA
|
Posted: Fri 24 Nov '17 21:18 Post subject: |
|
|
cvtdsp.pl -apr16 was created before this which is why it doesn't help and who did this new expat mess didn't think to fix, even though he was told about it.
In Theory:
Expat can be anywhere. But they've really complicated things. Here's how I understand it but haven't tested it.
Open a VCx x86 command line console in httpd-x.x.x (source root).
Type in these commands.
set XML_PARCER=libexpat
set LIB=%LIB%;/path/to/expat/win32/bin
set INCLUDE=%INCLUDE%;/path/to/expat/lib
devenv /useenv apache.dsw
convert
build Win32 target
One problem with this however is that free versions of Visual Studio do not have devenv, at least VC9 & 10 don't. |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1265 Location: Amsterdam, NL, EU
|
Posted: Fri 24 Nov '17 22:50 Post subject: |
|
|
glsmith wrote: | One problem with this however is that free versions of Visual Studio do not have devenv, at least VC9 & 10 don't. |
VC11 does not have devenv either.
For x64:
Code: | wdexpress Apache.sln /Build "Release|x64" /useenv
|
Disadvantage: wdexpress on the command line does not show any output.
For Win32 try:
Code: | msbuild Apache.sln /p:configuration=Release /p:platform=Win32
|
msbuild does not have a /useenv parameter. I do not know if it uses the environment, because I entered all the settings in the vcxproj files.
Edit: VC10 has vcexpress and msbuild. I do not know the equivalent for VC9 |
|
Back to top |
|
glsmith Moderator
Joined: 16 Oct 2007 Posts: 2268 Location: Sun Diego, USA
|
Posted: Sat 25 Nov '17 0:34 Post subject: |
|
|
Or,
Just put it all back the way it was in 1.6.0 mostly. With this no need to use cvtdsp.pl -apr16.
Get Apache24 source with the apr, apr-util & apr-iconv sources in srclib set up.
Put other dependencies like pcre in the srclib folder.
Put the "expat" folder from inside the libexpat-R_2_2_5.zip download in srclib/apr-util/xml
Download patch at https://www.apachehaus.net/patches/aprutilx4h.patch and put in httpd's top source folder.
Open a command window and type: patch -p0 -b -i aprutilx4h.patch
then: perl srclib/apr/build/cvtdsp -2005
Open Apache.dsw in the Visual Studio 9 IDE, convert and build InstallBin.
Works for me, command line too which I use for every version other than VC9.
Patch will probably NOT work in 2.4.30 and up, I expect change here for the command line build as it's still looking for apr 1.6.0 files which have been removed. |
|
Back to top |
|
mec4
Joined: 20 Nov 2017 Posts: 5 Location: UK
|
Posted: Mon 27 Nov '17 10:30 Post subject: |
|
|
glsmith wrote: | Or,
Just put it all back the way it was in 1.6.0 mostly. With this no need to use cvtdsp.pl -apr16.
... |
Thanks very much for this, will give it a go and report back (may take a day or two now). |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1265 Location: Amsterdam, NL, EU
|
Posted: Mon 27 Nov '17 11:47 Post subject: |
|
|
That should have been:
Quote: | VC11 Express does not have devenv either.
|
|
|
Back to top |
|
deltamind106
Joined: 22 Aug 2012 Posts: 9 Location: Boston, USA
|
Posted: Thu 23 Aug '18 22:38 Post subject: |
|
|
Is there any decent solution to this yet? The people at apache have really screwed up this expat thing in their half-witted effort to have a pluggable XML parsing library. I'm just trying to build httpd 2.4.34 from the command line using nmake.
I've put the expat folder from the libexpat-R_2_2_6.tar.gz archive into the srclib/apr-util/xml folder. Then I kkkkrun "nmake -f Makefile.win" from the top level and it won't build:
cd srclib\apr-util\xml\expat\lib
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\bin\HostX64\x64\nmake.exe" -nologo -f xml.mak CFG="xml - Win32 Release" RECURSE=0
NMAKE : fatal error U1052: file 'xml.mak' not found
Someone removed the xml.mak file from the apr-util sources, so this whole thing is completely broken. |
|
Back to top |
|
deltamind106
Joined: 22 Aug 2012 Posts: 9 Location: Boston, USA
|
Posted: Fri 24 Aug '18 20:01 Post subject: |
|
|
After some searching, I could not find much decent information on this issue other than some people complaining that the guy at Apache who removed xml.mak is a hack (for both putting it there in first place and then removing it prematurely), and you're pretty much on your own fixing this problem for now, at least until Apache 2.5 comes out.
So in case anyone needs to actually build Apache 2.4.34 for Windows, here's what Apache should have done before they released Httpd 2.4.34 and Apr-Util 1.6.1:
1. Copy the expat sub-folder from the expat distribution in the usual place (srclib/apr-util/xml/expat).
2. Build expat separately using the CMake system that's included with expat:
Quote: | cd srclib/apr-util/xml/expat
cmake -G "NMake Makefiles" -D BUILD_shared=OFF -D CMAKE_BUILD_TYPE=Release .
nmake |
It probably makes sense to just build a static version of the expat library, so you don't have to worry about including expat.dll in the Apache bin folder.
3. Fix the httpd Makefile.win so it doesn't reference the non-existent xml.mak file. Around line 452 of this file, you will see 3 commands to build expat with "xml.mak":
Quote: | cd srclib\apr-util\$(EXPAT)
$(MAKE) $(MAKEOPT) -f xml.mak CFG="xml - Win32 $(LONG)" RECURSE=0 $(CTARGET)
cd $(EXPBCK) |
Remove the above 3 lines, and replace with this line:
Quote: | cd srclib\apr-util |
Now you have an httpd Makefile.win that doesn't look for a file that they removed from the apr-util distribution. I wonder why they didn't do this simple fix before releasing Apache 2.4.34? Does anyone test the Windows makefiles? I guess probably not.
4. Now fix the httpd Makefile.win so it knows where to find the expat.lib library file that you compiled above in step 2. Around line 1262 of Makefile.win, you will see 2 lines that stage the expat library:
Quote: | copy srclib\apr-util\$(EXPAT)\Lib$(SHORT)\xml.lib "$(INSTDIR)\lib" <.y
copy srclib\apr-util\$(EXPAT)\Lib$(SHORT)\xml.pdb "$(INSTDIR)\lib" <.y |
Remove the above 2 lines and replace with the following line:
Quote: | copy srclib\apr-util\xml\expat\expat.lib "$(INSTDIR)\lib" <.y |
Note that the expat release build does not create an expat.pdb, so you have to remove this unless you built a debug version of expat.
5. Now modify the apr-util Makefile so it knows where to find the expat.lib library file that you compiled above in step 2. Edit the file libaprutil.mak, and around line 160, 358, 556, and 754 (4 separate locations) you will see a reference to $(XML_PARSER).lib. I guess their idea was to define XML_PARSER somewhere, but nobody bothered to actually do it. So replace all 4 occurrences of "$(XML_PARSER).lib" with "xml/expat/expat.lib".
I guess you could make a patch encompassing all these changes, but probably the file locations will move around as time goes by, and a machine patch will eventually stop working. Or, maybe they'll fix httpd and apr-util before that happens. In the meantime, this is generally what you need to do. |
|
Back to top |
|
glsmith Moderator
Joined: 16 Oct 2007 Posts: 2268 Location: Sun Diego, USA
|
Posted: Fri 24 Aug '18 20:43 Post subject: |
|
|
I use this patch and put the lib folder from the expat source in the httpd-2.4.x/srclib/apr-util/xml/expat folder I create and build like before that change.
Edit: fixed the httpd-2.4.x source path for expat.
Last edited by glsmith on Fri 24 Aug '18 22:02; edited 1 time in total |
|
Back to top |
|
Steffen Moderator
Joined: 15 Oct 2005 Posts: 3092 Location: Hilversum, NL, EU
|
Posted: Fri 24 Aug '18 21:05 Post subject: |
|
|
I too here back to old behavior. |
|
Back to top |
|