text: #
  # All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
  # its licensors.
  #
  # For complete copyright and license terms please see the LICENSE at the root of this
  # distribution (the "License"). All use of this software is governed by the License,
  # or, if provided, by the license below or the license accompanying this file. Do not
  # remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  #
  # Original file Copyright Crytek GMBH or its affiliates, used under license.
  #
      
  # waflib imports
  from waflib.Configure import conf
  
  # lmbrwaflib imports
  from lmbrwaflib.cry_utils import append_kw_entry, prepend_kw_entry, append_to_unique_list, append_unique_kw_entry
  
  
  @conf
  def init_compiler_settings(conf):
      v = conf.env
      # Create empty env values to ensure appending always works
      v['DEFINES'] = []
      v['INCLUDES'] = []
      v['CXXFLAGS'] = []
      v['LIB'] = []
      v['LIBPATH'] = []
      v['LINKFLAGS'] = []
      v['BINDIR'] = ''
      v['LIBDIR'] = ''
      v['PREFIX'] = ''
  
      
  @conf
  def set_editor_flags(self, kw):
  
      if 'platforms' not in kw:
          append_kw_entry(kw, 'platforms', ['win', 'darwin'])
      if 'configurations' not in kw:
          append_kw_entry(kw, 'configurations', ['all'])
      if 'exclude_monolithic' not in kw:
          kw['exclude_monolithic'] = True
  
      kw['client_only'] = True
  
      if 'priority_includes' in kw:
          prepend_kw_entry(kw,'includes',kw['priority_includes'])
  
      append_kw_entry(kw,'defines',['CRY_ENABLE_RC_HELPER',
                                    '_AFXDLL',
                                    '_CRT_SECURE_NO_DEPRECATE=1',
                                    '_CRT_NONSTDC_NO_DEPRECATE=1',
          ])
  
      append_kw_entry(kw,'win_defines',['WIN32'])
  
  
  @conf
  def set_rc_flags(self, kw, ctx):
  
      rc_defines = ['RESOURCE_COMPILER',
                    'FORCE_STANDARD_ASSERT',
                    '_CRT_SECURE_NO_DEPRECATE=1',
                    '_CRT_NONSTDC_NO_DEPRECATE=1']
  
      append_unique_kw_entry(kw, 'defines', rc_defines)
      append_unique_kw_entry(kw, 'win_defines', 'WIN32')
  
  
  
  ###############################################################################
  @conf
  def Settings(self, *k, **kw):
      if not kw.get('files', None) and not kw.get('file_list', None) and not kw.get('regex', None):
          self.fatal("A Settings container must provide a list of verbatim file names, a waf_files file list or a regex")
  
      return kw
  
  
  COMPILE_SETTINGS = 'lumberyard'
  
  
  def initialize_lumberyard(ctx):
      """
      Setup all platform, compiler and configuration agnostic settings
      """
      v = ctx.env
  
      if conf.is_option_true('enable_memory_tracking'):
          append_to_unique_list(v['DEFINES'], 'AZCORE_ENABLE_MEMORY_TRACKING')
  
      # To allow pragma comment (lib, 'SDKs/...) uniformly, pass Code to the libpath
      append_to_unique_list(v['LIBPATH'], conf.CreateRootRelativePath('Code'))
      return True
  
  
  @conf
  def load_lumberyard_settings(ctx, config, is_test, is_server):
  
      if not initialize_lumberyard(ctx):
          return False
  
      # Apply compile settings from the config
      ctx.apply_compile_settings(COMPILE_SETTINGS, config)
  
      # Apply optional 'test' and 'server' settings
      if is_test:
          ctx.load_test_settings()
      if is_server:
          ctx.load_server_settings()
      return True
  
  
  @conf
  def apply_restricted_platform_environments(ctx):
      """
      # Place holder conf function so that restricted platforms can have post events trigger if they are registered
      :param ctx: Context
      """
      pass
  