for #23095 allow environment variables in core_{os}.cfg files
see https://github.com/shotgunsoftware/tk-core/pull/32
for #23095 expand env variables in the core_{os}.cfg files in tank shell script
address pull request comments
- add more descriptive comments with examples
- simplify env variable expansion by using os.path.expandvars() instead of using os.environ
- use double-quotes for consistency
- remove references to phantom logging objects
#25586 [minor] cache_apps command now checks frameworks.
Previously, it would only check apps and engines.
For #25555 - Framework & engine blocks can now be included in envs
This is consistent with the existing support for apps.
For #25582 - Resolved recursive trap in frameworks install.
If an APP required frameworks A and B and framework A also required framework B and none of the frameworks had been installed, an exception would be raised because of the depth-first manner the recursion was carried out. Changed to breath-first to that the environment object is correctly representing the changes that are carried out as part of the recursion.
For #25555 - Added error message for referenced framework install.
This is similar to the message which is already current generated if apps or engines are installed into referenced sections.
Closes #77
#25588 Install commands now support dev mode. Added DEV ui decoration.
Adds support for dev descriptors to the install_app and install_engine
commands. Also added a tweak so that if you are launching a UI from an
app with a dev descriptor, a small DEV suffix will be appended to the
title to help developers keep track of which apps are in dev mode.
Closes #78
add comment to clarify this is Linux/OSX only functionality
Merge pull request #69 from shotgunsoftware/23095_env_var_expansion

for #23095 allow environment variables in core_{os}.cfg files
#25602 Adds a new method bundle.execute_hook_expression()
Adds a new method that lets you execute a hook expression directly. Also
updates execute_hook_by_name to support arbitrary hook formats and not
just files in the configuration formats. This method is now legacy and
the new execute_hook_expression method is the recommended way to execute
arbitrary hooks. Closes #79.
[minor] Added debug logging around shotgun calls in the tank command.
Added some links and documentation resourcesto the main core readme.
This should help users arriving directly at the github repository to
find our documentation that explains how to get up and running with
Toolkit.
[minor] Removed very old message from setup_project talking about v0.13
This was relevant back when clients upgraded from 0.11 but is hardly
useful anymore.
#23778 Improved QT Styling
Adds a new method to the engine base class:
_initialize_dark_look_and_feel() which replaces the
_get_standard_qt_stylesheet() method (which will still be around however
deprecated).

This method sets up a visual environment very similar to the one in
maya. It is using a slightly different approach than just using a
stylesheet - instead, it is a combination of style, palette and some css
on top. The hope is that this should provide a broad, solid and
consistent style base for all apps and widgets and ensure that they are
looking similar to the way they would look in Maya (or Nuke for that
matter).

Engine initialization will typically look something like this with the
new method:

# start up our QApp now
qt_application = QtGui.QApplication([])
qt_application.setWindowIcon(QtGui.QIcon(self.icon_256))
self._initialize_dark_look_and_feel()

Closes #80.
#25657 include statement now supportes environment variable expansion.
This allows paths declared via the include or includes statements in 
the templates.yml or environment files to contain environment variables.
#25435 Better resolve of hooks with {engine_name}

If a hook is a new-style hook and has a default value which contains the
{engine_name} token, the code now checks to ensure that an
implementation actually exists for the current engine.

For example, previously, there could be implementations for maya and
nuke and when you installed the app for houdini things would just
install without errors, but when you tried to run the app it would not
find the desired built-in houdini hook because there was none.

Now instead, it will warn at install time and ask you to enter a manual
parameter value in this case.

/----------------------------------------------------------------------
| Item:    actions_hook
| Type:    hook
| Summary: Hook which contains all methods for action management.
\----------------------------------------------------------------------
WARNING: Sorry, no built-in support for the tk-shotgun engine yet! The
default hook value '{self}/{engine_name}_actions.py' for this hook
refers to an engine specific hook, however there is currently no hook
implementation available for the current engine. If you want to continue
with the install, you have to supply your own hooks.
Please enter value (enter to skip): 

Closes #81
#25686 Adjusted the logging in the tank command to not break long words.
For #25587 - Spaces in Windows PC & Python paths are now supported.
Spaces are now supported in paths for Pipeline Configurations on Windows when using the latest version of the tank.bat file.  Additionally, Python can now be installed into a path with spaces in (e.g. C:\Program Files) if needed.