Convert to CMake

This commit is contained in:
Přemysl Eric Janouch 2015-02-11 01:53:19 +01:00
parent dfe50aeb85
commit 59b1c5c056
7 changed files with 151 additions and 44 deletions

103
CMakeLists.txt Normal file
View File

@ -0,0 +1,103 @@
project (ZyklonB C)
cmake_minimum_required (VERSION 2.8.5)
# Moar warnings
if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUC)
# -Wunused-function is pretty annoying here, as everything is static
set (CMAKE_C_FLAGS "-std=c99 -Wall -Wextra -Wno-unused-function")
endif ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUC)
# Version
set (project_VERSION_MAJOR "0")
set (project_VERSION_MINOR "1")
set (project_VERSION_PATCH "0")
set (project_VERSION "${project_VERSION_MAJOR}")
set (project_VERSION "${project_VERSION}.${project_VERSION_MINOR}")
set (project_VERSION "${project_VERSION}.${project_VERSION_PATCH}")
# Dependencies
find_package (PkgConfig REQUIRED)
pkg_check_modules (libssl REQUIRED libssl libcrypto)
# -lpthread is only there for debugging (gdb & errno)
# -lrt is only for glibc < 2.17
list (APPEND project_libraries ${libssl_LIBRARIES} rt pthread)
include_directories (${libssl_INCLUDE_DIRS})
link_directories (${libssl_LIBRARY_DIRS})
# Generate a configuration file
include (GNUInstallDirs)
set (plugin_dir ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME})
configure_file (${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_BINARY_DIR}/config.h)
include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR})
# Project source files
set (common_sources siphash.c)
set (common_headers ${PROJECT_BINARY_DIR}/config.h)
add_custom_command (OUTPUT kike-replies.c kike.msg
COMMAND ${PROJECT_SOURCE_DIR}/kike-gen-replies.sh
> kike-replies.c < ${PROJECT_SOURCE_DIR}/kike-replies
DEPENDS ${PROJECT_SOURCE_DIR}/kike-replies
COMMENT "Generating files from the list of server numerics")
set_source_files_properties (${PROJECT_BINARY_DIR}/kike-replies.c
PROPERTIES HEADER_FILE_ONLY TRUE)
# Build
add_executable (zyklonb zyklonb.c ${common_sources} ${common_headers})
target_link_libraries (zyklonb ${project_libraries})
add_executable (kike kike.c kike-replies.c ${common_sources} ${common_headers})
target_link_libraries (kike ${project_libraries})
# Installation
install (TARGETS zyklonb kike DESTINATION ${CMAKE_INSTALL_BINDIR})
install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
foreach (plugin coin eval script youtube ${plugins})
install (FILES plugins/${plugin} DESTINATION ${plugin_dir})
endforeach (plugin)
# Generate documentation from program help
find_program (HELP2MAN_EXECUTABLE help2man)
if (NOT HELP2MAN_EXECUTABLE)
message (FATAL_ERROR "help2man not found")
endif (NOT HELP2MAN_EXECUTABLE)
foreach (page zyklonb kike)
set (page_output "${PROJECT_BINARY_DIR}/${page}.1")
list (APPEND project_MAN_PAGES "${page_output}")
add_custom_command (OUTPUT ${page_output}
COMMAND ${HELP2MAN_EXECUTABLE} -N --no-discard-stderr # FIXME
"${PROJECT_BINARY_DIR}/${page}" -o ${page_output}
DEPENDS ${page}
COMMENT "Generating man page for ${page}" VERBATIM)
endforeach (page)
add_custom_target (docs ALL DEPENDS ${project_MAN_PAGES})
foreach (page ${project_MAN_PAGES})
string (REGEX MATCH "\\.([0-9])" manpage_suffix "${page}")
install (FILES "${page}"
DESTINATION "${CMAKE_INSTALL_MANDIR}/man${CMAKE_MATCH_1}")
endforeach (page)
# CPack
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Experimental IRC bot & daemon")
set (CPACK_PACKAGE_VERSION ${project_VERSION})
set (CPACK_PACKAGE_VENDOR "Premysl Janouch")
set (CPACK_PACKAGE_CONTACT "Přemysl Janouch <p.janouch@gmail.com>")
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
set (CPACK_GENERATOR "TGZ;ZIP")
set (CPACK_PACKAGE_FILE_NAME
"${PROJECT_NAME}-${project_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
set (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}-${project_VERSION}")
set (CPACK_SOURCE_GENERATOR "TGZ;ZIP")
set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user")
set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${project_VERSION}")
set (CPACK_SET_DESTDIR TRUE)
include (CPack)

14
LICENSE Normal file
View File

@ -0,0 +1,14 @@
Copyright (c) 2014 - 2015, Přemysl Janouch <p.janouch@gmail.com>
All rights reserved.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@ -1,29 +0,0 @@
SHELL = /bin/sh
CC = clang
# -Wunused-function is pretty annoying here, as everything is static and not
# all parts of common.c are used in all the executables
CFLAGS = -std=c99 -Wall -Wextra -Wno-unused-function \
-ggdb -fsanitize=address,undefined
# -lpthread is only there for debugging (gdb & errno)
# -lrt is only for glibc < 2.17
LDFLAGS = `pkg-config --libs libssl` -lpthread -lrt
.PHONY: all clean
.SUFFIXES:
targets = zyklonb kike
all: $(targets)
clean:
rm -f $(targets) kike-replies.c
zyklonb: zyklonb.c common.c siphash.c
$(CC) zyklonb.c siphash.c -o $@ $(CFLAGS) $(LDFLAGS)
kike: kike.c common.c siphash.c kike-replies.c
$(CC) kike.c siphash.c -o $@ $(CFLAGS) $(LDFLAGS)
# Generates kike.msg as a by-product
kike-replies.c: kike-replies
$(SHELL) kike-gen-replies.sh < $< > $@

32
README
View File

@ -26,26 +26,36 @@ Some interesting features:
- epoll support on Linux
- superfast build time, small memory footprint
Building and Running
--------------------
Build dependencies: openssl, clang, pkg-config, GNU make, awk, sh
If you don't have Clang, you can edit the Makefile to use GCC or TCC, they work
just as good. But there's no CMake support yet, so I force it in the Makefile.
Building
--------
Build dependencies: CMake, pkg-config, help2man, awk, sh, openssl
$ git clone https://github.com/pjanouch/ZyklonB.git
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
$ make
That is all, no installation is required, or supported for that matter.
To install the application, you can do either the usual:
$ make install
Or you can try telling CMake to make a package for you. For Debian it is:
$ cpack -G DEB
# dpkg -i sdtui-*.deb
Note that for versions of CMake before 2.8.9, you need to prefix cpack with
`fakeroot' or file ownership will end up wrong.
Running
-------
First you might want to generate a configuration file:
$ ./zyklonb --write-default-config
$ ./kike --write-default-config
$ zyklonb --write-default-config
$ kike --write-default-config
After making any necessary edits to the file (there are comments to aid you in
doing that), simply run the appropriate program with no arguments:
$ ./zyklonb
$ ./kike
$ zyklonb
$ kike
ZyklonB stays running in the foreground, so I recommend launching it inside
a Screen or tmux session. kike, on the other hand, immediately forks into the

9
config.h.in Normal file
View File

@ -0,0 +1,9 @@
#ifndef CONFIG_H
#define CONFIG_H
#define PROGRAM_NAME "${CMAKE_PROJECT_NAME}"
#define PROGRAM_VERSION "${project_VERSION}"
#define PLUGIN_DIR "${CMAKE_INSTALL_PREFIX}/${plugin_dir}"
#endif // ! CONFIG_H

3
kike.c
View File

@ -18,8 +18,9 @@
*
*/
#include "config.h"
#undef PROGRAM_NAME
#define PROGRAM_NAME "kike"
#define PROGRAM_VERSION "alpha"
#include "common.c"
#include "kike-replies.c"

View File

@ -18,8 +18,7 @@
*
*/
#define PROGRAM_NAME "ZyklonB"
#define PROGRAM_VERSION "alpha"
#include "config.h"
#include "common.c"
#include <arpa/inet.h>
@ -48,7 +47,7 @@ static struct config_item g_config_table[] =
{ "prefix", ":", "The prefix for bot commands" },
{ "admin", NULL, "Host mask for administrators" },
{ "plugins", NULL, "The plugins to load on startup" },
{ "plugin_dir", NULL, "Where to search for plugins" },
{ "plugin_dir", PLUGIN_DIR, "Where to search for plugins" },
{ "recover", "on", "Whether to re-launch on crash" },
{ NULL, NULL, NULL }