Hi Jeff,
I see Steffen has chimed in and have read the reply as well, but I just
want to cover a couple points now, I need to ponder on some of your
other comments.
On 8/31/2013 2:41 PM, Jeff Trawick wrote:
On Sat, Aug 31, 2013 at 3:53 PM, Gregg Smith <[email protected]
<mailto:[email protected]>> wrote:
Hi Jeff,
Well, putting on my Apache Haus hat my first impressions are "What
a nightmare!" :)
I must say I prefer the more turnkey approach we enjoy these days,
I'm not 100% sure what you mean by the more turnkey approach. I guess
that is putting support libraries under httpd/srclib and having the
httpd build sort of orchestrate putting the libraries together,
installing the stuff httpd cares about, etc?
More the fact that httpd, APR, APU & APIconv are built in one click of
the build button. Granted, other dependencies have to be built
separately including now PCRE as of 2.3.
Although I do try to work on Windows from time to time, I am no expert
in building and putting together stuff in the current way. Here is my
own admittedly ignorant understanding of the current build system
(please add corrections):
* I have to do multiple conversions of the project files in svn to run
with the latest Visual Studio stuff
With that obstinate nightmare called VC10, that was the only way I could
get it to be successful (converting to VC9 first), VC11 this is not the
case. It still has quirks, the intellinonsense in VC11 is a pain, but as
long as we regenerate apr/apu.h files during every build, it's going to
rebuild those a few times during a single build session. I need to look
again and see if it can be disabled though I doubt it. I've worked
around it.
As Steffen mentioned, it needs a little minor adjusting to get it
working. VC11 does not like embedding the manifest in ApacheMonitor, nor
does it like using precompiled headers in APR-Iconv. For whatever reason
for me, it cannot find libxml2.lib for mod_proxy_html/xml2enc, even
though it has no problems with any other modules dependencies . I
haven't figured this one out yet. I have to build on a VM somewhere in
the world and the added time/complexity has kept me from getting
anywhere fast with this.
* Manual and/or Visual Studio GUI work is required to build everything
using recent Microsoft tools.
Huh? Manual? VC GUI yes, because we do not have a full set of nmake
makefiles in svn, like there are for APR/APU.
* I don't understand how to get Makefiles that build things the right
way for the latest Microsoft compilers
What's "the right way?" If you just mean generating the makefiles, yes,
that is M$ deciding to remove the feature after VC6.
* There's a high ratio of gorp to critical information in the Windows
build files we maintain in svn, and I feel that I'm going to break
something every time I try to the required new gorp in order to add a
file or module or whatever to the build for Windows.
Nah, you've done well so far. Granted, there's only a few lines you need
to concern yourself with mostly. CPP, LINK32 & the Source file stuff at
the bottom. You handled adding util_fcgi.c to libhttpd with ease it looked!
Adding a module is another story I admit. It's more just knowing what
and where. There at least are example in the svn of just adding a
module. For instance http://svn.apache.org/r1436058
Then there's also the "PING: Windows folks" on dev@ possibility,
explaining what was added/subtracted/changed that would require an
adjustment to the build. Someone knowing with commit access would see
this and gladly make any necessary changes, then again, maybe not.
* People have other build tools on Windows that they want to use, and
all that Visual Studio stuff is essentially useless to them except for
trying to reverse engineer intention out of the generated gorp;
certainly not useful for actually building. (I've only tried "NMake
Makefile"-based builds using a mix of 32-bit, 64-bit, Visual Studio
2010 tools, and Visual Studio 2012 tools; I haven't tried
non-Microsoft compilers yet.)
What people? What other tools?
My build requirements that aren't met with the current system:
* statically linking third-party modules with the server (e.g.,
including in libhttpd, editing modules.c)
* fine-grained control over which modules are built and which are
loaded by default
Who am I to decide just what 3rd party modules my users want to use. Not
only that, when there is a new version of a module, do I really want to
rebuild and entire Apache? No, I just build the new version of the
module. That way if Joe User doesn't want mod_auth_ntlm, he doesn't have
to download it and add it to his Apache and it doesn't have to be
absorbing space on the hard drive. I do understand this ability is
possible in the unix build though, I've built on Linux a couple times.
I really do get it and the admin whos corporate policy is to download
only from ASF or build it in house could have use for this.
* absolutely no requirement to put support libraries in srclib/*
I actually had a php developer ask me why we didn't use just a *single*
dependency tree;
/deps
/deps/bin
/deps/include
/deps/lib
the only answer I came up with was "because this works!"
* ability to build for Windows and various Unixy platforms using the
same basic flow
No comment.
But really, who is going to use this on Windows? Who are the noobs?
Developers?
The noobs are Joe Windows Apache User who one day decides to grab a free
copy of VC++ Express and give it a whirl. I was that person once long
ago in the 1.3 days. If only there were express versions back then.
Perhaps I'm misunderstanding something, but installing support
libraries to the same prefix lets cmake find stuff with zero code, and
the intention is to put things in the same prefix anyway, right? If
you wanted to put the sources under srclib but still install to the
same prefix it still works?
I get it now and that was mostly what I had, my downfall was using -D
pointing to optional library folders instead of library files (my bad).
Somehow I think that a wrapper script/makefiles to put together the
independent builds of the various projects is the missing piece to a
lot of these concerns. I would have thought that different
developers/bundlers/etc. would have their own way to glue things
together that makes sense for them, but perhaps some default is needed.
See makefile.win, it's all there. Installs all the mess including any
optional DLLs to where they belong.
I've never actually "nmake install" any dependency, it's rather
useless on Windows. I have to create multiple mod_ssl with
different openssl versions so installing openssl would limit that.
This might help you understand my suggestion about dependencies :)
I guess with the cmake build of httpd you start with these openssl
builds or installs (whatever it takes for FindOpenSSL to deal with):
\openssl1
\openssl2
\openssl3
You build httpd once using the desired feature set and you specify one
of these openssl trees with the cmake settings
CMAKE_LIBRARY_PATH/CMAKE_INCLUDE_PATH.
Rename that first mod_ssl.so mod_ssl_for_openssl1.so
Build httpd two more times using minimal feature set (save build
time), setting the CMAKE path used to find prereqs to those other
builds of openssl.
ARGH! I do somewhat similar though, yours just sounds harder.
How does that work for you today? How much code gets rebuilt as you
prepare the additional mod_ssl builds?
2 OpenSSL builds in srclib, one named openssl and another named
openssl-x (x being 098 or 101). Build Apache and Install. Rename the
OpenSSL folders, change Install folder, rebuild just the few items that
actually link to OpenSSL, Install again. GUI is handy for this since you
can rebuild a single project easily.
This is driven mainly because of mod_php, PHP 5.4 links to OSSL 0.9.8 so
if Apache is built with 1.0.1, it will not start. We offer downgrade
zips for this purpose. mod_fcgid remedies this problem but some people
would rather use mod_php.
Thanks so much for spending the time!!
No problem, I figured I should give it a whirl.
Gregg