Hi José,

you could look at libidn2 as an example how to use system libunistring
if there (or if new enough) and fallback to gnulib unistring.
(BTW, libunistring is made of the gnulib unistring modules)

It creates a separate dir / library for gnulib unistring functions,
*BUT* only uses it when a system libunistring can't be found.

bootstrap.conf: Call gnulib-tool in bootstrap_post_import_hook() only
for the needed unistring modules.

configure.ac: Check for system libunistring (set a conditional
HAVE_LIBUNISTRING

Makefile.am: if !HAVE_LIBUNISTRING -> add unistring/ to SUBDIR

*/Makefile.am: if !HAVE_LIBUNISTRING -> add unistring/ to includes in
AM_CPPFLAGS

I think, that's all.

Regards, Tim

On 1/13/20 11:33 AM, Bruno Haible wrote:
> Hi José,
> 
> Yesterday, you identified a set of functions from GNU libunistring that would
> be useful to use in GNU poke. Since you will need only a few such functions,
> which sums up to little code and only one big table, you can take the
> respective modules from gnulib - a regular use of gnulib-tool. All the source
> code of libunistring is in gnulib, distributed across ca. 350 modules.
> 
> The list of modules is as follows. The relation between function name and
> module name is obvious.
> 
>     unitypes
>     unistr/base
>     unistr/u8-check
>     unistr/u8-chr
>     unistr/u8-cmp
>     unistr/u8-cmp2
>     unistr/u8-cpy
>     unistr/u8-cpy-alloc
>     unistr/u8-endswith
>     unistr/u8-mblen
>     unistr/u8-mbsnlen
>     unistr/u8-mbtouc
>     unistr/u8-mbtoucr
>     unistr/u8-mbtouc-unsafe
>     unistr/u8-move
>     unistr/u8-next
>     unistr/u8-prev
>     unistr/u8-set
>     unistr/u8-startswith
>     unistr/u8-stpcpy
>     unistr/u8-stpncpy
>     unistr/u8-strcat
>     unistr/u8-strchr
>     unistr/u8-strcmp
>     unistr/u8-strcoll
>     unistr/u8-strcpy
>     unistr/u8-strcspn
>     unistr/u8-strdup
>     unistr/u8-strlen
>     unistr/u8-strmblen
>     unistr/u8-strmbtouc
>     unistr/u8-strncat
>     unistr/u8-strncmp
>     unistr/u8-strncpy
>     unistr/u8-strnlen
>     unistr/u8-strpbrk
>     unistr/u8-strrchr
>     unistr/u8-strspn
>     unistr/u8-strstr
>     unistr/u8-strtok
>     unistr/u8-to-u16
>     unistr/u8-to-u32
>     unistr/u8-uctomb
>     unistr/u16-check
>     unistr/u16-chr
>     unistr/u16-cmp
>     unistr/u16-cmp2
>     unistr/u16-cpy
>     unistr/u16-cpy-alloc
>     unistr/u16-endswith
>     unistr/u16-mblen
>     unistr/u16-mbsnlen
>     unistr/u16-mbtouc
>     unistr/u16-mbtoucr
>     unistr/u16-mbtouc-unsafe
>     unistr/u16-move
>     unistr/u16-next
>     unistr/u16-prev
>     unistr/u16-set
>     unistr/u16-startswith
>     unistr/u16-stpcpy
>     unistr/u16-stpncpy
>     unistr/u16-strcat
>     unistr/u16-strchr
>     unistr/u16-strcmp
>     unistr/u16-strcoll
>     unistr/u16-strcpy
>     unistr/u16-strcspn
>     unistr/u16-strdup
>     unistr/u16-strlen
>     unistr/u16-strmblen
>     unistr/u16-strmbtouc
>     unistr/u16-strncat
>     unistr/u16-strncmp
>     unistr/u16-strncpy
>     unistr/u16-strnlen
>     unistr/u16-strpbrk
>     unistr/u16-strrchr
>     unistr/u16-strspn
>     unistr/u16-strstr
>     unistr/u16-strtok
>     unistr/u16-to-u32
>     unistr/u16-to-u8
>     unistr/u16-uctomb
>     unistr/u32-check
>     unistr/u32-chr
>     unistr/u32-cmp
>     unistr/u32-cmp2
>     unistr/u32-cpy
>     unistr/u32-cpy-alloc
>     unistr/u32-endswith
>     unistr/u32-mblen
>     unistr/u32-mbsnlen
>     unistr/u32-mbtouc
>     unistr/u32-mbtoucr
>     unistr/u32-mbtouc-unsafe
>     unistr/u32-move
>     unistr/u32-next
>     unistr/u32-prev
>     unistr/u32-set
>     unistr/u32-startswith
>     unistr/u32-stpcpy
>     unistr/u32-stpncpy
>     unistr/u32-strcat
>     unistr/u32-strchr
>     unistr/u32-strcmp
>     unistr/u32-strcoll
>     unistr/u32-strcpy
>     unistr/u32-strcspn
>     unistr/u32-strdup
>     unistr/u32-strlen
>     unistr/u32-strmblen
>     unistr/u32-strmbtouc
>     unistr/u32-strncat
>     unistr/u32-strncmp
>     unistr/u32-strncpy
>     unistr/u32-strnlen
>     unistr/u32-strpbrk
>     unistr/u32-strrchr
>     unistr/u32-strspn
>     unistr/u32-strstr
>     unistr/u32-strtok
>     unistr/u32-to-u16
>     unistr/u32-to-u8
>     unistr/u32-uctomb
>     uniconv/base
>     uniconv/u8-conv-from-enc
>     uniconv/u8-conv-to-enc
>     uniconv/u8-strconv-from-enc
>     uniconv/u8-strconv-from-locale
>     uniconv/u8-strconv-to-enc
>     uniconv/u8-strconv-to-locale
>     uniconv/u16-conv-from-enc
>     uniconv/u16-conv-to-enc
>     uniconv/u16-strconv-from-enc
>     uniconv/u16-strconv-from-locale
>     uniconv/u16-strconv-to-enc
>     uniconv/u16-strconv-to-locale
>     uniconv/u32-conv-from-enc
>     uniconv/u32-conv-to-enc
>     uniconv/u32-strconv-from-enc
>     uniconv/u32-strconv-from-locale
>     uniconv/u32-strconv-to-enc
>     uniconv/u32-strconv-to-locale
>     unistdio/base
>     unistdio/u8-asnprintf
>     unistdio/u8-asprintf
>     unistdio/u8-snprintf
>     unistdio/u8-sprintf
>     unistdio/u8-u8-asnprintf
>     unistdio/u8-u8-asprintf
>     unistdio/u8-u8-snprintf
>     unistdio/u8-u8-sprintf
>     unistdio/u8-u8-vasnprintf
>     unistdio/u8-u8-vasprintf
>     unistdio/u8-u8-vsnprintf
>     unistdio/u8-u8-vsprintf
>     unistdio/u8-vasnprintf
>     unistdio/u8-vasprintf
>     unistdio/u8-vsnprintf
>     unistdio/u8-vsprintf
>     unistdio/u16-asnprintf
>     unistdio/u16-asprintf
>     unistdio/u16-snprintf
>     unistdio/u16-sprintf
>     unistdio/u16-u16-asnprintf
>     unistdio/u16-u16-asprintf
>     unistdio/u16-u16-snprintf
>     unistdio/u16-u16-sprintf
>     unistdio/u16-u16-vasnprintf
>     unistdio/u16-u16-vasprintf
>     unistdio/u16-u16-vsnprintf
>     unistdio/u16-u16-vsprintf
>     unistdio/u16-vasnprintf
>     unistdio/u16-vasprintf
>     unistdio/u16-vsnprintf
>     unistdio/u16-vsprintf
>     unistdio/u32-asnprintf
>     unistdio/u32-asprintf
>     unistdio/u32-snprintf
>     unistdio/u32-sprintf
>     unistdio/u32-u32-asnprintf
>     unistdio/u32-u32-asprintf
>     unistdio/u32-u32-snprintf
>     unistdio/u32-u32-sprintf
>     unistdio/u32-u32-vasnprintf
>     unistdio/u32-u32-vasprintf
>     unistdio/u32-u32-vsnprintf
>     unistdio/u32-u32-vsprintf
>     unistdio/u32-vasnprintf
>     unistdio/u32-vasprintf
>     unistdio/u32-vsnprintf
>     unistdio/u32-vsprintf
>     unistdio/ulc-asnprintf
>     unistdio/ulc-asprintf
>     unistdio/ulc-fprintf
>     unistdio/ulc-snprintf
>     unistdio/ulc-sprintf
>     unistdio/ulc-vasnprintf
>     unistdio/ulc-vasprintf
>     unistdio/ulc-vfprintf
>     unistdio/ulc-vsnprintf
>     unistdio/ulc-vsprintf
>     uniname/base
>     uniname/uniname
>     unictype/base
>     unictype/bidiclass-all
>     unictype/block-all
>     unictype/category-all
>     unictype/combining-class-all
>     unictype/ctype-alnum
>     unictype/ctype-alpha
>     unictype/ctype-blank
>     unictype/ctype-cntrl
>     unictype/ctype-digit
>     unictype/ctype-graph
>     unictype/ctype-lower
>     unictype/ctype-print
>     unictype/ctype-punct
>     unictype/ctype-space
>     unictype/ctype-upper
>     unictype/ctype-xdigit
>     unictype/decimal-digit
>     unictype/digit
>     unictype/joininggroup-all
>     unictype/joiningtype-all
>     unictype/mirror
>     unictype/numeric
>     unictype/property-all
>     unictype/scripts-all
>     unictype/syntax-c-ident
>     unictype/syntax-c-whitespace
>     unictype/syntax-java-ident
>     unictype/syntax-java-whitespace
>     uniwidth/base
>     uniwidth/u8-strwidth
>     uniwidth/u8-width
>     uniwidth/u16-strwidth
>     uniwidth/u16-width
>     uniwidth/u32-strwidth
>     uniwidth/u32-width
>     uniwidth/width
>     unigbrk/base
>     unigbrk/u8-grapheme-breaks
>     unigbrk/u8-grapheme-next
>     unigbrk/u8-grapheme-prev
>     unigbrk/u16-grapheme-breaks
>     unigbrk/u16-grapheme-next
>     unigbrk/u16-grapheme-prev
>     unigbrk/u32-grapheme-breaks
>     unigbrk/u32-grapheme-next
>     unigbrk/u32-grapheme-prev
>     unigbrk/uc-gbrk-prop
>     unigbrk/uc-is-grapheme-break
>     unigbrk/ulc-grapheme-breaks
>     unigbrk/uc-grapheme-breaks
>     uniwbrk/base
>     uniwbrk/u8-wordbreaks
>     uniwbrk/u16-wordbreaks
>     uniwbrk/u32-wordbreaks
>     uniwbrk/ulc-wordbreaks
>     uniwbrk/wordbreak-property
>     unilbrk/base
>     unilbrk/u8-possible-linebreaks
>     unilbrk/u8-width-linebreaks
>     unilbrk/u16-possible-linebreaks
>     unilbrk/u16-width-linebreaks
>     unilbrk/u32-possible-linebreaks
>     unilbrk/u32-width-linebreaks
>     unilbrk/ulc-possible-linebreaks
>     unilbrk/ulc-width-linebreaks
>     uninorm/base
>     uninorm/canonical-decomposition
>     uninorm/composition
>     uninorm/decomposition
>     uninorm/filter
>     uninorm/nfc
>     uninorm/nfd
>     uninorm/nfkc
>     uninorm/nfkd
>     uninorm/u8-normalize
>     uninorm/u8-normcmp
>     uninorm/u8-normcoll
>     uninorm/u8-normxfrm
>     uninorm/u16-normalize
>     uninorm/u16-normcmp
>     uninorm/u16-normcoll
>     uninorm/u16-normxfrm
>     uninorm/u32-normalize
>     uninorm/u32-normcmp
>     uninorm/u32-normcoll
>     uninorm/u32-normxfrm
>     unicase/base
>     unicase/empty-prefix-context
>     unicase/empty-suffix-context
>     unicase/locale-language
>     unicase/tolower
>     unicase/totitle
>     unicase/toupper
>     unicase/u8-casecmp
>     unicase/u8-casecoll
>     unicase/u8-casefold
>     unicase/u8-casexfrm
>     unicase/u8-ct-casefold
>     unicase/u8-ct-tolower
>     unicase/u8-ct-totitle
>     unicase/u8-ct-toupper
>     unicase/u8-is-cased
>     unicase/u8-is-casefolded
>     unicase/u8-is-lowercase
>     unicase/u8-is-titlecase
>     unicase/u8-is-uppercase
>     unicase/u8-prefix-context
>     unicase/u8-suffix-context
>     unicase/u8-tolower
>     unicase/u8-totitle
>     unicase/u8-toupper
>     unicase/u16-casecmp
>     unicase/u16-casecoll
>     unicase/u16-casefold
>     unicase/u16-casexfrm
>     unicase/u16-ct-casefold
>     unicase/u16-ct-tolower
>     unicase/u16-ct-totitle
>     unicase/u16-ct-toupper
>     unicase/u16-is-cased
>     unicase/u16-is-casefolded
>     unicase/u16-is-lowercase
>     unicase/u16-is-titlecase
>     unicase/u16-is-uppercase
>     unicase/u16-prefix-context
>     unicase/u16-suffix-context
>     unicase/u16-tolower
>     unicase/u16-totitle
>     unicase/u16-toupper
>     unicase/u32-casecmp
>     unicase/u32-casecoll
>     unicase/u32-casefold
>     unicase/u32-casexfrm
>     unicase/u32-ct-casefold
>     unicase/u32-ct-tolower
>     unicase/u32-ct-totitle
>     unicase/u32-ct-toupper
>     unicase/u32-is-cased
>     unicase/u32-is-casefolded
>     unicase/u32-is-lowercase
>     unicase/u32-is-titlecase
>     unicase/u32-is-uppercase
>     unicase/u32-prefix-context
>     unicase/u32-suffix-context
>     unicase/u32-tolower
>     unicase/u32-totitle
>     unicase/u32-toupper
>     unicase/ulc-casecmp
>     unicase/ulc-casecoll
>     unicase/ulc-casexfrm
> 
> Bruno
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to