Switch to CMake

I've tested on Linux, OSX and Cygwin, but please help with testing your favorite configurations and report any issues found.

This change provides a configure wrapper script to make it almost backwards compatible with the old build system. See `configure --help` for details.

What comes to the build flags, it's not 100% identical with the old ones. Some of the platform specific build flags collected over the last decade were intentionally left behind. The latest ZNC requires a modern toolchain that supports C++11 anyway, so many of those old exotic flags are probably no longer even needed. The idea is to let CMake as a cross-platform to specify the correct flags, mostly.

The proposal also changes the structure a bit. After struggling with the damn object files for a good while, I decided to propose building the core as a library instead, like it was already done on Cygwin. I strongly believe this is the right direction to go in the future (see #210 and [Wiki](http://wiki.znc.in/Ideas)).

/cc @samuelgaist
And what is the big picture? The devil is in the details...
Checking for availability of a function in C when we'll use that function
in C++ is weird, at least, and sometimes it can hurt.

I can't say that I like the script which downloads cmake using different
downloader depending on OS, it's starting to look too much like existing
configure. I realize that it's hard to do differently, when not every OS
has wget and/or curl... On the other hand, I still intend to switch to
libevent, and configure will need to download it too if missing, so this
issue will arise anyway.
Of course, editing configure/Makefile currently is painful, but I'm
starting to doubt that it'll be better with cmake...

You mentioned limiting visible symbols for stable ABI...  It boils down to
set of flags for gcc. Or cmake can do it easier way?


2014-09-19 7:46 GMT+01:00 J-P Nurmi <notifications@github.com>:

> In .travis.yml:
>
> >        global:
> >            - secure: "i2f2UVDnyHT/9z0U3XvgTj8eDERvnc1Wk7HpseEjb75JwGzqn/2R+RKHmoSrwK3hFgij2IMxZL19XtHFwMz9t5A/huAAKD74KMMI/QpeZEJ/sjT3CTLcE9HEVDdJOjc7dfLRxb2hZtgvx8clZIMrpeUdPhci8openff30KvXVbg="
> >  matrix:
> >      include:
> >          - compiler: clang
> > -          env: CFGFLAGS=--enable-debug MYCXXFLAGS="-fsanitize=address -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fPIE" MYLDFLAGS="-fsanitize=address -pie"
> > +          env: CFGFLAGS=--debug MYCXXFLAGS="-fsanitize=address -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fPIE" MYCFLAGS="-fsanitize=address -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fPIE" MYLDFLAGS="-fsanitize=address -pie"
>
> Don't let such minor details fool you. Look at the big picture...
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/znc/znc/pull/648/files#r17771058>.
>