diff --git a/winsup/cygwin/linux-locale-helpers/fetch-lc-def-codesets-from-linux b/winsup/cygwin/linux-locale-helpers/fetch-lc-def-codesets-from-linux new file mode 100755 index 000000000..c8c60ecac --- /dev/null +++ b/winsup/cygwin/linux-locale-helpers/fetch-lc-def-codesets-from-linux @@ -0,0 +1,48 @@ +#!/bin/bash +( + cat <<-EOF + /* This struct of default codesets has been generated by fetching + locale data from a Linux system using $(rpm -q glibc | head -1) on $(date +%F) */ + struct default_codeset_t + { + const char *locale; + const char *codeset; + } default_codeset[] = + { + EOF + while read line + do + locale=$(echo "${line}" | awk '/^locale:/{ print $2; }') + if [ -z "${locale}" ] + then + continue + fi + # No aliases + idx=$(expr index "${locale}" '_') + if [ "${idx}" -eq 0 ] + then + continue + fi + # No explicit codesets + idx=$(expr index "${locale}" '.') + if [ "${idx}" -ne 0 ] + then + continue + fi + while read line2 + do + codeset=$(echo "${line2}" | awk '/codeset/{ print $3; }') + if [ -n "${codeset}" ] + then + # Translate into internal codeset names. */ + case "${codeset}" in + BIG5*) codeset="BIG5";; + *) ;; + esac + printf " { \"%s\", \"%s\" },\n" "${locale}" "${codeset}" + break + fi + done + done <<<$(locale -av) + echo "};" +) > lc_def_codesets.h