def METHOD_NAME(root_dir, content=None):
    """
    Creates a list of files to "include" from patterns.
    Args:
        root_dir[str]: The directory which all other paths should be relative to.
        content[list]: List of file/path globs to include, relative to the 'base' directory, paths
                       beginning with '~' are excluded.
    """
    # Check root_dir
    if not os.path.isdir(root_dir):
        LOG.error('The "root_dir" must be a valid directory: %s', root_dir)
        return None
    # Loop through the base directory and create a set of matching filenames
    filenames = set()
    for root, _, files in os.walk(root_dir, followlinks=True):
        for fname in files:
            full_name = os.path.join(root, fname)
            if os.path.isfile(full_name) and full_name.endswith(FILE_EXT):
                filenames.add(full_name)
    # Return the complete list if content is empty
    if content is None:
        return sorted(filenames)
    # Check content type
    if not isinstance(content, list) or any(not isinstance(x, str) for x in content):
        LOG.error('The "content" must be a list of str items.')
        return None
    # Build include/exclude lists
    include = []
    exclude = []
    for item in content:
        if item.startswith('~'):
            exclude.append(item[1:])
        else:
            include.append(item)
    # Create the complete set of files
    output = set()
    for pattern in include:
        output.update(_find_files(filenames, os.path.join(root_dir, pattern)))
    for pattern in exclude:
        output -= _find_files(output, os.path.join(root_dir, pattern))
    # Test the files exist
    for fname in copy.copy(output):
        if not os.path.isfile(fname):
            LOG.error("Unknown file provided in content (it is being removed):\n%s", fname)
            output.remove(fname)
    return sorted(output)