e4dcf1d852
This method is used to generate headers for embedding files into the binary (think about the new `#embed` feature in C23 and C++26). While the stringification step itself was plenty fast, it then proceeded to wrap everything using the `textwrap` module. `textwrap` is *very* slow, as it's apparently optimized for human text. This patch reimplements the wrapping logic using a simple regex, resulting in a tremendous speed improvement (~6x), and switches to `map` for the stringification itself (thanks Rémi!) It also removes a (practically) unused argument, `initial_indent`. The generated files are pretty much the same, with a tiny difference in line length (for some reason the old logic overshot the requested line length)
22 lines
641 B
Python
22 lines
641 B
Python
"""Functions used to generate source files during build time"""
|
|
|
|
import methods
|
|
|
|
|
|
def make_icu_data(target, source, env):
|
|
buffer = methods.get_buffer(str(source[0]))
|
|
with methods.generated_wrapper(str(target[0])) as file:
|
|
file.write(f"""\
|
|
/* (C) 2016 and later: Unicode, Inc. and others. */
|
|
/* License & terms of use: https://www.unicode.org/copyright.html */
|
|
|
|
#include <unicode/utypes.h>
|
|
#include <unicode/udata.h>
|
|
#include <unicode/uversion.h>
|
|
|
|
extern "C" U_EXPORT const size_t U_ICUDATA_SIZE = {len(buffer)};
|
|
extern "C" U_EXPORT const unsigned char U_ICUDATA_ENTRY_POINT[] = {{
|
|
{methods.format_buffer(buffer, 1)}
|
|
}};
|
|
""")
|