blob: 1a55f832f5e0f583290cff01872b07259e5c5cbb [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################
# EXTERNAL defines a few variables that make it easy for us to track the
# directory structure of a dependency. In particular, if our library's name is
# boost, we will define the following variables:
#
# BOOST_TARGET (a target folder name to put dep in e.g., `boost-1.53.0`)
# BOOST_CMAKE_ROOT (where to have CMake put the uncompressed source, e.g.,
# `build/3rdparty/boost-1.53.0`)
# BOOST_ROOT (where the code goes in various stages of build, e.g.,
# `build/.../boost-1.53.0/src`, which might contain folders
# `build-1.53.0-build,` `-lib`, and so on, for each build step
# that dependency has)
function(EXTERNAL
LIB_NAME
LIB_VERSION
BIN_ROOT)
string(TOUPPER ${LIB_NAME} LIB_NAME_UPPER)
# Names of variables we will set in this function.
set(TARGET_VAR ${LIB_NAME_UPPER}_TARGET) # e.g., BOOST_TARGET
set(CMAKE_ROOT_VAR ${LIB_NAME_UPPER}_CMAKE_ROOT) # e.g., BOOST_CMAKE_ROOT
set(ROOT_VAR ${LIB_NAME_UPPER}_ROOT) # e.g., BOOST_ROOT
# Generate data that we will put in the above variables.
# NOTE: bundled packages are extracted into the BIN_ROOT, which is why we're
# pointing the source root into BIN_ROOT rather than SRC_ROOT.
set(TARGET_DATA ${LIB_NAME}-${LIB_VERSION})
set(CMAKE_ROOT_DATA ${BIN_ROOT}/${TARGET_DATA})
set(ROOT_DATA ${CMAKE_ROOT_DATA}/src/${TARGET_DATA})
# Finally, export the above variables to the parent scope.
set(${TARGET_VAR} ${TARGET_DATA} PARENT_SCOPE)
set(${CMAKE_ROOT_VAR} ${CMAKE_ROOT_DATA} PARENT_SCOPE)
set(${ROOT_VAR} ${ROOT_DATA} PARENT_SCOPE)
endfunction()