def METHOD_NAME(files, out_dir, additional_includes=(), package=None, force=False):
    """Compile code with protoc and return the data."""
    include_dirs = set()
    include_dirs.add(PROTOC_INCLUDE)
    if additional_includes:
        include_dirs.update(additional_includes)
    with TemporaryDirectory() as tmpdir_protob, TemporaryDirectory() as tmpdir_out:
        include_dirs.add(tmpdir_protob)
        new_files = []
        for file in files:
            bname = os.path.basename(file)
            tmp_file = os.path.join(tmpdir_protob, bname)
            shutil.copy(file, tmp_file)
            if package is not None:
                namespace_file(tmp_file, package)
            new_files.append(tmp_file)
        protoc_includes = ["-I" + dir for dir in include_dirs if dir]
        exec_args = (
            [
                PROTOC,
                "--cpp_out",
                tmpdir_out,
            ]
            + protoc_includes
            + new_files
        )
        subprocess.check_call(exec_args)
        # Fixing gcc compilation and clashes with "minor" field name
        add_undef(tmpdir_out)
        # Scan output dir, check file differences
        update_message_files(tmpdir_out, out_dir, force)