Compiling UnrealIRCd on Windows

''NOTE: This article is for experienced developers only. Everyone else should follow Installing (Windows) instead.''

Should I compile myself?
The UnrealIRCd project provides precompiled binaries and an installer. If you're after something simple then see Installing (Windows).

If, however, you are a developer and want to compile UnrealIRCd yourself, then follow this article. Possible reasons for doing so:
 * 1) You want to compile a 3rd party module on Windows
 * 2) You want to tweak a compile-time setting (such as in include\config.h or include\struct.h)
 * 3) You want to make source code changes

Which compilers are supported
The official UnrealIRCd releases are compiled with Visual Studio 2012 (also called Visual Studio 11.x).

You can download and install Visual Studio 2015 community edition (if you are eligible for it, most people are):
 * 1) Download and install Visual Studio 2015 from https://www.visualstudio.com/downloads/
 * 2) Whenever you need to compile something we say 'Start the Visual Studio .NET Command Prompt' below. You will have to do this via: Start - Visual Studio 2015 - Developer Command Prompt for VS2015. Once the CMD window is up, be sure to change the environment to x86 by typing SETENV /x86.
 * 3) Download https://www.unrealircd.org/files/dev/win/dlltool.exe and put the file somewhere in your path (simply put it in C:\WINDOWS\SYSTEM32)

Other compilers such as Cygwin or MinGW will not work and and are not supported.

External libraries
Fetch the Windows external libraries for UnrealIRCd and extract them all to c:\dev

Compiling
This assumes Visual Studio 2015 or Visual Studio 2017! nmake -f makefile.win32 ^ LIBRESSL_INC_DIR="c:\dev\libressl\include" ^ LIBRESSL_LIB_DIR="c:\dev\libressl\x86" ^ SSLLIB="libcrypto-38.lib libssl-39.lib libtls-11.lib" ^ USE_REMOTEINC=1 ^ LIBCURL_INC_DIR="c:\dev\curl-ssl\include" ^ LIBCURL_LIB_DIR="c:\dev\curl-ssl\builds\libcurl-vc-x86-release-dll-ssl-dll-ipv6-sspi-obj-lib" ^ CARES_LIB_DIR="c:\dev\c-ares\msvc110\cares\dll-release" ^ CARES_INC_DIR="c:\dev\c-ares" ^ CARESLIB="cares.lib" ^ TRE_LIB_DIR="c:\dev\tre\win32\release" ^ TRE_INC_DIR="c:\dev\tre" ^ TRELIB="tre.lib" ^ PCRE2_INC_DIR="c:\dev\pcre2\build" ^ PCRE2_LIB_DIR="c:\dev\pcre2\build\release" ^ PCRE2LIB="pcre2-8.lib"
 * 1) Start the Developer Command Prompt
 * 2) * For Visual Studio 2015: Visual Studio 2015 - Visual Studio Tools - Windows Desktop Command - VS2015 x86 Native Tools Command Prompt
 * 3) * For Visual Studio 2017: Start - Visual Studio 2017 - Visual Studio Tools - VC - x86 Native Tools Command Prompt for targeting x86
 * 4) Change to your UnrealIRCd compile directory, for example c:\dev\unrealircd-4.0.X
 * 5) Put the following command in a batch file called "build.bat":

Now let's compile: build.bat nmake -f makefile.win32 SYMBOLFILE build.bat

It's normal for errors to appear the first time you run build.bat. You then run the nmake command to update the SYMBOLFILE and then re-run build.bat.

Compiling modules
Note: you'll need to compile UnrealIRCd first, see previous step.


 * 1) Start the developer prompt (see previous section on how to do that)
 * 2) Change to your UnrealIRCd compile directory, for example c:\dev\unrealircd-4.0.X
 * 3) Put your module (the .c file) in src\modules\third, eg: c:\dev\unrealircd-4.0.X\src\modules\third\somemod.c
 * 4) Use the same build command as with  but add the following at the end of the long line: CUSTOMMODULE MODULEFILE=somemod With this we mean like: nmake -f makefile.win32 LIBRESSL_INC_DIR="c:\dev\libressl\include" LIBRESSL_LIB_DIR="c:\dev\libressl\x86" ...etc. etc.... CUSTOMMODULE MODULEFILE=somemod
 * 5) Done. You have a DLL file (in src\modules\third)