tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

util.cmake (7359B)


      1 #
      2 # Copyright (c) 2017, Alliance for Open Media. All rights reserved.
      3 #
      4 # This source code is subject to the terms of the BSD 2 Clause License and the
      5 # Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
      6 # not distributed with this source code in the LICENSE file, you can obtain it
      7 # at www.aomedia.org/license/software. If the Alliance for Open Media Patent
      8 # License 1.0 was not distributed with this source code in the PATENTS file, you
      9 # can obtain it at www.aomedia.org/license/patent.
     10 #
     11 if(AOM_BUILD_CMAKE_UTIL_CMAKE_)
     12  return()
     13 endif() # AOM_BUILD_CMAKE_UTIL_CMAKE_
     14 set(AOM_BUILD_CMAKE_UTIL_CMAKE_ 1)
     15 
     16 # Directory where generated sources will be written.
     17 set(AOM_GEN_SRC_DIR "${AOM_CONFIG_DIR}/gen_src")
     18 
     19 # Creates a no-op source file in $AOM_GEN_SRC_DIR named $basename.$extension and
     20 # returns the full path to the source file via appending it to the list variable
     21 # referred to by $out_file_list_var parameter.
     22 macro(create_no_op_source_file basename extension out_file_list_var)
     23  set(no_op_source_file "${AOM_GEN_SRC_DIR}/${basename}_no_op.${extension}")
     24  file(WRITE "${no_op_source_file}"
     25       "// Generated file. DO NOT EDIT!\n"
     26       "// ${target_name} needs a ${extension} file to force link language, \n"
     27       "// or to silence a harmless CMake warning: Ignore me.\n"
     28       "void aom_${target_name}_no_op_function(void);\n"
     29       "void aom_${target_name}_no_op_function(void) {}\n")
     30  list(APPEND "${out_file_list_var}" "${no_op_source_file}")
     31 endmacro()
     32 
     33 # Convenience function for adding a no-op source file to $target_name using
     34 # $extension as the file extension. Wraps create_no_op_source_file().
     35 function(add_no_op_source_file_to_target target_name extension)
     36  create_no_op_source_file("${target_name}" "${extension}"
     37                           "no_op_source_file_list")
     38  target_sources(${target_name} PRIVATE ${no_op_source_file_list})
     39 endfunction()
     40 
     41 # Sets the value of the variable referenced by $feature to $value, and reports
     42 # the change to the user via call to message(WARNING ...). $cause is expected to
     43 # be a configuration variable that conflicts with $feature in some way. This
     44 # function is a no-op if $feature is already set to $value.
     45 function(change_config_and_warn feature value cause)
     46  if(${feature} EQUAL ${value})
     47    return()
     48  endif()
     49  set(${feature} ${value} PARENT_SCOPE)
     50  if(${value} EQUAL 1)
     51    set(verb "Enabled")
     52    set(reason "required for")
     53  else()
     54    set(verb "Disabled")
     55    set(reason "incompatible with")
     56  endif()
     57  set(warning_message "${verb} ${feature}, ${reason} ${cause}.")
     58  message(WARNING "--- ${warning_message}")
     59 endfunction()
     60 
     61 # Extracts the version string from $version_file and returns it to the user via
     62 # $version_string_out_var. To achieve this VERSION_STRING_NOSP is located in
     63 # $version_file and then everything but the string literal assigned to the
     64 # variable is removed. Quotes and the leading 'v' are stripped from the returned
     65 # string.
     66 function(extract_version_string version_file version_string_out_var)
     67  file(STRINGS "${version_file}" aom_version REGEX "VERSION_STRING_NOSP")
     68  string(REPLACE "#define VERSION_STRING_NOSP " "" aom_version "${aom_version}")
     69  string(REPLACE "\"" "" aom_version "${aom_version}")
     70  string(REPLACE " " "" aom_version "${aom_version}")
     71  string(FIND "${aom_version}" "v" v_pos)
     72  if(${v_pos} EQUAL 0)
     73    string(SUBSTRING "${aom_version}" 1 -1 aom_version)
     74  endif()
     75  set("${version_string_out_var}" "${aom_version}" PARENT_SCOPE)
     76 endfunction()
     77 
     78 # Sets CMake compiler launcher to $launcher_name when $launcher_name is found in
     79 # $PATH. Warns user about ignoring build flag $launcher_flag when $launcher_name
     80 # is not found in $PATH.
     81 function(set_compiler_launcher launcher_flag launcher_name)
     82  find_program(launcher_path "${launcher_name}")
     83  if(launcher_path)
     84    set(CMAKE_C_COMPILER_LAUNCHER "${launcher_path}" PARENT_SCOPE)
     85    set(CMAKE_CXX_COMPILER_LAUNCHER "${launcher_path}" PARENT_SCOPE)
     86    message("--- Using ${launcher_name} as compiler launcher.")
     87  else()
     88    message(
     89      WARNING "--- Cannot find ${launcher_name}, ${launcher_flag} ignored.")
     90  endif()
     91 endfunction()
     92 
     93 # Sentinel value used to detect when a variable has been set via the -D argument
     94 # passed to CMake on the command line.
     95 set(cmake_cmdline_helpstring "No help, variable specified on the command line.")
     96 
     97 # Wrapper macro for set() that does some book keeping to help with storage of
     98 # build configuration information.
     99 #
    100 # Sets the default value for variable $name when the value of $name has not
    101 # already been set via the CMake command line.
    102 #
    103 # The names of variables defaulted through this macro are added to
    104 # $AOM_DETECT_VARS to facilitate build logging and diagnostics.
    105 macro(set_aom_detect_var name value helpstring)
    106  unset(list_index)
    107  list(FIND AOM_DETECT_VARS ${name} list_index)
    108  if(${list_index} EQUAL -1)
    109    list(APPEND AOM_DETECT_VARS ${name})
    110  endif()
    111 
    112  # Update the variable only when it does not carry the CMake assigned help
    113  # string for variables specified via the command line.
    114  unset(cache_helpstring)
    115  get_property(cache_helpstring CACHE ${name} PROPERTY HELPSTRING)
    116  if(NOT "${cache_helpstring}" STREQUAL "${cmake_cmdline_helpstring}")
    117    set(${name} ${value} CACHE STRING "${helpstring}")
    118    mark_as_advanced(${name})
    119  else()
    120    message(
    121      WARNING
    122        "${name} has been set by CMake, but it may be overridden by the build "
    123        "system during environment detection")
    124  endif()
    125 endmacro()
    126 
    127 # Wrapper macro for set() that does some book keeping to help with storage of
    128 # build configuration information.
    129 #
    130 # Sets the default value for variable $name when the value of $name has not
    131 # already been set via the CMake command line.
    132 #
    133 # The names of variables defaulted through this macro are added to
    134 # $AOM_CONFIG_VARS to facilitate build logging and diagnostics.
    135 macro(set_aom_config_var name value helpstring)
    136  unset(list_index)
    137  list(FIND AOM_CONFIG_VARS ${name} list_index)
    138  if(${list_index} EQUAL -1)
    139    list(APPEND AOM_CONFIG_VARS ${name})
    140  endif()
    141 
    142  # Update the variable only when it does not carry the CMake assigned help
    143  # string for variables specified via the command line.
    144  unset(cache_helpstring)
    145  get_property(cache_helpstring CACHE ${name} PROPERTY HELPSTRING)
    146  if(NOT "${cache_helpstring}" STREQUAL "${cmake_cmdline_helpstring}")
    147    set(${name} ${value} CACHE STRING "${helpstring}")
    148  endif()
    149 endmacro()
    150 
    151 # Wrapper macro for option() that does some book keeping to help with storage of
    152 # build configuration information.
    153 #
    154 # Sets the default value for variable $name when the value of $name has not
    155 # already been set via the CMake command line.
    156 #
    157 # The names of variables defaulted through this macro are added to
    158 # $AOM_OPTION_VARS to facilitate build logging and diagnostics.
    159 macro(set_aom_option_var name helpstring value)
    160  unset(list_index)
    161  list(FIND AOM_OPTION_VARS ${name} list_index)
    162  if(${list_index} EQUAL -1)
    163    list(APPEND AOM_OPTION_VARS ${name})
    164  endif()
    165 
    166  # Update the variable only when it does not carry the CMake assigned help
    167  # string for variables specified via the command line.
    168  unset(cache_helpstring)
    169  get_property(cache_helpstring CACHE ${name} PROPERTY HELPSTRING)
    170  if(NOT "${cache_helpstring}" STREQUAL "${cmake_cmdline_helpstring}")
    171    option(${name} "${helpstring}" ${value})
    172  endif()
    173 endmacro()