code: def prepare_list_of_files(kernel_name, kernel_file_list, params, grid, threads, block_size_names):
      
      temp_files = dict()
  
      kernel_string = get_kernel_string(kernel_file_list[0], params)
      name, kernel_string = prepare_kernel_string(kernel_name, kernel_string, params, grid, threads, block_size_names)
  
      if len(kernel_file_list) > 1:
          for f in kernel_file_list[1:]:
              #generate temp filename with the same extension
              temp_file = get_temp_filename(suffix="." + f.split(".")[-1])
              temp_files[f] = temp_file
              #add preprocessor statements to the additional file
              _, temp_file_string = prepare_kernel_string(kernel_name, get_kernel_string(f, params), params, grid, threads, block_size_names)
              write_file(temp_file, temp_file_string)
              #replace occurences of the additional file's name in the first kernel_string with the name of the temp file
              kernel_string = kernel_string.replace(f, temp_file)
  
      return name, kernel_string, temp_files
docs: prepare the kernel string along with any additional files
  
      The first file in the list is allowed to include or read in the others
      The files beyond the first are considered additional files that may also contain tunable parameters
  
      For each file beyond the first this function creates a temporary file with
      preprocessors statements inserted. Occurences of the original filenames in the
      first file are replaced with their temporary counterparts.
  
      :param kernel_file_list: A list of filenames. The first file in the list is
          allowed to read or include the other files in the list. All files may
          will have access to the tunable parameters.
      :type kernel_file_list: list(string)
  
      :param params: A dictionary with the tunable parameters for this particular
          instance.
      :type params: dict()
  
      :param grid: The grid dimensions for this instance. The grid dimensions are
          also inserted into the code as if they are tunable parameters for
          convenience.
      :type grid: tuple()