From 51095076793a09825c438e54b0dbbe15bef02678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Sat, 30 Oct 2021 01:59:14 +0200 Subject: [PATCH] General project maintenance Bump the minimum required CMake version to 3.0. Bump dependencies. --- .gitignore | 2 + CMakeLists.txt | 95 ++++++++++++++++++---------------------- README.adoc | 3 -- cmake/FindLibEV.cmake | 18 ++++---- cmake/FindNcursesw.cmake | 17 ------- config.h.in | 2 +- liberty | 2 +- termo | 2 +- 8 files changed, 57 insertions(+), 84 deletions(-) delete mode 100644 cmake/FindNcursesw.cmake diff --git a/.gitignore b/.gitignore index f2985aa..109ecfd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ /autistdraw.files /autistdraw.creator* /autistdraw.includes +/autistdraw.cflags +/autistdraw.cxxflags diff --git a/CMakeLists.txt b/CMakeLists.txt index a71a302..bcdf70f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,78 +1,73 @@ -project (autistdraw C) -cmake_minimum_required (VERSION 2.8.5) +cmake_minimum_required (VERSION 3.0) +project (autistdraw VERSION 0.1.0 LANGUAGES C) # Moar warnings if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC) - # -Wunused-function is pretty annoying here, as everything is static - set (wdisabled "-Wno-unused-function -Wno-implicit-fallthrough") + set (wdisabled "-Wno-unused-function") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra ${wdisabled}") -endif ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC) - -if ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD") - include_directories (/usr/local/include) - link_directories (/usr/local/lib) - # Need this for SIGWINCH in FreeBSD and OpenBSD respectively; - # our POSIX version macros make it undefined - add_definitions (-D__BSD_VISIBLE=1 -D_BSD_SOURCE=1) -endif ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD") - -# Build options -option (USE_SYSTEM_TERMO "Don't compile our own termo, use the system one" OFF) - -# 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}") +endif () # For custom modules -set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) +set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake + ${PROJECT_SOURCE_DIR}/liberty/cmake) # Dependencies find_package (LibEV REQUIRED) find_package (Ncursesw REQUIRED) +find_package (Termo QUIET NO_MODULE) +option (USE_SYSTEM_TERMO + "Don't compile our own termo, use the system one" ${Termo_FOUND}) if (USE_SYSTEM_TERMO) - find_package (Termo REQUIRED) -else (USE_SYSTEM_TERMO) + if (NOT Termo_FOUND) + message (FATAL_ERROR "System termo library not found") + endif () +else () + # We don't want the library to install, but EXCLUDE_FROM_ALL ignores tests add_subdirectory (termo EXCLUDE_FROM_ALL) - # We don't have many good choices when we don't want to install it and want - # to support older versions of CMake; this is a relatively clean approach - # (other possibilities: setting a variable in the parent scope, using a - # cache variable, writing a special config file with build paths in it and - # including it here, or setting a custom property on the targets). + file (WRITE ${PROJECT_BINARY_DIR}/CTestCustom.cmake + "execute_process (COMMAND ${CMAKE_COMMAND} --build termo)") + + # We don't have many good choices; this is a relatively clean approach + # (other possibilities: setting a variable in the parent scope, using + # a cache variable, writing a special config file with build paths in it + # and including it here, or setting a custom property on the targets) get_directory_property (Termo_INCLUDE_DIRS DIRECTORY termo INCLUDE_DIRECTORIES) set (Termo_LIBRARIES termo-static) -endif (USE_SYSTEM_TERMO) +endif () -set (project_libraries ${LIBEV_LIBRARIES} ${Termo_LIBRARIES} - ${NCURSESW_LIBRARIES}) -include_directories (${LIBEV_INCLUDE_DIRS} ${Termo_INCLUDE_DIRS} - ${NCURSESW_INCLUDE_DIRS}) +# Configuration +if ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD") + # Need this for SIGWINCH in FreeBSD and OpenBSD respectively; + # our POSIX version macros make it undefined + add_definitions (-D__BSD_VISIBLE=1 -D_BSD_SOURCE=1) +endif () + +set (project_libraries ${LibEV_LIBRARIES} ${Termo_LIBRARIES} + ${Ncursesw_LIBRARIES}) +include_directories (${LibEV_INCLUDE_DIRS} ${Termo_INCLUDE_DIRS} + ${Ncursesw_INCLUDE_DIRS}) + +include (CheckFunctionExists) +set (CMAKE_REQUIRED_LIBRARIES ${project_libraries}) +CHECK_FUNCTION_EXISTS ("resizeterm" HAVE_RESIZETERM) # -liconv may or may not be a part of libc foreach (extra iconv) find_library (extra_lib_${extra} ${extra}) if (extra_lib_${extra}) list (APPEND project_libraries ${extra}) - endif (extra_lib_${extra}) -endforeach (extra) - -# Configuration -include (CheckFunctionExists) -set (CMAKE_REQUIRED_LIBRARIES ${project_libraries}) -CHECK_FUNCTION_EXISTS ("resizeterm" HAVE_RESIZETERM) + endif () +endforeach () # Project source files set (project_sources ${PROJECT_NAME}.c) set (project_headers ${PROJECT_BINARY_DIR}/config.h) # Generate a configuration file -configure_file (${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_BINARY_DIR}/config.h) +configure_file (${PROJECT_SOURCE_DIR}/config.h.in + ${PROJECT_BINARY_DIR}/config.h) include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR}) # Build the main executable and link it @@ -89,16 +84,12 @@ set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Terminal drawing application") set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch") set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch ") set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_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 "${PROJECT_NAME}-${project_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") -set (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}-${project_VERSION}") +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_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}") include (CPack) - diff --git a/README.adoc b/README.adoc index ba72dae..f438ab3 100644 --- a/README.adoc +++ b/README.adoc @@ -30,9 +30,6 @@ Or you can try telling CMake to make a package for you. For Debian it is: $ cpack -G DEB # dpkg -i autistdraw-*.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. - Usage ----- For standalone mode you can run the program without arguments: diff --git a/cmake/FindLibEV.cmake b/cmake/FindLibEV.cmake index e8a1fda..84dff36 100644 --- a/cmake/FindLibEV.cmake +++ b/cmake/FindLibEV.cmake @@ -5,16 +5,16 @@ # Some distributions do add it, though find_package (PkgConfig REQUIRED) -pkg_check_modules (LIBEV QUIET libev) +pkg_check_modules (LibEV QUIET libev) -set (required_vars LIBEV_LIBRARIES) -if (NOT LIBEV_FOUND) - find_path (LIBEV_INCLUDE_DIRS ev.h) - find_library (LIBEV_LIBRARIES NAMES ev) - list (APPEND required_vars LIBEV_INCLUDE_DIRS) -endif (NOT LIBEV_FOUND) +set (required_vars LibEV_LIBRARIES) +if (NOT LibEV_FOUND) + find_path (LibEV_INCLUDE_DIRS ev.h) + find_library (LibEV_LIBRARIES NAMES ev) + list (APPEND required_vars LibEV_INCLUDE_DIRS) +endif () include (FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS (LIBEV DEFAULT_MSG ${required_vars}) +FIND_PACKAGE_HANDLE_STANDARD_ARGS (LibEV DEFAULT_MSG ${required_vars}) -mark_as_advanced (LIBEV_LIBRARIES LIBEV_INCLUDE_DIRS) +mark_as_advanced (LibEV_LIBRARIES LibEV_INCLUDE_DIRS) diff --git a/cmake/FindNcursesw.cmake b/cmake/FindNcursesw.cmake deleted file mode 100644 index 88c1d01..0000000 --- a/cmake/FindNcursesw.cmake +++ /dev/null @@ -1,17 +0,0 @@ -# Public Domain - -find_package (PkgConfig REQUIRED) -pkg_check_modules (NCURSESW QUIET ncursesw) - -# OpenBSD doesn't provide a pkg-config file -set (required_vars NCURSESW_LIBRARIES) -if (NOT NCURSESW_FOUND) - find_library (NCURSESW_LIBRARIES NAMES ncursesw) - find_path (NCURSESW_INCLUDE_DIRS ncurses.h) - list (APPEND required_vars NCURSESW_INCLUDE_DIRS) -endif (NOT NCURSESW_FOUND) - -include (FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS (NCURSESW DEFAULT_MSG ${required_vars}) - -mark_as_advanced (NCURSESW_LIBRARIES NCURSESW_INCLUDE_DIRS) diff --git a/config.h.in b/config.h.in index b61ed66..0fd8a30 100644 --- a/config.h.in +++ b/config.h.in @@ -2,7 +2,7 @@ #define CONFIG_H #define PROGRAM_NAME "${CMAKE_PROJECT_NAME}" -#define PROGRAM_VERSION "${project_VERSION}" +#define PROGRAM_VERSION "${PROJECT_VERSION}" #cmakedefine HAVE_RESIZETERM diff --git a/liberty b/liberty index 1a76b20..1b9d89c 160000 --- a/liberty +++ b/liberty @@ -1 +1 @@ -Subproject commit 1a76b2032e6d18d9f95d9d0bb98edc26023c8618 +Subproject commit 1b9d89cab3bb1df73c58ccd8528eafd21a8c6e40 diff --git a/termo b/termo index 8c4e867..94a77a1 160000 --- a/termo +++ b/termo @@ -1 +1 @@ -Subproject commit 8c4e867760eb20e3cdf997a301c8f8672c01e380 +Subproject commit 94a77a10d87367ef33156cd68b2caf601c3f72d0