summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt144
1 files changed, 144 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..7498ad5
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,144 @@
+# SPDX-FileCopyrightText: 2024 Rafael G. Martins <rafael@rafaelmartins.eng.br>
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.19)
+
+find_package(Git)
+
+if (EXISTS "${CMAKE_SOURCE_DIR}/version.cmake")
+ include("${CMAKE_SOURCE_DIR}/version.cmake")
+elseif(EXISTS "${CMAKE_SOURCE_DIR}/.git" AND Git_FOUND)
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} describe --abbrev=4 HEAD
+ OUTPUT_VARIABLE _blogc_version
+ ERROR_VARIABLE _blogc_version_err
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ RESULT_VARIABLE _blogc_version_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ if(_blogc_version_err)
+ message(FATAL_ERROR "Failed to find version from Git\n${_blogc_version_err}")
+ endif()
+
+ if(NOT _blogc_version_result EQUAL 0)
+ message(FATAL_ERROR "Failed to find version from Git. Git process returned ${_blogc_version_result}")
+ endif()
+
+ string(REGEX REPLACE "^v" "" _blogc_version "${_blogc_version}")
+ string(REGEX REPLACE "^([^-]*)-(.*)" "\\1.\\2" _blogc_version "${_blogc_version}")
+ string(REGEX REPLACE "-g" "-" BLOGC_VERSION "${_blogc_version}")
+else()
+ message(FATAL_ERROR "Can't find version information!")
+endif()
+
+string(REGEX MATCHALL "[0-9]+" _blogc_version_list "${BLOGC_VERSION}")
+list(LENGTH _blogc_version_list _blogc_version_list_len)
+if(NOT _blogc_version_list_len GREATER_EQUAL 3)
+ message(FATAL_ERROR "Invalid version: ${BLOGC_VERSION}")
+endif()
+
+list(GET _blogc_version_list 0 _blogc_version_major)
+list(GET _blogc_version_list 1 _blogc_version_minor)
+list(GET _blogc_version_list 2 _blogc_version_patch)
+set(BLOGC_VERSION_CANONICAL "${_blogc_version_major}.${_blogc_version_minor}.${_blogc_version_patch}")
+
+if(EXISTS "${CMAKE_SOURCE_DIR}/.git" AND _blogc_version_list_len GREATER_EQUAL 4)
+ list(GET _blogc_version_list 3 _blogc_version_tweak)
+ set(BLOGC_VERSION_CANONICAL "${BLOGC_VERSION_CANONICAL}.${_blogc_version_tweak}")
+endif()
+
+project(blogc
+ VERSION "${BLOGC_VERSION_CANONICAL}"
+ HOMEPAGE_URL "https://blogc.rgm.io/"
+ LANGUAGES C
+)
+
+# explicitly disable tests by default.
+option(BUILD_TESTING "Build the testing tree." OFF)
+
+enable_testing()
+
+include(CheckFunctionExists)
+include(CheckIncludeFile)
+include(CTest)
+include(GNUInstallDirs)
+
+check_function_exists(getrusage HAVE_GETRUSAGE)
+check_function_exists(gethostname HAVE_GETHOSTNAME)
+
+check_include_file(arpa/inet.h HAVE_ARPA_INET_H)
+check_include_file(dirent.h HAVE_DIRENT_H)
+check_include_file(errno.h HAVE_ERRNO_H)
+check_include_file(fcntl.h HAVE_FCNTL_H)
+check_include_file(libgen.h HAVE_LIBGEN_H)
+check_include_file(limits.h HAVE_LIMITS_H)
+check_include_file(netdb.h HAVE_NETDB_H)
+check_include_file(netinet/in.h HAVE_NETINET_IN_H)
+check_include_file(signal.h HAVE_SIGNAL_H)
+check_include_file(sysexits.h HAVE_SYSEXITS_H)
+check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H)
+check_include_file(sys/socket.h HAVE_SYS_SOCKET_H)
+check_include_file(sys/stat.h HAVE_SYS_STAT_H)
+check_include_file(sys/time.h HAVE_SYS_TIME_H)
+check_include_file(sys/types.h HAVE_SYS_TYPES_H)
+check_include_file(sys/wait.h HAVE_SYS_WAIT_H)
+check_include_file(time.h HAVE_TIME_H)
+check_include_file(unistd.h HAVE_UNISTD_H)
+
+set(PACKAGE_VERSION "${BLOGC_VERSION}")
+configure_file(config.h.in config.h @ONLY)
+
+include_directories(${CMAKE_BINARY_DIR})
+add_compile_definitions(HAVE_CONFIG_H)
+
+add_subdirectory(man)
+add_subdirectory(src)
+
+if(BUILD_TESTING)
+ add_subdirectory(tests)
+endif()
+
+set(CPACK_VERBATIM_VARIABLES YES)
+
+set(CPACK_PACKAGE_VENDOR "Rafael G. Martins")
+set(CPACK_PACKAGE_VERSION "${BLOGC_VERSION}")
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A blog compiler.")
+set(CPACK_PACKAGE_CHECKSUM SHA512)
+
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
+set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
+set(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
+
+set(CPACK_INSTALL_SCRIPTS
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpack/install_license_and_readme.cmake"
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpack/install_version.cmake"
+)
+
+set(CPACK_SOURCE_GENERATOR "TXZ")
+set(CPACK_SOURCE_IGNORE_FILES
+ \\.git
+ \\.gitignore
+ \\.github/
+ Testing/
+ "build.*/"
+ ".*~$"
+)
+if(DEFINED CPACK_PACKAGE_NAME)
+ set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${BLOGC_VERSION}")
+else()
+ set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${BLOGC_VERSION}")
+endif()
+
+if(DEFINED CPACK_PACKAGE_FILE_NAME_SUFFIX)
+ set(CPACK_PACKAGE_FILE_NAME "${CPACK_SOURCE_PACKAGE_FILE_NAME}-${CPACK_PACKAGE_FILE_NAME_SUFFIX}")
+endif()
+
+if(WIN32)
+ set(CPACK_GENERATOR "ZIP")
+elseif(UNIX)
+ set(CPACK_GENERATOR "STGZ" "TXZ")
+endif()
+
+include(CPack)