| 
					
				 | 
			
			
				@@ -1,223 +1,242 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # file Copyright.txt or https://cmake.org/licensing for details. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#.rst: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# BundleUtilities 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# --------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Functions to help assemble a standalone bundle application. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# A collection of CMake utility functions useful for dealing with .app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# bundles on the Mac and bundle-like directories on any OS. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# The following functions are provided by this module: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    fixup_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    copy_and_fixup_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    verify_app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    get_bundle_main_executable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    get_dotapp_dir 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    get_bundle_and_executable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    get_bundle_all_executables 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    get_item_key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    get_item_rpaths 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    clear_bundle_keys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    set_bundle_key_values 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    get_bundle_keys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    copy_resolved_item_into_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    copy_resolved_framework_into_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    fixup_bundle_item 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    verify_bundle_prerequisites 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#    verify_bundle_symlinks 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Requires CMake 2.6 or greater because it uses function, break and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# PARENT_SCOPE.  Also depends on GetPrerequisites.cmake. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   FIXUP_BUNDLE(<app> <libs> <dirs>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Fix up a bundle in-place and make it standalone, such that it can be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# drag-n-drop copied to another machine and run on that machine as long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# as all of the system libraries are compatible. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# If you pass plugins to fixup_bundle as the libs parameter, you should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# install them or copy them into the bundle before calling fixup_bundle. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# The "libs" parameter is a list of libraries that must be fixed up, but 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# that cannot be determined by otool output analysis.  (i.e., plugins) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Gather all the keys for all the executables and libraries in a bundle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# and then, for each key, copy each prerequisite into the bundle.  Then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# fix each one up according to its own list of prerequisites. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Then clear all the keys and call verify_app on the final bundle to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# ensure that it is truly standalone. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# As an optional parameter (IGNORE_ITEM) a list of file names can be passed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   COPY_AND_FIXUP_BUNDLE(<src> <dst> <libs> <dirs>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Makes a copy of the bundle <src> at location <dst> and then fixes up 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# the new copied bundle in-place at <dst>... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   VERIFY_APP(<app>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Verifies that an application <app> appears valid based on running 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# analysis tools on it.  Calls "message(FATAL_ERROR" if the application 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# is not verified. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# As an optional parameter (IGNORE_ITEM) a list of file names can be passed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   GET_BUNDLE_MAIN_EXECUTABLE(<bundle> <result_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# The result will be the full path name of the bundle's main executable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# file or an "error:" prefixed string if it could not be determined. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   GET_DOTAPP_DIR(<exe> <dotapp_dir_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Returns the nearest parent dir whose name ends with ".app" given the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# full path to an executable.  If there is no such parent dir, then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# simply return the dir containing the executable. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# The returned directory may or may not exist. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   GET_BUNDLE_AND_EXECUTABLE(<app> <bundle_var> <executable_var> <valid_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Takes either a ".app" directory name or the name of an executable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# nested inside a ".app" directory and returns the path to the ".app" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# directory in <bundle_var> and the path to its main executable in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# <executable_var> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   GET_BUNDLE_ALL_EXECUTABLES(<bundle> <exes_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Scans the given bundle recursively for all executable files and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# accumulates them into a variable. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   GET_ITEM_KEY(<item> <key_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Given a file (item) name, generate a key that should be unique 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# considering the set of libraries that need copying or fixing up to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# make a bundle standalone.  This is essentially the file name including 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# extension with "." replaced by "_" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# This key is used as a prefix for CMake variables so that we can 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# associate a set of variables with a given item based on its key. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   CLEAR_BUNDLE_KEYS(<keys_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Loop over the list of keys, clearing all the variables associated with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# each key.  After the loop, clear the list of keys itself. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Caller of get_bundle_keys should call clear_bundle_keys when done with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# list of keys. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   SET_BUNDLE_KEY_VALUES(<keys_var> <context> <item> <exepath> <dirs> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#                         <copyflag> [<rpaths>]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Add a key to the list (if necessary) for the given item.  If added, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# also set all the variables associated with that key. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   GET_BUNDLE_KEYS(<app> <libs> <dirs> <keys_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Loop over all the executable and library files within the bundle (and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# given as extra <libs>) and accumulate a list of keys representing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# them.  Set values associated with each key such that we can loop over 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# all of them and copy prerequisite libs into the bundle and then do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# appropriate install_name_tool fixups. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# As an optional parameter (IGNORE_ITEM) a list of file names can be passed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   COPY_RESOLVED_ITEM_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Copy a resolved item into the bundle if necessary.  Copy is not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# necessary if the resolved_item is "the same as" the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# resolved_embedded_item. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Copy a resolved framework into the bundle if necessary.  Copy is not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# necessary if the resolved_item is "the same as" the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# resolved_embedded_item. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# By default, BU_COPY_FULL_FRAMEWORK_CONTENTS is not set.  If you want 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# full frameworks embedded in your bundles, set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# BU_COPY_FULL_FRAMEWORK_CONTENTS to ON before calling fixup_bundle.  By 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# default, COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE copies the framework 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# dylib itself plus the framework Resources directory. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   FIXUP_BUNDLE_ITEM(<resolved_embedded_item> <exepath> <dirs>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Get the direct/non-system prerequisites of the resolved embedded item. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# For each prerequisite, change the way it is referenced to the value of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# the _EMBEDDED_ITEM keyed variable for that prerequisite.  (Most likely 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# changing to an "@executable_path" style reference.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# This function requires that the resolved_embedded_item be "inside" the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# bundle already.  In other words, if you pass plugins to fixup_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# as the libs parameter, you should install them or copy them into the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# bundle before calling fixup_bundle.  The "libs" parameter is a list of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# libraries that must be fixed up, but that cannot be determined by 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# otool output analysis.  (i.e., plugins) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Also, change the id of the item being fixed up to its own 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# _EMBEDDED_ITEM value. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Accumulate changes in a local variable and make *one* call to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# install_name_tool at the end of the function with all the changes at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# once. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# If the BU_CHMOD_BUNDLE_ITEMS variable is set then bundle items will be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# marked writable before install_name_tool tries to change them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   VERIFY_BUNDLE_PREREQUISITES(<bundle> <result_var> <info_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Verifies that the sum of all prerequisites of all files inside the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# bundle are contained within the bundle or are "system" libraries, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# presumed to exist everywhere. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# As an optional parameter (IGNORE_ITEM) a list of file names can be passed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# :: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#   VERIFY_BUNDLE_SYMLINKS(<bundle> <result_var> <info_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Verifies that any symlinks found in the bundle point to other files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# that are already also in the bundle...  Anything that points to an 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# external file causes this function to fail the verification. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[=======================================================================[.rst: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+BundleUtilities 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+--------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Functions to help assemble a standalone bundle application. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+A collection of CMake utility functions useful for dealing with .app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bundles on the Mac and bundle-like directories on any OS. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The following functions are provided by this module: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   fixup_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   copy_and_fixup_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   verify_app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   get_bundle_main_executable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   get_dotapp_dir 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   get_bundle_and_executable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   get_bundle_all_executables 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   get_item_key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   get_item_rpaths 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   clear_bundle_keys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   set_bundle_key_values 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   get_bundle_keys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   copy_resolved_item_into_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   copy_resolved_framework_into_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   fixup_bundle_item 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   verify_bundle_prerequisites 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   verify_bundle_symlinks 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Requires CMake 2.6 or greater because it uses function, break and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+PARENT_SCOPE.  Also depends on GetPrerequisites.cmake. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DO NOT USE THESE FUNCTIONS AT CONFIGURE TIME (from ``CMakeLists.txt``)! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Instead, invoke them from an :command:`install(CODE)` or 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:command:`install(SCRIPT)` rule. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  FIXUP_BUNDLE(<app> <libs> <dirs>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Fix up a bundle in-place and make it standalone, such that it can be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+drag-n-drop copied to another machine and run on that machine as long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+as all of the system libraries are compatible. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+If you pass plugins to fixup_bundle as the libs parameter, you should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+install them or copy them into the bundle before calling fixup_bundle. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The "libs" parameter is a list of libraries that must be fixed up, but 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+that cannot be determined by otool output analysis.  (i.e., plugins) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Gather all the keys for all the executables and libraries in a bundle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+and then, for each key, copy each prerequisite into the bundle.  Then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fix each one up according to its own list of prerequisites. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Then clear all the keys and call verify_app on the final bundle to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ensure that it is truly standalone. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+As an optional parameter (IGNORE_ITEM) a list of file names can be passed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  COPY_AND_FIXUP_BUNDLE(<src> <dst> <libs> <dirs>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Makes a copy of the bundle <src> at location <dst> and then fixes up 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the new copied bundle in-place at <dst>... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  VERIFY_APP(<app>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Verifies that an application <app> appears valid based on running 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+analysis tools on it.  Calls "message(FATAL_ERROR" if the application 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+is not verified. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+As an optional parameter (IGNORE_ITEM) a list of file names can be passed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GET_BUNDLE_MAIN_EXECUTABLE(<bundle> <result_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The result will be the full path name of the bundle's main executable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+file or an "error:" prefixed string if it could not be determined. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GET_DOTAPP_DIR(<exe> <dotapp_dir_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Returns the nearest parent dir whose name ends with ".app" given the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+full path to an executable.  If there is no such parent dir, then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+simply return the dir containing the executable. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The returned directory may or may not exist. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GET_BUNDLE_AND_EXECUTABLE(<app> <bundle_var> <executable_var> <valid_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Takes either a ".app" directory name or the name of an executable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+nested inside a ".app" directory and returns the path to the ".app" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+directory in <bundle_var> and the path to its main executable in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<executable_var> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GET_BUNDLE_ALL_EXECUTABLES(<bundle> <exes_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Scans the given bundle recursively for all executable files and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+accumulates them into a variable. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GET_ITEM_KEY(<item> <key_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Given a file (item) name, generate a key that should be unique 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+considering the set of libraries that need copying or fixing up to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+make a bundle standalone.  This is essentially the file name including 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+extension with "." replaced by "_" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+This key is used as a prefix for CMake variables so that we can 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+associate a set of variables with a given item based on its key. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLEAR_BUNDLE_KEYS(<keys_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Loop over the list of keys, clearing all the variables associated with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+each key.  After the loop, clear the list of keys itself. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Caller of get_bundle_keys should call clear_bundle_keys when done with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+list of keys. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  SET_BUNDLE_KEY_VALUES(<keys_var> <context> <item> <exepath> <dirs> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        <copyflag> [<rpaths>]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Add a key to the list (if necessary) for the given item.  If added, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+also set all the variables associated with that key. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GET_BUNDLE_KEYS(<app> <libs> <dirs> <keys_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Loop over all the executable and library files within the bundle (and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+given as extra <libs>) and accumulate a list of keys representing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+them.  Set values associated with each key such that we can loop over 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+all of them and copy prerequisite libs into the bundle and then do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+appropriate install_name_tool fixups. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+As an optional parameter (IGNORE_ITEM) a list of file names can be passed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  COPY_RESOLVED_ITEM_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Copy a resolved item into the bundle if necessary.  Copy is not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+necessary if the resolved_item is "the same as" the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+resolved_embedded_item. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Copy a resolved framework into the bundle if necessary.  Copy is not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+necessary if the resolved_item is "the same as" the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+resolved_embedded_item. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+By default, BU_COPY_FULL_FRAMEWORK_CONTENTS is not set.  If you want 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+full frameworks embedded in your bundles, set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+BU_COPY_FULL_FRAMEWORK_CONTENTS to ON before calling fixup_bundle.  By 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+default, COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE copies the framework 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+dylib itself plus the framework Resources directory. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  FIXUP_BUNDLE_ITEM(<resolved_embedded_item> <exepath> <dirs>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Get the direct/non-system prerequisites of the resolved embedded item. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+For each prerequisite, change the way it is referenced to the value of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the _EMBEDDED_ITEM keyed variable for that prerequisite.  (Most likely 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+changing to an "@executable_path" style reference.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+This function requires that the resolved_embedded_item be "inside" the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bundle already.  In other words, if you pass plugins to fixup_bundle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+as the libs parameter, you should install them or copy them into the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bundle before calling fixup_bundle.  The "libs" parameter is a list of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+libraries that must be fixed up, but that cannot be determined by 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+otool output analysis.  (i.e., plugins) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Also, change the id of the item being fixed up to its own 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_EMBEDDED_ITEM value. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Accumulate changes in a local variable and make *one* call to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+install_name_tool at the end of the function with all the changes at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+once. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+If the BU_CHMOD_BUNDLE_ITEMS variable is set then bundle items will be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+marked writable before install_name_tool tries to change them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  VERIFY_BUNDLE_PREREQUISITES(<bundle> <result_var> <info_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Verifies that the sum of all prerequisites of all files inside the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bundle are contained within the bundle or are "system" libraries, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+presumed to exist everywhere. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+As an optional parameter (IGNORE_ITEM) a list of file names can be passed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  VERIFY_BUNDLE_SYMLINKS(<bundle> <result_var> <info_var>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Verifies that any symlinks found in the bundle point to other files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+that are already also in the bundle...  Anything that points to an 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+external file causes this function to fail the verification. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#]=======================================================================] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Do not include this module at configure time! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if(DEFINED CMAKE_GENERATOR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  cmake_policy(GET CMP0080 _BundleUtilities_CMP0080) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if(_BundleUtilities_CMP0080 STREQUAL "NEW") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message(FATAL_ERROR "BundleUtilities cannot be included at configure time!") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  elseif(NOT _BundleUtilities_CMP0080 STREQUAL "OLD") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message(AUTHOR_WARNING 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "Policy CMP0080 is not set: BundleUtilities prefers not to be included at configure time. " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "Run \"cmake --help-policy CMP0080\" for policy details. " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "Use the cmake_policy command to set the policy and suppress this warning." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  endif() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+endif() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # The functions defined in this file depend on the get_prerequisites function 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # (and possibly others) found in: 
			 |