docs: def process_compile_entries(
          processor, spec, entries, modpath_logger=None, targetpath_logger=None):
      """
      The generalized raw spec entry process invocation loop.
      """
  
      # Contains a mapping of the module name to the compiled file's
      # relative path starting from the base build_dir.
      all_modpaths = {}
      all_targets = {}
      # List of exported module names, should be equal to all keys of
      # the compiled and bundled sources.
      all_export_module_names = []
  
      def update(base, fresh, logger):
          if callable(logger):
              for dupes in dict_update_overwrite_check(base, fresh):
                  logger(*dupes)
          else:
              base.update(fresh)
  
      for entry in entries:
          modpaths, targetpaths, export_module_names = processor(spec, entry)
          update(all_modpaths, modpaths, modpath_logger)
          update(all_targets, targetpaths, targetpath_logger)
          all_export_module_names.extend(export_module_names)
  
      return all_modpaths, all_targets, all_export_module_names