55c452fb68
* spelling: above Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: accessibility Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: accessible Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: account Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: action Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: activated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: active Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: again Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: allegro Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: alternative Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: amplitude Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: and Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: annotation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: appended Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: appending Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: appropriate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: arbitrarily Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: architecture Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: arpeggio Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: arranger Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: assumed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: asynchronous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: automatically Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: availability Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: available Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: backslashes Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: before Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: beginning Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: between Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: bounding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: bracket Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: builtin Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: calculated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: categories Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: check Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: class Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: clearance Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: column Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: combinations Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: completed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: composer Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: compression Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: consideration Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: constraints Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: container Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: continuous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: contrabass Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: control Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: convergence Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: conversion Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: convert Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: coordinates Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: correctly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: corresponds Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: counting Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: crescendo Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: customizable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: cutout Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: deep Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: denom Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: denominator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: diagram Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: diminished Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: direction Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: directories Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: disconnected Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: doesn't Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: dotted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: easeinout Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: eighth Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: element Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: elements Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: enabled Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: engraving Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: evenly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exactly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exceed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: excerpts Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: excessively Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exclusive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extension Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extrapolated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: farthest Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fits Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: friends Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: function Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: glissando Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: global Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: grid Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: halved Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: happen * spelling: harmonies Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: have Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: header Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: height Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: iabbrev Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: ideally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: implementation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: in Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: incoming Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: incomplete Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: increase Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: indentation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: individual Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: infer Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: initial Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: initially Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: inputted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: instrument Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: instruments Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: invalid Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: invocation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: iplugin Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: javascript Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: label Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: laid out Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: languages Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: length Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: linked Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: lyrchord Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: lyricist Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: managed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: manually Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mapping Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mappings Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: margins Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: measure Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: metric Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: metronome Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: military Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: milliseconds Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: minimum Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: modifiers Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: moving Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: multi Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: namespace Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: navigate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: necessary Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: needs Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: newly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: notation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: numerator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occasionally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurred Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurrence Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: omitted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: or Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: oriented Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: originally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: ornament Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: ornaments Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: output Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: outputted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: outside Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overlapping Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overridden Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: package Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: padding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: parameter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: percussion Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: placement Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: playthrough Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: positive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: preceded Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: precision Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: previous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: process Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: property Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: proximity Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: publish Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rasgueado Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: read Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: receive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: received Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rectangle Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: regarding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: register Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: registry Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rehearsal Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: related Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: repeat Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: repeatp Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: replacements Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: represent Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: representation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: responses Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rhythm Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: section Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: selected Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: selection Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: separation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: separator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: shortcuts Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: signatures Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: simile Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: slurred Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: sound Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: staccato Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: staff Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: stuff Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: style Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: suffix Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: supported Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: symbol Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: symbols Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: system Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tablature Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tcp_invalid Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: that Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: the Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: thickness Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tibetan Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: of Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: to Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: transparent Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: transpose Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tremolo Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: ultimately Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unassigned Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: underscore Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unhandled Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: uninstall Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unknown Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unnamed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: useful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: usually Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: vertical Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: violin Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: visible Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: when Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: whether Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: with Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: within Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: without Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: would Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: writing Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: written Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: xmlns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * Remove unused avaiableArticulationTypesChanged Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: firstSystemIndentation [API] Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * Enable testIncompleteTuplet Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * Drop stray comment Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * Update license header in module.cmake per https://github.com/musescore/MuseScore/pull/11566#discussion_r870550003 Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
205 lines
7.7 KiB
CMake
205 lines
7.7 KiB
CMake
# This file contains generic functions that are useful for any CMake project.
|
|
# Function names start with "fn__" so you can recognise them in other files.
|
|
#
|
|
# Unless otherwise stated, all relative file paths are assumed to be relative
|
|
# to ${CMAKE_CURRENT_BINARY_DIR}. If your file is elsewhere then you must use
|
|
# an absolute path, e.g. by prepending ${CMAKE_CURRENT_SOURCE_DIR}.
|
|
#
|
|
# Some of the functions create custom commands. Remember, a custom command
|
|
# will not run unless its OUTPUT is depended on by a custom target or another
|
|
# custom command. The same applies to the other custom command, so there must
|
|
# be a custom target involved somewhere.
|
|
#
|
|
# For example, if you write this in a CMake file then nothing will happen:
|
|
#
|
|
# fn__copy_during_build("my_source_file.txt" "my_dest_file.txt")
|
|
#
|
|
# One way to make sure the file is copied would be to follow that line with:
|
|
#
|
|
# add_custom_target("my_target_name" ALL DEPENDS "my_dest_file.txt")
|
|
|
|
# Where are we? Need to set these variables for use inside functions.
|
|
set(_FUNCTIONS_FILE "${CMAKE_CURRENT_LIST_FILE}") # path to this file
|
|
set(_FUNCTIONS_DIR "${CMAKE_CURRENT_LIST_DIR}") # path to this directory
|
|
|
|
# Set a variable to a value only if the variable is currently undefined.
|
|
function(fn__set_default
|
|
NAMEV # Name of the variable to set.
|
|
VALUE # Value to assign to the variable.
|
|
)
|
|
if(NOT DEFINED "${NAMEV}")
|
|
set("${NAMEV}" "${VALUE}" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
# Set a variable to value of an option from a list of command line arguments.
|
|
# The variable will only receive a value if the relevant option was provided.
|
|
function(fn__get_option
|
|
VAR_NAME # Name of the variable to set.
|
|
OPT_NAME # Name of the option to search for (e.g. "-foo").
|
|
# ARGN... The command line arguments.
|
|
)
|
|
list(LENGTH ARGN LEN)
|
|
set(i "0")
|
|
while(i LESS "${LEN}")
|
|
list(GET ARGN "${i}" ARG)
|
|
if(ARG MATCHES "^${OPT_NAME}")
|
|
if(ARG STREQUAL "${OPT_NAME}")
|
|
# Option and value in separate arguments ("-o VALUE" or "--option VALUE")
|
|
math(EXPR i "${i} + 1") # next argument (the value)
|
|
list(GET ARGN "${i}" OPT_VAL)
|
|
set("${VAR_NAME}" "${OPT_VAL}" PARENT_SCOPE)
|
|
elseif("${OPT_NAME}" MATCHES "^-[a-zA-Z0-9]$")
|
|
# Short option without equals sign before value ("-oVALUE")
|
|
string(REGEX REPLACE "^${OPT_NAME}(.*)$" "\\1" OPT_VAL "${ARG}")
|
|
set("${VAR_NAME}" "${OPT_VAL}" PARENT_SCOPE)
|
|
elseif(ARG MATCHES "^${OPT_NAME}=")
|
|
# Long option with equals sign before option value ("--option=VALUE")
|
|
string(REGEX REPLACE "^${OPT_NAME}=(.*)$" "\\1" OPT_VAL "${ARG}")
|
|
set("${VAR_NAME}" "${OPT_VAL}" PARENT_SCOPE)
|
|
endif()
|
|
endif()
|
|
math(EXPR i "${i} + 1") # next argument
|
|
endwhile()
|
|
endfunction()
|
|
|
|
# Turn a list of command line arguments into an escaped string
|
|
function(fn__command_string
|
|
VAR_NAME # The variable to store the final string.
|
|
# ARGN ... The command line arguments.
|
|
)
|
|
foreach(ARG IN LISTS ARGN)
|
|
if(ARG MATCHES " ")
|
|
set(ARG "\"${ARG}\"")
|
|
endif()
|
|
set("${VAR_NAME}" "${${VAR_NAME}} ${ARG}")
|
|
endforeach()
|
|
set("${VAR_NAME}" "${${VAR_NAME}}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(fn__require_program # Ensure that a build dependency is installed.
|
|
PATHV # Location of the program returned in this variable.
|
|
PRETTY_NAME # Program name that users will recognize (e.g. "ImageMagick").
|
|
TEST_ARG # Argument to run if program is found (e.g. "--version").
|
|
HELP_URL # Where to get help if program is not found.
|
|
COMMAND # The name of the program on the command line (e.g. "magick").
|
|
# ARGN: Any alternative names for the command (e.g. "convert", "mogrify").
|
|
)
|
|
# Only check for program if not already found and cached.
|
|
if(NOT ${PATHV})
|
|
set(CMD_NAMES ${COMMAND} ${ARGN})
|
|
set(CMAKE_FIND_APPBUNDLE "NEVER") # macOS: don't search for .app bundles
|
|
find_program(${PATHV} NAMES ${CMD_NAMES} DOC "${HELP_URL}")
|
|
set(CMD "${${PATHV}}")
|
|
string(REPLACE ";" ", " CMD_NAMES "${CMD_NAMES}")
|
|
if(CMD)
|
|
# Program found so test to make sure it works.
|
|
execute_process(
|
|
COMMAND "${CMD}" ${TEST_ARG}
|
|
TIMEOUT 5
|
|
RESULT_VARIABLE RETVAL
|
|
)
|
|
if(NOT ${RETVAL} EQUAL 0)
|
|
# Test failed.
|
|
unset(${PATHV} CACHE) # make sure we check again next time
|
|
message(FATAL_ERROR
|
|
"\n"
|
|
"Error running ${PRETTY_NAME} with command:"
|
|
"\n"
|
|
" ${CMD} ${TEST_ARG}"
|
|
"\n"
|
|
"Console output directly above may provide more information about the error."
|
|
"\n"
|
|
"Do you have the correct version of ${PRETTY_NAME} installed? Is it "
|
|
"available in your PATH environment variable?"
|
|
"\n"
|
|
"See ${HELP_URL}"
|
|
"\n"
|
|
)
|
|
endif(NOT ${RETVAL} EQUAL 0)
|
|
else(CMD)
|
|
# Program not found.
|
|
message(FATAL_ERROR
|
|
"\n"
|
|
"Unable to find ${PRETTY_NAME} (cmd: ${CMD_NAMES})"
|
|
"\n"
|
|
"Please make sure ${PRETTY_NAME} is installed and "
|
|
"available in your PATH environment variable."
|
|
"\n"
|
|
"See ${HELP_URL}"
|
|
"\n"
|
|
)
|
|
endif(CMD)
|
|
endif(NOT ${PATHV})
|
|
endfunction(fn__require_program)
|
|
|
|
# Get information about Qt based on the path to qmake executable
|
|
function(fn__set_qt_variables
|
|
QMAKE # Path to qmake executable
|
|
)
|
|
get_filename_component(dir "${QMAKE}" DIRECTORY)
|
|
get_filename_component(dir "${dir}" DIRECTORY)
|
|
set(ENV{QTDIR} "${dir}")
|
|
get_filename_component(QT_COMPILER "${dir}" NAME)
|
|
get_filename_component(dir "${dir}" DIRECTORY)
|
|
get_filename_component(QT_VERSION "${dir}" NAME)
|
|
get_filename_component(dir "${dir}" DIRECTORY)
|
|
set(QT_LOCATION "${dir}" PARENT_SCOPE)
|
|
set(QT_VERSION "${QT_VERSION}" PARENT_SCOPE)
|
|
set(QT_COMPILER "${QT_COMPILER}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(fn__copy_during_build # copy a file at build time
|
|
SOURCE_FILE # relative or absolute path to file being copied
|
|
DEST_FILE # relative or absolute path to the new copy
|
|
)
|
|
# need absolute path for use with add_custom_command's DEPENDS argument
|
|
get_filename_component(
|
|
SOURCE_FILE_ABS # equals SOURCE_FILE if SOURCE_FILE is already absolute
|
|
"${SOURCE_FILE}"
|
|
ABSOLUTE
|
|
BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}"
|
|
)
|
|
add_custom_command(
|
|
OUTPUT "${DEST_FILE}"
|
|
DEPENDS "${SOURCE_FILE_ABS}" # absolute path required for DEPENDS
|
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${SOURCE_FILE}" "${DEST_FILE}"
|
|
COMMENT "Copying '${SOURCE_FILE}' to '${DEST_FILE}'"
|
|
VERBATIM
|
|
)
|
|
endfunction(fn__copy_during_build)
|
|
|
|
function(fn__build_zip # create zip archive at build time
|
|
PATH_OUT # final path to the archive
|
|
DIR_IN # the directory that all input file paths are relative to
|
|
FILE_IN # one file to go in the archive, with path relative to DIR_IN
|
|
# ARGN remaining arguments are more files to go in the archive
|
|
)
|
|
# need absolute path for use with add_custom_command's DEPENDS argument
|
|
get_filename_component(
|
|
DIR_IN_ABS
|
|
"${DIR_IN}"
|
|
ABSOLUTE
|
|
BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}"
|
|
)
|
|
set(FILES_IN "${FILE_IN};${ARGN}")
|
|
set(FILES_IN_ABS "")
|
|
foreach(FILE IN LISTS FILES_IN)
|
|
list(APPEND FILES_IN_ABS "${DIR_IN_ABS}/${FILE}")
|
|
endforeach(FILE)
|
|
# we're about to change directory, so a relative PATH_OUT would not work
|
|
get_filename_component(
|
|
PATH_OUT_ABS
|
|
"${PATH_OUT}"
|
|
ABSOLUTE
|
|
BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}"
|
|
)
|
|
add_custom_command(
|
|
OUTPUT "${PATH_OUT}" # still relative to CMAKE_CURRENT_BINARY_DIR
|
|
DEPENDS ${FILES_IN_ABS} # absolute paths required for DEPENDS
|
|
COMMAND "${CMAKE_COMMAND}" -E tar cf "${PATH_OUT_ABS}" --format=zip -- ${FILES_IN}
|
|
WORKING_DIRECTORY "${DIR_IN}" # run command in this directory
|
|
COMMENT "Compressing '${PATH_OUT}'"
|
|
VERBATIM
|
|
)
|
|
endfunction(fn__build_zip)
|