From 42198756233ea06c38120d290c693a4acfe7bb59 Mon Sep 17 00:00:00 2001 From: Paul Wessel Date: Mon, 24 Apr 2023 15:59:45 +0200 Subject: [PATCH] Ensure mergesort is declared if needed (#7411) See #7410 for background. Here I implement it a bit differently. The mergesort function is used both in a module (gmtspatial) as well as by some gmt_*.c libraries, hence if it is not part of the standard libraries we declare it in gmt_prototypes.h so it is set for both modules and libs. --- src/gmt_init.c | 4 ++++ src/gmt_prototypes.h | 9 +++++++++ src/gmtspatial.c | 9 --------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/gmt_init.c b/src/gmt_init.c index d08a07f6229..f1b65f62231 100644 --- a/src/gmt_init.c +++ b/src/gmt_init.c @@ -167,6 +167,10 @@ # include #endif +#ifndef HAVE_MERGESORT +#include "mergesort.c" +#endif + /* These are used in gmtinit_init_custom_annot and gmtinit_decode_tinfo only */ #define GMT_ITEM_ANNOT 0 #define GMT_ITEM_INTVAL 1 diff --git a/src/gmt_prototypes.h b/src/gmt_prototypes.h index 4a157d97184..676433a1611 100644 --- a/src/gmt_prototypes.h +++ b/src/gmt_prototypes.h @@ -39,6 +39,15 @@ EXTERN_MSC void gmt_grd_dump (struct GMT_GRID_HEADER *header, gmt_grdfloat *grid EXTERN_MSC char * gmt_strdup (struct GMT_CTRL *GMT, const char *s); #endif +#ifdef __APPLE__ +/* macOX has it built in, so ensure we define this flag */ +#define HAVE_MERGESORT +#endif + +#ifndef HAVE_MERGESORT +EXTERN_MSC int mergesort (void *base, size_t nmemb, size_t size, int (*cmp)(const void *, const void *)); +#endif + /* gmt_nc.c: */ EXTERN_MSC bool gmt_nc_is_cube (struct GMTAPI_CTRL *API, char *file); diff --git a/src/gmtspatial.c b/src/gmtspatial.c index cfa24ce2e5b..b5a4b1b86a8 100644 --- a/src/gmtspatial.c +++ b/src/gmtspatial.c @@ -165,15 +165,6 @@ struct GMTSPATIAL_PAIR { uint64_t pos; }; -#ifdef __APPLE__ -/* macOX has it built in, so ensure we define this flag */ -#define HAVE_MERGESORT -#endif - -#ifndef HAVE_MERGESORT -#include "mergesort.c" -#endif - static void *New_Ctrl (struct GMT_CTRL *GMT) { /* Allocate and initialize a new control structure */ struct GMTSPATIAL_CTRL *C;