diff options
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 69 |
1 files changed, 56 insertions, 13 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index eb42777..a0c299d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.10) project(nimisewi - VERSION 0.2.0 + VERSION 0.3.0 DESCRIPTION "small program that generates random toki pona noun phrase" HOMEPAGE_URL "https://fsl.aaoth.xyz/nimisewi.c/home") @@ -24,34 +24,70 @@ include(CheckIncludeFile) include(CheckSymbolExists) include(CheckCSourceCompiles) +set(WARNING_STATIC_BUILD "static build won't work here") + # check libraries cmake_host_system_information(RESULT OS_NAME QUERY OS_NAME) message(VERBOSE "OS_NAME is ${OS_NAME}") if(OS_NAME MATCHES "Linux") check_include_file("bsd/string.h" HAVE_BSD_STRING_H) - if(HAVE_BSD_STRING_H) + check_include_file("bsd/stdlib.h" HAVE_BSD_STDLIB_H) + if(HAVE_BSD_STRING_H AND HAVE_BSD_STDLIB_H) set(CMAKE_REQUIRED_LIBRARIES "bsd") + check_symbol_exists(strlcat "bsd/string.h" HAVE_STRLCAT) if (HAVE_STRLCAT) list(APPEND EXTRA_DEFINITIONS HAVE_BSD_STRING_H HAVE_STRLCAT) endif() + + check_symbol_exists(arc4random_uniform "bsd/stdlib.h" + HAVE_ARC4RANDOM_UNIFORM) + if (HAVE_ARC4RANDOM_UNIFORM) + list(APPEND EXTRA_DEFINITIONS HAVE_BSD_STDLIB_H HAVE_ARC4RANDOM_UNIFORM) + endif() + + # check static libraries set(CMAKE_REQUIRED_LINK_OPTIONS "-static") check_c_source_compiles( - "#include<bsd/string.h>\nint main(void){return 0;}" HAVE_LIBBSD_STATIC) - if(NOT HAVE_LIBBSD_STATIC) - message(WARNING "static build won't work here") + "#include<bsd/string.h>\nint main(void){return 0;}" + HAVE_LIBBSD_STATIC) + # libpthread and libmd are needed when linking statically on linux. + # these test aren't really checking particular functions, but + # they are here to make sure that program could be linked statically + unset(CMAKE_REQUIRED_LIBRARIES) + set(CMAKE_REQUIRED_LIBRARIES "pthread") + check_c_source_compiles( + "#include<pthread.h>\nint main(void){return 0;}" + HAVE_LIBPTHREAD_STATIC) + + unset(CMAKE_REQUIRED_LIBRARIES) + set(CMAKE_REQUIRED_LIBRARIES "md") + check_c_source_compiles( + "#include<sha2.h>\nint main(void){return 0;}" + HAVE_LIBMD_STATIC) + + if(NOT (HAVE_LIBBSD_STATIC + AND HAVE_LIBPTHREAD_STATIC + AND HAVE_LIBMD_STATIC)) + message(WARNING ${WARNING_STATIC_BUILD}) endif() - list(APPEND EXTRA_LIBS bsd) + + list(APPEND EXTRA_LIBS bsd pthread md) unset(CMAKE_REQUIRED_LIBRARIES) unset(CMAKE_REQUIRED_LINK_OPTIONS) endif() endif() + if(OS_NAME MATCHES "(.*BSD)|(DragonFly)") check_symbol_exists(strlcat "string.h" HAVE_STRLCAT) if(HAVE_STRLCAT) list(APPEND EXTRA_DEFINITIONS HAVE_STRLCAT) endif() + check_symbol_exists(arc4random_uniform "stdlib.h" HAVE_ARC4RANDOM_UNIFORM) + if(HAVE_ARC4RANDOM_UNIFORM) + list(APPEND EXTRA_DEFINITIONS HAVE_ARC4RANDOM_UNIFORM) + endif() check_symbol_exists(pledge "unistd.h" HAVE_PLEDGE) if(HAVE_PLEDGE) list(APPEND EXTRA_DEFINITIONS HAVE_PLEDGE) @@ -63,7 +99,7 @@ check_c_source_compiles( "#include<stdio.h>\nint main(void){return 0;}" HAVE_LIBC_STATIC ) if(NOT HAVE_LIBC_STATIC) - message(WARNING "static build won't work here") + message(WARNING ${WARNING_STATIC_BUILD}) endif() target_link_libraries(nimisewi PUBLIC ${EXTRA_LIBS}) @@ -71,7 +107,7 @@ target_compile_definitions(nimisewi PRIVATE ${EXTRA_DEFINITIONS}) set(NIMISEWI_CGI_STATIC_BUILD FALSE) if(HAVE_LIBC_STATIC) - if(HAVE_BSD_STRING_H) + if(HAVE_BSD_STRING_H AND HAVE_BSD_STDLIB_H) if(HAVE_LIBBSD_STATIC) set(NIMISEWI_CGI_STATIC_BUILD TRUE) endif() @@ -88,9 +124,11 @@ if(BUILD_CGI) ${PROJECT_BINARY_DIR}/nimitoki.c) option(CGI_INSTALL_DIR "specify installation directory of cgi script") if(CGI_INSTALL_DIR) - set_property(TARGET nimisewi.cgi PROPERTY CGI_INSTALL_DIR ${CGI_INSTALL_DIR}) + set_property(TARGET nimisewi.cgi PROPERTY CGI_INSTALL_DIR + ${CGI_INSTALL_DIR}) else() - set_property(TARGET nimisewi.cgi PROPERTY CGI_INSTALL_DIR "var/www/htdocs/cgi-bin") + set_property(TARGET nimisewi.cgi PROPERTY CGI_INSTALL_DIR + "var/www/htdocs/cgi-bin") endif() target_include_directories(nimisewi.cgi PUBLIC "${PROJECT_BINARY_DIR}") target_compile_definitions(nimisewi.cgi PRIVATE ${EXTRA_DEFINITIONS}) @@ -106,9 +144,11 @@ if(BUILD_GEMINI_CGI) ${PROJECT_BINARY_DIR}/nimitoki.c) option(GEMINI_CGI_INSTALL_DIR "specify installation directory of cgi script") if(GEMINI_CGI_INSTALL_DIR) - set_property(TARGET nimisewi_gemini.cgi PROPERTY GEMINI_CGI_INSTALL_DIR ${GEMINI_CGI_INSTALL_DIR}) + set_property(TARGET nimisewi_gemini.cgi PROPERTY GEMINI_CGI_INSTALL_DIR + ${GEMINI_CGI_INSTALL_DIR}) else() - set_property(TARGET nimisewi_gemini.cgi PROPERTY GEMINI_CGI_INSTALL_DIR "var/gemini/cgi-bin") + set_property(TARGET nimisewi_gemini.cgi PROPERTY GEMINI_CGI_INSTALL_DIR + "var/gemini/cgi-bin") endif() target_include_directories(nimisewi_gemini.cgi PUBLIC "${PROJECT_BINARY_DIR}") target_compile_definitions(nimisewi_gemini.cgi PRIVATE ${EXTRA_DEFINITIONS}) @@ -136,13 +176,16 @@ set(CPACK_PROJECT_VERSION_MAJOR ${nimisewi_VERSION_MAJOR}) set(CPACK_PROJECT_VERSION_MINOR ${nimisewi_VERSION_MINOR}) set(CPACK_PROJECT_VERSION_PATCH ${nimisewi_VERSION_PATCH}) set(CPACK_PACKAGE_FILE_NAME - ${CMAKE_PROJECT_NAME}-${nimisewi_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}) + ${CMAKE_PROJECT_NAME}-${nimisewi_VERSION} + -${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}) set(CPACK_GENERATOR "TGZ" "ZIP") set(CPACK_SOURCE_GENERATOR "TGZ" "ZIP") set(CPACK_SOURCE_IGNORE_FILES \.fslckout \.fossil-settings build/ + utils/ + download.md ) set(CPACK_STRIP_FILES TRUE) include(CPack) |
