summaryrefslogtreecommitdiff
path: root/indra/cmake/DarwinPackages.cmake
blob: 86632034ba80e357b1bcabdce63fea516519c4f7 (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
# -*- cmake -*-
#
# Choose the Darwin dependency provider.
# MacPorts stays the default when Boost 1.88 is installed at the path the
# rest of the build has always used. Homebrew is selected otherwise, or when
# DARWIN_PACKAGE_MANAGER is set to "homebrew".
include_guard(GLOBAL)

if (NOT DARWIN)
  return()
endif ()

if (EXISTS "/opt/local/libexec/boost/1.88")
  set(_darwin_pkg_default macports)
else ()
  set(_darwin_pkg_default homebrew)
endif ()

set(DARWIN_PACKAGE_MANAGER "${_darwin_pkg_default}" CACHE STRING
  "Darwin dependency provider: macports or homebrew")
set_property(CACHE DARWIN_PACKAGE_MANAGER PROPERTY STRINGS macports homebrew)

if (DARWIN_PACKAGE_MANAGER STREQUAL "homebrew")
  set(DARWIN_USE_HOMEBREW TRUE)
  find_program(BREW_EXECUTABLE brew REQUIRED)
  execute_process(
    COMMAND "${BREW_EXECUTABLE}" --prefix
    OUTPUT_VARIABLE DARWIN_HOMEBREW_PREFIX
    OUTPUT_STRIP_TRAILING_WHITESPACE
    COMMAND_ERROR_IS_FATAL ANY
    )
  execute_process(
    COMMAND "${BREW_EXECUTABLE}" --prefix boost
    OUTPUT_VARIABLE DARWIN_BOOST_PREFIX
    OUTPUT_STRIP_TRAILING_WHITESPACE
    COMMAND_ERROR_IS_FATAL ANY
    )
  execute_process(
    COMMAND "${BREW_EXECUTABLE}" --prefix libnghttp2
    OUTPUT_VARIABLE DARWIN_NGHTTP2_PREFIX
    OUTPUT_STRIP_TRAILING_WHITESPACE
    COMMAND_ERROR_IS_FATAL ANY
    )
  execute_process(
    COMMAND "${BREW_EXECUTABLE}" --prefix apr
    OUTPUT_VARIABLE DARWIN_APR_PREFIX
    OUTPUT_STRIP_TRAILING_WHITESPACE
    COMMAND_ERROR_IS_FATAL ANY
    )
  execute_process(
    COMMAND "${BREW_EXECUTABLE}" --prefix apr-util
    OUTPUT_VARIABLE DARWIN_APRUTIL_PREFIX
    OUTPUT_STRIP_TRAILING_WHITESPACE
    COMMAND_ERROR_IS_FATAL ANY
    )
  execute_process(
    COMMAND "${BREW_EXECUTABLE}" --prefix icu4c@78
    OUTPUT_VARIABLE DARWIN_ICU_PREFIX
    OUTPUT_STRIP_TRAILING_WHITESPACE
    COMMAND_ERROR_IS_FATAL ANY
    )
  # The macOS apr-1.pc points at /usr/include/apr-1, which is not on disk
  # (headers live in the SDK). Prefer the Homebrew apr pkg-config files.
  # openal-soft is keg-only, so its openal.pc is absent from the default
  # pkg-config path until this directory is prepended. freealut.pc requires it.
  set(_darwin_pkgconfig_dirs
    "${DARWIN_APR_PREFIX}/lib/pkgconfig"
    "${DARWIN_APRUTIL_PREFIX}/lib/pkgconfig"
    )
  execute_process(
    COMMAND "${BREW_EXECUTABLE}" --prefix openal-soft
    OUTPUT_VARIABLE _darwin_openal_prefix
    OUTPUT_STRIP_TRAILING_WHITESPACE
    RESULT_VARIABLE _darwin_openal_rc
    )
  if (_darwin_openal_rc EQUAL 0 AND EXISTS "${_darwin_openal_prefix}/lib/pkgconfig")
    list(APPEND _darwin_pkgconfig_dirs "${_darwin_openal_prefix}/lib/pkgconfig")
  endif ()
  list(JOIN _darwin_pkgconfig_dirs ":" _darwin_pkgconfig_prefix)
  set(ENV{PKG_CONFIG_PATH} "${_darwin_pkgconfig_prefix}:$ENV{PKG_CONFIG_PATH}")
  if (NOT CMAKE_PREFIX_PATH MATCHES "(^|;)${DARWIN_HOMEBREW_PREFIX}(;|$)")
    list(PREPEND CMAKE_PREFIX_PATH "${DARWIN_HOMEBREW_PREFIX}")
  endif ()
  # llmath headers include glm directly. A private include dir keeps Homebrew
  # OpenSSL and other linked headers off the global search path.
  if (EXISTS "${DARWIN_HOMEBREW_PREFIX}/include/glm/vec3.hpp")
    set(_darwin_glm_include "${CMAKE_BINARY_DIR}/homebrew-includes")
    file(MAKE_DIRECTORY "${_darwin_glm_include}")
    file(REMOVE "${_darwin_glm_include}/glm")
    file(CREATE_LINK "${DARWIN_HOMEBREW_PREFIX}/include/glm" "${_darwin_glm_include}/glm" SYMBOLIC)
    include_directories(SYSTEM "${_darwin_glm_include}")
  endif ()
  set(DARWIN_BOOST_LIBRARY_SUFFIX "")
else ()
  set(DARWIN_USE_HOMEBREW FALSE)
  set(DARWIN_BOOST_PREFIX "/opt/local/libexec/boost/1.88")
  set(DARWIN_BOOST_LIBRARY_SUFFIX "-mt")
endif ()

message(STATUS "Darwin package manager: ${DARWIN_PACKAGE_MANAGER} (Boost ${DARWIN_BOOST_PREFIX}, suffix '${DARWIN_BOOST_LIBRARY_SUFFIX}')")