diff --git a/.gitignore b/.gitignore index 3dc61b6..e0abad9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,6 @@ # Backup files *.*~ -# Compile output -/sdtui -/add-pronunciation -/test-stardict -*.o # IDE project files -/sdtui.creator* -/sdtui.includes -/sdtui.files -/sdtui.config +/CMakeLists.txt.user # Blah -/GNUmakefile /.clang_complete diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..fe93d77 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,111 @@ +project (sdtui C) +cmake_minimum_required (VERSION 2.8.0) + +# Moar warnings +if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUC) + set (CMAKE_C_FLAGS "-std=gnu99") + set (CMAKE_C_FLAGS_DEBUG + "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra -Wno-missing-field-initializers") +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}") + +# Dependecies +find_package (PkgConfig REQUIRED) +pkg_check_modules (dependencies REQUIRED ncursesw glib-2.0 gio-2.0 pango) + +include_directories (${dependencies_INCLUDE_DIRS}) + +# Project source files +set (project_common_sources + src/generator.c + src/stardict.c) +set (project_common_headers + ${CMAKE_CURRENT_BINARY_DIR}/config.h + src/stardict.h + src/stardict-private.h + src/generator.h) + +# Project libraries +set (project_common_libraries ${dependencies_LIBRARIES}) + +# Create a common project library so that source files are only compiled once +if (${CMAKE_VERSION} VERSION_GREATER "2.8.7") + add_library (stardict OBJECT + ${project_common_sources} + ${project_common_headers}) + set (project_common_sources $) +else (${CMAKE_VERSION} VERSION_GREATER "2.8.7") + add_library (stardict STATIC + ${project_common_sources} + ${project_common_headers}) + target_link_libraries (stardict ${project_common_libraries}) + list (APPEND project_common_libraries stardict) + set (project_common_sources) +endif (${CMAKE_VERSION} VERSION_GREATER "2.8.7") + +# Generate a configuration file +configure_file (${CMAKE_CURRENT_SOURCE_DIR}/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/config.h) +include_directories (${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) + +# Primary target source files +set (project_sources + src/${CMAKE_PROJECT_NAME}.c) +set (project_headers + ${project_common_headers}) + +# Build the main executable and link it +add_executable (${CMAKE_PROJECT_NAME} + ${project_sources} ${project_headers} ${project_common_sources}) +target_link_libraries (${CMAKE_PROJECT_NAME} ${project_common_libraries}) + +# Tools +add_executable (add-pronunciation + src/add-pronunciation.c ${project_common_sources}) +target_link_libraries (add-pronunciation ${project_common_libraries}) + +# The files to be installed +install (TARGETS ${CMAKE_PROJECT_NAME} DESTINATION bin) +install (FILES LICENSE DESTINATION share/doc/${CMAKE_PROJECT_NAME}) + +# Do some unit tests +option (BUILD_TESTING "Build tests" OFF) +set (project_tests stardict) + +if (BUILD_TESTING) + enable_testing () + + foreach (name ${project_tests}) + add_executable (test-${name} + src/test-${name}.c ${project_common_sources}) + target_link_libraries (test-${name} ${project_common_libraries}) + add_test (test-${name} test-${name}) + endforeach (name) +endif (BUILD_TESTING) + +# CPack +set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "StarDict terminal UI") +set (CPACK_PACKAGE_VENDOR "Premysl Janouch") +set (CPACK_PACKAGE_CONTACT "Přemysl Janouch ") +set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") +set (CPACK_PACKAGE_VERSION_MAJOR ${project_VERSION_MAJOR}) +set (CPACK_PACKAGE_VERSION_MINOR ${project_VERSION_MINOR}) +set (CPACK_PACKAGE_VERSION_PATCH ${project_VERSION_PATCH}) +set (CPACK_GENERATOR "TGZ;ZIP") +set (CPACK_PACKAGE_FILE_NAME + "${CMAKE_PROJECT_NAME}-${project_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") +set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_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 "${CMAKE_PROJECT_NAME}-${project_VERSION}") + +include (CPack) + diff --git a/Makefile b/Makefile deleted file mode 100644 index 5478583..0000000 --- a/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -SHELL = /bin/sh - -pkgs = ncursesw glib-2.0 gio-2.0 pango -tests = test-stardict -targets = sdtui add-pronunciation $(tests) - -CFLAGS = -ggdb -std=gnu99 -Wall -Wextra -Wno-missing-field-initializers \ - `pkg-config --cflags $(pkgs)` -LDFLAGS = `pkg-config --libs $(pkgs)` - -.PHONY: all clean test - -all: $(targets) - -clean: - rm -f $(targets) src/*.o - -sdtui: src/sdtui.o src/stardict.o - $(CC) $^ -o $@ $(LDFLAGS) - -add-pronunciation: src/add-pronunciation.o src/stardict.o src/generator.o - $(CC) $^ -o $@ $(LDFLAGS) - -test-stardict: src/test-stardict.o src/stardict.o src/generator.o - $(CC) $^ -o $@ $(LDFLAGS) - -test: $(tests) - for i in $(tests); do \ - gtester --verbose ./$$i; \ - done - -%.o: %.c - $(CC) $(CFLAGS) -c $< -o $@ diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..79bf191 --- /dev/null +++ b/config.h.in @@ -0,0 +1,9 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#define PROJECT_NAME "${CMAKE_PROJECT_NAME}" +#define PROJECT_VERSION "${project_VERSION}" +#define PROJECT_URL "${project_URL}" + +#endif /* ! CONFIG_H */ + diff --git a/src/sdtui.c b/src/sdtui.c index fa3a291..ff795ea 100644 --- a/src/sdtui.c +++ b/src/sdtui.c @@ -37,6 +37,7 @@ #include #include +#include "config.h" #include "stardict.h" @@ -849,8 +850,12 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS g_type_init (); G_GNUC_END_IGNORE_DEPRECATIONS - static GOptionEntry entries[] = + gboolean show_version = FALSE; + GOptionEntry entries[] = { + { "version", 0, G_OPTION_FLAG_IN_MAIN, + G_OPTION_ARG_NONE, &show_version, + "Output version information and exit", NULL }, { NULL } }; @@ -868,6 +873,12 @@ G_GNUC_END_IGNORE_DEPRECATIONS exit (EXIT_FAILURE); } + if (show_version) + { + g_print (PROJECT_NAME " " PROJECT_VERSION "\n"); + exit (EXIT_SUCCESS); + } + if (argc != 2) { gchar *help = g_option_context_get_help (ctx, TRUE, FALSE);