diff options
author | Carlos O'Donell <carlos@redhat.com> | 2018-11-26 09:51:51 -0500 |
---|---|---|
committer | Carlos O'Donell <carlos@redhat.com> | 2018-12-03 10:15:39 -0500 |
commit | 8cebd4ffe67bf94508809ea0caa02a4f1d52e8b1 (patch) | |
tree | 37941e21ff2e02a3d6318eceeef5bc7d565215ae /locale/programs/localedef.c | |
parent | c22e4c2a1431c5e77bf4288d35bf7629f2f093aa (diff) | |
download | glibc-8cebd4ffe67bf94508809ea0caa02a4f1d52e8b1.tar.gz glibc-8cebd4ffe67bf94508809ea0caa02a4f1d52e8b1.tar.xz glibc-8cebd4ffe67bf94508809ea0caa02a4f1d52e8b1.zip |
Add --no-hard-links option to localedef (bug 23923)
Downstream distributions need consistent sets of hardlinks in order for rpm to operate effectively. This means that even if locales are built with a high level of parallelism that the resulting files need to have consistent hardlink counts. The only way to achieve this is with a post-install hardlink pass using a program like 'hardlink' (shipped in Fedora). If the downstream distro wants to post-process the hardlinks then the time spent in localedef looking up sibling directories and processing hardlinks is wasted effort. To optimize the build and install pass we add a --no-hard-links option to localedef to avoid doing the hardlink optimziation for size. Tested on x86_64 with 'make localedata/install-locale-files' before and after. Without the patch we have files with 100+ hardlink counts. After the patch and running with --no-hard-links all link counts are 1. This patch also alters the convenience target 'make localedata/install-locale-files' to use the new option. Signed-off-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'locale/programs/localedef.c')
-rw-r--r-- | locale/programs/localedef.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/locale/programs/localedef.c b/locale/programs/localedef.c index d718d2e9f4..6c4936be6b 100644 --- a/locale/programs/localedef.c +++ b/locale/programs/localedef.c @@ -85,6 +85,9 @@ static bool replace_archive; /* If true list archive content. */ static bool list_archive; +/* If true create hard links to other locales (default). */ +bool hard_links = true; + /* Maximum number of retries when opening the locale archive. */ int max_locarchive_open_retry = 10; @@ -105,6 +108,7 @@ void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; #define OPT_BIG_ENDIAN 401 #define OPT_NO_WARN 402 #define OPT_WARN 403 +#define OPT_NO_HARD_LINKS 404 /* Definitions of arguments for argp functions. */ static const struct argp_option options[] = @@ -120,6 +124,8 @@ static const struct argp_option options[] = { NULL, 0, NULL, 0, N_("Output control:") }, { "force", 'c', NULL, 0, N_("Create output even if warning messages were issued") }, + { "no-hard-links", OPT_NO_HARD_LINKS, NULL, 0, + N_("Do not create hard links between installed locales") }, { "prefix", OPT_PREFIX, N_("PATH"), 0, N_("Optional output file prefix") }, { "posix", OPT_POSIX, NULL, 0, N_("Strictly conform to POSIX") }, { "quiet", OPT_QUIET, NULL, 0, @@ -389,6 +395,10 @@ parse_opt (int key, char *arg, struct argp_state *state) /* Enable the warnings. */ set_warnings (arg, true); break; + case OPT_NO_HARD_LINKS: + /* Do not hard link to other locales. */ + hard_links = false; + break; case 'c': force_output = 1; break; |