From 3e0c1ccc186bfd59c8c8f05bbca595c4b15f9bd7 Mon Sep 17 00:00:00 2001 From: Thomas Arp <357770+welcor@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:23:10 +0200 Subject: [PATCH] Support cmake (#153) * First cmake list file, simple docs. TODO: utils folder. * Support for building utils * All fields except HAVE_DOPRNT in place * Now builds and runs :) --- .gitignore | 2 - CMakeLists.txt | 396 +++++++++++++++++++++++++ build/create_solution.bat | 1 - doc/README.CMAKE.md | 93 ++++++ build/README.md => doc/README.MSVC2022 | 34 ++- src/conf.h.cmake.in | 337 +++++++++++++++++++++ src/util/CMakeLists.txt | 46 +++ 7 files changed, 892 insertions(+), 17 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 build/create_solution.bat create mode 100644 doc/README.CMAKE.md rename build/README.md => doc/README.MSVC2022 (60%) create mode 100644 src/conf.h.cmake.in create mode 100644 src/util/CMakeLists.txt diff --git a/.gitignore b/.gitignore index e3e03a9..4611369 100644 --- a/.gitignore +++ b/.gitignore @@ -11,8 +11,6 @@ src/.accepted src/depend src/util/depend build/* -!build/create_solution.bat -!build/README.md # Do not commit files from players lib/plrfiles/A-E/* diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..9fa9a76 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,396 @@ +cmake_minimum_required(VERSION 3.12) +project(TbaMUD C) + +set(CMAKE_C_STANDARD 99) + +# Include checker modules +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CheckTypeSize) +include(CheckStructHasMember) +include(CheckSymbolExists) +include(CheckCSourceCompiles) + +# Output paths +set(BIN_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/bin) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR}) + +# Include source and build paths +include_directories(src ${CMAKE_BINARY_DIR}) + +# ========== Compiler flags ========== +if (CMAKE_COMPILER_IS_GNUCC) + include(CheckCCompilerFlag) + + check_c_compiler_flag(-Wall SUPPORTS_WALL) + check_c_compiler_flag(-Wno-char-subscripts SUPPORTS_WNO_CHAR_SUBSCRIPTS) + + if (SUPPORTS_WALL) + set(MYFLAGS "-Wall") + if (SUPPORTS_WNO_CHAR_SUBSCRIPTS) + set(MYFLAGS "${MYFLAGS} -Wno-char-subscripts") + endif() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MYFLAGS}") + endif() +endif() + +# ========== Header checks ========== +check_include_file("fcntl.h" HAVE_FCNTL_H) +check_include_file("errno.h" HAVE_ERRNO_H) +check_include_file("string.h" HAVE_STRING_H) +check_include_file("strings.h" HAVE_STRINGS_H) +check_include_file("limits.h" HAVE_LIMITS_H) +check_include_file("sys/select.h" HAVE_SYS_SELECT_H) +check_include_file("sys/wait.h" HAVE_SYS_WAIT_H) +check_include_file("sys/types.h" HAVE_SYS_TYPES_H) +check_include_file("unistd.h" HAVE_UNISTD_H) +check_include_file("memory.h" HAVE_MEMORY_H) +check_include_file("assert.h" HAVE_ASSERT_H) +check_include_file("arpa/telnet.h" HAVE_ARPA_TELNET_H) +check_include_file("arpa/inet.h" HAVE_ARPA_INET_H) +check_include_file("sys/stat.h" HAVE_SYS_STAT_H) +check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H) +check_include_file("sys/resource.h" HAVE_SYS_RESOURCE_H) +check_include_file("netinet/in.h" HAVE_NETINET_IN_H) +check_include_file("netdb.h" HAVE_NETDB_H) +check_include_file("signal.h" HAVE_SIGNAL_H) +check_include_file("sys/uio.h" HAVE_SYS_UIO_H) +check_include_file("mcheck.h" HAVE_MCHECK_H) +check_include_file("stdlib.h" HAVE_STDLIB_H) +check_include_file("stdarg.h" HAVE_STDARG_H) +check_include_file("float.h" HAVE_FLOAT_H) + +if (HAVE_STDLIB_H AND HAVE_STDARG_H AND HAVE_STRING_H AND HAVE_FLOAT_H) + set(STDC_HEADERS 1) +endif() + +# macros +macro(check_run_return_value CODE EXPECTED_RESULT VAR_NAME) + set(_file "${CMAKE_BINARY_DIR}/check_run_${VAR_NAME}.c") + file(WRITE "${_file}" "${CODE}") + try_run(_run_result _compile_result + ${CMAKE_BINARY_DIR} ${_file} + ) + if (_compile_result EQUAL 0 AND _run_result EQUAL ${EXPECTED_RESULT}) + set(${VAR_NAME} TRUE) + else() + set(${VAR_NAME} FALSE) + endif() +endmacro() + +# ========== Function checks ========== +foreach(FUNC gettimeofday select snprintf strcasecmp strdup strerror + stricmp strlcpy strncasecmp strnicmp strstr vsnprintf vprintf + inet_addr inet_aton) + string(TOUPPER "${FUNC}" _upper_name) + check_function_exists(${FUNC} HAVE_${_upper_name}) +endforeach() + +if (NOT HAVE_VPRINTF) + check_function_exists(_doprnt HAVE_DOPRNT) +endif() + + +# ========== Type checks ========== +check_type_size("pid_t" HAVE_PID_T) +check_type_size("size_t" HAVE_SIZE_T) +check_type_size("ssize_t" HAVE_SSIZE_T) +set(CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h") +check_type_size("socklen_t" HAVE_SOCKLEN_T) +unset(CMAKE_EXTRA_INCLUDE_FILES) + + +if (NOT HAVE_PID_T) + set(pid_t int) +endif() + +if (NOT HAVE_SIZE_T) + set(size_t "unsigned") +endif() + +if (NOT HAVE_SSIZE_T) + set(ssize_t int) +endif() + +if (NOT HAVE_SOCKLEN_T) + set(socklen_t int) +endif() + +# ========== const ========== +check_c_source_compiles(" +int main() { + +/* Ultrix mips cc rejects this. */ +typedef int charset[2]; const charset x; +/* SunOS 4.1.1 cc rejects this. */ +char const *const *ccp; +char **p; +/* NEC SVR4.0.2 mips cc rejects this. */ +struct point {int x, y;}; +static struct point const zero = {0,0}; +/* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in an arm + of an if-expression whose if-part is not a constant expression */ +const char *g = \"string\"; +ccp = &g + (g ? g-g : 0); +/* HPUX 7.0 cc rejects these. */ +++ccp; +p = (char**) ccp; +ccp = (char const *const *) p; +{ /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; +} +{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; +} +{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; +} +{ /* AIX XL C 1.02.0.0 rejects this saying + \"k.c\", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +" HAVE_CONST) + +if (HAVE_CONST) + set(CONST_KEYWORD const) +else() + set(CONST_KEYWORD "") +endif() + +# ========== Struct checks ========== +if (HAVE_NETINET_IN_H) + check_struct_has_member("struct in_addr" s_addr netinet/in.h HAVE_STRUCT_IN_ADDR) +endif() + +# ========== crypt()/libcrypt ========== + +find_library(CRYPT_LIBRARY crypt) +if (CRYPT_LIBRARY) + message(STATUS "Found libcrypt: ${CRYPT_LIBRARY}") + list(APPEND EXTRA_LIBS ${CRYPT_LIBRARY}) + set(_saved_lib_list ${CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_LIBRARIES ${CRYPT_LIBRARY}) + check_include_file("crypt.h" HAVE_CRYPT_H) + check_function_exists(crypt CIRCLE_CRYPT) + + check_run_return_value(" +#include +#include +${HAVE_CRYPT_H} ? \"#include \" : \"\" + +int main(void) +{ + char pwd[11], pwd2[11]; + + strncpy(pwd, (char *)crypt(\"FooBar\", \"BazQux\"), 10); + pwd[10] = '\\\\0'; + strncpy(pwd2, (char *)crypt(\"xyzzy\", \"BazQux\"), 10); + pwd2[10] = '\\\\0'; + if (strcmp(pwd, pwd2) == 0) + exit(0); + exit(1); +} + " 0 HAVE_UNSAFE_CRYPT) + + set(CMAKE_REQUIRED_LIBRARIES ${_saved_lib_list}) +endif() + + +# ========== network libs ========== +check_function_exists(gethostbyaddr HAVE_GETHOSTBYADDR) +if (NOT HAVE_GETHOSTBYADDR) + message(STATUS "gethostbyaddr() not available, trying nsllib") + find_library(NSL_LIBRARY nsl) + if (NSL_LIBRARY) + message(STATUS "...nsllib found.") + list(APPEND EXTRA_LIBS ${NSL_LIBRARY}) + endif() +endif() + +check_function_exists(socket HAVE_SOCKET) +if (NOT HAVE_SOCKET) + message(STATUS "socket() not available, trying socketlib") + find_library(SOCKET_LIBRARY socket) + if (SOCKET_LIBRARY) + message(STATUS "...socketlib found") + list(APPEND EXTRA_LIBS ${SOCKET_LIBRARY}) + endif() +endif() + +# ========== time.h needs special treatment ========== +check_include_file("sys/time.h" HAVE_SYS_TIME_H) +check_include_file("sys/time.h" HAVE_TIME_H) + +if (HAVE_SYS_TIME_H AND HAVE_TIME_H) + check_c_source_compiles(" +#include +#include +#include +int main() { +struct tm *tp; +; return 0; } + " TIME_WITH_SYS_TIME) +endif() + +# ========== Determine return value of signal() ========== +check_c_source_compiles(" + #include + int handler(int sig) { return 0; } + int main() { + signal(SIGINT, handler); + return 1; + } +" SIGNAL_RETURNS_INT FAIL_REGEX ".*incompatible pointer type.*") + +check_c_source_compiles(" + #include + void handler(int sig) { } + int main() { + signal(SIGINT, handler); + return 1; + } +" SIGNAL_RETURNS_VOID FAIL_REGEX ".*incompatible pointer type.*") + +if (SIGNAL_RETURNS_INT) + message(STATUS "signal() returns int.") + set(RETSIGTYPE int) +elseif (SIGNAL_RETURNS_VOID) + message(STATUS "signal() returns void.") + set(RETSIGTYPE void) +else() + message(FATAL_ERROR "Could not determine return value from signal handler.") +endif() + +# ========== Define general UNIX-system ========== +if (UNIX) + set(CIRCLE_UNIX 1) +endif() + +set(PROTO_FUNCTIONS + accept + bind + gettimeofday + atoi + atol + bzero + chdir + close + fclose + fcntl + fflush + fprintf + fputc + fread + fscanf + fseek + fwrite + getpeername + getpid + getrlimit + getsockname + htonl + htons + inet_addr + inet_aton + inet_ntoa + listen + ntohl + perror + printf + qsort + read + remove + rewind + select + setitimer + setrlimit + setsockopt + snprintf + sprintf + sscanf + strcasecmp + strdup + strerror + stricmp + strlcpy + strncasecmp + strnicmp + system + time + unlink + vsnprintf + write + socket +) + +configure_file( + ${CMAKE_SOURCE_DIR}/src/conf.h.cmake.in + ${CMAKE_BINARY_DIR}/tmp_conf.h +) + +macro(check_function_prototype FUNCTION) + set(_code " +#define NO_LIBRARY_PROTOTYPES +#define __COMM_C__ +#define __ACT_OTHER_C__ +#include \"${CMAKE_BINARY_DIR}/tmp_conf.h\" +#include \"${CMAKE_SOURCE_DIR}/src/sysdep.h\" +#ifdef ${FUNCTION} + error - already defined! +#endif +void ${FUNCTION}(int a, char b, int c, char d, int e, char f, int g, char h); + +int main() { + +; return 0; } + ") + string(TOUPPER "${FUNCTION}" _upper_name) + check_c_source_compiles("${_code}" NEED_${_upper_name}_PROTO FAIL_REGEX ".*incompatible pointer type.*") + if (NEED_${_upper_name}_PROTO) + message(STATUS "${FUNCTION}() has no prototype, NEED_${_upper_name}_PROTO set!") + else() + message(STATUS "${FUNCTION}() has a prototype, not setting NEED_${_upper_name}_PROTO") + endif() +endmacro() + + +foreach (FUNC ${PROTO_FUNCTIONS}) + check_function_prototype(${FUNC}) +endforeach() + + +# ========== Generate conf.h ========== +configure_file( + ${CMAKE_SOURCE_DIR}/src/conf.h.cmake.in + ${CMAKE_BINARY_DIR}/conf.h +) + + + +# ========== Source-filer ========== +file(GLOB SRC_FILES src/*.c) + +# ========== Bygg kjørbar ========== +add_executable(circle ${SRC_FILES}) +target_link_libraries(circle ${EXTRA_LIBS}) + +add_subdirectory(src/util) + +if (MEMORY_DEBUG) + message(STATUS "MEMORY_DEBUG is activated, setting up zmalloc") + target_compile_definitions(circle PRIVATE MEMORY_DEBUG) +endif() diff --git a/build/create_solution.bat b/build/create_solution.bat deleted file mode 100644 index ab60043..0000000 --- a/build/create_solution.bat +++ /dev/null @@ -1 +0,0 @@ -cmake -B . -S ..\src -G "Visual Studio 17 2022" \ No newline at end of file diff --git a/doc/README.CMAKE.md b/doc/README.CMAKE.md new file mode 100644 index 0000000..0408e2a --- /dev/null +++ b/doc/README.CMAKE.md @@ -0,0 +1,93 @@ +Updated 2025-04 + +## Building TbaMUD with the cmake tool + +# Building with CMake + +This document describes how to configure, build and install tbamud +from source code using the CMake build tool. To build with CMake, you of +course first have to install CMake. The minimum required version of CMake is +specified in the file `CMakeLists.txt` found in the top of the tbamud source +tree. Once the correct version of CMake is installed you can follow the +instructions below for the platform you are building on. + +CMake builds can be configured either from the command line, or from one of +CMake's GUIs. + +NOTE: The current CMakeLists.txt only supports linux. + +# Configuring + +A CMake configuration of tbamud is similar to the autotools build of curl. +It consists of the following steps after you have unpacked the source. + +We recommend building with CMake on Windows. + +## Using `cmake` + +You can configure for in source tree builds or for a build tree +that is apart from the source tree. + +- Build in a separate directory (parallel to the source tree in this + example). The build directory is created for you. This is recommended over + building in the source tree to separate source and build artifacts. + +```shell +$ cmake -B build -S . +``` + +- Build in the source tree. Not recommended. + +```shell +$ cmake -B . +``` + +The examples below will assume you have created a build folder. + +The above commands will generate the build files. If you need to regenerate +the files, you can delete the cmake cache file, and rerun the above command: + +```shell +$ rm build/CMakeCache.txt +``` + +Once the build files are generated, the build is run with cmake + +```shell +$ cmake --build build +``` + +This will generate the object files in a subdirectory under the specified +build folder and link the executable. The resulting binaries will be in the +bin/ folder. + +### Utilities + +It is possible to build only single tools, none or all of them, +by specifying the target in the build command: + +```shell +# only build the mud +$ cmake --build build --target circle + +# only build tools +$ cmake --build build --target utils + +# only build one tool +$ cmake --build build --target wld2html +``` + +### Debugging memory + +In case you want to run the mud with memory debugging turned on, you +can set the MEMORY_DEBUG flag during configuration by specifying the +flag: + +```shell +$ cmake -B build -S . -DMEMORY_DEBUG:int=1 +$ cmake --build build +``` + +When the mud is shut down, the zmalloc code will identify any leaks in your code. +Note that memory debugging may consume quite a lot of memory and take some time +to be handled on shutdown. \ No newline at end of file diff --git a/build/README.md b/doc/README.MSVC2022 similarity index 60% rename from build/README.md rename to doc/README.MSVC2022 index bd84d9a..7cca485 100644 --- a/build/README.md +++ b/doc/README.MSVC2022 @@ -1,15 +1,21 @@ -### Overview -This guide describes how to build TbaMUD in the Visual Studio through the new experimental CMake environment. - -### Prerequisites -* [Visual Studio 2022+](https://visualstudio.microsoft.com/ru/vs/) -* [CMake 3.27+](https://cmake.org/) - -### Build Steps -1. Goto the folder `src` and copy `conf.h.win` to `conf.h`. - -2. Goto the folder `build` and execute `create_solution.bat`. - -3. Open `build/circle.sln` in Visual Studio. - +Updated: Apr 2025 + Compiling CircleMUD under Microsoft Windows XP + using Microsoft Visual C++ 2022 (8.0) + +### Overview +This guide describes how to build TbaMUD in the Visual Studio through the new experimental CMake environment. + +### Prerequisites +* [Visual Studio 2022+](https://visualstudio.microsoft.com/ru/vs/) +* [CMake 3.27+](https://cmake.org/) + +### Build Steps +1. Goto the folder `src` and copy `conf.h.win` to `conf.h`. + +2. Run this command in the root folder: + + cmake -B build -S . -G "Visual Studio 17 2022" + +3. Open `build/circle.sln` in Visual Studio. + 4. Compile and run. \ No newline at end of file diff --git a/src/conf.h.cmake.in b/src/conf.h.cmake.in new file mode 100644 index 0000000..541d14c --- /dev/null +++ b/src/conf.h.cmake.in @@ -0,0 +1,337 @@ +/* src/conf.h.cmake.in. Used as basis for conf.h when building with cmake */ + +#ifndef _CONF_H_ +#define _CONF_H_ + +/* Define to empty if the keyword does not work. */ +#define const @CONST_KEYWORD@ + +/* Define if you don't have vprintf but do have _doprnt. */ +#cmakedefine HAVE_DOPRNT + +/* Define if you have that is POSIX.1 compatible. */ +#cmakedefine HAVE_SYS_WAIT_H + +/* Define if you have the vprintf function. */ +#cmakedefine HAVE_VPRINTF + +/* Define to `int' if doesn't define. */ +#cmakedefine pid_t @pid_t@ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE @RETSIGTYPE@ + +/* Define to `unsigned' if doesn't define. */ +#cmakedefine size_t @size_t@ + +/* Define if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS + +/* Define if you can safely include both and . */ +#cmakedefine TIME_WITH_SYS_TIME + +/* Define if we're compiling CircleMUD under any type of UNIX system. */ +#cmakedefine CIRCLE_UNIX + +/* Define if the system is capable of using crypt() to encrypt. */ +#cmakedefine CIRCLE_CRYPT + +/* Define if we don't have proper support for the system's crypt(). */ +#cmakedefine HAVE_UNSAFE_CRYPT + +/* Define is the system has struct in_addr. */ +#cmakedefine HAVE_STRUCT_IN_ADDR + +/* Define to `int' if doesn't define. */ +#cmakedefine socklen_t @socklen_t@ + +/* Define to `int' if doesn't define. */ +#cmakedefine ssize_t @ssize_t@ + +/* Define if you have the gettimeofday function. */ +#cmakedefine HAVE_GETTIMEOFDAY + +/* Define if you have the inet_addr function. */ +#cmakedefine HAVE_INET_ADDR + +/* Define if you have the inet_aton function. */ +#cmakedefine HAVE_INET_ATON + +/* Define if you have the select function. */ +#cmakedefine HAVE_SELECT + +/* Define if you have the snprintf function. */ +#cmakedefine HAVE_SNPRINTF + +/* Define if you have the strcasecmp function. */ +#cmakedefine HAVE_STRCASECMP + +/* Define if you have the strdup function. */ +#cmakedefine HAVE_STRDUP + +/* Define if you have the strerror function. */ +#cmakedefine HAVE_STRERROR + +/* Define if you have the stricmp function. */ +#cmakedefine HAVE_STRICMP + +/* Define if you have the strlcpy function. */ +#cmakedefine HAVE_STRLCPY + +/* Define if you have the strncasecmp function. */ +#cmakedefine HAVE_STRNCASECMP + +/* Define if you have the strnicmp function. */ +#cmakedefine HAVE_STRNICMP + +/* Define if you have the strstr function. */ +#cmakedefine HAVE_STRSTR + +/* Define if you have the vsnprintf function. */ +#cmakedefine HAVE_VSNPRINTF + +/* Define if you have the header file. */ +#cmakedefine HAVE_ARPA_INET_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_ARPA_TELNET_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_ASSERT_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_CRYPT_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_ERRNO_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_FCNTL_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_LIMITS_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_MCHECK_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_MEMORY_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_NET_ERRNO_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_NETDB_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_NETINET_IN_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SIGNAL_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_STRING_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_STRINGS_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SYS_FCNTL_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SYS_RESOURCE_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SYS_SELECT_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SYS_SOCKET_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SYS_TIME_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_SYS_UIO_H + +/* Define if you have the header file. */ +#cmakedefine HAVE_UNISTD_H + +/* Define if you have the malloc library (-lmalloc). */ +#cmakedefine HAVE_LIBMALLOC + +/* Check for a prototype to accept. */ +#cmakedefine NEED_ACCEPT_PROTO + +/* Check for a prototype to atoi. */ +#cmakedefine NEED_ATOI_PROTO + +/* Check for a prototype to atol. */ +#cmakedefine NEED_ATOL_PROTO + +/* Check for a prototype to bind. */ +#cmakedefine NEED_BIND_PROTO + +/* Check for a prototype to bzero. */ +#cmakedefine NEED_BZERO_PROTO + +/* Check for a prototype to chdir. */ +#cmakedefine NEED_CHDIR_PROTO + +/* Check for a prototype to close. */ +#cmakedefine NEED_CLOSE_PROTO + +/* Check for a prototype to crypt. */ +#cmakedefine NEED_CRYPT_PROTO + +/* Check for a prototype to fclose. */ +#cmakedefine NEED_FCLOSE_PROTO + +/* Check for a prototype to fcntl. */ +#cmakedefine NEED_FCNTL_PROTO + +/* Check for a prototype to fflush. */ +#cmakedefine NEED_FFLUSH_PROTO + +/* Check for a prototype to fprintf. */ +#cmakedefine NEED_FPRINTF_PROTO + +/* Check for a prototype to fputc. */ +#cmakedefine NEED_FPUTC_PROTO + +/* Check for a prototype to fputs. */ +#cmakedefine NEED_FPUTS_PROTO + +/* Check for a prototype to fread. */ +#cmakedefine NEED_FREAD_PROTO + +/* Check for a prototype to fscanf. */ +#cmakedefine NEED_FSCANF_PROTO + +/* Check for a prototype to fseek. */ +#cmakedefine NEED_FSEEK_PROTO + +/* Check for a prototype to fwrite. */ +#cmakedefine NEED_FWRITE_PROTO + +/* Check for a prototype to getpeername. */ +#cmakedefine NEED_GETPEERNAME_PROTO + +/* Check for a prototype to getpid. */ +#cmakedefine NEED_GETPID_PROTO + +/* Check for a prototype to getrlimit. */ +#cmakedefine NEED_GETRLIMIT_PROTO + +/* Check for a prototype to getsockname. */ +#cmakedefine NEED_GETSOCKNAME_PROTO + +/* Check for a prototype to gettimeofday. */ +#cmakedefine NEED_GETTIMEOFDAY_PROTO + +/* Check for a prototype to htonl. */ +#cmakedefine NEED_HTONL_PROTO + +/* Check for a prototype to htons. */ +#cmakedefine NEED_HTONS_PROTO + +/* Check for a prototype to inet_addr. */ +#cmakedefine NEED_INET_ADDR_PROTO + +/* Check for a prototype to inet_aton. */ +#cmakedefine NEED_INET_ATON_PROTO + +/* Check for a prototype to inet_ntoa. */ +#cmakedefine NEED_INET_NTOA_PROTO + +/* Check for a prototype to listen. */ +#cmakedefine NEED_LISTEN_PROTO + +/* Check for a prototype to ntohl. */ +#cmakedefine NEED_NTOHL_PROTO + +/* Check for a prototype to perror. */ +#cmakedefine NEED_PERROR_PROTO + +/* Check for a prototype to printf. */ +#cmakedefine NEED_PRINTF_PROTO + +/* Check for a prototype to qsort. */ +#cmakedefine NEED_QSORT_PROTO + +/* Check for a prototype to read. */ +#cmakedefine NEED_READ_PROTO + +/* Check for a prototype to remove. */ +#cmakedefine NEED_REMOVE_PROTO + +/* Check for a prototype to rewind. */ +#cmakedefine NEED_REWIND_PROTO + +/* Check for a prototype to select. */ +#cmakedefine NEED_SELECT_PROTO + +/* Check for a prototype to setitimer. */ +#cmakedefine NEED_SETITIMER_PROTO + +/* Check for a prototype to setrlimit. */ +#cmakedefine NEED_SETRLIMIT_PROTO + +/* Check for a prototype to setsockopt. */ +#cmakedefine NEED_SETSOCKOPT_PROTO + +/* Check for a prototype to snprintf. */ +#cmakedefine NEED_SNPRINTF_PROTO + +/* Check for a prototype to socket. */ +#cmakedefine NEED_SOCKET_PROTO + +/* Check for a prototype to sprintf. */ +#cmakedefine NEED_SPRINTF_PROTO + +/* Check for a prototype to sscanf. */ +#cmakedefine NEED_SSCANF_PROTO + +/* Check for a prototype to strcasecmp. */ +#cmakedefine NEED_STRCASECMP_PROTO + +/* Check for a prototype to strdup. */ +#cmakedefine NEED_STRDUP_PROTO + +/* Check for a prototype to strerror. */ +#cmakedefine NEED_STRERROR_PROTO + +/* Check for a prototype to stricmp. */ +#cmakedefine NEED_STRICMP_PROTO + +/* Check for a prototype to strlcpy. */ +#cmakedefine NEED_STRLCPY_PROTO + +/* Check for a prototype to strncasecmp. */ +#cmakedefine NEED_STRNCASECMP_PROTO + +/* Check for a prototype to strnicmp. */ +#cmakedefine NEED_STRNICMP_PROTO + +/* Check for a prototype to system. */ +#cmakedefine NEED_SYSTEM_PROTO + +/* Check for a prototype to time. */ +#cmakedefine NEED_TIME_PROTO + +/* Check for a prototype to unlink. */ +#cmakedefine NEED_UNLINK_PROTO + +/* Check for a prototype to vsnprintf. */ +#cmakedefine NEED_VSNPRINTF_PROTO + +/* Check for a prototype to write. */ +#cmakedefine NEED_WRITE_PROTO + + +#endif /* _CONF_H_ */ diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt new file mode 100644 index 0000000..5e6fe78 --- /dev/null +++ b/src/util/CMakeLists.txt @@ -0,0 +1,46 @@ + +set(TOOLS + asciipasswd + autowiz + plrtoascii + rebuildIndex + rebuildMailIndex + shopconv + sign + split + wld2html + webster +) + +# common includes and flags +include_directories(${CMAKE_SOURCE_DIR}/src) +add_definitions(-DCIRCLE_UTIL) + +find_library(CRYPT_LIBRARY crypt) +find_library(NETLIB_LIBRARY nsl socket) # for sign.c, hvis nødvendig + +foreach(tool ${TOOLS}) + if(${tool} STREQUAL "rebuildIndex") + add_executable(rebuildIndex rebuildAsciiIndex.c) + else() + add_executable(${tool} ${tool}.c) + endif() + + # Set output location + set_target_properties(${tool} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin + ) + + # Link to libcrypt for asciipasswd + if(${tool} STREQUAL "asciipasswd" AND CRYPT_LIBRARY) + target_link_libraries(${tool} ${CRYPT_LIBRARY}) + endif() + + # Link to netlib for sign + if(${tool} STREQUAL "sign" AND NETLIB_LIBRARY) + target_link_libraries(${tool} ${NETLIB_LIBRARY}) + endif() +endforeach() + +add_custom_target(utils DEPENDS ${TOOLS}) +