##  Z4GE.System
##  Copyright 2022 DeathBlizzard
##  
##  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
##  conditions are met:
##  
##  1.  Redistributions of source code must retain the above copyright notice, this list of conditions and the following
##      disclaimer.Configuration
##  
##  2.  Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
##      disclaimer in the documentation and/or other materials provided with the distribution.
##  
##  3.  Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
##      derived from this software without specific prior written permission.
##  
##  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
##  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
##  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
##  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
##  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
##  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
##  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

##  SetGlobalVariable
##  This macro, `SetGlobalVariable` ensures that the given CMake variable is set in Parent Scope, thus ensuring that the
##  variable is accessible from all the sub directories. This is just a convinience macro that makes uses of the `PARENT_SCOPE`
##  option passed to the `set` builtin function
macro(set_global)

    ##  If this is the parent / top-level CMake project, ignore the PARENT_SCOPE parameter
    if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_DIRECTORY)
        set(${ARGN})
    ##  otherwise ensure that the PARENT_SCOPE parameter is passed to the set method
    else()
        set(${ARGN} PARENT_SCOPE)
    endif()
endmacro()