Skip to content

Commit

Permalink
cmake: add USE_STATIC_BINARIES option
Browse files Browse the repository at this point in the history
based off @data-man's work in #2664, add a
USE_STATIC_BINARIES option to CMake, dependent on
USE_STATIC being set. when this option is used,
link the notcurses binaries against the static
versions of notcurses. i've done ncman and nctetris
thus far. also, move to pkgconf for libdeflate,
requiring at least version 1.9 (that's when i added
the pkgconfig code upstream).
  • Loading branch information
dankamongmen committed Dec 31, 2024
1 parent b442fab commit c5854c3
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 29 deletions.
54 changes: 25 additions & 29 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ option(BUILD_FFI_LIBRARY "Build ffi library (containing all symbols which are st
option(USE_POC "Build small, uninstalled proof-of-concept binaries" ON)
option(USE_QRCODEGEN "Enable libqrcodegen QR code support" OFF)
option(USE_STATIC "Build static libraries (in addition to shared)" ON)
option(USE_TFMAN_STATIC "Link tfman with notcurses statically" ON)
cmake_dependent_option(
USE_STATIC_BINARIES "Link binaries statically (requires USE_STATIC)" OFF
"USE_STATIC" ON
)
set(USE_MULTIMEDIA "ffmpeg" CACHE STRING "Multimedia engine, one of 'ffmpeg', 'oiio', or 'none'")
set_property(CACHE USE_MULTIMEDIA PROPERTY STRINGS ffmpeg oiio none)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
Expand Down Expand Up @@ -106,6 +109,14 @@ pkg_search_module(TERMINFO REQUIRED tinfo>=6.1 ncursesw>=6.1)
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND terminfo)
set_package_properties(terminfo PROPERTIES TYPE REQUIRED)
set(PKGCONF_REQ_PRIV "${TERMINFO_LIBRARIES}")

if(${USE_DEFLATE})
pkg_check_modules(DEFLATE REQUIRED libdeflate>=1.9)
else()
find_package(ZLIB)
set_package_properties(ZLIB PROPERTIES TYPE REQUIRED)
endif()

if(${USE_FFMPEG})
pkg_check_modules(AVCODEC REQUIRED libavcodec>=57.0)
pkg_check_modules(AVDEVICE REQUIRED libavdevice>=57.0)
Expand Down Expand Up @@ -179,20 +190,6 @@ set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND libunistring)
set_package_properties(libunistring PROPERTIES TYPE REQUIRED)

# optional dependencies lacking pkg-config support
if(${USE_DEFLATE})
unset(HAVE_DEFLATE_H CACHE)
check_include_file("libdeflate.h" HAVE_DEFLATE_H)
if(NOT "${HAVE_DEFLATE_H}")
message(FATAL_ERROR "Couldn't find libdeflate.h")
endif()
find_library(libdeflate deflate REQUIRED)
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND libdeflate)
set_package_properties(libdeflate PROPERTIES TYPE REQUIRED)
else()
find_package(ZLIB)
set_package_properties(ZLIB PROPERTIES TYPE REQUIRED)
endif()

if(${USE_GPM}) # no pkgconfig from gpm
unset(HAVE_GPM_H CACHE)
check_include_file("gpm.h" HAVE_GPM_H)
Expand Down Expand Up @@ -257,7 +254,7 @@ target_include_directories(notcurses-core
"${CMAKE_REQUIRED_INCLUDES}"
"${PROJECT_BINARY_DIR}/include"
"${TERMINFO_INCLUDE_DIRS}"
"${libdeflate_INCLUDE_DIRS}"
"${DEFLATE_INCLUDE_DIRS}"
"${ZLIB_INCLUDE_DIRS}"
)
target_include_directories(notcurses-core-static
Expand All @@ -268,12 +265,12 @@ target_include_directories(notcurses-core-static
"${CMAKE_REQUIRED_INCLUDES}"
"${PROJECT_BINARY_DIR}/include"
"${TERMINFO_STATIC_INCLUDE_DIRS}"
"${libdeflate_STATIC_INCLUDE_DIRS}"
"${DEFLATE_STATIC_INCLUDE_DIRS}"
"${ZLIB_STATIC_INCLUDE_DIRS}"
)
target_link_libraries(notcurses-core
PRIVATE
"${libdeflate}"
"${DEFLATE_LIBRARIES}"
"${ZLIB_LIBRARIES}"
"${TERMINFO_LIBRARIES}"
"${LIBM}"
Expand All @@ -285,7 +282,7 @@ target_link_libraries(notcurses-core
)
target_link_libraries(notcurses-core-static
PRIVATE
"${libdeflate_STATIC_LIBRARIES}"
"${DEFLATE_STATIC_LIBRARIES}"
"${ZLIB_STATIC_LIBRARIES}"
"${TERMINFO_STATIC_LIBRARIES}"
"${LIBM}"
Expand All @@ -297,13 +294,13 @@ target_link_libraries(notcurses-core-static
target_link_directories(notcurses-core
PRIVATE
"${TERMINFO_LIBRARY_DIRS}"
"${libdeflate_LIBRARY_DIRS}"
"${DEFLATE_LIBRARY_DIRS}"
"${ZLIB_LIBRARY_DIRS}"
)
target_link_directories(notcurses-core-static
PRIVATE
"${TERMINFO_STATIC_LIBRARY_DIRS}"
"${libdeflate_STATIC_LIBRARY_DIRS}"
"${DEFLATE_STATIC_LIBRARY_DIRS}"
"${ZLIB_STATIC_LIBRARY_DIRS}"
)
if(${USE_QRCODEGEN})
Expand Down Expand Up @@ -448,13 +445,13 @@ target_include_directories(notcurses-ffi
"${CMAKE_REQUIRED_INCLUDES}"
"${PROJECT_BINARY_DIR}/include"
"${TERMINFO_INCLUDE_DIRS}"
"${libdeflate_INCLUDE_DIRS}"
"${DEFLATE_INCLUDE_DIRS}"
"${ZLIB_INCLUDE_DIRS}"
)

target_link_libraries(notcurses-ffi
PRIVATE
"${libdeflate}"
"${DEFLATE_LIBRARIES}"
"${ZLIB_LIBRARIES}"
"${TERMINFO_LIBRARIES}"
"${LIBM}"
Expand All @@ -469,7 +466,7 @@ target_link_libraries(notcurses-ffi
target_link_directories(notcurses-ffi
PRIVATE
"${TERMINFO_LIBRARY_DIRS}"
"${libdeflate_LIBRARY_DIRS}"
"${DEFLATE_LIBRARY_DIRS}"
"${ZLIB_LIBRARY_DIRS}"
)
endif()
Expand Down Expand Up @@ -770,21 +767,21 @@ target_include_directories(tfman
src
"${CMAKE_REQUIRED_INCLUDES}"
"${PROJECT_BINARY_DIR}/include"
"${libdeflate_INCLUDE_DIRS}"
"${DEFLATE_INCLUDE_DIRS}"
"${ZLIB_INCLUDE_DIRS}"
)
if(USE_TFMAN_STATIC AND USE_STATIC)
if(USE_STATIC_BINARIES)
target_link_libraries(tfman
PRIVATE
notcurses-core-static
"${libdeflate}"
"${DEFLATE_LIBRARIES}"
"${ZLIB_LIBRARIES}"
)
else()
target_link_libraries(tfman
PRIVATE
notcurses-core
"${libdeflate}"
"${DEFLATE_LIBRARIES}"
"${ZLIB_LIBRARIES}"
)
endif()
Expand All @@ -808,7 +805,6 @@ target_link_libraries(ncneofetch
"${LIBRT}"
)


# all further binaries require multimedia and C++ support
if(${USE_CXX})
if(${USE_MULTIMEDIA} STREQUAL "none")
Expand Down
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ rearrangements of Notcurses.
used for `NCBLIT_DEFAULT` when used with `NCSCALE_NONE_HIRES`,
`NCSCALE_SCALE_HIRES`, or `NCSCALE_STRETCH`. Thanks, eschnett! Note
that octants are not supported by GNU libc until 2.41.
* We now depend on at least version 1.9 of libdeflate, when libdeflate
is being used. This was released 2022-01-12, and hopefully won't
cause any problems for anyone.

* 3.0.11 (2024-10-02)
* We now normalize the return of `nl_langinfo()` according to the behavior
Expand Down

0 comments on commit c5854c3

Please sign in to comment.