--- /dev/null
+project(Plexus4 C)
+cmake_minimum_required(VERSION 3.2)
+
+include(CheckFunctionExists)
+include(CheckIncludeFiles)
+include(CheckLibraryExists)
+include(GNUInstallDirs)
+# If found, will set OPENSSL_FOUND, OPENSSL_INCLUDE_DIR, OPENSSL_LIBRARIES and OPENSSL_VERSION
+include(FindOpenSSL)
+include(TestBigEndian)
+include(CheckSymbolExists)
+
+TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
+
+option(PREFIX "Installation location prefix" "/usr/local/bin")
+option(GEOIP "Enable GeoIP support" OFF)
+option(LUA "Enable LUA" OFF)
+option(JSON "Enable JSON support, required for upgrading" OFF)
+option(HTTPD "Enable libmicrohttpd" OFF)
+option(ASSERTS "Enable asserts" OFF)
+option(HALFOPS "Enable halfops (+h / %) for channels" ON)
+option(CHANAQ "Enable owner (+q / ~) for channels" ON)
+
+include_directories(${Plexus4_SOURCE_DIR}/include
+ ${Plexus4_SOURCE_DIR})
+
+function(AX_CHECK_LIB_IPV4)
+ CHECK_FUNCTION_EXISTS(getaddrinfo HAVE_GETADDRINFO)
+ CHECK_FUNCTION_EXISTS(getnameinfo HAVE_GETNAMEINFO)
+ find_library(SOCKET_LIBRARIES NAMES socket REQUIRED)
+ CHECK_SYMBOL_EXISTS(sockaddr_in "sys/types.h;sys/socket.h;netdb.h" HAVE_SOCKADDR_IN)
+ CHECK_SYMBOL_EXISTS("struct sockaddr_storage" "sys/types.h;sys/socket.h;netdb.h" HAVE_SOCKADDR_STORAGE)
+endfunction()
+
+AX_CHECK_LIB_IPV4()
+if (NOT HAVE_SOCKADDR_IN)
+ message("struct sockaddr_in not found")
+endif()
+
+SET(NO_STRICT_ALIASING "-fno-strict-aliasing")
+
+SET(CMAKE_C_FLAGS "${NO_STRICT_ALIASING}")
+SET(C_STANDARD 99)
+
+find_library(IPV4_LIBRARIES NAMES IPV4 REQUIRED)
+find_library(IPV6_LIBRARIES NAMES IPV6 REQUIRED)
+
+message("${IPV6_LIBRARIES}")
+message("${OPENSSL_LIBRARIES}")
+
+CHECK_FUNCTION_EXISTS(strtok_r HAVE_STRTOK_R)
+CHECK_FUNCTION_EXISTS(usleep HAVE_USLEEP)
+CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT)
+CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY)
+
+CHECK_INCLUDE_FILES(crypt.h HAVE_CRYPT_H)
+CHECK_INCLUDE_FILES(sys/resource.h HAVE_SYS_RESOURCE_H)
+CHECK_INCLUDE_FILES(sys/param.h HAVE_SYS_PARAM_H)
+CHECK_INCLUDE_FILES(types.h HAVE_TYPES_H)
+CHECK_INCLUDE_FILES(socket.h HAVE_SOCKET_H)
+CHECK_INCLUDE_FILES(sys/wait.h HAVE_SYS_WAIT_H)
+CHECK_INCLUDE_FILES(wait.h HAVE_WAIT_H)
+
+find_program(YACC yacc DOC "Path to YACC")
+find_program(LEX lex DOC "Path to LEX")
+find_program(INSTALL install DOC "Path to INSTALL")
+
+message("${YACC}")
+message("${LEX}")
+message("${INSTALL}")
+
+if (GEOIP)
+ find_path(GEOIP_INCLUDE_DIRS GeoIP.h)
+ find_library(GEOIP_LIBRARIES NAMES GeoIP REQUIRED)
+ include_directories(${GEOIP_INCLUDE_DIRS})
+ SET(HAVE_LIBGEOIP ON)
+endif()
+
+if (JSON)
+ find_path(JANSSON_INCLUDE_DIRS jansson.h)
+ find_library(JANSSON_LIBRARIES NAMES jansson REQUIRED)
+ include_directories(${JANSSON_INCLUDE_DIRS})
+ SET(HAVE_LIBJANSSON ON)
+endif()
+
+if (ASSERTS)
+ SET(NDEBUG 1)
+endif()
+
+
+
+SET(NICKNAMEHISTORYLENGTH 32 * 1024)
+SET(MP_CHUNK_SIZE_CHANNEL 1024 * 1024)
+SET(MP_CHUNK_SIZE_MEMBER 2048 * 1024)
+SET(MP_CHUNK_SIZE_BAN 1024 * 1024)
+SET(MP_CHUNK_SIZE_CLIENT 1024 * 1024)
+SET(MP_CHUNK_SIZE_LCLIENT 512 * 1024)
+SET(MP_CHUNK_SIZE_DNODE 32 * 1024)
+SET(MP_CHUNK_SIZE_DBUF 512 * 1024)
+SET(MP_CHUNK_SIZE_AUTH 128 * 1024)
+SET(MP_CHUNK_SIZE_DNS 64 * 1024)
+SET(MP_CHUNK_SIZE_WATCH 8 * 1024)
+SET(MP_CHUNK_SIZE_USERHOST 128 * 1024)
+SET(MP_CHUNK_SIZE_IP_ENTRY 128 * 1024)
+SET(MP_CHUNK_SIZE_INVITE 8 * 1024)
+
+add_definitions(HAVE_CONFIG_H)
+configure_file(config.h.cmake config.h)
+
+
+#add_subdirectory(src)
+#add_subdirectory(tools)
+#add_subdirectory(libltdl)
+#add_subdirectory(doc)
+#add_subdirectory(help)
+#add_subdirectory(modules)
+#add_subdirectory(ircd)
+#add_subdirectory(scripts)
+