summaryrefslogtreecommitdiff
path: root/Depends.cmake
blob: ca2eb85b5af117d80b714e3fb4fa7a92e0360aa8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
if (IOS)
    include (Depends-iOS.cmake)
    return ()
endif ()

find_package (PkgConfig)

if (ENABLE_HARFBUZZ AND EXISTS ${CMAKE_SOURCE_DIR}/lib/harfbuzz/CMakeLists.txt)
    # Find HarfBuzz with pkg-config.
    if (NOT ENABLE_HARFBUZZ_MINIMAL AND PKG_CONFIG_FOUND)
        pkg_check_modules (HARFBUZZ IMPORTED_TARGET harfbuzz)
    endif ()
    if (ENABLE_HARFBUZZ_MINIMAL OR NOT HARFBUZZ_FOUND)
        # Build HarfBuzz with minimal dependencies.
        set (HB_BUILD_SUBSET  OFF CACHE BOOL "" FORCE)
        set (HB_HAVE_CORETEXT OFF CACHE BOOL "" FORCE)
        set (HB_HAVE_FREETYPE OFF CACHE BOOL "" FORCE)
        set (HB_HAVE_GLIB     OFF CACHE BOOL "" FORCE)
        set (HB_HAVE_GOBJECT  OFF CACHE BOOL "" FORCE)
        set (HB_HAVE_ICU      OFF CACHE BOOL "" FORCE)
        set (SKIP_INSTALL_ALL YES CACHE BOOL "" FORCE)
        add_subdirectory (${CMAKE_SOURCE_DIR}/lib/harfbuzz)
        set (HARFBUZZ_LIBRARIES harfbuzz)
        # HarfBuzz is C++ so must link with the standard library.    
        if (APPLE)
            list (APPEND HARFBUZZ_LIBRARIES c++)
        else ()
            list (APPEND HARFBUZZ_LIBRARIES stdc++)
        endif ()        
        set (HARFBUZZ_FOUND YES)        
        set (SKIP_INSTALL_ALL NO CACHE BOOL "" FORCE)
    endif ()
endif ()

if (ENABLE_FRIBIDI AND EXISTS ${CMAKE_SOURCE_DIR}/lib/fribidi)
    # Find FriBidi with pkg-config.
    if (NOT ENABLE_FRIBIDI_BUILD AND PKG_CONFIG_FOUND)
        pkg_check_modules (FRIBIDI IMPORTED_TARGET fribidi)
        add_library (fribidi-lib ALIAS PkgConfig::FRIBIDI)
    endif ()
    if (ENABLE_FRIBIDI_BUILD OR NOT FRIBIDI_FOUND)
        # Build FriBidi with Meson.
        find_program (MESON_EXECUTABLE meson DOC "Meson build system")
        find_program (NINJA_EXECUTABLE ninja DOC "Ninja build tool")    
        include (ExternalProject)
        set (_dst ${CMAKE_BINARY_DIR}/lib/fribidi)
        if (MESON_EXECUTABLE AND NINJA_EXECUTABLE)
            ExternalProject_Add (fribidi
                PREFIX              ${CMAKE_BINARY_DIR}/fribidi-ext
                SOURCE_DIR          ${CMAKE_SOURCE_DIR}/lib/fribidi
                CONFIGURE_COMMAND   NINJA=${NINJA_EXECUTABLE} ${MESON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/lib/fribidi 
                                        -Dtests=false -Ddocs=false -Dbin=false
                                        -Dc_flags=-Wno-macro-redefined
                                        --prefix ${_dst}
                BUILD_COMMAND       ${NINJA_EXECUTABLE}
                INSTALL_COMMAND     ${NINJA_EXECUTABLE} install
            )
        else ()
            message (FATAL_ERROR 
                "GNU FriBidi must be built with Meson. Please install Meson and Ninja and try again, or provide FriBidi via pkg-config.")
        endif ()
        add_library (fribidi-lib INTERFACE)
        target_include_directories (fribidi-lib INTERFACE ${_dst}/include)
        target_link_libraries (fribidi-lib INTERFACE -L${_dst}/lib fribidi)
        set (FRIBIDI_FOUND YES)
    endif ()
endif ()

if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/the_Foundation/CMakeLists.txt)
    set (INSTALL_THE_FOUNDATION YES)
    find_package (the_Foundation REQUIRED)
else ()
    if (EXISTS ${CMAKE_SOURCE_DIR}/lib/the_Foundation/.git)
        # the_Foundation is checked out as a submodule, make sure it's up to date.
        find_package (Git)
        if (GIT_FOUND)
            execute_process (
                COMMAND ${GIT_EXECUTABLE} submodule update
                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
                OUTPUT_VARIABLE subout
                OUTPUT_STRIP_TRAILING_WHITESPACE
            )
            if (subout)
                message (FATAL_ERROR "'lib/the_Foundation' Git submodule has been updated, please re-run CMake.\n")
            endif ()
        endif ()
    endif ()
    set (INSTALL_THE_FOUNDATION OFF)
    set (TFDN_STATIC_LIBRARY    ON  CACHE BOOL "")
    set (TFDN_ENABLE_INSTALL    OFF CACHE BOOL "")
    set (TFDN_ENABLE_TESTS      OFF CACHE BOOL "")
    set (TFDN_ENABLE_WEBREQUEST OFF CACHE BOOL "")
    add_subdirectory (lib/the_Foundation)
    add_library (the_Foundation::the_Foundation ALIAS the_Foundation)
    if (NOT OPENSSL_FOUND)
        message (FATAL_ERROR "Lagrange requires OpenSSL for TLS. Please check if pkg-config can find 'openssl'.")
    endif ()
    if (NOT ZLIB_FOUND)
        message (FATAL_ERROR "Lagrange requires zlib for reading compressed archives. Please check if pkg-config can find 'zlib'.")
    endif ()
endif ()

find_package (PkgConfig REQUIRED)
pkg_check_modules (SDL2 REQUIRED sdl2)
pkg_check_modules (MPG123 IMPORTED_TARGET libmpg123)