
        KVIrc4 win32 compiling howto (WIP)
        by CtrlAltCa

This paper describes how to successfully compile a working copy ok KVIrc4 under Microsoft Windows operating systems.



Requisites:

  - A Microsoft Windows operating system:
      [Needed to run KVIrc into, mandatory]
      2000, preferably with service pack 4
      xp, preferably with at least service pack 2
      vista, preferably not :p
      seven

      Notice: dos-based Windows operating system (95,98,98se,me) are not officially supported by KVIrc.
      Anyway, if you're still using such an old os, you've worst problems than this...

  - CMake from Kitware:
      [Configuration tool; needed to compile KVIrc, mandatory]
      Download it from http://www.cmake.org
      The package you want is called "Windows (Win32 Installer) cmake-2.6.4-win32-x86.exe" (version number may vary).
      You need at least version 2.6.4 to compile KVirc.
      Version 2.8.0 will just work partially: its FindOpenSSl module is broken, but you can download a working one from here:
      http://gdcm.svn.sf.net/viewvc/gdcm/trunk/CMake/FindOpenSSL.cmake?view=log (the working module will be part of cmake 2.8.1).
      Recent versions of the cmake installer will ask if you want to add cmake to the system PATH: you want it, preferably for all users.

  - Qt 4 from Trolltech:
      [Graphic library, mandatory]
      You need at least Qt 4.5 upwards, but >= 4.6.0 is recommended. Since version 4.6.0, we advice you to get the "Qt SDK for Open Source C++ development on Windows" you can get here: http://qt.nokia.com/downloads/sdk-windows-cpp
      The Qt SDK includes the Qt libraries and a working mingw environment, so you won't need to install one manually.

  - MinGW from the MinGW team:
      [Compiler; needed to compile KVIrc, mandatory]
      If you installed the Qt SDK >= 4.6.0, you already have MinGW installed. Otherway, you need to install MinGW manually.
      MinGW is still based on the 3.x brach of gcc; if you want to test the new gcc4 (it should create faster executables), follow these
      instructions:
      Point your browser at: http://sourceforge.net/projects/mingw/ , follow the "view all files" link and download "Automated MinGW Installer" (MinGW-5.1.6.exe)
      (version number may vary). Run the installer, choose the "Current" package and select "MinGW base tools", "g++ compiler", "MinGW Make" components.
      Then go back to http://sourceforge.net/projects/mingw/ , follow the "view all files" => "GCC Version 4" (Current Release_gcc-4.4.0)" link.
      You'll find a file called "gcc-4.40-mingw32-notes.txt", read it carefully, at least twice. Then download these files:
		gcc-core-4.4.0-mingw32-dll.tar.gz
		gcc-core-4.4.0-mingw32-bin.tar.gz
		gcc-c++-4.4.0-mingw32-dll.tar.gz
		gcc-c++-4.4.0-mingw32-bin.tar.gz
		pthreads-w32-2.8.0-mingw32-dll.tar.gz
		gmp-4.2.4-mingw32-dll.tar.gz
		mpfr-2.4.1-mingw32-dll.tar.gz
      Uncompress all the gcc4 archives and copy it over the installation directory previously created by the mingw installer (overwriting the old gcc3).
      You can also use TDM's GCC/mingw32 Builds (these unofficial mingw packages ships with gcc4 included) you can find here: http://www.tdragon.net/recentgcc/.

  - OpenSSL compiled for Win32 from Shining Light Productions:
      [Enc/Decrypt library; needed to secure your irc sessions, optional]
      Download it from http://www.slproweb.com/products/Win32OpenSSL.html
      The package you want is called "Win32 OpenSSL v0.9.8l" (version number may vary; there should be a notice like "Recommended for software developers" in the package description).
      Any recent version should work; general rule: more recent means more secure.
      Please note that newer openssl versions from www.slproweb.com needs a specific version of Microsoft Visual Studio 2008 runtimes to work (this sucks): if you plan to create a redistributable kvirc package, our advice is to compile openssl by yourself using MinGW and use your libs.
      Install these libs somewhere (like c:\openssl) and remember this path.

  - Zlib compiled for Win32:
      [Compression library; needed for many stuffs, optional]
      MinGW offers a zlib package: You'll need to download from http://sourceforge.net/projects/mingw/ the packages:
		zlib-1.2.3-1-mingw32-dll-1.tar.gz
		zlib-1.2.3-1-mingw32-dev-1.tar.gz
      Install these libs somewhere (like c:\zlib) and remember this path.

  - Perl for Win32:
      [Programming language; needed for documentation creation and optional scripting support]
      Any win32 version will work; We advice you to use the version you can find at http://www.activestate.com/activeperl/downloads/ .
      Perl is needed to extract documentation from the source files and generate help files for kvirc.
      You'll need to run the following command from cmd prompt (start->run->cmd) after perl installation: "ppm install dmake", otherway at every attempt to run perl it will append a nice colored message that breaks compilation and can't be disabled (really braindead).

  - Python for Win32:
      [Programming language; optional scripting support]
      Any win32 version will work; We advice you to use the version you can find at http://www.activestate.com/activepython/downloads/ .
      Please note that we are currently supporting the 2.x version of python (currently 2.6). Python3000 (aka python3k) is not backwards compatible and supported by now.

  - GNU GetText for Win32:
      [Localization library; needed to translate kvirc interface into your own language, optional]
      We advice you to use the version you can find at http://gnuwin32.sourceforge.net/packages/gettext.htm , follow the "Setup program" link.
      Install these libs somewhere (like c:\gettext) and remember this path.

  - GNU Sed for Win32:
      [Tool; needed to tidy kvirc translation files, optional]
      We advice you to use the version you can find at http://gnuwin32.sourceforge.net/packages/sed.htm , follow the "Setup program" link.
      Install these libs somewhere (like c:\sed) and remember this path.

  - Phonon smplayer/vlc frontend for MinGW:
      [Multimedia library; needed to play multimedia files using phonon before qt4.6, optional]
      This is needed only for Qt 4.5.x.
      (For the little story, the default Windows backend for Phonon is based on DirectShow 9 and before Qt 4.6.0 MinGW was not capable of compiling it, that's why Trolltech didn't ship the DirectShow 9 backend with Qt4.5 for MinGW)
      Get it at http://code.google.com/p/phonon-vlc-mplayer/; it could need some tweaking to work: refer to the upstream documentation.

  - Subversion cli for windows:
      [Versioning tool; needed for cmake to automatically set the correct revision number in kvirc build]
      Any version will work; We advice you to use the version you can find at http://subversion.tigris.org/servlets/ProjectDocumentList?FolderID=8100 .
      The package you want is called "Setup-Subversion-1.6.6.msi" (version numbers may vary).
      If you don't want to install subversion cli because you are already using another subversion tool (like TortoiseSvn), you can just force the correct svn revision passing to cmake the -DMANUAL_REVISION=xxxx parameter.

  - Nullsoft scriptable install system (NSIS)
      [Installer packages creator; needed if you want to create an installer package for kvirc]
      Get it at http://nsis.sourceforge.net/Download ; the package you want is called "nsis-2.45-setup.exe" (version numbers may vary).

Further reccomended download if you plan to develop KVIrc:

  - GNU Debugger (gdb) for Win32:
      [Dev Tool: Debugger; optional]
      Download if from the MinGW website.

  - StraceNT (aka strace for Win32)
      [Dev Tool: tracer; optional]
      Download it from http://www.intellectualheaven.com/ .



Builder chain installation:

First install CMake and Qt4. If you didn't go the "Qt SDK" way, install MinGW manually.
Then install the rest of the packages. Remember to write down the installation paths of the packages: you'll need them later.

Now you have to define some environmental variable:

  CMAKE_INCLUDE_PATH
  Set it to the include subdirectories of the paths where you installed mingw, openssl and zlib. Example:
  c:\Qt\2009.5\mingw\include;c:\openssl\include;c:\zlib\include

  CMAKE_LIBRARY_PATH
  Set it to the libs subdirectories of the paths where you installed mingw, openssl and zlib.
  If the library packages you are using support several compilers, be sure you're including the right libraries directory (tipically named MinGW).
  Add c:\windows\system32 too (the path to the system32 directory of your windows installation). Example:
  c:\Qt\2009.5\mingw\lib;c:\openssl\lib\mingw;c:\zlib\lib;c:\windows\system32

  PATH
  Add to the system PATH the bin directories of CMake, Qt, MinGW, GetText, Sed, Perl, Python. If you plan to use gdb and/or straceNT, add their bin directories too. Example:
  c:\Qt\2009.5\mingw\bin;c:\Qt\2009.5\qt\bin;c:\perl\site\bin;c:\perl\bin;c:\python26\scripts;c:\python26;c:\Program Files\subversion\bin\c:\Program Files\cmake 2.6\bin;c:\gettext\bin;c:\sed\bin
  Note: CMake, Perl, Python and Subversion tipically addes themselves automatically to the PATH.


Now you should be ready to compile KVIrc.



Compilation

Download KVIrc sources from KVIrc's website, a mirror or using svn (see instructions on KVIrc website about how to do that).
Using CMake we are able to compile the project in-sources or out-of-sources; we'll go with the second option, that keeps the source directories untouched without filling them with compiled objects and cmake definition files.
So we have to create a directory where to compile KVIrc into, and run cmake inside that dir, passing to cmake the dir containing kvirc sources as a parameter (and any other option).

Example:
  - download kvirc's trunk from svn into c:\kvirc
  - create directory c:\kvirc\build
  - open a command promp, browse to "c:\kvirc\build" and run "cmake .. " (without quotes; .. refers to the parent directory, c:\kvirc, that contains kvirc source code); alternatively, use the cmake gui specifing "c:\kvirc\" as "where is the source code" and "c:\kvirc\build" as "where to build the binaries" and press "configure".
    Note: when trying to configure kvirc using the cmake gui for the first time, you'll be asked for the type of files that cmake has to create: choose "MinGW Makefiles"; if you're using cmake from the commandline, you need to pass to cmake the option -G "MinGW Makefiles".
  - cmake will check your system and create a set of Makefiles you'll need later to compile KVIrc. If it's complaining about some missing library it can't find, probably you haven't setted up properly the environmental variables needed. Refers to the errors to understand what you need to fix.
  - once you get cmake to create the complete set of Makefiles, simply exec a "make" (exactly as used to do under unix); KVIrc will start to get compiled.
  - once the compilation ends, exec a "make install" (exactly as you use to do under unix); the installation system should create a "release" directory (in our example: c:\kvirc\build\release) and move kvirc compiled binaries in there.
  - simply running kvirc from that directory should work :) . If instead it's complaining of some missing dll's, you may need to copy those dlls into kvirc binary directory (in our example: c:\kvirc\build\release) or to get those dlls recognized and loaded automatically from you o.s.
  - if you want to create an installer package, you need to:
    1) fill the binary directory (in our example: c:\kvirc\build\release) with all the files that cmake doesn't create: needed dlls / locale translations / help files / qt plugins
    2)run the KVIrc.nsi script from the build directory (c:\kvirc\build in our example) . Just compile it using nsis and an installer package will be generated.


Common errors, pitfalls, ..
- Currently we're double #define'ing some things, this causes some warnings like this one:
  ----------
  C:\kvirctrunk\src\kvirc\kvs\kvi_kvs_corefunctions.cpp:25:1: warning: "__KVIRC__" redefined
  <command line>:15:1: warning: this is the location of the previous definition
  ----------
  This is a simple warning, it doesn't block compilation or affects any functionality.

- On modules compilation we get a warning like this one:
  ----------
  C:\kvirctrunk\src\modules\clock\libkviclock.cpp:242: warning: `KVIrc_module_info' initialized and declared `extern'
  ----------
  This is a simple warning, it doesn't block compilation or affects any functionality.

- During the compilation, we get a warning like this one:
  ----------
  C:/kvirctrunk/src/kvilib/system/kvi_time.h:0: Warning: No relevant classes found. No output generated.
  ----------
  In the compilation we call qt's moc to parse headers files and expand qt macros; that warning simply means that moc found nothing to expand in that header file. We can fix this removing headers that doesn't need to be moc-ed from the lists in CMakeLists.txt.

- During the compilation, we get a lot of warnings like:
  ----------
  Warning: visibility attribute not supported in this configuration; ignored
  ----------
  The problem here is that visibility is an ELF feature, and windoze uses PE format, not ELF.
