parameters: (environ, cmake_prefix_path)
return_statement: return lines
docstring: Generate shell code with found environment hooks
      for the all workspaces.
docstring_summary: Generate shell code with found environment hooks
      for the all workspaces.
docstring_tokens: Generate shell code with found environment hooks for the all workspaces .
function: def find_env_hooks(environ, cmake_prefix_path):
      '''
      Generate shell code with found environment hooks
      for the all workspaces.
      '''
      lines = []
      lines.append(comment('found environment hooks in workspaces'))
  
      generic_env_hooks = []
      generic_env_hooks_workspace = []
      specific_env_hooks = []
      specific_env_hooks_workspace = []
      generic_env_hooks_by_filename = {}
      specific_env_hooks_by_filename = {}
      generic_env_hook_ext = 'bat' if IS_WINDOWS else 'sh'
      specific_env_hook_ext = environ['CATKIN_SHELL'] if not IS_WINDOWS and 'CATKIN_SHELL' in environ and environ['CATKIN_SHELL'] else None
      # remove non-workspace paths
      workspaces = [path for path in cmake_prefix_path.split(os.pathsep) if path and os.path.isfile(os.path.join(path, CATKIN_MARKER_FILE))]
      for workspace in reversed(workspaces):
          env_hook_dir = os.path.join(workspace, 'etc', 'catkin', 'profile.d')
          if os.path.isdir(env_hook_dir):
              for filename in sorted(os.listdir(env_hook_dir)):
                  if filename.endswith('.%s' % generic_env_hook_ext):
                      # remove previous env hook with same name if present
                      if filename in generic_env_hooks_by_filename:
                          i = generic_env_hooks.index(generic_env_hooks_by_filename[filename])
                          generic_env_hooks.pop(i)
                          generic_env_hooks_workspace.pop(i)
                      # append env hook
                      generic_env_hooks.append(os.path.join(env_hook_dir, filename))
                      generic_env_hooks_workspace.append(workspace)
                      generic_env_hooks_by_filename[filename] = generic_env_hooks[-1]
                  elif specific_env_hook_ext is not None and filename.endswith('.%s' % specific_env_hook_ext):
                      # remove previous env hook with same name if present
                      if filename in specific_env_hooks_by_filename:
                          i = specific_env_hooks.index(specific_env_hooks_by_filename[filename])
                          specific_env_hooks.pop(i)
                          specific_env_hooks_workspace.pop(i)
                      # append env hook
                      specific_env_hooks.append(os.path.join(env_hook_dir, filename))
                      specific_env_hooks_workspace.append(workspace)
                      specific_env_hooks_by_filename[filename] = specific_env_hooks[-1]
      env_hooks = generic_env_hooks + specific_env_hooks
      env_hooks_workspace = generic_env_hooks_workspace + specific_env_hooks_workspace
      count = len(env_hooks)
      lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_COUNT', count))
      for i in range(count):
          lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_%d' % i, env_hooks[i]))
          lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_%d_WORKSPACE' % i, env_hooks_workspace[i]))
      return lines
function_tokens: def find_env_hooks ( environ , cmake_prefix_path ) : lines = [ ] lines . append ( comment ( 'found environment hooks in workspaces' ) ) generic_env_hooks = [ ] generic_env_hooks_workspace = [ ] specific_env_hooks = [ ] specific_env_hooks_workspace = [ ] generic_env_hooks_by_filename = { } specific_env_hooks_by_filename = { } generic_env_hook_ext = 'bat' if IS_WINDOWS else 'sh' specific_env_hook_ext = environ [ 'CATKIN_SHELL' ] if not IS_WINDOWS and 'CATKIN_SHELL' in environ and environ [ 'CATKIN_SHELL' ] else None # remove non-workspace paths workspaces = [ path for path in cmake_prefix_path . split ( os . pathsep ) if path and os . path . isfile ( os . path . join ( path , CATKIN_MARKER_FILE ) ) ] for workspace in reversed ( workspaces ) : env_hook_dir = os . path . join ( workspace , 'etc' , 'catkin' , 'profile.d' ) if os . path . isdir ( env_hook_dir ) : for filename in sorted ( os . listdir ( env_hook_dir ) ) : if filename . endswith ( '.%s' % generic_env_hook_ext ) : # remove previous env hook with same name if present if filename in generic_env_hooks_by_filename : i = generic_env_hooks . index ( generic_env_hooks_by_filename [ filename ] ) generic_env_hooks . pop ( i ) generic_env_hooks_workspace . pop ( i ) # append env hook generic_env_hooks . append ( os . path . join ( env_hook_dir , filename ) ) generic_env_hooks_workspace . append ( workspace ) generic_env_hooks_by_filename [ filename ] = generic_env_hooks [ - 1 ] elif specific_env_hook_ext is not None and filename . endswith ( '.%s' % specific_env_hook_ext ) : # remove previous env hook with same name if present if filename in specific_env_hooks_by_filename : i = specific_env_hooks . index ( specific_env_hooks_by_filename [ filename ] ) specific_env_hooks . pop ( i ) specific_env_hooks_workspace . pop ( i ) # append env hook specific_env_hooks . append ( os . path . join ( env_hook_dir , filename ) ) specific_env_hooks_workspace . append ( workspace ) specific_env_hooks_by_filename [ filename ] = specific_env_hooks [ - 1 ] env_hooks = generic_env_hooks + specific_env_hooks env_hooks_workspace = generic_env_hooks_workspace + specific_env_hooks_workspace count = len ( env_hooks ) lines . append ( assignment ( '_CATKIN_ENVIRONMENT_HOOKS_COUNT' , count ) ) for i in range ( count ) : lines . append ( assignment ( '_CATKIN_ENVIRONMENT_HOOKS_%d' % i , env_hooks [ i ] ) ) lines . append ( assignment ( '_CATKIN_ENVIRONMENT_HOOKS_%d_WORKSPACE' % i , env_hooks_workspace [ i ] ) ) return lines