From 6d7e22ec317ce5071300300877ef442b22a4bd4e Mon Sep 17 00:00:00 2001 From: zrj Date: Wed, 15 Nov 2017 00:25:35 +0200 Subject: [PATCH] btools: Strip libmd dep for usr.bin/sort. Implement SORT_RANDOM option and do not use if BOOTSTRAPPING. This option is useless for a buildworld/buildkernel. This allows to have sort(1) that only depends on libc. --- usr.bin/sort/Makefile | 5 +++-- usr.bin/sort/coll.c | 8 ++++++++ usr.bin/sort/file.c | 5 ++++- usr.bin/sort/sort.c | 31 ++++++++++++++++++++++++++++++- usr.bin/sort/sort.h | 6 ++++++ 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/usr.bin/sort/Makefile b/usr.bin/sort/Makefile index 89305ef4e3..3299ed92ef 100644 --- a/usr.bin/sort/Makefile +++ b/usr.bin/sort/Makefile @@ -11,16 +11,17 @@ SRCS= bwstring.c \ CFLAGS+= -DWITHOUT_NLS +.if !defined(BOOTSTRAPPING) DPADD= ${LIBMD} LDADD= -lmd +CFLAGS+= -DSORT_RANDOM -.if !defined(BOOTSTRAPPING) DPADD+= ${LIBPTHREAD} LDADD+= -lpthread CFLAGS+= -DSORT_THREADS -.endif # XXX sys/md5.h shim errata for bootstrap REMOVE_OPENSSL_FILES CFLAGS+= -I${_SHLIBDIRPREFIX}/usr/include/priv +.endif .include diff --git a/usr.bin/sort/coll.c b/usr.bin/sort/coll.c index 1edb9333e0..10a787a8ca 100644 --- a/usr.bin/sort/coll.c +++ b/usr.bin/sort/coll.c @@ -35,7 +35,9 @@ #include #include #include +#if defined(SORT_RANDOM) #include +#endif #include #include #include @@ -58,7 +60,9 @@ static int gnumcoll(struct key_value*, struct key_value *, size_t offset); static int monthcoll(struct key_value*, struct key_value *, size_t offset); static int numcoll(struct key_value*, struct key_value *, size_t offset); static int hnumcoll(struct key_value*, struct key_value *, size_t offset); +#if defined(SORT_RANDOM) static int randomcoll(struct key_value*, struct key_value *, size_t offset); +#endif static int versioncoll(struct key_value*, struct key_value *, size_t offset); /* @@ -458,8 +462,10 @@ get_sort_func(struct sort_mods *sm) return (gnumcoll); else if (sm->Mflag) return (monthcoll); +#if defined(SORT_RANDOM) else if (sm->Rflag) return (randomcoll); +#endif else if (sm->Vflag) return (versioncoll); else @@ -967,6 +973,7 @@ hnumcoll(struct key_value *kv1, struct key_value *kv2, size_t offset) /* * Implements random sort (-R). */ +#if defined(SORT_RANDOM) static int randomcoll(struct key_value *kv1, struct key_value *kv2, size_t offset __unused) @@ -1016,6 +1023,7 @@ randomcoll(struct key_value *kv1, struct key_value *kv2, return (cmp_res); } } +#endif /* * Implements version sort (-V). diff --git a/usr.bin/sort/file.c b/usr.bin/sort/file.c index c0b18d582e..28a3edb5f3 100644 --- a/usr.bin/sort/file.c +++ b/usr.bin/sort/file.c @@ -1235,7 +1235,10 @@ sort_list_to_file(struct sort_list *list, const char *outfile) { struct sort_mods *sm = &(keys[0].sm); - if (!(sm->Mflag) && !(sm->Rflag) && !(sm->Vflag) && !(sm->Vflag) && + if (!(sm->Mflag) && !(sm->Vflag) && !(sm->Vflag) && +#if defined(SORT_RANDOM) + !(sm->Rflag) && +#endif !(sm->gflag) && !(sm->hflag) && !(sm->nflag)) { if ((sort_opts_vals.sort_method == SORT_DEFAULT) && byte_sort) sort_opts_vals.sort_method = SORT_RADIXSORT; diff --git a/usr.bin/sort/sort.c b/usr.bin/sort/sort.c index a907757669..9b0cf68cd9 100644 --- a/usr.bin/sort/sort.c +++ b/usr.bin/sort/sort.c @@ -37,7 +37,9 @@ #include #include #include +#if defined(SORT_RANDOM) #include +#endif #include #include #include @@ -57,8 +59,13 @@ nl_catd catalog; #endif +#if defined(SORT_RANDOM) #define OPTIONS "bcCdfghik:Mmno:RrsS:t:T:uVz" +#else +#define OPTIONS "bcCdfghik:Mmno:rsS:t:T:uVz" +#endif +#if defined(SORT_RANDOM) #define DEFAULT_RANDOM_SORT_SEED_FILE ("/dev/random") #define MAX_DEFAULT_RANDOM_SEED_DATA_SIZE (1024) @@ -68,6 +75,7 @@ static const void *random_seed; static size_t random_seed_size; MD5_CTX md5_ctx; +#endif /* * Default messages to use when NLS is disabled or no catalogue @@ -94,7 +102,11 @@ const char *nlsstr[] = { "", "[--parallel thread_no] " #endif "[--human-numeric-sort] " +#if defined(SORT_RANDOM) "[--version-sort] [--random-sort [--random-source file]] " +#else + "[--version-sort] " +#endif "[--compress-program program] [file ...]\n" }; struct sort_opts sort_opts_vals; @@ -134,7 +146,9 @@ enum #if defined(SORT_THREADS) PARALLEL_OPT, #endif +#if defined(SORT_RANDOM) RANDOMSOURCE_OPT, +#endif COMPRESSPROGRAM_OPT, QSORT_OPT, MERGESORT_OPT, @@ -175,8 +189,10 @@ static struct option long_options[] = { #endif { "qsort", no_argument, NULL, QSORT_OPT }, { "radixsort", no_argument, NULL, RADIXSORT_OPT }, +#if defined(SORT_RANDOM) { "random-sort", no_argument, NULL, 'R' }, { "random-source", required_argument, NULL, RANDOMSOURCE_OPT }, +#endif { "reverse", no_argument, NULL, 'r' }, { "sort", required_argument, NULL, SORT_OPT }, { "stable", no_argument, NULL, 's' }, @@ -200,7 +216,10 @@ sort_modifier_empty(struct sort_mods *sm) if (sm == NULL) return (true); return (!(sm->Mflag || sm->Vflag || sm->nflag || sm->gflag || - sm->rflag || sm->Rflag || sm->hflag || sm->dflag || sm->fflag)); +#ifdef SORT_RANDOM + sm->Rflag || +#endif + sm->rflag || sm->hflag || sm->dflag || sm->fflag)); } /* @@ -588,10 +607,12 @@ set_sort_modifier(struct sort_mods *sm, int c) case 'i': sm->iflag = true; break; +#ifdef SORT_RANDOM case 'R': sm->Rflag = true; need_random = true; break; +#endif case 'M': initialise_months(); sm->Mflag = true; @@ -911,6 +932,7 @@ fix_obsolete_keys(int *argc, char **argv) /* * Set random seed */ +#if defined(SORT_RANDOM) static void set_random_seed(void) { @@ -963,6 +985,7 @@ set_random_seed(void) } } } +#endif /* * Main function. @@ -1097,8 +1120,10 @@ main(int argc, char **argv) set_sort_modifier(sm, 'n'); else if (!strcmp(optarg, "month")) set_sort_modifier(sm, 'M'); +#if defined(SORT_RANDOM) else if (!strcmp(optarg, "random")) set_sort_modifier(sm, 'R'); +#endif else unknown(optarg); } @@ -1127,9 +1152,11 @@ main(int argc, char **argv) case RADIXSORT_OPT: sort_opts_vals.sort_method = SORT_RADIXSORT; break; +#if defined(SORT_RANDOM) case RANDOMSOURCE_OPT: random_source = strdup(optarg); break; +#endif case COMPRESSPROGRAM_OPT: compress_program = strdup(optarg); break; @@ -1230,7 +1257,9 @@ main(int argc, char **argv) } } +#if defined(SORT_RANDOM) set_random_seed(); +#endif /* Case when the outfile equals one of the input files: */ if (strcmp(outfile, "-")) { diff --git a/usr.bin/sort/sort.h b/usr.bin/sort/sort.h index 0ca7e4468a..a17049198d 100644 --- a/usr.bin/sort/sort.h +++ b/usr.bin/sort/sort.h @@ -37,7 +37,9 @@ #include #include +#if defined(SORT_RANDOM) #include +#endif #define VERSION "2.3-FreeBSD" @@ -66,7 +68,9 @@ extern bool debug_sort; /* * MD5 context for random hash function */ +#if defined(SORT_RANDOM) extern MD5_CTX md5_ctx; +#endif /* * sort.c @@ -114,7 +118,9 @@ struct sort_mods bool Mflag; bool nflag; bool rflag; +#if defined(SORT_RANDOM) bool Rflag; +#endif bool Vflag; bool hflag; }; -- 2.11.4.GIT