text: #-----------------------------------------------------------------------------
  # Copyright (c) 2013-2016, PyInstaller Development Team.
  #
  # Distributed under the terms of the GNU General Public License with exception
  # for distributing bootloader.
  #
  # The full license is in the file COPYING.txt, distributed with this software.
  #-----------------------------------------------------------------------------
  
  
  ### **NOTE** This module is used during bootstrap.
  ### Import *ONLY* builtin modules.
  ### List of built-in modules: sys.builtin_module_names
  
  
  """
  Set up 'os' and 'os.path' module replacement functions for use during import
  bootstrap.
  """
  
  
  import sys
  
  
  _builtin_names = sys.builtin_module_names
  _mindirlen = 0
  
  
  # Wrap os.environ, os.listdir(), os.sep
  
  # We cannot cache the content of os.listdir(). It was found to cause problems
  # with programs that dynamically add python modules to be reimported by that
  # same program (i.e., plugins), because the cache is only built once
  # at the beginning, and never updated. So, we must really list the directory
  # again.
  
  if 'posix' in _builtin_names:  # For Linux, Unix, Mac OS X
      from posix import environ as os_environ
      from posix import listdir as os_listdir
      os_sep = '/'
      _mindirlen = 1
  elif 'nt' in _builtin_names:  # For Windows
      from nt import environ as os_environ
      from nt import listdir as os_listdir
      os_sep = '\\'
      _mindirlen = 3
  else:
      raise ImportError('No os specific module found')
  
  
  # Wrap os.path.join()
  def os_path_join(a, b, sep=os_sep):
      if a == '':
          return b
      lastchar = a[-1:]
      if lastchar == '/' or lastchar == sep:
          return a + b
      return a + sep + b
  
  
  # Wrap os.path.dirname()
  def os_path_dirname(a, sep=os_sep, mindirlen=_mindirlen):
      for i in range(len(a) - 1, -1, -1):
          c = a[i]
          if c == '/' or c == sep:
              if i < mindirlen:
                  return a[:i + 1]
              return a[:i]
      return ''
  
  
  # Wrap os.path.basename()
  if sys.platform.startswith('win'):
      # Implementation from ntpath.py module
      # from standard Python 2.7 Library.
      def os_path_basename(pth):
          ## Implementation of os.path.splitdrive()
          if pth[1:2] == ':':
              d = pth[0:2]
              p = pth[2:]
          else:
              d = ''
              p = pth
          ## Implementation of os.path.split()
          # set i to index beyond p's last slash
          i = len(p)
          while i and p[i - 1] not in '/\\':
              i = i - 1
          head, tail = p[:i], p[i:]  # now tail has no slashes
          # Windows implementation is based on split(). We need
          # to return only tail.
          return tail
  else:
      # Implementation from ntpath.py module
      # from standard Python 2.7 Library.
      def os_path_basename(pth):
          i = pth.rfind('/') + 1
          return pth[i:]
  
  
  if 'PYTHONCASEOK' not in os_environ:
      def caseOk(filename):
          files = os_listdir(os_path_dirname(filename))
          return os_path_basename(filename) in files
  else:
      def caseOk(filename):
          return True
  