From db113a24e004f59c3343478ebdfc6d19e585811e Mon Sep 17 00:00:00 2001
From: "Steven R. Loomis" <srloomis@us.ibm.com>
Date: Fri, 8 Jun 2018 13:57:32 -0700
Subject: [PATCH] doc: document and warn if the ICU version is too old

Fixes: https://github.com/nodejs/node/issues/19657

PR-URL: https://github.com/nodejs/node/pull/23766
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
---
 BUILDING.md                 | 4 ++++
 configure.py                | 9 ++++++++-
 tools/icu/icu_versions.json | 3 +++
 3 files changed, 15 insertions(+), 1 deletion(-)
 create mode 100644 tools/icu/icu_versions.json

diff --git a/BUILDING.md b/BUILDING.md
index 382355d25f5d01..81157a91a615fd 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -470,6 +470,10 @@ You can find other ICU releases at
 Download the file named something like `icu4c-**##.#**-src.tgz` (or
 `.zip`).
 
+To check the minimum recommended ICU, run `./configure --help` and see
+the help for the `--with-icu-source` option. A warning will be printed
+during configuration if the ICU version is too old.
+
 ##### Unix/macOS
 
 From an already-unpacked ICU:
diff --git a/configure.py b/configure.py
index 538ae0445a5b47..37f6058c6e92ae 100755
--- a/configure.py
+++ b/configure.py
@@ -51,6 +51,8 @@
 valid_mips_fpu = ('fp32', 'fp64', 'fpxx')
 valid_mips_float_abi = ('soft', 'hard')
 valid_intl_modes = ('none', 'small-icu', 'full-icu', 'system-icu')
+with open ('tools/icu/icu_versions.json') as f:
+  icu_versions = json.load(f)
 
 # create option groups
 shared_optgroup = optparse.OptionGroup(parser, "Shared libraries",
@@ -425,7 +427,9 @@
 intl_optgroup.add_option('--with-icu-source',
     action='store',
     dest='with_icu_source',
-    help='Intl mode: optional local path to icu/ dir, or path/URL of icu source archive.')
+    help='Intl mode: optional local path to icu/ dir, or path/URL of '
+        'the icu4c source archive. '
+        'v%d.x or later recommended.' % icu_versions["minimum_icu"])
 
 parser.add_option('--with-ltcg',
     action='store_true',
@@ -1452,6 +1456,9 @@ def write_config(data, name):
       icu_ver_major = m.group(1)
   if not icu_ver_major:
     error('Could not read U_ICU_VERSION_SHORT version from %s' % uvernum_h)
+  elif int(icu_ver_major) < icu_versions["minimum_icu"]:
+    error('icu4c v%d.x is too old, v%d.x or later is required.' % (int(icu_ver_major),
+                                                                  icu_versions["minimum_icu"]))
   icu_endianness = sys.byteorder[0];
   o['variables']['icu_ver_major'] = icu_ver_major
   o['variables']['icu_endianness'] = icu_endianness
diff --git a/tools/icu/icu_versions.json b/tools/icu/icu_versions.json
new file mode 100644
index 00000000000000..e17ee8beee6a5c
--- /dev/null
+++ b/tools/icu/icu_versions.json
@@ -0,0 +1,3 @@
+{
+    "minimum_icu": 57
+}
\ No newline at end of file