summaryrefslogtreecommitdiff
path: root/win
diff options
context:
space:
mode:
Diffstat (limited to 'win')
-rw-r--r--win/.gitignore3
-rw-r--r--win/CMakeLists.txt40
-rw-r--r--win/inspircd.rc.cmake8
-rw-r--r--win/inspircd_config.h.cmake13
-rw-r--r--win/inspircd_memory_functions.cpp1
-rw-r--r--win/inspircd_version.h.cmake4
-rw-r--r--win/inspircd_win32wrapper.cpp9
-rw-r--r--win/inspircd_win32wrapper.h59
-rw-r--r--win/make_gnutls_cert.bat26
-rw-r--r--win/modules/CMakeLists.txt42
-rw-r--r--win/win32service.cpp4
-rw-r--r--win/win32service.h2
12 files changed, 122 insertions, 89 deletions
diff --git a/win/.gitignore b/win/.gitignore
index f53ca0701..4b875ca61 100644
--- a/win/.gitignore
+++ b/win/.gitignore
@@ -1,3 +1,2 @@
-inspircd_version.h
-inspircd_config.h
+config.h
inspircd.rc
diff --git a/win/CMakeLists.txt b/win/CMakeLists.txt
index 7be08a3fc..b5812b0c2 100644
--- a/win/CMakeLists.txt
+++ b/win/CMakeLists.txt
@@ -2,25 +2,30 @@ cmake_minimum_required(VERSION 2.8)
project(InspIRCd CXX)
-set(CONF_PATH "conf" CACHE PATH "Configuration file path")
-set(MODULE_PATH "modules" CACHE PATH "Module path")
-set(DATA_PATH "data" CACHE PATH "Data path")
-set(LOG_PATH "logs" CACHE PATH "Log file path")
+set(CONFIG_DIR "conf" CACHE PATH "Configuration file path")
+set(MODULE_DIR "modules" CACHE PATH "Module path")
+set(DATA_DIR "data" CACHE PATH "Data path")
+set(LOG_DIR "logs" CACHE PATH "Log file path")
set(EXTRA_INCLUDES "" CACHE PATH "Extra include paths")
set(EXTRA_LIBS "" CACHE PATH "Extra library paths")
set(INSPIRCD_BASE "${CMAKE_CURRENT_SOURCE_DIR}/../")
+set(SYSTEM_NAME_VERSION ${CMAKE_SYSTEM})
+set(SOCKETENGINE "select")
+
+# Build with multiple processes
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
+
# Use our own NSIS template
set(CMAKE_MODULE_PATH "${INSPIRCD_BASE}/win")
# Grab version info from version.sh
file(STRINGS "${INSPIRCD_BASE}/src/version.sh" VERSIONSH)
-string(REGEX REPLACE ".*InspIRCd-([0-9]*).*" "\\1" MAJOR_VERSION "${VERSIONSH}")
-string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.([0-9]*).*" "\\1" MINOR_VERSION "${VERSIONSH}")
-string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.[0-9]*\\.([0-9]*).*" "\\1" PATCH_VERSION "${VERSIONSH}")
-set(FULL_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
+string(REGEX REPLACE ".*InspIRCd-([0-9]*).*" "\\1" VERSION_MAJOR "${VERSIONSH}")
+string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.([0-9]*).*" "\\1" VERSION_MINOR "${VERSIONSH}")
+string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.[0-9]*\\.([0-9]*).*" "\\1" VERSION_PATCH "${VERSIONSH}")
if(MSVC)
# Without /SAFESEH:NO old libraries compiled with VS 2010 or older won't link correctly to VS2012 (eg, extra module libs)
@@ -56,8 +61,7 @@ if(MSVC)
endif(MSVC)
configure_file("${INSPIRCD_BASE}/win/inspircd.rc.cmake" "${INSPIRCD_BASE}/win/inspircd.rc")
-configure_file("${INSPIRCD_BASE}/win/inspircd_version.h.cmake" "${INSPIRCD_BASE}/win/inspircd_version.h")
-configure_file("${INSPIRCD_BASE}/win/inspircd_config.h.cmake" "${INSPIRCD_BASE}/win/inspircd_config.h")
+configure_file("${INSPIRCD_BASE}/make/template/config.h" "${INSPIRCD_BASE}/include/config.h")
add_executable(inspircd ${INSPIRCD_SOURCES} "${INSPIRCD_BASE}/win/inspircd.rc")
target_link_libraries(inspircd win32_memory)
@@ -79,10 +83,10 @@ file(GLOB_RECURSE EXAMPLE_LOCALES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIR
install(FILES ${EXAMPLE_LOCALES} DESTINATION locales)
# Create an empty data and logs directory and install them
-file(MAKE_DIRECTORY ${DATA_PATH})
-install(DIRECTORY ${DATA_PATH} DESTINATION .)
-file(MAKE_DIRECTORY ${LOG_PATH})
-install(DIRECTORY ${LOG_PATH} DESTINATION .)
+file(MAKE_DIRECTORY ${DATA_DIR})
+install(DIRECTORY ${DATA_DIR} DESTINATION .)
+file(MAKE_DIRECTORY ${LOG_DIR})
+install(DIRECTORY ${LOG_DIR} DESTINATION .)
if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ".") # place runtime libraries next to InspIRCd binary
@@ -90,10 +94,10 @@ if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
set(CPACK_PACKAGE_NAME "InspIRCd IRC Daemon")
set(CPACK_PACKAGE_VENDOR "InspIRCd Development Team")
- set(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION})
- set(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION})
- set(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION})
- set(CPACK_PACKAGE_FILE_NAME "InspIRCd-${FULL_VERSION}")
+ set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
+ set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
+ set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
+ set(CPACK_PACKAGE_FILE_NAME "InspIRCd-${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../docs/COPYING")
set(CPACK_GENERATOR "NSIS")
diff --git a/win/inspircd.rc.cmake b/win/inspircd.rc.cmake
index ba52ad5d2..06012b3f5 100644
--- a/win/inspircd.rc.cmake
+++ b/win/inspircd.rc.cmake
@@ -1,8 +1,8 @@
101 ICON "inspircd.ico"
1 VERSIONINFO
- FILEVERSION @MAJOR_VERSION@,@MINOR_VERSION@,@PATCH_VERSION@
- PRODUCTVERSION @MAJOR_VERSION@,@MINOR_VERSION@,@PATCH_VERSION@
+ FILEVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@
+ PRODUCTVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -17,14 +17,14 @@ BEGIN
BEGIN
BLOCK "040904b0"
BEGIN
- VALUE "Comments", "InspIRCd @MAJOR_VERSION@.@MINOR_VERSION@ IRC Daemon"
+ VALUE "Comments", "InspIRCd @VERSION_MAJOR@.@VERSION_MINOR@ IRC Daemon"
VALUE "CompanyName", "InspIRCd Development Team"
VALUE "FileDescription", "InspIRCd"
VALUE "FileVersion", "@FULL_VERSION@"
VALUE "InternalName", "InspIRCd"
VALUE "LegalCopyright", "Copyright (c) 2015 InspIRCd Development Team"
VALUE "OriginalFilename", "inspircd.exe"
- VALUE "ProductName", "InspIRCd - The Inspire IRC Daemon"
+ VALUE "ProductName", "InspIRCd - Internet Relay Chat Daemon"
VALUE "ProductVersion", "@FULL_VERSION@"
END
END
diff --git a/win/inspircd_config.h.cmake b/win/inspircd_config.h.cmake
deleted file mode 100644
index f98cd391e..000000000
--- a/win/inspircd_config.h.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef INSPIRCD_CONFIG_H
-#define INSPIRCD_CONFIG_H
-
-#define CONFIG_PATH "@CONF_PATH@"
-#define MOD_PATH "@MODULE_PATH@"
-#define DATA_PATH "@DATA_PATH@"
-#define LOG_PATH "@LOG_PATH@"
-#define MAXBUF 514
-
-#include "inspircd_win32wrapper.h"
-#include "threadengines/threadengine_win32.h"
-
-#endif \ No newline at end of file
diff --git a/win/inspircd_memory_functions.cpp b/win/inspircd_memory_functions.cpp
index 398708317..2093bf3a8 100644
--- a/win/inspircd_memory_functions.cpp
+++ b/win/inspircd_memory_functions.cpp
@@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+
#include <windows.h>
#include <exception>
#include <new>
diff --git a/win/inspircd_version.h.cmake b/win/inspircd_version.h.cmake
deleted file mode 100644
index 1aec12b24..000000000
--- a/win/inspircd_version.h.cmake
+++ /dev/null
@@ -1,4 +0,0 @@
-#define BRANCH "@MAJOR_VERSION@.@MINOR_VERSION@"
-#define VERSION "@FULL_VERSION@"
-#define REVISION "0"
-#define SYSTEM "@CMAKE_SYSTEM@" \ No newline at end of file
diff --git a/win/inspircd_win32wrapper.cpp b/win/inspircd_win32wrapper.cpp
index d66797f13..3e0a264a5 100644
--- a/win/inspircd_win32wrapper.cpp
+++ b/win/inspircd_win32wrapper.cpp
@@ -22,6 +22,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+
#include "inspircd_win32wrapper.h"
#include "inspircd.h"
#include "configreader.h"
@@ -85,7 +86,7 @@ CoreExport int insp_inet_pton(int af, const char *src, void *dst)
}
return 1;
}
-
+
return 0;
}
@@ -163,7 +164,7 @@ int getopt_long(int ___argc, char *const *___argv, const char *__shortopts, cons
// optind++; // Trash this next argument, we won't be needing it.
par = ___argv[optind-1];
}
- }
+ }
// increment the argument for next time
// optind++;
@@ -189,9 +190,9 @@ int getopt_long(int ___argc, char *const *___argv, const char *__shortopts, cons
{
if (__longopts[i].val == -1 || par == 0)
return 1;
-
+
return __longopts[i].val;
- }
+ }
break;
}
}
diff --git a/win/inspircd_win32wrapper.h b/win/inspircd_win32wrapper.h
index d7ceb73aa..d65d4eb92 100644
--- a/win/inspircd_win32wrapper.h
+++ b/win/inspircd_win32wrapper.h
@@ -19,18 +19,16 @@
*/
+#pragma once
+
/* Windows Port
Wrapper Functions/Definitions
By Burlex */
-
-#ifndef INSPIRCD_WIN32WRAPPER_H
-#define INSPIRCD_WIN32WRAPPER_H
-
/*
* Starting with PSAPI version 2 for Windows 7 and Windows Server 2008 R2, this function is defined as K32GetProcessMemoryInfo in Psapi.h and exported
* in Kernel32.lib and Kernel32.dll. However, you should always call this function as GetProcessMemoryInfo. To ensure correct resolution of symbols
* for programs that will run on earlier versions of Windows, add Psapi.lib to the TARGETLIBS macro and compile the program with PSAPI_VERSION=1.
- *
+ *
* We do this before anything to make sure it's done.
*/
#define PSAPI_VERSION 1
@@ -45,9 +43,6 @@
#define VC_EXTRALEAN
#define WIN32_LEAN_AND_MEAN
-/* They just have to be *different*, don't they. */
-#define PATH_MAX MAX_PATH
-
/* Macros for exporting symbols - dependant on what is being compiled */
#ifdef DLL_BUILD
@@ -74,6 +69,17 @@
#include <sys/stat.h>
#include <direct.h>
#include <process.h>
+#include <io.h>
+
+#define F_OK 0 /* test for existence of file */
+#define X_OK (1<<0) /* test for execute or search permission */
+#define W_OK (1<<1) /* test for write permission */
+#define R_OK (1<<2) /* test for read permission */
+
+// Windows defines these already.
+#undef ERROR
+#undef min
+#undef max
/* strcasecmp is not defined on windows by default */
#define strcasecmp _stricmp
@@ -97,6 +103,10 @@ CoreExport const char * insp_inet_ntop(int af, const void * src, char * dst, soc
#define vsnprintf _vsnprintf
#endif
+#ifndef va_copy
+#define va_copy(dest, src) (dest = src)
+#endif
+
/* Unix-style sleep (argument is in seconds) */
__inline void sleep(int seconds) { Sleep(seconds * 1000); }
@@ -104,9 +114,12 @@ __inline void sleep(int seconds) { Sleep(seconds * 1000); }
#define popen _popen
#define pclose _pclose
+/* _access */
+#define access _access
+
/* IPV4 only convert string to address struct */
__inline int inet_aton(const char *cp, struct in_addr *addr)
-{
+{
addr->s_addr = inet_addr(cp);
return (addr->s_addr == INADDR_NONE) ? 0 : 1;
};
@@ -191,8 +204,6 @@ CoreExport void closedir(DIR * handle);
void * ::operator new(size_t iSize);
void ::operator delete(void * ptr);
-#define DISABLE_WRITEV
-
#include <exception>
class CWin32Exception : public std::exception
@@ -208,5 +219,29 @@ private:
DWORD dwErrorCode;
};
-#endif
+// Same value as EXIT_STATUS_FORK (EXIT_STATUS_FORK is unused on Windows)
+#define EXIT_STATUS_SERVICE 4
+
+// POSIX iovec
+struct iovec
+{
+ void* iov_base; // Starting address
+ size_t iov_len; // Number of bytes to transfer
+};
+// Windows WSABUF with POSIX field names
+struct WindowsIOVec
+{
+ // POSIX iovec has iov_base then iov_len, WSABUF in Windows has the fields in reverse order
+ u_long iov_len; // Number of bytes to transfer
+ char FAR* iov_base; // Starting address
+};
+
+inline ssize_t writev(int fd, const WindowsIOVec* iov, int count)
+{
+ DWORD sent;
+ int ret = WSASend(fd, reinterpret_cast<LPWSABUF>(const_cast<WindowsIOVec*>(iov)), count, &sent, 0, NULL, NULL);
+ if (ret == 0)
+ return sent;
+ return -1;
+}
diff --git a/win/make_gnutls_cert.bat b/win/make_gnutls_cert.bat
index 97792cc29..159cd1012 100644
--- a/win/make_gnutls_cert.bat
+++ b/win/make_gnutls_cert.bat
@@ -1,14 +1,14 @@
-@echo off
-
-echo This program will generate SSL certificates for m_ssl_gnutls.so
-echo Ensure certtool.exe is in your system path. It can be downloaded
-echo at ftp://ftp.gnu.org/gnu/gnutls/w32/. If you do not know the answer
-echo to one of the questions just press enter.
-echo.
-
-pause
-
-certtool --generate-privkey --outfile conf/key.pem
-certtool --generate-self-signed --load-privkey conf/key.pem --outfile conf/cert.pem
-
+@echo off
+
+echo This program will generate SSL certificates for m_ssl_gnutls.so
+echo Ensure certtool.exe is in your system path. It can be downloaded
+echo at ftp://ftp.gnu.org/gnu/gnutls/w32/. If you do not know the answer
+echo to one of the questions just press enter.
+echo.
+
+pause
+
+certtool --generate-privkey --outfile conf/key.pem
+certtool --generate-self-signed --load-privkey conf/key.pem --outfile conf/cert.pem
+
pause \ No newline at end of file
diff --git a/win/modules/CMakeLists.txt b/win/modules/CMakeLists.txt
index 5778d944a..2c2617e2b 100644
--- a/win/modules/CMakeLists.txt
+++ b/win/modules/CMakeLists.txt
@@ -2,33 +2,41 @@
# so copy the file out of extra/
file(COPY "${INSPIRCD_BASE}/src/modules/extra/m_regex_stdlib.cpp" DESTINATION "${INSPIRCD_BASE}/src/modules/")
-file(GLOB INSPIRCD_MODULES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIRCD_BASE}/src/commands/*.cpp" "${INSPIRCD_BASE}/src/modules/*.cpp")
+file(GLOB INSPIRCD_MODULES "${INSPIRCD_BASE}/src/coremods/core_*" "${INSPIRCD_BASE}/src/modules/m_*")
list(SORT INSPIRCD_MODULES)
add_definitions("-DDLL_BUILD")
foreach(MODULE_NAME ${INSPIRCD_MODULES})
- string(REGEX REPLACE "^.*[/\\](.*).cpp$" "\\1.so" SO_NAME ${MODULE_NAME})
- add_library(${SO_NAME} MODULE ${MODULE_NAME})
- set_target_properties(${SO_NAME} PROPERTIES PREFIX "" SUFFIX "")
+ if(IS_DIRECTORY "${MODULE_NAME}")
+ string(REGEX REPLACE "^.*[/\\](.*)$" "\\1" BASE_NAME ${MODULE_NAME})
+ else(IS_DIRECTORY "${MODULE_NAME}")
+ string(REGEX REPLACE "^.*[/\\](.*).cpp$" "\\1" BASE_NAME ${MODULE_NAME})
+ endif(IS_DIRECTORY "${MODULE_NAME}")
+ set(SO_NAME "${BASE_NAME}.so")
+
+ if(IS_DIRECTORY "${MODULE_NAME}")
+ file(GLOB MODULES_SUBDIR_SRCS "${MODULE_NAME}/*.cpp")
+ list(SORT MODULES_SUBDIR_SRCS)
+ add_library(${SO_NAME} MODULE ${MODULES_SUBDIR_SRCS})
+ else(IS_DIRECTORY "${MODULE_NAME}")
+ add_library(${SO_NAME} MODULE ${MODULE_NAME})
+ endif(IS_DIRECTORY "${MODULE_NAME}")
+
+ # Generate the module and set its linker flags, also set it to depend on the main executable to be built beforehand
target_link_libraries(${SO_NAME} inspircd)
add_dependencies(${SO_NAME} inspircd)
if(MSVC)
target_link_libraries(${SO_NAME} win32_memory)
add_dependencies(${SO_NAME} win32_memory)
endif(MSVC)
- install(TARGETS ${SO_NAME} DESTINATION modules)
-endforeach(MODULE_NAME ${INSPIRCD_MODULES})
-file(GLOB INSPIRCD_MODULES_SPANNINGTREE RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIRCD_BASE}/src/modules/m_spanningtree/*.cpp")
-list(SORT INSPIRCD_MODULES_SPANNINGTREE)
+ set_target_properties(${SO_NAME} PROPERTIES
+ PREFIX ""
+ SUFFIX ""
+ COMPILE_DEFINITIONS "MODNAME=\"${BASE_NAME}\""
+ )
-add_library(m_spanningtree.so MODULE ${INSPIRCD_MODULES_SPANNINGTREE})
-set_target_properties(m_spanningtree.so PROPERTIES PREFIX "" SUFFIX "")
-target_link_libraries(m_spanningtree.so inspircd)
-add_dependencies(m_spanningtree.so inspircd)
-if(MSVC)
- target_link_libraries(m_spanningtree.so win32_memory)
- add_dependencies(m_spanningtree.so win32_memory)
-endif(MSVC)
-install(TARGETS m_spanningtree.so DESTINATION modules) \ No newline at end of file
+ # Set the module to be installed to the module directory
+ install(TARGETS ${SO_NAME} DESTINATION ${MODULE_DIR})
+endforeach(MODULE_NAME ${INSPIRCD_MODULES})
diff --git a/win/win32service.cpp b/win/win32service.cpp
index c34e9957d..448829a1d 100644
--- a/win/win32service.cpp
+++ b/win/win32service.cpp
@@ -17,7 +17,7 @@
*/
-#include "inspircd_config.h"
+#include "config.h"
#include "inspircd.h"
#include "exitcodes.h"
#include <windows.h>
@@ -280,7 +280,7 @@ int main(int argc, char* argv[])
}
else
{
- return EXIT_STATUS_INTERNAL;
+ return EXIT_STATUS_SERVICE;
}
}
return 0;
diff --git a/win/win32service.h b/win/win32service.h
index e4500be13..d8177eabc 100644
--- a/win/win32service.h
+++ b/win/win32service.h
@@ -15,7 +15,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+
#pragma once
+
#ifdef _WIN32
/* Hook for win32service.cpp to exit properly with the service specific error code */