]> granicus.if.org Git - icu/commitdiff
ICU-13027 - Merge in changes from 'branches/shawnste/working/icu4c'
authorJeff Genovy <29107334+jefgen@users.noreply.github.com>
Tue, 21 Mar 2017 01:03:49 +0000 (01:03 +0000)
committerJeff Genovy <29107334+jefgen@users.noreply.github.com>
Tue, 21 Mar 2017 01:03:49 +0000 (01:03 +0000)
X-SVN-Rev: 39890

33 files changed:
.gitignore
icu4c/source/allinone/allinone.sln
icu4c/source/common/common_uwp.vcxproj [new file with mode: 0644]
icu4c/source/common/locmap.cpp
icu4c/source/common/locmap.h
icu4c/source/common/normlzr.cpp
icu4c/source/common/putil.cpp
icu4c/source/common/putilimp.h
icu4c/source/common/ucln_imp.h
icu4c/source/common/udata.cpp
icu4c/source/common/uloc.cpp
icu4c/source/common/uloc_tag.cpp
icu4c/source/common/umapfile.cpp
icu4c/source/common/umutex.h
icu4c/source/common/unicode/chariter.h
icu4c/source/common/unicode/platform.h
icu4c/source/common/unicode/uchriter.h
icu4c/source/common/unicode/uloc.h
icu4c/source/common/unicode/uvernum.h
icu4c/source/common/wintz.cpp
icu4c/source/common/wintz.h
icu4c/source/data/makedata.mak
icu4c/source/data/makedata.vcxproj
icu4c/source/data/makedata_uwp.vcxproj [new file with mode: 0644]
icu4c/source/i18n/i18n_uwp.vcxproj [new file with mode: 0644]
icu4c/source/i18n/windtfmt.cpp
icu4c/source/i18n/windtfmt.h
icu4c/source/i18n/winnmfmt.cpp
icu4c/source/i18n/winnmfmt.h
icu4c/source/i18n/wintzimpl.cpp
icu4c/source/test/intltest/winutil.cpp
icu4c/source/tools/pkgdata/pkgdata.cpp
icu4c/source/tools/toolutil/pkg_genc.cpp

index 161d9ff8280118c9ac3d3131d4c2e8299c482eee..17c4779f1e4acf9391f93c80be87bd99fe2e3285 100644 (file)
@@ -25,6 +25,7 @@ icu4c/source/common/*.o
 icu4c/source/common/*.plg
 icu4c/source/common/*.vcxproj.user
 icu4c/source/common/Debug
+icu4c/source/common/Generated[!!-~]Files
 icu4c/source/common/Makefile
 icu4c/source/common/Makefile.local
 icu4c/source/common/Release
@@ -102,6 +103,7 @@ icu4c/source/i18n/*.o
 icu4c/source/i18n/*.plg
 icu4c/source/i18n/*.vcxproj.user
 icu4c/source/i18n/Debug
+icu4c/source/i18n/Generated[!!-~]Files
 icu4c/source/i18n/Makefile
 icu4c/source/i18n/Makefile.local
 icu4c/source/i18n/Release
index fdaaea9c6815a333c57aa39c275929263f42340a..88a0d19744f11e02c826a620018633ed0aec82e4 100644 (file)
@@ -1,5 +1,7 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cal", "..\samples\cal\cal.vcxproj", "{F7659D77-09CF-4FE9-ACEE-927287AA9509}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cintltst", "..\test\cintltst\cintltst.vcxproj", "{3D1246AE-1B32-479B-BECA-AEFA97BE2321}"
@@ -61,268 +63,354 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuinfo", "..\tools\icuinfo
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testplug", "..\tools\icuinfo\testplug.vcxproj", "{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata_uwp", "..\data\makedata_uwp.vcxproj", "{B1D53358-37BD-48BC-B27C-68BAF1E78508}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i18n_uwp", "..\i18n\i18n_uwp.vcxproj", "{6786C051-383B-47E0-9E82-B8B994E06A25}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_uwp", "..\common\common_uwp.vcxproj", "{C10CF34B-3F79-430E-AD38-5A32DC0589C2}"
+EndProject
 Global
-       GlobalSection(SubversionScc) = preSolution
-               Svn-Managed = True
-               Manager = AnkhSVN - Subversion Support for Visual Studio
-       EndGlobalSection
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|ARM = Debug|ARM
                Debug|Win32 = Debug|Win32
                Debug|x64 = Debug|x64
+               Release|ARM = Release|ARM
                Release|Win32 = Release|Win32
                Release|x64 = Release|x64
        EndGlobalSection
        GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|ARM.ActiveCfg = Debug|Win32
                {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.ActiveCfg = Debug|Win32
                {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.Build.0 = Debug|Win32
                {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.ActiveCfg = Debug|x64
                {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.Build.0 = Debug|x64
+               {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|ARM.ActiveCfg = Release|Win32
                {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.ActiveCfg = Release|Win32
                {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.Build.0 = Release|Win32
                {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.ActiveCfg = Release|x64
                {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.Build.0 = Release|x64
+               {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|ARM.ActiveCfg = Debug|Win32
                {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.ActiveCfg = Debug|Win32
                {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.Build.0 = Debug|Win32
                {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.ActiveCfg = Debug|x64
                {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.Build.0 = Debug|x64
+               {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|ARM.ActiveCfg = Release|Win32
                {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.ActiveCfg = Release|Win32
                {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.Build.0 = Release|Win32
                {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.ActiveCfg = Release|x64
                {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.Build.0 = Release|x64
+               {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|ARM.ActiveCfg = Debug|Win32
                {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.ActiveCfg = Debug|Win32
                {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.Build.0 = Debug|Win32
                {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.ActiveCfg = Debug|x64
                {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.Build.0 = Debug|x64
+               {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|ARM.ActiveCfg = Release|Win32
                {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.ActiveCfg = Release|Win32
                {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.Build.0 = Release|Win32
                {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.ActiveCfg = Release|x64
                {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.Build.0 = Release|x64
+               {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|ARM.ActiveCfg = Debug|Win32
                {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.ActiveCfg = Debug|Win32
                {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.Build.0 = Debug|Win32
                {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.ActiveCfg = Debug|x64
                {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.Build.0 = Debug|x64
+               {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|ARM.ActiveCfg = Release|Win32
                {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.ActiveCfg = Release|Win32
                {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.Build.0 = Release|Win32
                {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.ActiveCfg = Release|x64
                {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.Build.0 = Release|x64
+               {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|ARM.ActiveCfg = Debug|Win32
                {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.ActiveCfg = Debug|Win32
                {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.Build.0 = Debug|Win32
                {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.ActiveCfg = Debug|x64
                {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.Build.0 = Debug|x64
+               {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|ARM.ActiveCfg = Release|Win32
                {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.ActiveCfg = Release|Win32
                {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.Build.0 = Release|Win32
                {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.ActiveCfg = Release|x64
                {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.Build.0 = Release|x64
+               {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|ARM.ActiveCfg = Debug|Win32
                {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.ActiveCfg = Debug|Win32
                {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.Build.0 = Debug|Win32
                {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.ActiveCfg = Debug|x64
                {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.Build.0 = Debug|x64
+               {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|ARM.ActiveCfg = Release|Win32
                {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.ActiveCfg = Release|Win32
                {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.Build.0 = Release|Win32
                {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.ActiveCfg = Release|x64
                {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.Build.0 = Release|x64
+               {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|ARM.ActiveCfg = Debug|Win32
                {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.ActiveCfg = Debug|Win32
                {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.Build.0 = Debug|Win32
                {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.ActiveCfg = Debug|x64
                {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.Build.0 = Debug|x64
+               {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|ARM.ActiveCfg = Release|Win32
                {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.ActiveCfg = Release|Win32
                {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.Build.0 = Release|Win32
                {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.ActiveCfg = Release|x64
                {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.Build.0 = Release|x64
+               {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|ARM.ActiveCfg = Debug|Win32
                {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.ActiveCfg = Debug|Win32
                {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.Build.0 = Debug|Win32
                {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.ActiveCfg = Debug|x64
                {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.Build.0 = Debug|x64
+               {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|ARM.ActiveCfg = Release|Win32
                {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.ActiveCfg = Release|Win32
                {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.Build.0 = Release|Win32
                {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.ActiveCfg = Release|x64
                {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.Build.0 = Release|x64
+               {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|ARM.ActiveCfg = Debug|Win32
                {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.ActiveCfg = Debug|Win32
                {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.Build.0 = Debug|Win32
                {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.ActiveCfg = Debug|x64
                {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.Build.0 = Debug|x64
+               {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|ARM.ActiveCfg = Release|Win32
                {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.ActiveCfg = Release|Win32
                {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.Build.0 = Release|Win32
                {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.ActiveCfg = Release|x64
                {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.Build.0 = Release|x64
+               {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|ARM.ActiveCfg = Debug|Win32
                {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.ActiveCfg = Debug|Win32
                {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.Build.0 = Debug|Win32
                {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.ActiveCfg = Debug|x64
                {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.Build.0 = Debug|x64
+               {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|ARM.ActiveCfg = Release|Win32
                {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.ActiveCfg = Release|Win32
                {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.Build.0 = Release|Win32
                {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.ActiveCfg = Release|x64
                {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.Build.0 = Release|x64
+               {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|ARM.ActiveCfg = Debug|Win32
                {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.ActiveCfg = Debug|Win32
                {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.Build.0 = Debug|Win32
                {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.ActiveCfg = Debug|x64
                {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.Build.0 = Debug|x64
+               {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|ARM.ActiveCfg = Release|Win32
                {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.ActiveCfg = Release|Win32
                {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.Build.0 = Release|Win32
                {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.ActiveCfg = Release|x64
                {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.Build.0 = Release|x64
+               {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|ARM.ActiveCfg = Debug|Win32
                {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.ActiveCfg = Debug|Win32
                {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.Build.0 = Debug|Win32
                {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.ActiveCfg = Debug|x64
                {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.Build.0 = Debug|x64
+               {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|ARM.ActiveCfg = Release|Win32
                {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.ActiveCfg = Release|Win32
                {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.Build.0 = Release|Win32
                {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.ActiveCfg = Release|x64
                {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.Build.0 = Release|x64
+               {0178B127-6269-407D-B112-93877BB62776}.Debug|ARM.ActiveCfg = Debug|Win32
                {0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.ActiveCfg = Debug|Win32
                {0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.Build.0 = Debug|Win32
                {0178B127-6269-407D-B112-93877BB62776}.Debug|x64.ActiveCfg = Debug|x64
                {0178B127-6269-407D-B112-93877BB62776}.Debug|x64.Build.0 = Debug|x64
+               {0178B127-6269-407D-B112-93877BB62776}.Release|ARM.ActiveCfg = Release|Win32
                {0178B127-6269-407D-B112-93877BB62776}.Release|Win32.ActiveCfg = Release|Win32
                {0178B127-6269-407D-B112-93877BB62776}.Release|Win32.Build.0 = Release|Win32
                {0178B127-6269-407D-B112-93877BB62776}.Release|x64.ActiveCfg = Release|x64
                {0178B127-6269-407D-B112-93877BB62776}.Release|x64.Build.0 = Release|x64
+               {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|ARM.ActiveCfg = Debug|Win32
                {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.ActiveCfg = Debug|Win32
                {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.Build.0 = Debug|Win32
                {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.ActiveCfg = Debug|x64
                {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.Build.0 = Debug|x64
+               {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|ARM.ActiveCfg = Release|Win32
                {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.ActiveCfg = Release|Win32
                {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.Build.0 = Release|Win32
                {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.ActiveCfg = Release|x64
                {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.Build.0 = Release|x64
-               {C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.ActiveCfg = Debug|Win32
-               {C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.Build.0 = Debug|Win32
-               {C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.ActiveCfg = Debug|x64
-               {C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.Build.0 = Debug|x64
-               {C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.ActiveCfg = Release|Win32
-               {C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.Build.0 = Release|Win32
-               {C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.ActiveCfg = Release|x64
-               {C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.Build.0 = Release|x64
-               {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.ActiveCfg = Debug|Win32
-               {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.Build.0 = Debug|Win32
-               {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.ActiveCfg = Debug|x64
-               {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.Build.0 = Debug|x64
-               {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.ActiveCfg = Release|Win32
-               {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.Build.0 = Release|Win32
-               {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.ActiveCfg = Release|x64
-               {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.Build.0 = Release|x64
+               {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|ARM.ActiveCfg = Debug|Win32
                {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.ActiveCfg = Debug|Win32
                {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.Build.0 = Debug|Win32
                {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.ActiveCfg = Debug|x64
                {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.Build.0 = Debug|x64
+               {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|ARM.ActiveCfg = Release|Win32
                {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.ActiveCfg = Release|Win32
                {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.Build.0 = Release|Win32
                {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.ActiveCfg = Release|x64
                {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.Build.0 = Release|x64
+               {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|ARM.ActiveCfg = Debug|Win32
                {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.ActiveCfg = Debug|Win32
                {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.Build.0 = Debug|Win32
                {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.ActiveCfg = Debug|x64
                {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.Build.0 = Debug|x64
+               {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|ARM.ActiveCfg = Release|Win32
                {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.ActiveCfg = Release|Win32
                {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.Build.0 = Release|Win32
                {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.ActiveCfg = Release|x64
                {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.Build.0 = Release|x64
+               {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|ARM.ActiveCfg = Debug|Win32
                {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.ActiveCfg = Debug|Win32
                {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.Build.0 = Debug|Win32
                {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.ActiveCfg = Debug|x64
                {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.Build.0 = Debug|x64
+               {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|ARM.ActiveCfg = Release|Win32
                {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.ActiveCfg = Release|Win32
                {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.Build.0 = Release|Win32
                {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.ActiveCfg = Release|x64
                {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.Build.0 = Release|x64
+               {203EC78A-0531-43F0-A636-285439BDE025}.Debug|ARM.ActiveCfg = Debug|Win32
                {203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.ActiveCfg = Debug|Win32
                {203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.Build.0 = Debug|Win32
                {203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.ActiveCfg = Debug|x64
                {203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.Build.0 = Debug|x64
+               {203EC78A-0531-43F0-A636-285439BDE025}.Release|ARM.ActiveCfg = Release|Win32
                {203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.ActiveCfg = Release|Win32
                {203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.Build.0 = Release|Win32
                {203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.ActiveCfg = Release|x64
                {203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.Build.0 = Release|x64
+               {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|ARM.ActiveCfg = Debug|Win32
                {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.ActiveCfg = Debug|Win32
                {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.Build.0 = Debug|Win32
                {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.ActiveCfg = Debug|x64
                {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.Build.0 = Debug|x64
+               {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|ARM.ActiveCfg = Release|Win32
                {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.ActiveCfg = Release|Win32
                {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.Build.0 = Release|Win32
                {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.ActiveCfg = Release|x64
                {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.Build.0 = Release|x64
+               {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|ARM.ActiveCfg = Debug|Win32
                {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.ActiveCfg = Debug|Win32
                {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.Build.0 = Debug|Win32
                {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.ActiveCfg = Debug|x64
                {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.Build.0 = Debug|x64
+               {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|ARM.ActiveCfg = Release|Win32
                {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.ActiveCfg = Release|Win32
                {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.Build.0 = Release|Win32
                {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.ActiveCfg = Release|x64
                {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.Build.0 = Release|x64
+               {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|ARM.ActiveCfg = Debug|Win32
                {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.ActiveCfg = Debug|Win32
                {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.Build.0 = Debug|Win32
                {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.ActiveCfg = Debug|x64
                {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.Build.0 = Debug|x64
+               {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|ARM.ActiveCfg = Release|Win32
                {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.ActiveCfg = Release|Win32
                {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.Build.0 = Release|Win32
                {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.ActiveCfg = Release|x64
                {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.Build.0 = Release|x64
+               {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|ARM.ActiveCfg = Debug|Win32
                {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.ActiveCfg = Debug|Win32
                {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.Build.0 = Debug|Win32
                {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.ActiveCfg = Debug|x64
                {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.Build.0 = Debug|x64
+               {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|ARM.ActiveCfg = Release|Win32
                {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.ActiveCfg = Release|Win32
                {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.Build.0 = Release|Win32
                {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.ActiveCfg = Release|x64
                {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.Build.0 = Release|x64
+               {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|ARM.ActiveCfg = Debug|Win32
                {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.ActiveCfg = Debug|Win32
                {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.Build.0 = Debug|Win32
                {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.ActiveCfg = Debug|x64
                {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.Build.0 = Debug|x64
+               {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|ARM.ActiveCfg = Release|Win32
                {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.ActiveCfg = Release|Win32
                {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.Build.0 = Release|Win32
                {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.ActiveCfg = Release|x64
                {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.Build.0 = Release|x64
+               {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|ARM.ActiveCfg = Debug|Win32
                {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.ActiveCfg = Debug|Win32
                {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.Build.0 = Debug|Win32
                {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.ActiveCfg = Debug|x64
                {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.Build.0 = Debug|x64
+               {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|ARM.ActiveCfg = Release|Win32
                {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.ActiveCfg = Release|Win32
                {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.Build.0 = Release|Win32
                {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.ActiveCfg = Release|x64
                {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.Build.0 = Release|x64
+               {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|ARM.ActiveCfg = Debug|Win32
                {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.ActiveCfg = Debug|Win32
                {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.Build.0 = Debug|Win32
                {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.ActiveCfg = Debug|x64
                {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.Build.0 = Debug|x64
+               {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|ARM.ActiveCfg = Release|Win32
                {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.ActiveCfg = Release|Win32
                {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.Build.0 = Release|Win32
                {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.ActiveCfg = Release|x64
                {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.Build.0 = Release|x64
+               {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|ARM.ActiveCfg = Debug|Win32
                {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.ActiveCfg = Debug|Win32
                {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.Build.0 = Debug|Win32
                {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.ActiveCfg = Debug|x64
                {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.Build.0 = Debug|x64
+               {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|ARM.ActiveCfg = Release|Win32
                {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.ActiveCfg = Release|Win32
                {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.Build.0 = Release|Win32
                {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.ActiveCfg = Release|x64
                {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.Build.0 = Release|x64
+               {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|ARM.ActiveCfg = Debug|Win32
                {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.ActiveCfg = Debug|Win32
                {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.Build.0 = Debug|Win32
                {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.ActiveCfg = Debug|x64
                {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.Build.0 = Debug|x64
+               {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|ARM.ActiveCfg = Release|Win32
                {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.ActiveCfg = Release|Win32
                {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.Build.0 = Release|Win32
                {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.ActiveCfg = Release|x64
                {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.Build.0 = Release|x64
+               {E7611F49-F088-4175-9446-6111444E72C8}.Debug|ARM.ActiveCfg = Debug|Win32
                {E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.ActiveCfg = Debug|Win32
                {E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.Build.0 = Debug|Win32
                {E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.ActiveCfg = Debug|x64
                {E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.Build.0 = Debug|x64
+               {E7611F49-F088-4175-9446-6111444E72C8}.Release|ARM.ActiveCfg = Release|Win32
                {E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.ActiveCfg = Release|Win32
                {E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.Build.0 = Release|Win32
                {E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.ActiveCfg = Release|x64
                {E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.Build.0 = Release|x64
+               {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|ARM.ActiveCfg = Debug|Win32
                {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.ActiveCfg = Debug|Win32
                {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.Build.0 = Debug|Win32
                {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.ActiveCfg = Debug|x64
                {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.Build.0 = Debug|x64
+               {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|ARM.ActiveCfg = Release|Win32
                {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.ActiveCfg = Release|Win32
                {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.Build.0 = Release|Win32
                {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.ActiveCfg = Release|x64
                {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.Build.0 = Release|x64
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|ARM.ActiveCfg = Debug|ARM
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|ARM.Build.0 = Debug|ARM
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|Win32.ActiveCfg = Debug|Win32
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|Win32.Build.0 = Debug|Win32
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|x64.ActiveCfg = Debug|x64
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|x64.Build.0 = Debug|x64
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|ARM.ActiveCfg = Release|ARM
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|ARM.Build.0 = Release|ARM
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|Win32.ActiveCfg = Release|Win32
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|Win32.Build.0 = Release|Win32
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|x64.ActiveCfg = Release|x64
+               {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|x64.Build.0 = Release|x64
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|ARM.ActiveCfg = Debug|ARM
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|ARM.Build.0 = Debug|ARM
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|Win32.ActiveCfg = Debug|Win32
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|Win32.Build.0 = Debug|Win32
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|x64.ActiveCfg = Debug|x64
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|x64.Build.0 = Debug|x64
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|ARM.ActiveCfg = Release|ARM
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|ARM.Build.0 = Release|ARM
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|Win32.ActiveCfg = Release|Win32
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|Win32.Build.0 = Release|Win32
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|x64.ActiveCfg = Release|x64
+               {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|x64.Build.0 = Release|x64
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|ARM.ActiveCfg = Debug|ARM
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|ARM.Build.0 = Debug|ARM
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|Win32.ActiveCfg = Debug|Win32
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|Win32.Build.0 = Debug|Win32
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|x64.ActiveCfg = Debug|x64
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|x64.Build.0 = Debug|x64
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|ARM.ActiveCfg = Release|ARM
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|ARM.Build.0 = Release|ARM
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|Win32.ActiveCfg = Release|Win32
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|Win32.Build.0 = Release|Win32
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|x64.ActiveCfg = Release|x64
+               {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|x64.Build.0 = Release|x64
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
        EndGlobalSection
+       GlobalSection(SubversionScc) = preSolution
+               Svn-Managed = True
+               Manager = AnkhSVN - Subversion Support for Visual Studio
+       EndGlobalSection
 EndGlobal
diff --git a/icu4c/source/common/common_uwp.vcxproj b/icu4c/source/common/common_uwp.vcxproj
new file mode 100644 (file)
index 0000000..d3d9f8a
--- /dev/null
@@ -0,0 +1,1041 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{C10CF34B-3F79-430E-AD38-5A32DC0589C2}</ProjectGuid>
+    <Keyword>DynamicLibrary</Keyword>
+    <DefaultLanguage>en-US</DefaultLanguage>
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+    <AppContainerApplication>true</AppContainerApplication>
+    <ApplicationType>Windows Store</ApplicationType>
+    <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
+    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\ReleaseUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\ReleaseUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\DebugUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\DebugUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\ReleaseUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\ReleaseUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\DebugUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\DebugUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">.\arm\ReleaseUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">.\arm\ReleaseUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">.\arm\DebugUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">.\arm\DebugUWP\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)'=='Release'">false</LinkIncremental>
+    <LinkIncremental Condition="'$(Configuration)'=='Debug'">true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <Midl>
+      <PreprocessorDefinitions>U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <!-- U_HIDE_DRAFT_API & U_HIDE_DEPRECATED_API -->
+      <PreprocessorDefinitions>U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;U_ATTRIBUTE_DEPRECATED=;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;U_PLATFORM_USES_ONLY_WIN32_API=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <CompileAs>Default</CompileAs>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <CompileAsWinRT>false</CompileAsWinRT>
+      <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+      <AdditionalIncludeDirectories>../common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <Link>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+      <RandomizedBaseAddress>true</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TurnOffAssemblyGeneration>true</TurnOffAssemblyGeneration>
+      <IgnoreSpecificDefaultLibraries>vccorlib.lib;msvcrt.lib</IgnoreSpecificDefaultLibraries>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <Optimization>Disabled</Optimization>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
+    <Midl>
+      <TargetEnvironment>Win32</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>WIN64;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='ARM'">
+    <Midl>
+      <TargetEnvironment>ARM</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>ARM;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <TargetMachine>MachineARM</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Midl>
+      <TypeLibraryName>.\..\..\lib32uwp\icuuc.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\x86\ReleaseUWP/common.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\x86\ReleaseUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\x86\ReleaseUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\x86\ReleaseUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\bin32uwp\icuuc.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\lib32uwp\icuuc.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\lib32uwp\icuuc.lib</ImportLibrary>
+      <AdditionalDependencies>vccorlib.lib;WindowsApp.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <TypeLibraryName>.\..\..\lib32uwp\icuucd.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\x86\DebugUWP/common.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\x86\DebugUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\x86\DebugUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\x86\DebugUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\bin32uwp\icuucd.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\lib32uwp\icuucd.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\lib32uwp\icuucd.lib</ImportLibrary>
+      <AdditionalDependencies>vccorlibd.lib;WindowsApp.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TypeLibraryName>.\..\..\lib64uwp\icuuc.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\x64\ReleaseUWP/common.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\x64\ReleaseUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\x64\ReleaseUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\x64\ReleaseUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\bin64uwp\icuuc.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\lib64uwp\icuuc.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\lib64uwp\icuuc.lib</ImportLibrary>
+      <AdditionalDependencies>vccorlib.lib;WindowsApp.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TypeLibraryName>.\..\..\lib64uwp\icuucd.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\x64\DebugUWP/common.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\x64\DebugUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\x64\DebugUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\x64\DebugUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\bin64uwp\icuucd.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\lib64uwp\icuucd.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\lib64uwp\icuucd.lib</ImportLibrary>
+      <AdditionalDependencies>vccorlibd.lib;WindowsApp.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <Midl>
+      <TypeLibraryName>.\..\..\libARMuwp\icuuc.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\ARM\ReleaseUWP/common.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\ARM\ReleaseUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\ARM\ReleaseUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\ARM\ReleaseUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\binARMuwp\icuuc.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\libARMuwp\icuuc.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\libARMuwp\icuuc.lib</ImportLibrary>
+      <AdditionalDependencies>vccorlib.lib;WindowsApp.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <Midl>
+      <TypeLibraryName>.\..\..\libARMuwp\icuucd.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\ARM\DebugUWP/common.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\ARM\DebugUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\ARM\DebugUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\ARM\DebugUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\binARMuwp\icuucd.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\libARMuwp\icuucd.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\libARMuwp\icuucd.lib</ImportLibrary>
+      <AdditionalDependencies>vccorlibd.lib;WindowsApp.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="edits.cpp" />
+    <ClCompile Include="filteredbrk.cpp" />
+    <ClCompile Include="ubidi.cpp" />
+    <ClCompile Include="ubidi_props.cpp" />
+    <ClCompile Include="ubiditransform.cpp" />
+    <ClCompile Include="ubidiln.cpp" />
+    <ClCompile Include="ubidiwrt.cpp" />
+    <ClCompile Include="uloc_keytype.cpp" />
+    <ClCompile Include="ushape.cpp" />
+    <ClCompile Include="brkeng.cpp">
+    </ClCompile>
+    <ClCompile Include="brkiter.cpp">
+    </ClCompile>
+    <ClCompile Include="dictbe.cpp" />
+    <ClCompile Include="pluralmap.cpp" />
+    <ClCompile Include="rbbi.cpp">
+    </ClCompile>
+    <ClCompile Include="rbbidata.cpp">
+    </ClCompile>
+    <ClCompile Include="rbbinode.cpp" />
+    <ClCompile Include="rbbirb.cpp">
+    </ClCompile>
+    <ClCompile Include="rbbiscan.cpp" />
+    <ClCompile Include="rbbisetb.cpp" />
+    <ClCompile Include="rbbistbl.cpp">
+    </ClCompile>
+    <ClCompile Include="rbbitblb.cpp">
+    </ClCompile>
+    <ClCompile Include="dictionarydata.cpp" />
+    <ClCompile Include="ubrk.cpp" />
+    <ClCompile Include="ucol_swp.cpp">
+      <AdditionalIncludeDirectories>..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <ClCompile Include="propsvec.cpp" />
+    <ClCompile Include="uarrsort.cpp" />
+    <ClCompile Include="uenum.cpp" />
+    <ClCompile Include="uhash.cpp" />
+    <ClCompile Include="uhash_us.cpp" />
+    <ClCompile Include="ulist.cpp" />
+    <ClCompile Include="ustack.cpp" />
+    <ClCompile Include="ustrenum.cpp" />
+    <ClCompile Include="utrie.cpp" />
+    <ClCompile Include="utrie2.cpp" />
+    <ClCompile Include="utrie2_builder.cpp" />
+    <ClCompile Include="uvector.cpp" />
+    <ClCompile Include="uvectr32.cpp" />
+    <ClCompile Include="uvectr64.cpp" />
+    <ClCompile Include="errorcode.cpp" />
+    <ClCompile Include="icudataver.cpp" />
+    <ClCompile Include="locmap.cpp">
+    </ClCompile>
+    <ClCompile Include="putil.cpp">
+      <CompileAsWinRT>true</CompileAsWinRT>
+    </ClCompile>
+    <ClCompile Include="umath.cpp" />
+    <ClCompile Include="umutex.cpp">
+    </ClCompile>
+    <ClCompile Include="utrace.cpp" />
+    <ClCompile Include="utypes.cpp" />
+    <ClCompile Include="wintz.cpp">
+      <ExcludedFromBuild>true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="ucnv.cpp" />
+    <ClCompile Include="ucnv2022.cpp" />
+    <ClCompile Include="ucnv_bld.cpp">
+    </ClCompile>
+    <ClCompile Include="ucnv_cb.cpp" />
+    <ClCompile Include="ucnv_cnv.cpp" />
+    <ClCompile Include="ucnv_ct.cpp" />
+    <ClCompile Include="ucnv_err.cpp" />
+    <ClCompile Include="ucnv_ext.cpp" />
+    <ClCompile Include="ucnv_io.cpp">
+    </ClCompile>
+    <ClCompile Include="ucnv_lmb.cpp" />
+    <ClCompile Include="ucnv_set.cpp" />
+    <ClCompile Include="ucnv_u16.cpp" />
+    <ClCompile Include="ucnv_u32.cpp" />
+    <ClCompile Include="ucnv_u7.cpp" />
+    <ClCompile Include="ucnv_u8.cpp" />
+    <ClCompile Include="ucnvbocu.cpp" />
+    <ClCompile Include="ucnvdisp.cpp" />
+    <ClCompile Include="ucnvhz.cpp" />
+    <ClCompile Include="ucnvisci.cpp" />
+    <ClCompile Include="ucnvlat1.cpp" />
+    <ClCompile Include="ucnvmbcs.cpp" />
+    <ClCompile Include="ucnvscsu.cpp" />
+    <ClCompile Include="ucnvsel.cpp">
+    </ClCompile>
+    <ClCompile Include="cmemory.cpp" />
+    <ClCompile Include="ucln_cmn.cpp">
+    </ClCompile>
+    <ClCompile Include="ucmndata.cpp" />
+    <ClCompile Include="udata.cpp" />
+    <ClCompile Include="udatamem.cpp" />
+    <ClCompile Include="udataswp.cpp" />
+    <ClCompile Include="uinit.cpp">
+    </ClCompile>
+    <ClCompile Include="umapfile.cpp">
+    </ClCompile>
+    <ClCompile Include="uobject.cpp" />
+    <ClCompile Include="dtintrv.cpp" />
+    <ClCompile Include="parsepos.cpp" />
+    <ClCompile Include="ustrfmt.cpp" />
+    <ClCompile Include="util.cpp" />
+    <ClCompile Include="util_props.cpp" />
+    <ClCompile Include="punycode.cpp" />
+    <ClCompile Include="uidna.cpp" />
+    <ClCompile Include="uts46.cpp" />
+    <ClCompile Include="locavailable.cpp">
+    </ClCompile>
+    <ClCompile Include="locbased.cpp" />
+    <ClCompile Include="locdispnames.cpp" />
+    <ClCompile Include="locdspnm.cpp" />
+    <ClCompile Include="locid.cpp">
+    </ClCompile>
+    <ClCompile Include="loclikely.cpp" />
+    <ClCompile Include="locresdata.cpp" />
+    <ClCompile Include="locutil.cpp">
+    </ClCompile>
+    <ClCompile Include="resbund.cpp">
+    </ClCompile>
+    <ClCompile Include="resbund_cnv.cpp" />
+    <ClCompile Include="ucat.cpp" />
+    <ClCompile Include="uloc.cpp" />
+    <ClCompile Include="uloc_tag.cpp" />
+    <ClCompile Include="ures_cnv.cpp" />
+    <ClCompile Include="uresbund.cpp" />
+    <ClCompile Include="uresdata.cpp" />
+    <ClCompile Include="resource.cpp" />
+    <ClCompile Include="ucurr.cpp" />
+    <ClCompile Include="caniter.cpp">
+    </ClCompile>
+    <ClCompile Include="filterednormalizer2.cpp" />
+    <ClCompile Include="loadednormalizer2impl.cpp" />
+    <ClCompile Include="normalizer2.cpp" />
+    <ClCompile Include="normalizer2impl.cpp" />
+    <ClCompile Include="normlzr.cpp">
+    </ClCompile>
+    <ClCompile Include="unorm.cpp" />
+    <ClCompile Include="unormcmp.cpp" />
+    <ClCompile Include="bmpset.cpp" />
+    <ClCompile Include="patternprops.cpp" />
+    <ClCompile Include="propname.cpp">
+    </ClCompile>
+    <ClCompile Include="ruleiter.cpp" />
+    <ClCompile Include="ucase.cpp">
+    </ClCompile>
+    <ClCompile Include="uchar.cpp" />
+    <ClCompile Include="unames.cpp" />
+    <ClCompile Include="unifiedcache.cpp">
+    </ClCompile>
+    <ClCompile Include="unifilt.cpp" />
+    <ClCompile Include="unifunct.cpp" />
+    <ClCompile Include="uniset.cpp" />
+    <ClCompile Include="uniset_closure.cpp" />
+    <ClCompile Include="uniset_props.cpp" />
+    <ClCompile Include="unisetspan.cpp" />
+    <ClCompile Include="uprops.cpp" />
+    <ClCompile Include="usc_impl.cpp" />
+    <ClCompile Include="uscript.cpp" />
+    <ClCompile Include="uscript_props.cpp" />
+    <ClCompile Include="uset.cpp" />
+    <ClCompile Include="uset_props.cpp" />
+    <ClCompile Include="usetiter.cpp" />
+    <ClCompile Include="icuplug.cpp" />
+    <ClCompile Include="serv.cpp">
+    </ClCompile>
+    <ClCompile Include="servlk.cpp">
+    </ClCompile>
+    <ClCompile Include="servlkf.cpp">
+    </ClCompile>
+    <ClCompile Include="servls.cpp">
+    </ClCompile>
+    <ClCompile Include="servnotf.cpp">
+    </ClCompile>
+    <ClCompile Include="servrbf.cpp">
+    </ClCompile>
+    <ClCompile Include="servslkf.cpp">
+    </ClCompile>
+    <ClCompile Include="usprep.cpp" />
+    <ClCompile Include="appendable.cpp" />
+    <ClCompile Include="bytestream.cpp" />
+    <ClCompile Include="bytestrie.cpp" />
+    <ClCompile Include="bytestriebuilder.cpp" />
+    <ClCompile Include="bytestrieiterator.cpp" />
+    <ClCompile Include="chariter.cpp" />
+    <ClCompile Include="charstr.cpp" />
+    <ClCompile Include="cstring.cpp" />
+    <ClCompile Include="cstr.cpp" />
+    <ClCompile Include="cwchar.cpp" />
+    <ClCompile Include="messagepattern.cpp" />
+    <ClCompile Include="schriter.cpp" />
+    <ClCompile Include="stringpiece.cpp" />
+    <ClCompile Include="stringtriebuilder.cpp" />
+    <ClCompile Include="simpleformatter.cpp" />
+    <ClCompile Include="ucasemap.cpp" />
+    <ClCompile Include="ucasemap_titlecase_brkiter.cpp" />
+    <ClCompile Include="ucharstrie.cpp" />
+    <ClCompile Include="ucharstriebuilder.cpp" />
+    <ClCompile Include="ucharstrieiterator.cpp" />
+    <ClCompile Include="uchriter.cpp" />
+    <ClCompile Include="uinvchar.cpp" />
+    <ClCompile Include="uiter.cpp" />
+    <ClCompile Include="unistr.cpp" />
+    <ClCompile Include="unistr_case.cpp" />
+    <ClCompile Include="unistr_case_locale.cpp" />
+    <ClCompile Include="unistr_cnv.cpp" />
+    <ClCompile Include="unistr_props.cpp" />
+    <ClCompile Include="unistr_titlecase_brkiter.cpp" />
+    <ClCompile Include="ustr_cnv.cpp" />
+    <ClCompile Include="ustr_titlecase_brkiter.cpp" />
+    <ClCompile Include="ustr_wcs.cpp" />
+    <ClCompile Include="ustrcase.cpp" />
+    <ClCompile Include="ustrcase_locale.cpp" />
+    <ClCompile Include="ustring.cpp" />
+    <ClCompile Include="ustrtrns.cpp" />
+    <ClCompile Include="utext.cpp" />
+    <ClCompile Include="utf_impl.cpp" />
+    <ClCompile Include="listformatter.cpp" />
+    <ClCompile Include="ulistformatter.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="unicode\ubidi.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="localsvc.h" />
+    <ClInclude Include="msvcres.h" />
+    <ClInclude Include="pluralmap.h" />
+    <ClInclude Include="propname_data.h" />
+    <ClInclude Include="ubidi_props.h" />
+    <ClInclude Include="ubidiimp.h" />
+    <CustomBuild Include="unicode\ushape.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="brkeng.h" />
+    <CustomBuild Include="unicode\brkiter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\dbbi.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="dictbe.h" />
+    <CustomBuild Include="unicode\rbbi.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="rbbidata.h" />
+    <ClInclude Include="rbbinode.h" />
+    <ClInclude Include="rbbirb.h" />
+    <ClInclude Include="rbbirpt.h" />
+    <ClInclude Include="rbbiscan.h" />
+    <ClInclude Include="rbbisetb.h" />
+    <ClInclude Include="rbbitblb.h" />
+    <ClInclude Include="dictionarydata.h" />
+    <CustomBuild Include="unicode\ubrk.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ubidi_props_data.h" />
+    <ClInclude Include="ubrkimpl.h" />
+    <ClInclude Include="ucase_props_data.h" />
+    <ClInclude Include="uchar_props_data.h" />
+    <ClInclude Include="ucol_data.h" />
+    <ClInclude Include="ucol_swp.h" />
+    <ClInclude Include="unicode\ubiditransform.h" />
+    <ClInclude Include="unistrappender.h" />
+    <ClInclude Include="hash.h" />
+    <ClInclude Include="propsvec.h" />
+    <CustomBuild Include="unicode\strenum.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="uarrsort.h" />
+    <CustomBuild Include="unicode\uenum.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="uelement.h" />
+    <ClInclude Include="uenumimp.h" />
+    <ClInclude Include="uhash.h" />
+    <ClInclude Include="ulist.h" />
+    <CustomBuild Include="unicode\enumset.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="unicode\filteredbrk.h" />
+    <ClInclude Include="ustrenum.h" />
+    <ClInclude Include="utrie.h" />
+    <ClInclude Include="utrie2.h" />
+    <ClInclude Include="utrie2_impl.h" />
+    <ClInclude Include="utypeinfo.h" />
+    <ClInclude Include="uvector.h" />
+    <ClInclude Include="uvectr32.h" />
+    <ClInclude Include="uvectr64.h" />
+    <ClInclude Include="cpputils.h" />
+    <CustomBuild Include="unicode\docmain.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\errorcode.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\icudataver.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="locmap.h" />
+    <ClInclude Include="mutex.h" />
+    <CustomBuild Include="unicode\platform.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ptypes.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\putil.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="putilimp.h" />
+    <CustomBuild Include="unicode\std_string.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="uassert.h" />
+    <CustomBuild Include="unicode\uconfig.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\umachine.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="umutex.h" />
+    <ClInclude Include="uposixdefs.h" />
+    <CustomBuild Include="unicode\urename.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utrace.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="utracimp.h" />
+    <CustomBuild Include="unicode\utypes.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uvernum.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uversion.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="wintz.h" />
+    <CustomBuild Include="unicode\ucnv.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ucnv_bld.h" />
+    <CustomBuild Include="unicode\ucnv_cb.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ucnv_cnv.h" />
+    <CustomBuild Include="unicode\ucnv_err.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ucnv_ext.h" />
+    <ClInclude Include="ucnv_imp.h" />
+    <ClInclude Include="ucnv_io.h" />
+    <ClInclude Include="ucnvmbcs.h" />
+    <CustomBuild Include="unicode\ucnvsel.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="cmemory.h" />
+    <CustomBuild Include="unicode\localpointer.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uclean.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ucln.h" />
+    <ClInclude Include="ucln_cmn.h" />
+    <ClInclude Include="ucln_imp.h" />
+    <ClInclude Include="ucmndata.h" />
+    <CustomBuild Include="unicode\udata.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="udatamem.h" />
+    <ClInclude Include="udataswp.h" />
+    <ClInclude Include="umapfile.h" />
+    <CustomBuild Include="unicode\uobject.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\dtintrv.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\parseerr.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\parsepos.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\umisc.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ustrfmt.h" />
+    <ClInclude Include="util.h" />
+    <CustomBuild Include="unicode\idna.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="punycode.h" />
+    <CustomBuild Include="unicode\uidna.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="locbased.h" />
+    <CustomBuild Include="unicode\locid.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="locutil.h" />
+    <CustomBuild Include="unicode\resbund.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="sharedobject.h" />
+    <ClCompile Include="sharedobject.cpp" />
+    <CustomBuild Include="unicode\locdspnm.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\simpleformatter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ucat.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\udisplaycontext.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uldnames.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uloc.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ulocimp.h" />
+    <CustomBuild Include="unicode\ures.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="unifiedcache.h" />
+    <ClInclude Include="uresdata.h" />
+    <ClInclude Include="uresimp.h" />
+    <ClInclude Include="ureslocs.h" />
+    <ClInclude Include="resource.h" />
+    <CustomBuild Include="unicode\ucurr.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ucurrimp.h" />
+    <CustomBuild Include="unicode\caniter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="norm2allmodes.h" />
+    <CustomBuild Include="unicode\normalizer2.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="normalizer2impl.h" />
+    <CustomBuild Include="unicode\normlzr.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\unorm.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\unorm2.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="unormimp.h" />
+    <ClInclude Include="bmpset.h" />
+    <ClInclude Include="messageimpl.h" />
+    <ClInclude Include="patternprops.h" />
+    <ClInclude Include="propname.h" />
+    <ClInclude Include="ruleiter.h" />
+    <CustomBuild Include="unicode\symtable.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ucase.h" />
+    <CustomBuild Include="unicode\uchar.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\unifilt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\unifunct.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\unimatch.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uniset.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="unisetspan.h" />
+    <ClInclude Include="uprops.h" />
+    <ClInclude Include="usc_impl.h" />
+    <CustomBuild Include="unicode\uscript.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uset.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="uset_imp.h" />
+    <CustomBuild Include="unicode\usetiter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\icuplug.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="icuplugimp.h" />
+    <ClInclude Include="serv.h" />
+    <ClInclude Include="servloc.h" />
+    <ClInclude Include="servnotf.h" />
+    <ClInclude Include="sprpimpl.h" />
+    <CustomBuild Include="unicode\usprep.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\appendable.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\bytestream.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\bytestrie.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\bytestriebuilder.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\chariter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="charstr.h" />
+    <ClInclude Include="cstring.h" />
+    <ClInclude Include="cstr.h" />
+    <ClInclude Include="cwchar.h" />
+    <CustomBuild Include="unicode\messagepattern.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\rep.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\schriter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\stringpiece.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\stringtriebuilder.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ucasemap.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ucharstrie.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ucharstriebuilder.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uchriter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="uinvchar.h" />
+    <CustomBuild Include="unicode\uiter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\unistr.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\urep.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ustr_cnv.h" />
+    <ClInclude Include="ustr_imp.h" />
+    <CustomBuild Include="unicode\ustring.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ustringtrie.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utext.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utf.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utf16.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utf32.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utf8.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utf_old.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\listformatter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ulistformatter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="common.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
index 1fde5fba17ea82a6b1c588ba5475ee864ec601cd..3ca007576289266b501e42814f19426f9e3ba1e1 100644 (file)
@@ -30,6 +30,7 @@
 #include "locmap.h"
 #include "cstring.h"
 #include "cmemory.h"
+#include "unicode/uloc.h"
 
 #if U_PLATFORM == U_PF_WINDOWS && defined(_MSC_VER) && (_MSC_VER >= 1500)
 /*
  * We might need to #include some Windows header and test for some version macro from there.
  * Or call some Windows function and see what it returns.
  */
-#define USE_WINDOWS_LOCALE_API
-#endif
-
-#ifdef USE_WINDOWS_LOCALE_API
+#define USE_WINDOWS_LCID_MAPPING_API
 #include <windows.h>
 #include <winnls.h>
 #endif
@@ -53,8 +51,8 @@
  * The mapping from Win32 locale ID numbers to POSIX locale strings should
  * be the faster one.
  *
- * Many LCID values come from winnt.h
- * Some also come from http://www.microsoft.com/globaldev/reference/lcid-all.mspx
+ * Windows LCIDs are defined at https://msdn.microsoft.com/en-us/library/cc233965.aspx
+ * [MS-LCID] Windows Language Code Identifier (LCID) Reference
  */
 
 /*
@@ -126,7 +124,9 @@ static const ILcidPosixElement locmap_ ## id [] =
 // Keep static locale variables inside the function so that
 // it can be created properly during static init.
 //
-// Note: This table should be updated periodically. Check the National Lanaguage Support API Reference Website.
+// Note: This table should be updated periodically. Check the [MS-LCID] Windows Language Code Identifier 
+//       (LCID) Reference defined at https://msdn.microsoft.com/en-us/library/cc233965.aspx
+//
 //       Microsoft is moving away from LCID in favor of locale name as of Vista.  This table needs to be
 //       maintained for support of older Windows version.
 //       Update: Windows 7 (091130)
@@ -138,6 +138,10 @@ static const ILcidPosixElement locmap_ ## id [] =
 ////////////////////////////////////////////
 */
 
+// For Windows this table is be a list of exceptions rather than a complete list as 
+// LocaleNameToLCID and LCIDToLocaleName provide 90% of these.
+#ifndef USE_WINDOWS_LCID_MAPPING_API
+
 ILCID_POSIX_ELEMENT_ARRAY(0x0436, af, af_ZA)
 
 ILCID_POSIX_SUBTABLE(ar) {
@@ -212,34 +216,46 @@ ILCID_POSIX_SUBTABLE(ca) {
 
 ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR)
 ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US)
+#endif /* !USE_WINDOWS_LCID_MAPPING_API */
 
+// ICU has chosen different names for these.
 ILCID_POSIX_SUBTABLE(ckb) {
     {0x92,   "ckb"},
     {0x7c92, "ckb_Arab"},
     {0x0492, "ckb_Arab_IQ"}
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 /* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */
 ILCID_POSIX_ELEMENT_ARRAY(0x0405, cs, cs_CZ)
 
 ILCID_POSIX_ELEMENT_ARRAY(0x0452, cy, cy_GB)
 ILCID_POSIX_ELEMENT_ARRAY(0x0406, da, da_DK)
 
+#endif
+
+// Windows doesn't know POSIX or BCP47 Unicode phonebook sort names
 ILCID_POSIX_SUBTABLE(de) {
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     {0x07,   "de"},
     {0x0c07, "de_AT"},
     {0x0807, "de_CH"},
     {0x0407, "de_DE"},
     {0x1407, "de_LI"},
     {0x1007, "de_LU"},
+#endif
     {0x10407,"de_DE@collation=phonebook"},  /*This is really de_DE_PHONEBOOK on Windows*/
     {0x10407,"de@collation=phonebook"}  /*This is really de_DE_PHONEBOOK on Windows*/
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x0465, dv, dv_MV)
 ILCID_POSIX_ELEMENT_ARRAY(0x0408, el, el_GR)
+#endif
 
+// Windows uses an empty string for 'invariant'
 ILCID_POSIX_SUBTABLE(en) {
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     {0x09,   "en"},
     {0x0c09, "en_AU"},
     {0x2809, "en_BZ"},
@@ -256,23 +272,28 @@ ILCID_POSIX_SUBTABLE(en) {
     {0x4809, "en_SG"},
     {0x2C09, "en_TT"},
     {0x0409, "en_US"},
-    {0x007f, "en_US_POSIX"}, /* duplicate for roundtripping */
-    {0x2409, "en_VI"},  /* Virgin Islands AKA Caribbean Islands (en_CB). */
+#endif
+    {0x007f, "en_US_POSIX"}, /* duplicate for round-tripping */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
+    {0x2409, "en_VI"},  /* Virgin Islands AKA Caribbean Islands (en_CB). On Windows8+ This is 0x1000 or dynamically assigned */
     {0x1c09, "en_ZA"},
     {0x3009, "en_ZW"},
     {0x2409, "en_029"},
-    {0x0409, "en_AS"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_GU"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_MH"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_MP"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_UM"}   /* Alias for en_US. Leave last. */
+#endif
+    {0x0409, "en_AS"},  /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_GU"},  /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_MH"},  /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_MP"},  /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_UM"}   /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
 };
 
 ILCID_POSIX_SUBTABLE(en_US_POSIX) {
     {0x007f, "en_US_POSIX"} /* duplicate for roundtripping */
 };
 
+// Windows doesn't know POSIX or BCP47 Unicode traditional sort names
 ILCID_POSIX_SUBTABLE(es) {
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     {0x0a,   "es"},
     {0x2c0a, "es_AR"},
     {0x400a, "es_BO"},
@@ -296,20 +317,27 @@ ILCID_POSIX_SUBTABLE(es) {
     {0x380a, "es_UY"},
     {0x200a, "es_VE"},
     {0x580a, "es_419"},
+#endif
     {0x040a, "es_ES@collation=traditional"},
-    {0x040a, "es@collation=traditional"}
+    {0x040a, "es@collation=traditional"}        // Windows will treat this as es-ES@collation=traditional
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE)
 ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES)
+#endif
 
 /* ISO-639 doesn't distinguish between Persian and Dari.*/
 ILCID_POSIX_SUBTABLE(fa) {
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     {0x29,   "fa"},
     {0x0429, "fa_IR"},  /* Persian/Farsi (Iran) */
+#endif
     {0x048c, "fa_AF"}   /* Persian/Dari (Afghanistan) */
 };
 
+
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 /* duplicate for roundtripping */
 ILCID_POSIX_SUBTABLE(fa_AF) {
     {0x8c,   "fa_AF"},  /* Persian/Dari (Afghanistan) */
@@ -430,8 +458,10 @@ ILCID_POSIX_SUBTABLE(iu) {
     {0x085d, "iu_Latn_CA"},
     {0x7c5d, "iu_Latn"}
 };
+#endif
 
 ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL)    /*Left in for compatibility*/
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP)
 ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE)
 ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ)
@@ -447,14 +477,20 @@ ILCID_POSIX_SUBTABLE(ko) {
 
 ILCID_POSIX_ELEMENT_ARRAY(0x0457, kok, kok_IN)
 ILCID_POSIX_ELEMENT_ARRAY(0x0471, kr,  kr_NG)
+#endif
 
 ILCID_POSIX_SUBTABLE(ks) {         /* We could add PK and CN too */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     {0x60,   "ks"},
+#endif
     {0x0860, "ks_IN"},              /* Documentation doesn't mention script */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     {0x0460, "ks_Arab_IN"},
     {0x0860, "ks_Deva_IN"}
+#endif
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG)   /* Kyrgyz is spoken in Kyrgyzstan */
 ILCID_POSIX_ELEMENT_ARRAY(0x0476, la, la_IT)   /* TODO: Verify the country */
 ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU)
@@ -499,10 +535,12 @@ ILCID_POSIX_SUBTABLE(nl) {
     {0x0813, "nl_BE"},
     {0x0413, "nl_NL"}
 };
+#endif
 
 /* The "no" locale split into nb and nn.  By default in ICU, "no" is nb.*/
+// TODO: Not all of these are needed on Windows, but I don't know how ICU treats preferred ones here.
 ILCID_POSIX_SUBTABLE(no) {
-    {0x14,   "no"},     /* really nb_NO */
+    {0x14,   "no"},     /* really nb_NO - actually Windows differentiates between neutral (no region) and specific (with region) */ 
     {0x7c14, "nb"},     /* really nb */
     {0x0414, "nb_NO"},  /* really nb_NO. Keep first in the 414 list. */
     {0x0414, "no_NO"},  /* really nb_NO */
@@ -511,6 +549,7 @@ ILCID_POSIX_SUBTABLE(no) {
     {0x0814, "no_NO_NY"}/* really nn_NO */
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA)   /* TODO: Verify the ISO-639 code */
 ILCID_POSIX_ELEMENT_ARRAY(0x0482, oc, oc_FR)
 
@@ -553,6 +592,7 @@ ILCID_POSIX_SUBTABLE(qu) {
     {0x086b, "quz_EC"},
     {0x0C6b, "quz_PE"}
 };
+#endif
 
 ILCID_POSIX_SUBTABLE(quc) {
     {0x93,   "quc"},
@@ -583,6 +623,7 @@ ILCID_POSIX_SUBTABLE(qut) {
     {0x0486, "quc_Latn_GT"}
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x0417, rm, rm_CH)
 
 ILCID_POSIX_SUBTABLE(ro) {
@@ -590,11 +631,16 @@ ILCID_POSIX_SUBTABLE(ro) {
     {0x0418, "ro_RO"},
     {0x0818, "ro_MD"}
 };
+#endif
 
+// TODO: This is almost certainly 'wrong'.  0 in Windows is a synonym for LOCALE_USER_DEFAULT.
+// More likely this is a similar concept to the Windows 0x7f Invariant locale ""
+// (Except that it's not invariant in ICU)
 ILCID_POSIX_SUBTABLE(root) {
     {0x00,   "root"}
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_SUBTABLE(ru) {
     {0x19,   "ru"},
     {0x0419, "ru_RU"},
@@ -604,6 +650,7 @@ ILCID_POSIX_SUBTABLE(ru) {
 ILCID_POSIX_ELEMENT_ARRAY(0x0487, rw, rw_RW)
 ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN)
 ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU)
+#endif
 
 ILCID_POSIX_SUBTABLE(sd) {
     {0x59,   "sd"},
@@ -612,6 +659,7 @@ ILCID_POSIX_SUBTABLE(sd) {
     {0x0859, "sd_PK"}
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_SUBTABLE(se) {
     {0x3b,   "se"},
     {0x0c3b, "se_FI"},
@@ -694,6 +742,7 @@ ILCID_POSIX_SUBTABLE(tzm) {
     {0x045f, "tzm_Arab_MA"},
     {0x045f, "tmz"}
 };
+#endif
 
 ILCID_POSIX_SUBTABLE(ug) {
     {0x80,   "ug"},
@@ -701,6 +750,7 @@ ILCID_POSIX_SUBTABLE(ug) {
     {0x0480, "ug_Arab_CN"}
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x0422, uk, uk_UA)
 
 ILCID_POSIX_SUBTABLE(ur) {
@@ -708,6 +758,7 @@ ILCID_POSIX_SUBTABLE(ur) {
     {0x0820, "ur_IN"},
     {0x0420, "ur_PK"}
 };
+#endif
 
 ILCID_POSIX_SUBTABLE(uz) {
     {0x43,   "uz"},
@@ -724,12 +775,16 @@ ILCID_POSIX_SUBTABLE(ve) { /* TODO: Verify the country */
     {0x0433, "ven_ZA"}
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN)
 ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN)
 ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA)
 ILCID_POSIX_ELEMENT_ARRAY(0x043d, yi, yi)
 ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG)
+#endif
 
+// Windows & ICU tend to different names for some of these
+// TODO: Windows probably does not need all of these entries, but I don't know how the precedence works.
 ILCID_POSIX_SUBTABLE(zh) {
     {0x0004, "zh_Hans"},
     {0x7804, "zh"},
@@ -753,12 +808,16 @@ ILCID_POSIX_SUBTABLE(zh) {
     {0x20804,"zh_Hans@collation=stroke"},
     {0x20804,"zh_Hans_CN@collation=stroke"},
     {0x20804,"zh_CN@collation=stroke"}
+    // TODO: Alternate collations for other LCIDs are missing, eg: 0x50804
 };
 
+#ifndef USE_WINDOWS_LCID_MAPPING_API
 ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA)
+#endif
 
 /* This must be static and grouped by LCID. */
 static const ILcidPosixMap gPosixIDmap[] = {
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(af),    /*  af  Afrikaans                 0x36 */
     ILCID_POSIX_MAP(am),    /*  am  Amharic                   0x5e */
     ILCID_POSIX_MAP(ar),    /*  ar  Arabic                    0x01 */
@@ -775,20 +834,28 @@ static const ILcidPosixMap gPosixIDmap[] = {
     ILCID_POSIX_MAP(br),    /*  br  Breton                    0x7e */
     ILCID_POSIX_MAP(ca),    /*  ca  Catalan                   0x03 */
     ILCID_POSIX_MAP(chr),   /*  chr Cherokee                  0x5c */
+#endif
     ILCID_POSIX_MAP(ckb),   /*  ckb Sorani (Central Kurdish)  0x92 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(co),    /*  co  Corsican                  0x83 */
     ILCID_POSIX_MAP(cs),    /*  cs  Czech                     0x05 */
     ILCID_POSIX_MAP(cy),    /*  cy  Welsh                     0x52 */
     ILCID_POSIX_MAP(da),    /*  da  Danish                    0x06 */
+#endif
     ILCID_POSIX_MAP(de),    /*  de  German                    0x07 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(dv),    /*  dv  Divehi                    0x65 */
     ILCID_POSIX_MAP(el),    /*  el  Greek                     0x08 */
+#endif
     ILCID_POSIX_MAP(en),    /*  en  English                   0x09 */
     ILCID_POSIX_MAP(en_US_POSIX), /*    invariant             0x7f */
     ILCID_POSIX_MAP(es),    /*  es  Spanish                   0x0a */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(et),    /*  et  Estonian                  0x25 */
     ILCID_POSIX_MAP(eu),    /*  eu  Basque                    0x2d */
+#endif
     ILCID_POSIX_MAP(fa),    /*  fa  Persian/Farsi             0x29 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(fa_AF), /*  fa  Persian/Dari              0x8c */
     ILCID_POSIX_MAP(ff),    /*  ff  Fula                      0x67 */
     ILCID_POSIX_MAP(fi),    /*  fi  Finnish                   0x0b */
@@ -818,7 +885,9 @@ static const ILcidPosixMap gPosixIDmap[] = {
     ILCID_POSIX_MAP(is),    /*  is  Icelandic                 0x0f */
     ILCID_POSIX_MAP(it),    /*  it  Italian                   0x10 */
     ILCID_POSIX_MAP(iu),    /*  iu  Inuktitut                 0x5d */
+#endif
     ILCID_POSIX_MAP(iw),    /*  iw  Hebrew                    0x0d */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(ja),    /*  ja  Japanese                  0x11 */
     ILCID_POSIX_MAP(ka),    /*  ka  Georgian                  0x37 */
     ILCID_POSIX_MAP(kk),    /*  kk  Kazakh                    0x3f */
@@ -828,7 +897,9 @@ static const ILcidPosixMap gPosixIDmap[] = {
     ILCID_POSIX_MAP(ko),    /*  ko  Korean                    0x12 */
     ILCID_POSIX_MAP(kok),   /*  kok Konkani                   0x57 */
     ILCID_POSIX_MAP(kr),    /*  kr  Kanuri                    0x71 */
+#endif
     ILCID_POSIX_MAP(ks),    /*  ks  Kashmiri                  0x60 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(ky),    /*  ky  Kyrgyz                    0x40 */
     ILCID_POSIX_MAP(lb),    /*  lb  Luxembourgish             0x6e */
     ILCID_POSIX_MAP(la),    /*  la  Latin                     0x76 */
@@ -849,7 +920,9 @@ static const ILcidPosixMap gPosixIDmap[] = {
     ILCID_POSIX_MAP(ne),    /*  ne  Nepali                    0x61 */
     ILCID_POSIX_MAP(nl),    /*  nl  Dutch                     0x13 */
 /*    ILCID_POSIX_MAP(nn),    //  no  Norwegian                 0x14 */
+#endif
     ILCID_POSIX_MAP(no),    /*  *   Norwegian                 0x14 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(nso),   /*  nso Sotho, Northern (Sepedi dialect) 0x6c */
     ILCID_POSIX_MAP(oc),    /*  oc  Occitan                   0x82 */
     ILCID_POSIX_MAP(om),    /*  om  Oromo                     0x72 */
@@ -860,16 +933,22 @@ static const ILcidPosixMap gPosixIDmap[] = {
     ILCID_POSIX_MAP(ps),    /*  ps  Pashto                    0x63 */
     ILCID_POSIX_MAP(pt),    /*  pt  Portuguese                0x16 */
     ILCID_POSIX_MAP(qu),    /*  qu  Quechua                   0x6B */
+#endif
     ILCID_POSIX_MAP(quc),   /*  quc K'iche                    0x93 */
     ILCID_POSIX_MAP(qut),   /*  qut K'iche                    0x86 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(rm),    /*  rm  Raeto-Romance/Romansh     0x17 */
     ILCID_POSIX_MAP(ro),    /*  ro  Romanian                  0x18 */
+#endif
     ILCID_POSIX_MAP(root),  /*  root                          0x00 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(ru),    /*  ru  Russian                   0x19 */
     ILCID_POSIX_MAP(rw),    /*  rw  Kinyarwanda               0x87 */
     ILCID_POSIX_MAP(sa),    /*  sa  Sanskrit                  0x4f */
     ILCID_POSIX_MAP(sah),   /*  sah Yakut                     0x85 */
+#endif
     ILCID_POSIX_MAP(sd),    /*  sd  Sindhi                    0x59 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(se),    /*  se  Sami                      0x3b */
 /*    ILCID_POSIX_MAP(sh),    //  sh  Serbo-Croatian            0x1a */
     ILCID_POSIX_MAP(si),    /*  si  Sinhalese                 0x5b */
@@ -893,18 +972,25 @@ static const ILcidPosixMap gPosixIDmap[] = {
     ILCID_POSIX_MAP(ts),    /*  ts  Tsonga                    0x31 */
     ILCID_POSIX_MAP(tt),    /*  tt  Tatar                     0x44 */
     ILCID_POSIX_MAP(tzm),   /*  tzm Tamazight                 0x5f */
+#endif
     ILCID_POSIX_MAP(ug),    /*  ug  Uighur                    0x80 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(uk),    /*  uk  Ukrainian                 0x22 */
     ILCID_POSIX_MAP(ur),    /*  ur  Urdu                      0x20 */
+#endif
     ILCID_POSIX_MAP(uz),    /*  uz  Uzbek                     0x43 */
     ILCID_POSIX_MAP(ve),    /*  ve  Venda                     0x33 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(vi),    /*  vi  Vietnamese                0x2a */
     ILCID_POSIX_MAP(wo),    /*  wo  Wolof                     0x88 */
     ILCID_POSIX_MAP(xh),    /*  xh  Xhosa                     0x34 */
     ILCID_POSIX_MAP(yi),    /*  yi  Yiddish                   0x3d */
     ILCID_POSIX_MAP(yo),    /*  yo  Yoruba                    0x6a */
+#endif
     ILCID_POSIX_MAP(zh),    /*  zh  Chinese                   0x04 */
+#ifndef USE_WINDOWS_LCID_MAPPING_API
     ILCID_POSIX_MAP(zu),    /*  zu  Zulu                      0x35 */
+#endif
 };
 
 static const uint32_t gLocaleCount = UPRV_LENGTHOF(gPosixIDmap);
@@ -991,7 +1077,7 @@ getPosixID(const ILcidPosixMap *this_0, uint32_t hostID)
 //
 /////////////////////////////////////
 */
-#ifdef USE_WINDOWS_LOCALE_API
+#ifdef USE_WINDOWS_LCID_MAPPING_API
 /*
  * Various language tags needs to be changed:
  * quz -> qu
@@ -1017,43 +1103,56 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr
     UBool bLookup = TRUE;
     const char *pPosixID = NULL;
 
-#ifdef USE_WINDOWS_LOCALE_API
+#ifdef USE_WINDOWS_LCID_MAPPING_API
     // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and
     // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for
     // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot
     // use the Windows API to resolve locale ID for this specific case.
     if ((hostid & 0x3FF) != 0x92) {
         int32_t tmpLen = 0;
-        char locName[157];  /* ULOC_FULLNAME_CAPACITY */
+        UChar windowsLocaleName[LOCALE_NAME_MAX_LENGTH];  // ULOC_FULLNAME_CAPACITY > LOCALE_NAME_MAX_LENGTH
+        char locName[LOCALE_NAME_MAX_LENGTH];             // ICU name can't be longer than Windows name
 
-        tmpLen = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)locName, UPRV_LENGTHOF(locName));
+        // Note: LOCALE_ALLOW_NEUTRAL_NAMES was enabled in Windows7+, prior versions did not handle neutral (no-region) locale names.
+        tmpLen = LCIDToLocaleName(hostid, (PWSTR)windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName), LOCALE_ALLOW_NEUTRAL_NAMES);
         if (tmpLen > 1) {
-            /* Windows locale name may contain sorting variant, such as "es-ES_tradnl".
-            In such case, we need special mapping data found in the hardcoded table
-            in this source file. */
-            char *p = uprv_strchr(locName, '_');
-            if (p) {
-                /* Keep the base locale, without variant */
-                *p = 0;
-                tmpLen = uprv_strlen(locName);
-            }
-            else {
-                /* No hardcoded table lookup necessary */
-                bLookup = FALSE;
-            }
-            /* Change the tag separator from '-' to '_' */
-            p = locName;
-            while (*p) {
-                if (*p == '-') {
-                    *p = '_';
+            int i = 0;
+            // Only need to look up in table if have _, eg for de-de_phoneb type alternate sort.
+            bLookup = FALSE;
+            for (i = 0; i < UPRV_LENGTHOF(locName); i++)
+            {
+                locName[i] = (char)(windowsLocaleName[i]);
+
+                // Windows locale name may contain sorting variant, such as "es-ES_tradnl".
+                // In such cases, we need special mapping data found in the hardcoded table
+                // in this source file.
+                if (windowsLocaleName[i] == L'_')
+                {
+                    // Keep the base locale, without variant
+                    // TODO: Should these be mapped from _phoneb to @collation=phonebook, etc.?
+                    locName[i] = '\0';
+                    tmpLen = i;
+                    bLookup = TRUE;
+                    break;
+                }
+                else if (windowsLocaleName[i] == L'-')
+                {
+                    // Windows names use -, ICU uses _
+                    locName[i] = '_';
+                }
+                else if (windowsLocaleName[i] == L'\0')
+                {
+                    // No point in doing more work than necessary
+                    break;
                 }
-                p++;
             }
+            // TODO: Need to understand this better, why isn't it an alias?
             FIX_LANGUAGE_ID_TAG(locName, tmpLen);
             pPosixID = locName;
         }
     }
-#endif
+#endif // USE_WINDOWS_LCID_MAPPING_API
+
     if (bLookup) {
         const char *pCandidate = NULL;
         langID = LANGUAGE_LCID(hostid);
@@ -1101,15 +1200,101 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr
 // POSIX --> LCID
 // This should only be called from uloc_getLCID.
 // The locale ID must be in canonical form.
-// langID is separate so that this file doesn't depend on the uloc_* API.
 //
 /////////////////////////////////////
 */
+U_CAPI uint32_t
+uprv_convertToLCIDPlatform(const char* localeID)
+{
+    // The purpose of this function is to leverage native platform name->lcid
+    // conversion functionality when available.
+#ifdef USE_WINDOWS_LCID_MAPPING_API
+    DWORD nameLCIDFlags = 0;
+    UErrorCode myStatus = U_ZERO_ERROR;
+
+    // First check for a Windows name->LCID match, fall through to catch
+    // ICU special cases, but Windows may know it already.
+#if LOCALE_ALLOW_NEUTRAL_NAMES
+    nameLCIDFlags = LOCALE_ALLOW_NEUTRAL_NAMES;
+#endif /* LOCALE_ALLOW_NEUTRAL_NAMES */
+
+    int32_t len;
+    char collVal[ULOC_KEYWORDS_CAPACITY] = {};
+    char baseName[ULOC_FULLNAME_CAPACITY] = {};
+    const char * mylocaleID = localeID;
+
+    // Check any for keywords.
+    if (uprv_strchr(localeID, '@'))
+    {
+        len = uloc_getKeywordValue(localeID, "collation", collVal, UPRV_LENGTHOF(collVal) - 1, &myStatus);
+        if (U_SUCCESS(myStatus) && len > 0)
+        {
+            // If it contains the keyword collation, return 0 so that the LCID lookup table will be used.
+            return 0;
+        }
+        else
+        {
+            // If the locale ID contains keywords other than collation, just use the base name.
+            len = uloc_getBaseName(localeID, baseName, UPRV_LENGTHOF(baseName) - 1, &myStatus);
+
+            if (U_SUCCESS(myStatus) && len > 0)
+            {
+                baseName[len] = 0;
+                mylocaleID = baseName;
+            }
+        }
+    }
+
+    char asciiBCP47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+    // this will change it from de_DE@collation=phonebook to de-DE-u-co-phonebk form
+    int32_t bcp47Len = uloc_toLanguageTag(mylocaleID, asciiBCP47Tag, UPRV_LENGTHOF(asciiBCP47Tag), FALSE, &myStatus);
+
+    if (U_SUCCESS(myStatus))
+    {
+        // Need it to be UTF-16, not 8-bit
+        wchar_t bcp47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+        int i;
+        for (i = 0; i < UPRV_LENGTHOF(bcp47Tag); i++)
+        {
+            if (asciiBCP47Tag[i] == '\0')
+            {
+                break;
+            }
+            else
+            {
+                // Copy the character
+                bcp47Tag[i] = static_cast<wchar_t>(asciiBCP47Tag[i]);
+            }
+        }
+
+        if (i < (UPRV_LENGTHOF(bcp47Tag) - 1))
+        {
+            // Ensure it's null terminated
+            bcp47Tag[i] = L'\0';
+            LCID lcid = LocaleNameToLCID(bcp47Tag, nameLCIDFlags);
+            if (lcid > 0)
+            {
+                // Found LCID from windows, return that one, unless its completely ambiguous
+                // LOCALE_USER_DEFAULT and transients are OK because they will round trip
+                // for this process.
+                if (lcid != LOCALE_CUSTOM_UNSPECIFIED)
+                {
+                    return lcid;
+                }
+            }
+        }
+    }
+#endif /* USE_WINDOWS_LCID_MAPPING_API */
+
+    // No found, or not implemented on platforms without native name->lcid conversion
+    return 0;
+}
 
 U_CAPI uint32_t
 uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
 {
-
+    // This function does the table lookup when native platform name->lcid conversion isn't available,
+    // or for locales that don't follow patterns the platform expects.
     uint32_t   low    = 0;
     uint32_t   high   = gLocaleCount;
     uint32_t   mid;
@@ -1172,4 +1357,3 @@ uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
     *status = U_ILLEGAL_ARGUMENT_ERROR;
     return 0;   /* return international (root) */
 }
-
index be486051c61c7dbe44e6502797d33a76760e7cd9..bef62956e64fa19339c479f367079f443164e456 100644 (file)
@@ -32,7 +32,8 @@
 
 U_CAPI int32_t uprv_convertToPosix(uint32_t hostid, char* posixID, int32_t posixIDCapacity, UErrorCode* status);
 
-/* Don't call this function directly. Use uloc_getLCID instead. */
+/* Don't call these functions directly. Use uloc_getLCID instead. */
+U_CAPI uint32_t uprv_convertToLCIDPlatform(const char *localeID);   // Leverage platform conversion if possible
 U_CAPI uint32_t uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status);
 
 #endif /* LOCMAP_H */
index a1a4949d30aa788e5e761aef4e6642f0c4db3087..607660c45f1139b65fbc87405affdfb72410900f 100644 (file)
 #include "normalizer2impl.h"
 #include "uprops.h"  // for uniset_getUnicode32Instance()
 
+#if defined(_ARM64_) && defined(move32)
+ // System can define move32 intrinsics, but the char iters define move32 method
+ // using same undef trick in headers, so undef here to re-enable the method.
+#undef move32
+#endif
+
 U_NAMESPACE_BEGIN
 
 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Normalizer)
index 899e0edd4fc8e11c725323d7944ee326be748861..70618751ab90c0335a84fbe02f5f119686c8ef3d 100644 (file)
      * Should Cygwin be included as well (U_PLATFORM_HAS_WIN32_API)
      * to use native APIs as much as possible?
      */
+#ifndef WIN32_LEAN_AND_MEAN
 #   define WIN32_LEAN_AND_MEAN
+#endif
 #   define VC_EXTRALEAN
 #   define NOUSER
 #   define NOSERVICE
 #   define NOIME
 #   define NOMCX
 #   include <windows.h>
+#   include "unicode\uloc.h"
+#if U_PLATFORM_HAS_WINUWP_API == 0
 #   include "wintz.h"
+#else // U_PLATFORM_HAS_WINUWP_API
+typedef PVOID LPMSG; // TODO: figure out how to get rid of this typedef
+#include <Windows.Globalization.h>
+#include <windows.system.userprofile.h>
+#include <wrl\wrappers\corewrappers.h>
+#include <wrl\client.h>
+
+using namespace ABI::Windows::Foundation;
+using namespace Microsoft::WRL;
+using namespace Microsoft::WRL::Wrappers;
+#endif
 #elif U_PLATFORM == U_PF_OS400
 #   include <float.h>
 #   include <qusec.h>       /* error code structure */
@@ -1008,16 +1023,65 @@ uprv_tzname_clear_cache()
 #endif
 }
 
+// With the Universal Windows Platform we can just ask Windows for the name
+#if U_PLATFORM_HAS_WINUWP_API
+U_CAPI const char* U_EXPORT2
+uprv_getWindowsTimeZone()
+{
+    // Get default Windows timezone.   
+    ComPtr<IInspectable> calendar;
+    HRESULT hr = RoActivateInstance(
+        HStringReference(RuntimeClass_Windows_Globalization_Calendar).Get(),
+        &calendar);
+    if (SUCCEEDED(hr))
+    {
+        ComPtr<ABI::Windows::Globalization::ITimeZoneOnCalendar> timezone;
+        hr = calendar.As(&timezone);
+        if (SUCCEEDED(hr))
+        {
+            HString timezoneString;
+            hr = timezone->GetTimeZone(timezoneString.GetAddressOf());
+            if (SUCCEEDED(hr))
+            {
+                int32_t length = wcslen(timezoneString.GetRawBuffer(NULL));
+                char* asciiId = (char*)uprv_calloc(length + 1, sizeof(char));
+                if (asciiId != nullptr)
+                {
+                    u_UCharsToChars((UChar*)timezoneString.GetRawBuffer(NULL), asciiId, length);
+                    return asciiId;
+                }
+            }
+        }
+    }
+
+    // Failed
+    return nullptr;
+}
+#endif
+
 U_CAPI const char* U_EXPORT2
 uprv_tzname(int n)
 {
     const char *tzid = NULL;
 #if U_PLATFORM_USES_ONLY_WIN32_API
+#if U_PLATFORM_HAS_WINUWP_API > 0
+    tzid = uprv_getWindowsTimeZone();
+#else
     tzid = uprv_detectWindowsTimeZone();
+#endif
 
     if (tzid != NULL) {
         return tzid;
     }
+
+#ifndef U_TZNAME
+    // The return value is free'd in timezone.cpp on Windows because
+    // the other code path returns a pointer to a heap location.
+    // If we don't have a name already, then tzname wouldn't be any
+    // better, so just fall back.
+    return uprv_strdup("Etc/UTC");
+#endif // !U_TZNAME
+
 #else
 
 /*#if U_PLATFORM_IS_DARWIN_BASED
@@ -1162,7 +1226,8 @@ UInitOnce gTimeZoneFilesInitOnce = U_INITONCE_INITIALIZER;
 static CharString *gTimeZoneFilesDirectory = NULL;
 
 #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
- static char *gCorrectedPOSIXLocale = NULL; /* Heap allocated */
+ static char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */
+ static bool gCorrectedPOSIXLocaleHeapAllocated = false;
 #endif
 
 static UBool U_CALLCONV putil_cleanup(void)
@@ -1183,9 +1248,10 @@ static UBool U_CALLCONV putil_cleanup(void)
 #endif
 
 #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
-    if (gCorrectedPOSIXLocale) {
+    if (gCorrectedPOSIXLocale && gCorrectedPOSIXLocaleHeapAllocated) {
         uprv_free(gCorrectedPOSIXLocale);
         gCorrectedPOSIXLocale = NULL;
+        gCorrectedPOSIXLocaleHeapAllocated = false;
     }
 #endif
     return TRUE;
@@ -1297,7 +1363,9 @@ static void U_CALLCONV dataDirectoryInitFn() {
     */
 #   if !defined(ICU_NO_USER_DATA_OVERRIDE) && !UCONFIG_NO_FILE_IO
     /* First try to get the environment variable */
-    path=getenv("ICU_DATA");
+#       if U_PLATFORM_HAS_WINUWP_API == 0  // Windows UWP does not support getenv
+        path=getenv("ICU_DATA");
+#       endif
 #   endif
 
     /* ICU_DATA_DIR may be set as a compile option.
@@ -1326,9 +1394,35 @@ static void U_CALLCONV dataDirectoryInitFn() {
     }
 #endif
 
+#if defined(ICU_DATA_DIR_WINDOWS) && U_PLATFORM_HAS_WINUWP_API != 0
+    // Use data from the %windir%\globalization\icu directory
+    // This is only available if ICU is built as a system component
+    char datadir_path_buffer[MAX_PATH];
+    UINT length = GetWindowsDirectoryA(datadir_path_buffer, UPRV_LENGTHOF(datadir_path_buffer));
+    if (length > 0 && length < (UPRV_LENGTHOF(datadir_path_buffer) - sizeof(ICU_DATA_DIR_WINDOWS) - 1))
+    {
+        if (datadir_path_buffer[length - 1] != '\\')
+        {
+            datadir_path_buffer[length++] = '\\';
+            datadir_path_buffer[length] = '\0';
+        }
+
+        if ((length + 1 + sizeof(ICU_DATA_DIR_WINDOWS)) < UPRV_LENGTHOF(datadir_path_buffer))
+        {
+            uprv_strcat(datadir_path_buffer, ICU_DATA_DIR_WINDOWS);
+            path = datadir_path_buffer;
+        }
+    }
+#endif
+
     if(path==NULL) {
         /* It looks really bad, set it to something. */
+#if U_PLATFORM_HAS_WIN32_API
+        // Windows UWP will require icudtl.dat file in same directory as icuuc.dll
+        path = ".\\";
+#else
         path = "";
+#endif
     }
 
     u_setDataDirectory(path);
@@ -1366,7 +1460,12 @@ static void U_CALLCONV TimeZoneDataDirInitFn(UErrorCode &status) {
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
+#if U_PLATFORM_HAS_WINUWP_API == 0
     const char *dir = getenv("ICU_TIMEZONE_FILES_DIR");
+#else
+    // TODO: UWP does not support alternate timezone data directories at this time
+    const char *dir = "";
+#endif // U_PLATFORM_HAS_WINUWP_API
 #if defined(U_TIMEZONE_FILES_DIR)
     if (dir == NULL) {
         dir = TO_STRING(U_TIMEZONE_FILES_DIR);
@@ -1603,6 +1702,7 @@ The leftmost codepage (.xxx) wins.
 
     if (gCorrectedPOSIXLocale == NULL) {
         gCorrectedPOSIXLocale = correctedPOSIXLocale;
+        gCorrectedPOSIXLocaleHeapAllocated = true;
         ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
         correctedPOSIXLocale = NULL;
     }
@@ -1618,25 +1718,115 @@ The leftmost codepage (.xxx) wins.
     UErrorCode status = U_ZERO_ERROR;
     char *correctedPOSIXLocale = 0;
 
+    // If we have already figured this out just use the cached value
     if (gCorrectedPOSIXLocale != NULL) {
         return gCorrectedPOSIXLocale;
     }
 
-    LCID id = GetThreadLocale();
-    correctedPOSIXLocale = static_cast<char *>(uprv_malloc(POSIX_LOCALE_CAPACITY + 1));
-    if (correctedPOSIXLocale) {
-        int32_t posixLen = uprv_convertToPosix(id, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status);
-        if (U_SUCCESS(status)) {
-            *(correctedPOSIXLocale + posixLen) = 0;
-            gCorrectedPOSIXLocale = correctedPOSIXLocale;
-            ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
-        } else {
-            uprv_free(correctedPOSIXLocale);
+    // No cached value, need to determine the current value
+    static WCHAR windowsLocale[LOCALE_NAME_MAX_LENGTH];
+#if U_PLATFORM_HAS_WINUWP_API == 0 
+    // If not a Universal Windows App, we'll need user default language.
+    // Vista and above should use Locale Names instead of LCIDs
+    int length = GetUserDefaultLocaleName(windowsLocale, UPRV_LENGTHOF(windowsLocale));
+#else
+    // In a UWP app, we want the top language that the application and user agreed upon
+    ComPtr<ABI::Windows::Foundation::Collections::IVectorView<HSTRING>> languageList;
+
+    ComPtr<ABI::Windows::Globalization::IApplicationLanguagesStatics> applicationLanguagesStatics;
+    HRESULT hr = GetActivationFactory(
+        HStringReference(RuntimeClass_Windows_Globalization_ApplicationLanguages).Get(),
+        &applicationLanguagesStatics);
+    if (SUCCEEDED(hr))
+    {
+        hr = applicationLanguagesStatics->get_Languages(&languageList);
+    }
+
+    if (FAILED(hr))
+    {
+        // If there is no application context, then use the top language from the user language profile
+        ComPtr<ABI::Windows::System::UserProfile::IGlobalizationPreferencesStatics> globalizationPreferencesStatics;
+        hr = GetActivationFactory(
+            HStringReference(RuntimeClass_Windows_System_UserProfile_GlobalizationPreferences).Get(),
+            &globalizationPreferencesStatics);
+        if (SUCCEEDED(hr))
+        {
+            hr = globalizationPreferencesStatics->get_Languages(&languageList);
         }
     }
 
+    // We have a list of languages, ICU knows one, so use the top one for our locale
+    HString topLanguage;
+    if (SUCCEEDED(hr))
+    {
+        hr = languageList->GetAt(0, topLanguage.GetAddressOf());
+    }
+
+    if (FAILED(hr))
+    {
+        // Unexpected, use en-US by default
+        if (gCorrectedPOSIXLocale == NULL) {
+            gCorrectedPOSIXLocale = "en_US";
+        }
+
+        return gCorrectedPOSIXLocale;
+    }
+
+    // ResolveLocaleName will get a likely subtags form consistent with Windows behavior.
+    int length = ResolveLocaleName(topLanguage.GetRawBuffer(NULL), windowsLocale, UPRV_LENGTHOF(windowsLocale));
+#endif
+    // Now we should have a Windows locale name that needs converted to the POSIX style,
+    if (length > 0)
+    {
+        // First we need to go from UTF-16 to char (and also convert from _ to - while we're at it.)
+        char modifiedWindowsLocale[LOCALE_NAME_MAX_LENGTH];
+
+        int i;
+        for (i = 0; i < UPRV_LENGTHOF(modifiedWindowsLocale); i++)
+        {
+            if (windowsLocale[i] == '_')
+            {
+                modifiedWindowsLocale[i] = '-';
+            }
+            else
+            {
+                modifiedWindowsLocale[i] = static_cast<char>(windowsLocale[i]);
+            }
+
+            if (modifiedWindowsLocale[i] == '\0')
+            {
+                break;
+            }
+        }
+
+        if (i >= UPRV_LENGTHOF(modifiedWindowsLocale))
+        {
+            // Ran out of room, can't really happen, maybe we'll be lucky about a matching
+            // locale when tags are dropped
+            modifiedWindowsLocale[UPRV_LENGTHOF(modifiedWindowsLocale) - 1] = '\0';
+        }
+
+        // Now normalize the resulting name
+        if (correctedPOSIXLocale)
+        {
+            int32_t posixLen = uloc_canonicalize(modifiedWindowsLocale, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status);
+            if (U_SUCCESS(status))
+            {
+                *(correctedPOSIXLocale + posixLen) = 0;
+                gCorrectedPOSIXLocale = correctedPOSIXLocale;
+                gCorrectedPOSIXLocaleHeapAllocated = true;
+                ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
+            }
+            else
+            {
+                uprv_free(correctedPOSIXLocale);
+            }
+        }
+    }
+
+    // If unable to find a locale we can agree upon, use en-US by default
     if (gCorrectedPOSIXLocale == NULL) {
-        return "en_US";
+        gCorrectedPOSIXLocale = "en_US";
     }
     return gCorrectedPOSIXLocale;
 
@@ -1923,8 +2113,34 @@ int_getDefaultCodepage()
 
 #elif U_PLATFORM_USES_ONLY_WIN32_API
     static char codepage[64];
-    sprintf(codepage, "windows-%d", GetACP());
-    return codepage;
+    DWORD codepageNumber = 0;
+
+#if U_PLATFORM_HAS_WINUWP_API > 0
+    // UWP doesn't have a direct API to get the default ACP as Microsoft would rather
+    // have folks use Unicode than a "system" code page, however this is the same
+    // codepage as the system default locale codepage.  (FWIW, the system locale is
+    // ONLY used for codepage, it should never be used for anything else)
+    GetLocaleInfoEx(LOCALE_NAME_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
+        (LPWSTR)&codepageNumber, sizeof(codepageNumber) / sizeof(WCHAR));
+#else
+    // Win32 apps can call GetACP
+    codepageNumber = GetACP();
+#endif
+    // Special case for UTF-8
+    if (codepageNumber == 65001)
+    { 
+        return "UTF-8";
+    }
+    // Windows codepages can look like windows-1252, so format the found number
+    // the numbers are eclectic, however all valid system code pages, besides UTF-8
+    // are between 3 and 19999
+    if (codepageNumber > 0 && codepageNumber < 20000)
+    {
+        sprintf(codepage, "windows-%ld", codepageNumber);
+        return codepage;
+    }
+    // If the codepage number call failed then return UTF-8
+    return "UTF-8";
 
 #elif U_POSIX_LOCALE
     static char codesetName[100];
index 243726ca4dd8db088bd7f05419a721292b52f441..86bf04365cec393d5e2492d90d293edd907bbc1e 100644 (file)
@@ -106,7 +106,10 @@ typedef size_t uintptr_t;
 #ifdef U_TZSET
     /* Use the predefined value. */
 #elif U_PLATFORM_USES_ONLY_WIN32_API
+    // UWP doesn't support tzset or environment variables for tz
+#if U_PLATFORM_HAS_WINUWP_API == 0
 #   define U_TZSET _tzset
+#endif
 #elif U_PLATFORM == U_PF_OS400
    /* not defined */
 #else
@@ -141,7 +144,10 @@ typedef size_t uintptr_t;
 #ifdef U_TZNAME
     /* Use the predefined value. */
 #elif U_PLATFORM_USES_ONLY_WIN32_API
+    /* not usable on all windows platforms */
+#if U_PLATFORM_HAS_WINUWP_API == 0
 #   define U_TZNAME _tzname
+#endif
 #elif U_PLATFORM == U_PF_OS400
    /* not defined */
 #else
index 0473aaa0f6619befb2fb369ab1a91ae126a7e202..1bfcde0fb8eae2d90f9376518bbba9202e9a28af 100644 (file)
@@ -121,7 +121,9 @@ U_CAPI void U_EXPORT2 UCLN_FINI ()
 /* READ READ READ READ!    Are you getting compilation errors from windows.h?
           Any source file which includes this (ucln_imp.h) header MUST 
           be defined with language extensions ON. */
+#ifndef WIN32_LEAN_AND_MEAN
 #   define WIN32_LEAN_AND_MEAN
+#endif
 #   define VC_EXTRALEAN
 #   define NOUSER
 #   define NOSERVICE
index d620623a37bf47bf8a351e45dab6c5b58989392c..29074a64c45618693009d51053c747031b34081a 100644 (file)
@@ -110,8 +110,12 @@ static u_atomic_int32_t gHaveTriedToLoadCommonData = ATOMIC_INT32_T_INITIALIZER(
 static UHashtable  *gCommonDataCache = NULL;  /* Global hash table of opened ICU data files.  */
 static icu::UInitOnce gCommonDataCacheInitOnce = U_INITONCE_INITIALIZER;
 
+#if U_PLATFORM_HAS_WINUWP_API == 0 
 static UDataFileAccess  gDataFileAccess = UDATA_DEFAULT_ACCESS;  // Access not synchronized.
                                                                  // Modifying is documented as thread-unsafe.
+#else
+static UDataFileAccess  gDataFileAccess = UDATA_NO_FILES;        // Windows UWP looks in one spot explicitly
+#endif
 
 static UBool U_CALLCONV
 udata_cleanup(void)
@@ -619,12 +623,14 @@ U_NAMESPACE_END
 
 /*----------------------------------------------------------------------*
  *                                                                      *
- *  Add a static reference to the common data  library                  *
+ *  Add a static reference to the common data library                   *
  *   Unless overridden by an explicit udata_setCommonData, this will be *
  *      our common data.                                                *
  *                                                                      *
  *----------------------------------------------------------------------*/
+#if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP Platform does not support dll icu data at this time
 extern "C" const DataHeader U_DATA_API U_ICUDATA_ENTRY_POINT;
+#endif
 
 /*
  * This would be a good place for weak-linkage declarations of
@@ -672,6 +678,7 @@ openCommonData(const char *path,          /*  Path from OpenChoice?          */
             if(gCommonICUDataArray[commonDataIndex] != NULL) {
                 return gCommonICUDataArray[commonDataIndex];
             }
+#if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP Platform does not support dll icu data at this time
             int32_t i;
             for(i = 0; i < commonDataIndex; ++i) {
                 if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT) {
@@ -679,6 +686,7 @@ openCommonData(const char *path,          /*  Path from OpenChoice?          */
                     return NULL;
                 }
             }
+#endif
         }
 
         /* Add the linked-in data to the list. */
@@ -694,11 +702,13 @@ openCommonData(const char *path,          /*  Path from OpenChoice?          */
             setCommonICUDataPointer(uprv_getICUData_conversion(), FALSE, pErrorCode);
         }
         */
+#if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP Platform does not support dll icu data at this time
         setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT, FALSE, pErrorCode);
         {
             Mutex lock;
             return gCommonICUDataArray[commonDataIndex];
         }
+#endif
     }
 
 
@@ -1245,9 +1255,14 @@ doOpenChoice(const char *path, const char *type, const char *name,
     fprintf(stderr, " tocEntryPath = %s\n", tocEntryName.data());
 #endif
 
+#if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP Platform does not support dll icu data at this time
     if(path == NULL) {
         path = COMMON_DATA_NAME; /* "icudt26e" */
     }
+#else
+    // Windows UWP expects only a single data file.
+    path = COMMON_DATA_NAME; /* "icudt26e" */
+#endif
 
     /************************ Begin loop looking for ind. files ***************/
 #ifdef UDATA_DEBUG
index 647ac29f169299069d40042ac3c44386d43cdbd9..4d98def1977fcc96d51deea8000e78b576f0e6be 100644 (file)
@@ -2119,6 +2119,20 @@ uloc_getLCID(const char* localeID)
 {
     UErrorCode status = U_ZERO_ERROR;
     char       langID[ULOC_FULLNAME_CAPACITY];
+    uint32_t   lcid = 0;
+
+    /* Check for incomplete id. */
+    if (!localeID || uprv_strlen(localeID) < 2) {
+        return 0;
+    }
+
+    // Attempt platform lookup if available
+    lcid = uprv_convertToLCIDPlatform(localeID);
+    if (lcid > 0)
+    {
+        // Windows found an LCID, return that
+        return lcid;
+    }
 
     uloc_getLanguage(localeID, langID, sizeof(langID), &status);
     if (U_FAILURE(status)) {
index d665cdd30b97e0084816f62352852c95cdbf2e1c..dcd727165390fce9c0a60fbeb55e8681d381821e 100644 (file)
@@ -923,7 +923,7 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac
         char extBuf[ULOC_KEYWORD_AND_VALUES_CAPACITY];
         char *pExtBuf = extBuf;
         int32_t extBufCapacity = sizeof(extBuf);
-        const char *bcpKey, *bcpValue;
+        const char *bcpKey=nullptr, *bcpValue=nullptr;
         UErrorCode tmpStatus = U_ZERO_ERROR;
         int32_t keylen;
         UBool isBcpUExt;
index 4a9a5ade631818decff5576417d3ae13cb1f26ba..bfa9b1b719080588405b86a7cd4b41abc0e7fe70 100644 (file)
@@ -28,7 +28,9 @@
 /* memory-mapping base definitions ------------------------------------------ */
 
 #if MAP_IMPLEMENTATION==MAP_WIN32
+#ifndef WIN32_LEAN_AND_MEAN
 #   define WIN32_LEAN_AND_MEAN
+#endif
 #   define VC_EXTRALEAN
 #   define NOUSER
 #   define NOSERVICE
         UDataMemory_init(pData); /* Clear the output struct.        */
 
         /* open the input file */
+#if U_PLATFORM_HAS_WINUWP_API == 0
         file=CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, NULL,
             OPEN_EXISTING,
             FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS, NULL);
+#else
+        // First we need to go from char to UTF-16
+        // u_UCharsToChars could work but it requires length.
+        WCHAR utf16Path[MAX_PATH];
+        int i;
+        for (i = 0; i < UPRV_LENGTHOF(utf16Path); i++)
+        {
+            utf16Path[i] = path[i];
+            if (path[i] == '\0')
+            {
+                break;
+            }
+        }
+        if (i >= UPRV_LENGTHOF(utf16Path))
+        {
+            // Ran out of room, unlikely but be safe
+            utf16Path[UPRV_LENGTHOF(utf16Path) - 1] = '\0';
+        }
+
+        // TODO: Is it worth setting extended parameters to specify random access?
+        file = CreateFile2(utf16Path, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, NULL);
+#endif
         if(file==INVALID_HANDLE_VALUE) {
             return FALSE;
         }
 
         /* Declare and initialize a security descriptor.
            This is required for multiuser systems on Windows 2000 SP4 and beyond */
+        // TODO: UWP does not have this function and I do not think it is required?
+#if U_PLATFORM_HAS_WINUWP_API == 0
         if (InitializeSecurityDescriptor(&securityDesc, SECURITY_DESCRIPTOR_REVISION)) {
-            /* give the security descriptor a Null Dacl done using the  "TRUE, (PACL)NULL" here        */
+            /* give the security descriptor a Null Dacl done using the  "TRUE, (PACL)NULL" here */
             if (SetSecurityDescriptorDacl(&securityDesc, TRUE, (PACL)NULL, FALSE)) {
                 /* Make the security attributes point to the security descriptor */
                 uprv_memset(&mappingAttributes, 0, sizeof(mappingAttributes));
 
         /* create an unnamed Windows file-mapping object for the specified file */
         map=CreateFileMapping(file, mappingAttributesPtr, PAGE_READONLY, 0, 0, NULL);
+#else
+        map = CreateFileMappingFromApp(file, NULL, PAGE_READONLY, 0, NULL);
+#endif
         CloseHandle(file);
         if(map==NULL) {
             return FALSE;
index d29e88f2786a4d6d93d46109fd5516a8b2fca72e..8e1f6e934a418bd94f41484656dcded686031452 100644 (file)
@@ -86,7 +86,9 @@ U_NAMESPACE_END
 //                Original plan was to use gcc atomics for MinGW, but they
 //                aren't supported, so we fold MinGW into this path.
 
+#ifndef WIN32_LEAN_AND_MEAN
 # define WIN32_LEAN_AND_MEAN
+#endif
 # define VC_EXTRALEAN
 # define NOUSER
 # define NOSERVICE
@@ -331,7 +333,9 @@ U_NAMESPACE_END
  *         win32 APIs for Critical Sections.
  */
 
+#ifndef WIN32_LEAN_AND_MEAN
 # define WIN32_LEAN_AND_MEAN
+#endif
 # define VC_EXTRALEAN
 # define NOUSER
 # define NOSERVICE
index 76f01402e7b31e5ee866f05c3ed43d4a958e5c1c..7a4e1a2f48760d7228cb067dd3f5b9f81f487f31 100644 (file)
@@ -607,6 +607,10 @@ public:
      * @return the new position
      * @stable ICU 2.0
      */
+#ifdef move32
+     // One of the system headers right now is sometimes defining a conflicting macro we don't use
+#undef move32
+#endif
     virtual int32_t      move32(int32_t delta, EOrigin origin) = 0;
 
     /**
index 41b363093cc1c2d2371d07023193a3fab6c6a846..3eefe8d47ad6bda2445504bfb4dc2323ecc08243 100644 (file)
 #   define U_PLATFORM_HAS_WIN32_API 0
 #endif
 
+/**
+ * \def U_PLATFORM_HAS_WINUWP_API
+ * Defines whether target is intended for Universal Windows Platform API
+ * Set to 1 for Windows10 Release Solution Configuration
+ * @internal
+ */
+#ifdef U_PLATFORM_HAS_WINUWP_API
+    /* Use the predefined value. */
+#else
+#   define U_PLATFORM_HAS_WINUWP_API 0
+#endif
+
 /**
  * \def U_PLATFORM_IMPLEMENTS_POSIX
  * Defines whether the platform implements (most of) the POSIX API.
index 21c9315414132a0593e2ba5827ab98c7e4b401e6..efcd263f8bcc90ea6a78b9e6c1f7651be621a64b 100644 (file)
@@ -334,6 +334,10 @@ public:
    * @return the new position
    * @stable ICU 2.0
    */
+#ifdef move32
+   // One of the system headers right now is sometimes defining a conflicting macro we don't use
+#undef move32
+#endif
   virtual int32_t      move32(int32_t delta, EOrigin origin);
 
   /**
index c0a53daa2556867a6cd87c037628072fa220f523..f330aa4d56c94f22174768e2ddf1c02a79372dfa 100644 (file)
@@ -539,6 +539,9 @@ uloc_getISO3Country(const char* localeID);
  * Gets the Win32 LCID value for the specified locale.
  * If the ICU locale is not recognized by Windows, 0 will be returned.
  *
+ * LCIDs were deprecated with Windows Vista and Microsoft recommends
+ * that developers use BCP47 style tags instead (uloc_toLanguageTag).
+ *
  * @param localeID the locale to get the Win32 LCID value with
  * @return country the Win32 LCID for localeID
  * @stable ICU 2.0
index 4479ea9ff1cf0961eef89772d5de94599d2f149e..cae59ad880c411300a2ef2fdb216912ca6f9a042 100644 (file)
  *  This value will change in the subsequent releases of ICU
  *  @stable ICU 2.6
  */
+#if U_PLATFORM_HAS_WINUWP_API == 0
 #define U_ICU_VERSION_SHORT "59"
+#else
+// U_DISABLE_RENAMING does not impact dat file name
+#define U_ICU_VERSION_SHORT
+#endif /* U_PLATFORM_HAS_WINUWP_API == 0 */
 
 #ifndef U_HIDE_INTERNAL_API
 /** Data version in ICU4C.
index 397e430f730409c365caf0f3910430575c7aaed7..34276eb738889e2ed27a0966e4232b16152a128a 100644 (file)
@@ -14,7 +14,8 @@
 #include "unicode/utypes.h"
 
 // This file contains only desktop Windows behavior
-#if U_PLATFORM_HAS_WIN32_API
+// Windows UWP calls Windows::Globalization directly, so this isn't needed there.
+#if U_PLATFORM_HAS_WIN32_API && (U_PLATFORM_HAS_WINUWP_API == 0)
 
 #include "wintz.h"
 #include "cmemory.h"
@@ -23,7 +24,9 @@
 #include "unicode/ures.h"
 #include "unicode/ustring.h"
 
+#ifndef WIN32_LEAN_AND_MEAN
 #   define WIN32_LEAN_AND_MEAN
+#endif
 #   define VC_EXTRALEAN
 #   define NOUSER
 #   define NOSERVICE
@@ -378,4 +381,4 @@ uprv_detectWindowsTimeZone()
     return icuid;
 }
 
-#endif /* U_PLATFORM_HAS_WIN32_API */
+#endif /* U_PLATFORM_HAS_WIN32_API && (U_PLATFORM_HAS_WINUWP_API == 0) */
index 242e7d95e79f2f5d954678ca19323c48d62c0c61..69da7f397c39b479f99ed9d96bb967cc50a1cc9f 100644 (file)
@@ -16,7 +16,9 @@
 
 #include "unicode/utypes.h"
 
-#if U_PLATFORM_HAS_WIN32_API
+// This file contains only desktop windows behavior
+// Windows UWP calls Windows::Globalization directly, so this isn't needed there.
+#if U_PLATFORM_HAS_WIN32_API && (U_PLATFORM_HAS_WINUWP_API == 0)
 
 /**
  * \file 
@@ -31,6 +33,6 @@ U_CDECL_END
 U_CFUNC const char* U_EXPORT2
 uprv_detectWindowsTimeZone();
 
-#endif /* U_PLATFORM_HAS_WIN32_API */
+#endif /* U_PLATFORM_HAS_WIN32_API && (U_PLATFORM_HAS_WINUWP_API == 0) */
 
 #endif /* __WINTZ */
index f22918e97c0b94be727c14d450cd3164c0762b1d..65c2e76cf856bad9b4481a49f6a477af41081e7b 100644 (file)
@@ -14,6 +14,9 @@
 # Keep the following in sync with the version - see common/unicode/uvernum.h
 U_ICUDATA_NAME=icudt59
 ##############################################################################
+!IF "$(UWP)" == "UWP"
+U_ICUDATA_NAME=icudt
+!ENDIF
 U_ICUDATA_ENDIAN_SUFFIX=l
 UNICODE_VERSION=9.0
 ICU_LIB_TARGET=$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll
@@ -119,10 +122,14 @@ ICUDATA=$(ICUP)\source\data
 #      This is the same place that all of the other ICU DLLs go (the code-containing DLLs)
 #      The lib file for the data DLL goes in $(DLL_OUTPUT)/../lib/
 #
-!IF "$(CFG)" == "x64\Release" || "$(CFG)" == "x64\Debug"
-DLL_OUTPUT=$(ICUP)\bin64
+!IF "$(CFG)" == "ARM\Release" || "$(CFG)" == "ARM\Debug"
+DLL_OUTPUT=$(ICUP)\binARM$(UWP)
+!ELSE IF "$(CFG)" == "x64\Release" || "$(CFG)" == "x64\Debug"
+DLL_OUTPUT=$(ICUP)\bin64$(UWP)
+!ELSE IF "$(UWP)" == "UWP"
+DLL_OUTPUT=$(ICUP)\bin32$(UWP)
 !ELSE
-DLL_OUTPUT=$(ICUP)\bin
+DLL_OUTPUT=$(ICUP)\bin$(UWP)
 !ENDIF
 
 #
@@ -147,14 +154,28 @@ TESTDATABLD=$(ICUP)\source\test\testdata\out\build
 #       Directory under which all of the ICU data building tools live.
 #
 ICUTOOLS=$(ICUP)\source\tools
+!MESSAGE ICU tools path is $(ICUTOOLS)
+
+#
+#  TOOLS CFG PATH
+#      ARM needs to use one of the other tools, so make sure to get an usable cfg path
+#      Since tools, particularly pkggen, have architecture built-in, we made x64 on
+#      Windows be machine-independent and use those tools.
+#
+CFGTOOLS=$(CFG)
+!IF "$(CFG)" == "ARM\Release" || "$(CFG)" == "ARM\Debug"
+CFGTOOLS=x64\Release
+!ENDIF
+!MESSAGE ICU tools CFG subpath is $(CFGTOOLS)
 
 # The current ICU tools need to be in the path first.
-!IF "$(CFG)" == "x64\Release" || "$(CFG)" == "x64\Debug"
-PATH = $(ICUP)\bin64;$(PATH)
-ICUPBIN=$(ICUP)\bin64
-!ELSE
+# x86 uses x86, x64 and arm use x64
+!IF "$(CFG)" == "x86\Release" || "$(CFG)" == "x86\Debug"
 PATH = $(ICUP)\bin;$(PATH)
 ICUPBIN=$(ICUP)\bin
+!ELSE
+PATH = $(ICUP)\bin64;$(PATH)
+ICUPBIN=$(ICUP)\bin64
 !ENDIF
 
 
@@ -492,6 +513,12 @@ SPREP_FILES = $(SPREP_SOURCE:.txt=.spp)
 # Common defines for both ways of building ICU's data library.
 COMMON_ICUDATA_DEPENDENCIES="$(ICUPBIN)\pkgdata.exe" "$(ICUTMP)\icudata.res" "$(ICUP)\source\stubdata\stubdatabuilt.txt"
 COMMON_ICUDATA_ARGUMENTS=-f -e $(U_ICUDATA_NAME) -v $(ICU_PACKAGE_MODE) -c -p $(ICUPKG) -T "$(ICUTMP)" -L $(U_ICUDATA_NAME) -d "$(ICUBLD_PKG)" -s .
+!IF "$(UWP)" == "UWP"
+COMMON_ICUDATA_ARGUMENTS=$(COMMON_ICUDATA_ARGUMENTS) -u
+!IF "$(CFG)" == "ARM\Release" || "$(CFG)" == "ARM\Debug"
+COMMON_ICUDATA_ARGUMENTS=$(COMMON_ICUDATA_ARGUMENTS) -a
+!ENDIF
+!ENDIF
 
 #############################################################################
 #
@@ -505,6 +532,11 @@ COMMON_ICUDATA_ARGUMENTS=-f -e $(U_ICUDATA_NAME) -v $(ICU_PACKAGE_MODE) -c -p $(
 ALL : GODATA "$(ICU_LIB_TARGET)" "$(TESTDATAOUT)\testdata.dat"
        @echo All targets are up to date
 
+!IF "$(UWP)" == "UWP"
+       @if not exist "$(ICUMAKE)\..\..\commondata\" mkdir "$(ICUMAKE)\..\..\commondata\"
+    copy "$(ICUOUT)\$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX).dat" "$(ICUMAKE)\..\..\commondata\"
+!ENDIF
+
 # The core Unicode properties files (uprops.icu, ucase.icu, ubidi.icu)
 # are hardcoded in the common DLL and therefore not included in the data package any more.
 # They are not built by default but need to be built for ICU4J data and for getting the .c source files
@@ -556,9 +588,9 @@ DEBUGUTILITIESDATA_DIR=main\tests\core\src\com\ibm\icu\dev\test\util
 DEBUGUTILITIESDATA_SRC=DebugUtilitiesData.java
 
 # Build DebugUtilitiesData.java
-"$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)\$(DEBUGUTILITIESDATA_SRC)" : {"$(ICUTOOLS)\gentest\$(CFG)"}gentest.exe
+"$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)\$(DEBUGUTILITIESDATA_SRC)" : {"$(ICUTOOLS)\gentest\$(CFGTOOLS)"}gentest.exe
        if not exist "$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)" mkdir "$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)"
-       "$(ICUTOOLS)\gentest\$(CFG)\gentest" -j -d"$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)"
+       "$(ICUTOOLS)\gentest\$(CFGTOOLS)\gentest" -j -d"$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)"
 
 ICU4J_DATA="$(ICUOUT)\icu4j\icudata.jar" "$(ICUOUT)\icu4j\testdata.jar"  "$(ICUOUT)\icu4j\src\$(DEBUGUTILITIESDATA_DIR)\$(DEBUGUTILITIESDATA_SRC)"
 
@@ -602,10 +634,10 @@ icu4j-data-install :
 #
 # testdata - nmake will invoke pkgdata, which will create testdata.dat
 #
-"$(TESTDATAOUT)\testdata.dat": "$(TESTDATA)\*" "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu" $(TRANSLIT_RES_FILES) $(MISC_FILES) $(RB_FILES) {"$(ICUTOOLS)\genrb\$(CFG)"}genrb.exe
+"$(TESTDATAOUT)\testdata.dat": "$(TESTDATA)\*" "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu" $(TRANSLIT_RES_FILES) $(MISC_FILES) $(RB_FILES) {"$(ICUTOOLS)\genrb\$(CFGTOOLS)"}genrb.exe
        @cd "$(TESTDATA)"
        @echo building testdata...
-       nmake /nologo /f "$(TESTDATA)\testdata.mak" TESTDATA=. ICUTOOLS="$(ICUTOOLS)" ICUPBIN="$(ICUPBIN)" ICUP="$(ICUP)" CFG=$(CFG) TESTDATAOUT="$(TESTDATAOUT)" TESTDATABLD="$(TESTDATABLD)"
+       nmake /nologo /f "$(TESTDATA)\testdata.mak" TESTDATA=. ICUTOOLS="$(ICUTOOLS)" ICUPBIN="$(ICUPBIN)" ICUP="$(ICUP)" CFG=$(CFGTOOLS) TESTDATAOUT="$(TESTDATAOUT)" TESTDATABLD="$(TESTDATABLD)"
 
 #invoke pkgdata for ICU common data
 #  pkgdata will drop all output files (.dat, .dll, .lib) into the target (ICUBLD_PKG) directory.
@@ -669,6 +701,7 @@ $(SPREP_FILES:.spp=.spp
 )
 <<KEEP
        -@erase "$(ICU_LIB_TARGET)"
+    @if not exist "$(DLL_OUTPUT)" mkdir "$(DLL_OUTPUT)"
        copy "$(U_ICUDATA_NAME).dll" "$(ICU_LIB_TARGET)"
        -@erase "$(U_ICUDATA_NAME).dll"
        copy "$(ICUTMP)\$(ICUPKG).dat" "$(ICUOUT)\$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX).dat"
@@ -757,40 +790,40 @@ CLEAN : GODATA
 # RBBI .brk file generation.
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\rules}.txt.brk:
        @echo Creating $@
-       @"$(ICUTOOLS)\genbrk\$(CFG)\genbrk" -c -r $< -o $@ -d"$(ICUBLD_PKG)" -i "$(ICUBLD_PKG)"
+       @"$(ICUTOOLS)\genbrk\$(CFGTOOLS)\genbrk" -c -r $< -o $@ -d"$(ICUBLD_PKG)" -i "$(ICUBLD_PKG)"
 
 #RBBI .dict file generation.
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries}.txt.dict:
     @echo Creating $@
-    @"$(ICUTOOLS)\gendict\$(CFG)\gendict" -c --uchars $<  "$(ICUBLD_PKG)\$@"
+    @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --uchars $<  "$(ICUBLD_PKG)\$@"
 
 $(ICUBRK)\thaidict.dict:
        @echo Creating $(ICUBRK)\thaidict.dict
-       @"$(ICUTOOLS)\gendict\$(CFG)\gendict" -c --bytes --transform offset-0x0e00 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\thaidict.txt "$(ICUBLD_PKG)\$(ICUBRK)\thaidict.dict"
+       @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --bytes --transform offset-0x0e00 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\thaidict.txt "$(ICUBLD_PKG)\$(ICUBRK)\thaidict.dict"
 
 $(ICUBRK)\laodict.dict:
        @echo Creating $(ICUBRK)\laodict.dict
-       @"$(ICUTOOLS)\gendict\$(CFG)\gendict" -c --bytes --transform offset-0x0e80 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\laodict.txt "$(ICUBLD_PKG)\$(ICUBRK)\laodict.dict"
+       @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --bytes --transform offset-0x0e80 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\laodict.txt "$(ICUBLD_PKG)\$(ICUBRK)\laodict.dict"
 
 $(ICUBRK)\burmesedict.dict:
        @echo Creating $(ICUBRK)\burmesedict.dict
-       @"$(ICUTOOLS)\gendict\$(CFG)\gendict" -c --bytes --transform offset-0x1000 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\burmesedict.txt "$(ICUBLD_PKG)\$(ICUBRK)\burmesedict.dict"
+       @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --bytes --transform offset-0x1000 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\burmesedict.txt "$(ICUBLD_PKG)\$(ICUBRK)\burmesedict.dict"
 
 $(ICUBRK)\khmerdict.dict:
        @echo Creating $(ICUBRK)\khmerdict.dict
-       @"$(ICUTOOLS)\gendict\$(CFG)\gendict" -c --bytes --transform offset-0x1780 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\khmerdict.txt "$(ICUBLD_PKG)\$(ICUBRK)\khmerdict.dict"
+       @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --bytes --transform offset-0x1780 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\khmerdict.txt "$(ICUBLD_PKG)\$(ICUBRK)\khmerdict.dict"
 
 !IFNDEF ICUDATA_SOURCE_ARCHIVE
 # Rule for creating converters
 $(CNV_FILES): $(UCM_SOURCE)
        @echo Building Charset Conversion table $(@B)
-       @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -c -d"$(ICUBLD_PKG)" $(ICUSRCDATA_RELATIVE_PATH)\$(ICUUCM)\$(@B).ucm
+       @"$(ICUTOOLS)\makeconv\$(CFGTOOLS)\makeconv" -c -d"$(ICUBLD_PKG)" $(ICUSRCDATA_RELATIVE_PATH)\$(ICUUCM)\$(@B).ucm
 !ENDIF
 
 !IFDEF BUILD_SPECIAL_CNV_FILES
 $(CNV_FILES_SPECIAL): $(UCM_SOURCE_SPECIAL)
        @echo Building Special Charset Conversion table $(@B)
-       @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -c --ignore-siso-check -d"$(ICUBLD_PKG)" $(ICUSRCDATA_RELATIVE_PATH)\$(ICUUCM)\$(@B).ucm
+       @"$(ICUTOOLS)\makeconv\$(CFGTOOLS)\makeconv" -c --ignore-siso-check -d"$(ICUBLD_PKG)" $(ICUSRCDATA_RELATIVE_PATH)\$(ICUUCM)\$(@B).ucm
 !ENDIF
 
 # Batch inference rule for creating miscellaneous resource files
@@ -800,12 +833,12 @@ $(CNV_FILES_SPECIAL): $(UCM_SOURCE_SPECIAL)
 #       way, remove the -q.
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICUMISC2)}.txt.res::
        @echo Making Miscellaneous Resource Bundle files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -q -d"$(ICUBLD_PKG)" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -q -d"$(ICUBLD_PKG)" $<
 
 # Inference rule for creating resource bundle files
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICULOC)}.txt.res::
        @echo Making Locale Resource Bundle files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\$(ICULOC) -k -d"$(ICUBLD_PKG)" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\$(ICULOC) -k -d"$(ICUBLD_PKG)" $<
 
 # copy the locales/pool.res file from the source folder to the build output folder
 # and swap it to native endianness
@@ -822,12 +855,12 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)" .\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)" .\res_index.txt
        
 
 {$(ICUSRCDATA_RELATIVE_PATH)\curr}.txt{curr}.res::
        @echo Making currency display name files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\curr -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\curr" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\curr -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\curr" $<
 
 # copy the curr/pool.res file from the source folder to the build output folder
 # and swap it to native endianness
@@ -844,12 +877,12 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)\curr" .\curr\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\curr" .\curr\res_index.txt
 
 
 {$(ICUSRCDATA_RELATIVE_PATH)\lang}.txt{lang}.res::
        @echo Making language/script display name files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\lang -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\lang" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\lang -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\lang" $<
 
 # copy the lang/pool.res file from the source folder to the build output folder
 # and swap it to native endianness
@@ -866,12 +899,12 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)\lang" .\lang\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\lang" .\lang\res_index.txt
 
 
 {$(ICUSRCDATA_RELATIVE_PATH)\region}.txt{region}.res::
        @echo Making region display name files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\region -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\region" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\region -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\region" $<
 
 # copy the region/pool.res file from the source folder to the build output folder
 # and swap it to native endianness
@@ -888,12 +921,12 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)\region" .\region\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\region" .\region\res_index.txt
 
 
 {$(ICUSRCDATA_RELATIVE_PATH)\zone}.txt{zone}.res::
        @echo Making time zone display name files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\zone -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\zone" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\zone -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\zone" $<
 
 # copy the zone/pool.res file from the source folder to the build output folder
 # and swap it to native endianness
@@ -910,12 +943,12 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)\zone" .\zone\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\zone" .\zone\res_index.txt
 
 
 {$(ICUSRCDATA_RELATIVE_PATH)\unit}.txt{unit}.res::
        @echo Making unit display name files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\unit -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\unit" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\unit -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\unit" $<
 
 # copy the unit/pool.res file from the source folder to the build output folder
 # and swap it to native endianness
@@ -932,12 +965,12 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)\unit" .\unit\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\unit" .\unit\res_index.txt
 
 
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICUCOL)}.txt{$(ICUCOL)}.res::
        @echo Making Collation files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUCOL)" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUCOL)" $<
 
 $(ICUCOL)\res_index.res:
        @echo Generating <<$(ICUCOL)\res_index.txt
@@ -949,11 +982,11 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)\$(ICUCOL)" .\$(ICUCOL)\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\$(ICUCOL)" .\$(ICUCOL)\res_index.txt
 
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICURBNF)}.txt{$(ICURBNF)}.res::
        @echo Making RBNF files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICURBNF)" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICURBNF)" $<
 
 $(ICURBNF)\res_index.res:
        @echo Generating <<$(ICURBNF)\res_index.txt
@@ -965,7 +998,7 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)\$(ICURBNF)" .\$(ICURBNF)\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\$(ICURBNF)" .\$(ICURBNF)\res_index.txt
 
 $(ICUBRK)\res_index.res:
        @echo Generating <<$(ICUBRK)\res_index.txt
@@ -977,15 +1010,15 @@ res_index:table(nofallback) {
     }
 }
 <<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -d"$(ICUBLD_PKG)\$(ICUBRK)" .\$(ICUBRK)\res_index.txt
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\$(ICUBRK)" .\$(ICUBRK)\res_index.txt
 
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)}.txt{$(ICUBRK)}.res::
        @echo Making Break Iterator Resource files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUBRK)" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUBRK)" $<
 
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICUTRNS)}.txt{$(ICUTRNS)}.res::
        @echo Making Transliterator files
-       @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUTRNS)" $<
+       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUTRNS)" $<
 
 
 # DLL version information
@@ -995,9 +1028,9 @@ res_index:table(nofallback) {
        @rc.exe /i "..\..\..\..\common" /r /fo $@ $**
 
 # Targets for converters
-"$(ICUBLD_PKG)\cnvalias.icu" : {"$(ICUSRCDATA)\$(ICUUCM)"}\convrtrs.txt "$(ICUTOOLS)\gencnval\$(CFG)\gencnval.exe"
+"$(ICUBLD_PKG)\cnvalias.icu" : {"$(ICUSRCDATA)\$(ICUUCM)"}\convrtrs.txt "$(ICUTOOLS)\gencnval\$(CFGTOOLS)\gencnval.exe"
        @echo Creating data file for Converter Aliases
-       @"$(ICUTOOLS)\gencnval\$(CFG)\gencnval" -d "$(ICUBLD_PKG)" "$(ICUSRCDATA)\$(ICUUCM)\convrtrs.txt"
+       @"$(ICUTOOLS)\gencnval\$(CFGTOOLS)\gencnval" -d "$(ICUBLD_PKG)" "$(ICUSRCDATA)\$(ICUUCM)\convrtrs.txt"
 
 # Targets for prebuilt Unicode data
 "$(ICUBLD_PKG)\pnames.icu": $(ICUSRCDATA_RELATIVE_PATH)\in\pnames.icu
@@ -1033,32 +1066,32 @@ res_index:table(nofallback) {
 # Stringprep .spp file generation.
 {$(ICUSRCDATA_RELATIVE_PATH)\$(ICUSPREP)}.txt.spp:
        @echo Creating $@
-       @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s $(<D) -d "$(ICUBLD_PKG)" -b $(@B) -m "$(ICUUNIDATA)" -u 3.2.0 $(<F)
+       @"$(ICUTOOLS)\gensprep\$(CFGTOOLS)\gensprep" -s $(<D) -d "$(ICUBLD_PKG)" -b $(@B) -m "$(ICUUNIDATA)" -u 3.2.0 $(<F)
 
 # Confusables .cfu file generation
 #     Can't use an inference rule because two .txt source files combine to produce a single .cfu output file
-"$(ICUBLD_PKG)\confusables.cfu": "$(ICUUNIDATA)\confusables.txt" "$(ICUUNIDATA)\confusablesWholeScript.txt" "$(ICUTOOLS)\gencfu\$(CFG)\gencfu.exe"
+"$(ICUBLD_PKG)\confusables.cfu": "$(ICUUNIDATA)\confusables.txt" "$(ICUUNIDATA)\confusablesWholeScript.txt" "$(ICUTOOLS)\gencfu\$(CFGTOOLS)\gencfu.exe"
        @echo Creating $@
-       @"$(ICUTOOLS)\gencfu\$(CFG)\gencfu" -c -r "$(ICUUNIDATA)\confusables.txt" -w "$(ICUUNIDATA)\confusablesWholeScript.txt" -o $@ -i "$(ICUBLD_PKG)"
+       @"$(ICUTOOLS)\gencfu\$(CFGTOOLS)\gencfu" -c -r "$(ICUUNIDATA)\confusables.txt" -w "$(ICUUNIDATA)\confusablesWholeScript.txt" -o $@ -i "$(ICUBLD_PKG)"
 
 !IFDEF ICUDATA_ARCHIVE
-"$(ICUDATA_SOURCE_ARCHIVE)": CREATE_DIRS $(ICUDATA_ARCHIVE) "$(ICUTOOLS)\icupkg\$(CFG)\icupkg.exe"
-       "$(ICUTOOLS)\icupkg\$(CFG)\icupkg" -t$(U_ICUDATA_ENDIAN_SUFFIX) "$(ICUDATA_ARCHIVE)" "$(ICUDATA_SOURCE_ARCHIVE)"
+"$(ICUDATA_SOURCE_ARCHIVE)": CREATE_DIRS $(ICUDATA_ARCHIVE) "$(ICUTOOLS)\icupkg\$(CFGTOOLS)\icupkg.exe"
+       "$(ICUTOOLS)\icupkg\$(CFGTOOLS)\icupkg" -t$(U_ICUDATA_ENDIAN_SUFFIX) "$(ICUDATA_ARCHIVE)" "$(ICUDATA_SOURCE_ARCHIVE)"
 !ENDIF
 
 # Dependencies on the tools for the batch inference rules
 
 !IFNDEF ICUDATA_SOURCE_ARCHIVE
-$(UCM_SOURCE) : {"$(ICUTOOLS)\makeconv\$(CFG)"}makeconv.exe
+$(UCM_SOURCE) : {"$(ICUTOOLS)\makeconv\$(CFGTOOLS)"}makeconv.exe
 
 !IFDEF BUILD_SPECIAL_CNV_FILES
-$(UCM_SOURCE_SPECIAL): {"$(ICUTOOLS)\makeconv\$(CFG)"}makeconv.exe
+$(UCM_SOURCE_SPECIAL): {"$(ICUTOOLS)\makeconv\$(CFGTOOLS)"}makeconv.exe
 !ENDIF
 
 # This used to depend on "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" "$(ICUBLD_PKG)\ubidi.icu"
 # This data is now hard coded as a part of the library.
 # See Jitterbug 4497 for details.
-$(MISC_SOURCE) $(RB_FILES) $(CURR_FILES) $(LANG_FILES) $(REGION_FILES) $(ZONE_FILES) $(UNIT_FILES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(BRK_RES_FILES) $(TRANSLIT_RES_FILES): {"$(ICUTOOLS)\genrb\$(CFG)"}genrb.exe "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu"
+$(MISC_SOURCE) $(RB_FILES) $(CURR_FILES) $(LANG_FILES) $(REGION_FILES) $(ZONE_FILES) $(UNIT_FILES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(BRK_RES_FILES) $(TRANSLIT_RES_FILES): {"$(ICUTOOLS)\genrb\$(CFGTOOLS)"}genrb.exe "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu"
 
 # This used to depend on "$(ICUBLD_PKG)\pnames.icu" "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" "$(ICUBLD_PKG)\ubidi.icu"
 # These are now hardcoded in ICU4C and only loaded in ICU4J.
index 529d481367e8ee297a210a0cf2de40494bea580d..1e93daeb256736cb091b58b5124d29184edc763b 100644 (file)
@@ -36,8 +36,8 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\Release\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\Release\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\data\tmp\x86\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\data\build\</IntDir>
     <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release</NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release clean all</NMakeReBuildCommandLine>
     <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release clean</NMakeCleanCommandLine>
@@ -47,8 +47,8 @@
     <NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
     <NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
     <NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\Debug\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\Debug\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\data\tmp\x86\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\data\build\</IntDir>
     <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug</NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug clean all</NMakeReBuildCommandLine>
     <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug clean</NMakeCleanCommandLine>
@@ -58,8 +58,8 @@
     <NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
     <NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
     <NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\data\tmp\x64\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\data\build\</IntDir>
     <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release</NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release clean all</NMakeReBuildCommandLine>
     <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release clean</NMakeCleanCommandLine>
@@ -69,8 +69,8 @@
     <NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
     <NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
     <NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\data\tmp\x64\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\data\build\</IntDir>
     <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug</NMakeBuildCommandLine>
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug clean all</NMakeReBuildCommandLine>
     <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug clean</NMakeCleanCommandLine>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/icu4c/source/data/makedata_uwp.vcxproj b/icu4c/source/data/makedata_uwp.vcxproj
new file mode 100644 (file)
index 0000000..68e24c5
--- /dev/null
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Arm">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B1D53358-37BD-48BC-B27C-68BAF1E78508}</ProjectGuid>
+    <Keyword>MakeFileProj</Keyword>
+    <DefaultLanguage>en-US</DefaultLanguage>
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+    <AppContainerApplication>true</AppContainerApplication>
+    <ApplicationType>Windows Store</ApplicationType>
+    <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
+    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
+    <ConfigurationType>Makefile</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\data\tmp\x86\</OutDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\data\tmp\x86\</OutDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\data\tmp\x64\</OutDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\data\tmp\x64\</OutDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">.\data\tmp\arm\</OutDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">.\data\tmp\arm\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\data\build\</IntDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\data\build\</IntDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\data\build\</IntDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\data\build\</IntDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">.\data\build\</IntDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">.\data\build\</IntDir>
+    <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release UWP=UWP</NMakeBuildCommandLine>
+    <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release UWP=UWP clean all</NMakeReBuildCommandLine>
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Release UWP=UWP clean</NMakeCleanCommandLine>
+    <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug UWP=UWP</NMakeBuildCommandLine>
+    <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug UWP=UWP clean all</NMakeReBuildCommandLine>
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x86\Debug UWP=UWP clean</NMakeCleanCommandLine>
+    <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release UWP=UWP</NMakeBuildCommandLine>
+    <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release UWP=UWP clean all</NMakeReBuildCommandLine>
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Release UWP=UWP clean</NMakeCleanCommandLine>
+    <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug UWP=UWP</NMakeBuildCommandLine>
+    <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug UWP=UWP clean all</NMakeReBuildCommandLine>
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=x64\Debug UWP=UWP clean</NMakeCleanCommandLine>
+    <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Release UWP=UWP</NMakeBuildCommandLine>
+    <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Release UWP=UWP clean all</NMakeReBuildCommandLine>
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Release UWP=UWP clean</NMakeCleanCommandLine>
+    <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Debug UWP=UWP</NMakeBuildCommandLine>
+    <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Debug UWP=UWP clean all</NMakeReBuildCommandLine>
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=ARM\Debug UWP=UWP clean</NMakeCleanCommandLine>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <BuildLog>
+      <Path>.\out\tmp\x86\ReleaseUWPBuildLog.html</Path>
+    </BuildLog>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <BuildLog>
+      <Path>.\out\tmp\x86\DebugUWPBuildLog.html</Path>
+    </BuildLog>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <BuildLog>
+      <Path>.\out\tmp\x64\ReleaseUWPBuildLog.html</Path>
+    </BuildLog>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <BuildLog>
+      <Path>.\out\tmp\x64\DebugUWPBuildLog.html</Path>
+    </BuildLog>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <BuildLog>
+      <Path>.\out\tmp\arm\ReleaseUWPBuildLog.html</Path>
+    </BuildLog>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <BuildLog>
+      <Path>.\out\tmp\arm\DebugUWPBuildLog.html</Path>
+    </BuildLog>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <None Include="brkitr\brkfiles.mk" />
+    <None Include="coll\colfiles.mk" />
+    <None Include="makedata.mak" />
+    <None Include="misc\miscfiles.mk" />
+    <None Include="rbnf\rbnffiles.mk" />
+    <None Include="locales\resfiles.mk" />
+    <None Include="..\test\testdata\testdata.mak" />
+    <None Include="translit\trnsfiles.mk" />
+    <None Include="..\test\testdata\tstfiles.mk" />
+    <None Include="mappings\ucmcore.mk" />
+    <None Include="mappings\ucmebcdic.mk" />
+    <None Include="mappings\ucmfiles.mk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include=".\makedata.vcxproj">
+      <Project>{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/icu4c/source/i18n/i18n_uwp.vcxproj b/icu4c/source/i18n/i18n_uwp.vcxproj
new file mode 100644 (file)
index 0000000..60bfd93
--- /dev/null
@@ -0,0 +1,1020 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{6786C051-383B-47E0-9E82-B8B994E06A25}</ProjectGuid>
+    <Keyword>DynamicLibrary</Keyword>
+    <DefaultLanguage>en-US</DefaultLanguage>
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+    <AppContainerApplication>true</AppContainerApplication>
+    <ApplicationType>Windows Store</ApplicationType>
+    <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
+    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\ReleaseUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\ReleaseUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\DebugUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\DebugUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\ReleaseUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\ReleaseUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\DebugUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\DebugUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">.\arm\ReleaseUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">.\arm\ReleaseUWP\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">.\arm\DebugUWP\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">.\arm\DebugUWP\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)'=='Release'">false</LinkIncremental>
+    <LinkIncremental Condition="'$(Configuration)'=='Debug'">true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <Midl>
+      <PreprocessorDefinitions>U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <!-- U_HIDE_DRAFT_API & U_HIDE_DEPRECATED_API -->
+      <PreprocessorDefinitions>U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;U_ATTRIBUTE_DEPRECATED=;_CRT_SECURE_NO_DEPRECATE;U_I18N_IMPLEMENTATION;U_PLATFORM_USES_ONLY_WIN32_API=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <ExceptionHandling>
+      </ExceptionHandling>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <CompileAs>Default</CompileAs>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <CompileAsWinRT>false</CompileAsWinRT>
+      <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+      <AdditionalIncludeDirectories>../common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <Link>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+      <RandomizedBaseAddress>true</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TurnOffAssemblyGeneration>true</TurnOffAssemblyGeneration>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <Optimization>Disabled</Optimization>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
+    <Midl>
+      <TargetEnvironment>Win32</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>WIN64;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='ARM'">
+    <Midl>
+      <TargetEnvironment>ARM</TargetEnvironment>
+    </Midl>
+    <ClCompile>
+      <PreprocessorDefinitions>ARM;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <TargetMachine>MachineARM</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Midl>
+      <TypeLibraryName>.\..\..\lib32uwp\icuin.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\x86\ReleaseUWP/i18n.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\x86\ReleaseUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\x86\ReleaseUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\x86\ReleaseUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\bin32uwp\icuin.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\lib32uwp\icuin.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\lib32uwp\icuin.lib</ImportLibrary>
+      <AdditionalDependencies>..\..\lib32uwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <TypeLibraryName>.\..\..\lib32uwp\icuind.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\x86\DebugUWP/i18n.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\x86\DebugUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\x86\DebugUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\x86\DebugUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\bin32uwp\icuind.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\lib32uwp\icuind.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\lib32uwp\icuind.lib</ImportLibrary>
+      <AdditionalDependencies>..\..\lib32uwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <TypeLibraryName>.\..\..\lib64uwp\icuin.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\x64\ReleaseUWP/i18n.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\x64\ReleaseUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\x64\ReleaseUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\x64\ReleaseUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\bin64uwp\icuin.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\lib64uwp\icuin.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\lib64uwp\icuin.lib</ImportLibrary>
+      <AdditionalDependencies>..\..\lib64uwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <TypeLibraryName>.\..\..\lib64uwp\icuind.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\x64\DebugUWP/i18n.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\x64\DebugUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\x64\DebugUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\x64\DebugUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\bin64uwp\icuind.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\lib64uwp\icuind.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\lib64uwp\icuind.lib</ImportLibrary>
+      <AdditionalDependencies>..\..\lib64uwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <Midl>
+      <TypeLibraryName>.\..\..\libARMuwp\icuin.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\ARM\ReleaseUWP/i18n.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\ARM\ReleaseUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\ARM\ReleaseUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\ARM\ReleaseUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\binARMuwp\icuin.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\libARMuwp\icuin.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\libARMuwp\icuin.lib</ImportLibrary>
+      <AdditionalDependencies>..\..\libARMuwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <Midl>
+      <TypeLibraryName>.\..\..\libARMuwp\icuind.tlb</TypeLibraryName>
+    </Midl>
+    <ClCompile>
+      <PrecompiledHeaderOutputFile>.\ARM\DebugUWP/i18n.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\ARM\DebugUWP/</AssemblerListingLocation>
+      <ObjectFileName>.\ARM\DebugUWP/</ObjectFileName>
+      <ProgramDataBaseFileName>.\ARM\DebugUWP/</ProgramDataBaseFileName>
+    </ClCompile>
+    <Link>
+      <OutputFile>..\..\binARMuwp\icuind.dll</OutputFile>
+      <ProgramDatabaseFile>.\..\..\libARMuwp\icuind.pdb</ProgramDatabaseFile>
+      <ImportLibrary>..\..\libARMuwp\icuind.lib</ImportLibrary>
+      <AdditionalDependencies>..\..\libARMuwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="region.cpp" />
+    <ClCompile Include="uregion.cpp" />
+    <ClCompile Include="alphaindex.cpp" />
+    <ClCompile Include="bocsu.cpp" />
+    <ClCompile Include="coleitr.cpp" />
+    <ClCompile Include="coll.cpp" />
+    <ClCompile Include="collation.cpp" />
+    <ClCompile Include="collationbuilder.cpp" />
+    <ClCompile Include="collationcompare.cpp" />
+    <ClCompile Include="collationdata.cpp" />
+    <ClCompile Include="collationdatabuilder.cpp" />
+    <ClCompile Include="collationdatareader.cpp" />
+    <ClCompile Include="collationdatawriter.cpp" />
+    <ClCompile Include="collationfastlatin.cpp" />
+    <ClCompile Include="collationfastlatinbuilder.cpp" />
+    <ClCompile Include="collationfcd.cpp" />
+    <ClCompile Include="collationiterator.cpp" />
+    <ClCompile Include="collationkeys.cpp" />
+    <ClCompile Include="collationroot.cpp" />
+    <ClCompile Include="collationrootelements.cpp" />
+    <ClCompile Include="collationruleparser.cpp" />
+    <ClCompile Include="collationsets.cpp" />
+    <ClCompile Include="collationsettings.cpp" />
+    <ClCompile Include="collationtailoring.cpp" />
+    <ClCompile Include="collationweights.cpp" />
+    <ClCompile Include="rulebasedcollator.cpp" />
+    <ClCompile Include="search.cpp" />
+    <ClCompile Include="sortkey.cpp" />
+    <ClCompile Include="stsearch.cpp" />
+    <ClCompile Include="tzfmt.cpp" />
+    <ClCompile Include="tzgnames.cpp" />
+    <ClCompile Include="tznames.cpp" />
+    <ClCompile Include="tznames_impl.cpp" />
+    <ClCompile Include="ucol.cpp" />
+    <ClCompile Include="ucol_res.cpp" />
+    <ClCompile Include="ucol_sit.cpp" />
+    <ClCompile Include="ucoleitr.cpp" />
+    <ClCompile Include="affixpatternparser.cpp" />
+    <ClCompile Include="decimfmtimpl.cpp" />
+    <ClCompile Include="digitaffix.cpp" />
+    <ClCompile Include="digitaffixesandpadding.cpp" />
+    <ClCompile Include="digitformatter.cpp" />
+    <ClCompile Include="digitgrouping.cpp" />
+    <ClCompile Include="digitinterval.cpp" />
+    <ClCompile Include="pluralaffix.cpp" />
+    <ClCompile Include="precision.cpp" />
+    <ClCompile Include="smallintformatter.cpp" />
+    <ClCompile Include="valueformatter.cpp" />
+    <ClCompile Include="visibledigits.cpp" />
+    <ClCompile Include="uitercollationiterator.cpp" />
+    <ClCompile Include="usearch.cpp" />
+    <ClCompile Include="astro.cpp" />
+    <ClCompile Include="basictz.cpp" />
+    <ClCompile Include="buddhcal.cpp" />
+    <ClCompile Include="calendar.cpp" />
+    <ClCompile Include="cecal.cpp" />
+    <ClCompile Include="chnsecal.cpp" />
+    <ClCompile Include="choicfmt.cpp" />
+    <ClCompile Include="compactdecimalformat.cpp" />
+    <ClCompile Include="coptccal.cpp" />
+    <ClCompile Include="curramt.cpp" />
+    <ClCompile Include="currfmt.cpp" />
+    <ClCompile Include="currpinf.cpp" />
+    <ClCompile Include="currunit.cpp" />
+    <ClCompile Include="dangical.cpp" />
+    <ClCompile Include="datefmt.cpp" />
+    <ClCompile Include="dayperiodrules.cpp" />
+    <ClCompile Include="dcfmtsym.cpp" />
+    <ClCompile Include="decContext.cpp" />
+    <ClCompile Include="decfmtst.cpp" />
+    <ClCompile Include="decimalformatpattern.cpp" />
+    <ClCompile Include="decimfmt.cpp" />
+    <ClCompile Include="decNumber.cpp" />
+    <ClCompile Include="digitlst.cpp" />
+    <ClCompile Include="dtfmtsym.cpp" />
+    <ClCompile Include="dtitvfmt.cpp" />
+    <ClCompile Include="dtitvinf.cpp" />
+    <ClCompile Include="dtptngen.cpp" />
+    <ClCompile Include="dtrule.cpp" />
+    <ClCompile Include="ethpccal.cpp" />
+    <ClCompile Include="fmtable.cpp" />
+    <ClCompile Include="fmtable_cnv.cpp" />
+    <ClCompile Include="format.cpp" />
+    <ClCompile Include="fphdlimp.cpp" />
+    <ClCompile Include="fpositer.cpp" />
+    <ClCompile Include="gender.cpp" />
+    <ClCompile Include="gregocal.cpp" />
+    <ClCompile Include="gregoimp.cpp" />
+    <ClCompile Include="hebrwcal.cpp" />
+    <ClCompile Include="indiancal.cpp" />
+    <ClCompile Include="islamcal.cpp" />
+    <ClCompile Include="japancal.cpp" />
+    <ClCompile Include="measfmt.cpp" />
+    <ClCompile Include="measunit.cpp" />
+    <ClCompile Include="measure.cpp" />
+    <ClCompile Include="msgfmt.cpp" />
+    <ClCompile Include="nfrs.cpp" />
+    <ClCompile Include="nfrule.cpp" />
+    <ClCompile Include="nfsubs.cpp" />
+    <ClCompile Include="numfmt.cpp" />
+    <ClCompile Include="numsys.cpp" />
+    <ClCompile Include="olsontz.cpp" />
+    <ClCompile Include="persncal.cpp" />
+    <ClCompile Include="plurfmt.cpp" />
+    <ClCompile Include="plurrule.cpp" />
+    <ClCompile Include="quantityformatter.cpp" />
+    <ClCompile Include="rbnf.cpp" />
+    <ClCompile Include="rbtz.cpp" />
+    <ClCompile Include="reldatefmt.cpp">
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+    </ClCompile>
+    <ClCompile Include="reldtfmt.cpp" />
+    <ClCompile Include="scientificnumberformatter.cpp" />
+    <ClCompile Include="sharedbreakiterator.cpp" />
+    <ClCompile Include="selfmt.cpp" />
+    <ClCompile Include="simpletz.cpp" />
+    <ClCompile Include="scriptset.cpp" />
+    <ClCompile Include="smpdtfmt.cpp" />
+    <ClCompile Include="smpdtfst.cpp" />
+    <ClCompile Include="standardplural.cpp" />
+    <ClCompile Include="taiwncal.cpp" />
+    <ClCompile Include="timezone.cpp" />
+    <ClCompile Include="tmunit.cpp" />
+    <ClCompile Include="tmutamt.cpp" />
+    <ClCompile Include="tmutfmt.cpp" />
+    <ClCompile Include="tzrule.cpp" />
+    <ClCompile Include="tztrans.cpp" />
+    <ClCompile Include="ucal.cpp" />
+    <ClCompile Include="udat.cpp" />
+    <ClCompile Include="udateintervalformat.cpp" />
+    <ClCompile Include="udatpg.cpp" />
+    <ClCompile Include="ufieldpositer.cpp" />
+    <ClCompile Include="ulocdata.cpp" />
+    <ClCompile Include="umsg.cpp" />
+    <ClCompile Include="unum.cpp" />
+    <ClCompile Include="unumsys.cpp" />
+    <ClCompile Include="upluralrules.cpp" />
+    <ClCompile Include="utf16collationiterator.cpp" />
+    <ClCompile Include="utf8collationiterator.cpp" />
+    <ClCompile Include="utmscale.cpp" />
+    <ClCompile Include="vtzone.cpp" />
+    <ClCompile Include="vzone.cpp" />
+    <ClCompile Include="windtfmt.cpp">
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+    </ClCompile>
+    <ClCompile Include="winnmfmt.cpp">
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+    </ClCompile>
+    <ClCompile Include="wintzimpl.cpp">
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+    </ClCompile>
+    <ClCompile Include="zonemeta.cpp" />
+    <ClCompile Include="zrule.cpp" />
+    <ClCompile Include="ztrans.cpp" />
+    <ClCompile Include="ucln_in.cpp">
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+    </ClCompile>
+    <ClCompile Include="regexcmp.cpp" />
+    <ClCompile Include="regeximp.cpp" />
+    <ClCompile Include="regexst.cpp" />
+    <ClCompile Include="regextxt.cpp" />
+    <ClCompile Include="rematch.cpp" />
+    <ClCompile Include="repattrn.cpp" />
+    <ClCompile Include="uregex.cpp" />
+    <ClCompile Include="uregexc.cpp" />
+    <ClCompile Include="anytrans.cpp" />
+    <ClCompile Include="brktrans.cpp" />
+    <ClCompile Include="casetrn.cpp" />
+    <ClCompile Include="cpdtrans.cpp" />
+    <ClCompile Include="esctrn.cpp" />
+    <ClCompile Include="funcrepl.cpp" />
+    <ClCompile Include="name2uni.cpp" />
+    <ClCompile Include="nortrans.cpp" />
+    <ClCompile Include="nultrans.cpp" />
+    <ClCompile Include="quant.cpp" />
+    <ClCompile Include="rbt.cpp" />
+    <ClCompile Include="rbt_data.cpp" />
+    <ClCompile Include="rbt_pars.cpp" />
+    <ClCompile Include="rbt_rule.cpp" />
+    <ClCompile Include="rbt_set.cpp" />
+    <ClCompile Include="remtrans.cpp" />
+    <ClCompile Include="strmatch.cpp" />
+    <ClCompile Include="strrepl.cpp" />
+    <ClCompile Include="titletrn.cpp" />
+    <ClCompile Include="tolowtrn.cpp" />
+    <ClCompile Include="toupptrn.cpp" />
+    <ClCompile Include="translit.cpp" />
+    <ClCompile Include="transreg.cpp" />
+    <ClCompile Include="tridpars.cpp" />
+    <ClCompile Include="unesctrn.cpp" />
+    <ClCompile Include="uni2name.cpp" />
+    <ClCompile Include="utrans.cpp" />
+    <ClCompile Include="csdetect.cpp" />
+    <ClCompile Include="csmatch.cpp" />
+    <ClCompile Include="csr2022.cpp" />
+    <ClCompile Include="csrecog.cpp" />
+    <ClCompile Include="csrmbcs.cpp" />
+    <ClCompile Include="csrsbcs.cpp" />
+    <ClCompile Include="csrucode.cpp" />
+    <ClCompile Include="csrutf8.cpp" />
+    <ClCompile Include="inputext.cpp" />
+    <ClCompile Include="ucsdet.cpp" />
+    <ClCompile Include="uspoof.cpp" />
+    <ClCompile Include="uspoof_build.cpp" />
+    <ClCompile Include="uspoof_conf.cpp" />
+    <ClCompile Include="uspoof_impl.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="unicode\alphaindex.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="bocsu.h" />
+    <CustomBuild Include="unicode\coleitr.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\coll.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\search.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\sortkey.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\stsearch.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\tblcoll.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ucol.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="affixpatternparser.h" />
+    <ClInclude Include="decimalformatpatternimpl.h" />
+    <ClInclude Include="decimfmtimpl.h" />
+    <ClInclude Include="digitaffix.h" />
+    <ClInclude Include="digitaffixesandpadding.h" />
+    <ClInclude Include="digitformatter.h" />
+    <ClInclude Include="digitgrouping.h" />
+    <ClInclude Include="digitinterval.h" />
+    <ClInclude Include="pluralaffix.h" />
+    <ClInclude Include="precision.h" />
+    <ClInclude Include="significantdigitinterval.h" />
+    <ClInclude Include="smallintformatter.h" />
+    <ClInclude Include="valueformatter.h" />
+    <ClInclude Include="visibledigits.h" />
+    <ClInclude Include="collation.h" />
+    <ClInclude Include="collationbuilder.h" />
+    <ClInclude Include="collationcompare.h" />
+    <ClInclude Include="collationdata.h" />
+    <ClInclude Include="collationdatabuilder.h" />
+    <ClInclude Include="collationdatareader.h" />
+    <ClInclude Include="collationdatawriter.h" />
+    <ClInclude Include="collationfastlatin.h" />
+    <ClInclude Include="collationfastlatinbuilder.h" />
+    <ClInclude Include="collationfcd.h" />
+    <ClInclude Include="collationiterator.h" />
+    <ClInclude Include="collationkeys.h" />
+    <ClInclude Include="collationroot.h" />
+    <ClInclude Include="collationrootelements.h" />
+    <ClInclude Include="collationruleparser.h" />
+    <ClInclude Include="collationsets.h" />
+    <ClInclude Include="collationsettings.h" />
+    <ClInclude Include="collationtailoring.h" />
+    <ClInclude Include="collationweights.h" />
+    <ClInclude Include="dayperiodrules.h" />
+    <ClInclude Include="dcfmtimp.h" />
+    <ClInclude Include="numsys_impl.h" />
+    <ClInclude Include="region_impl.h" />
+    <ClInclude Include="selfmtimpl.h" />
+    <ClInclude Include="tzgnames.h" />
+    <ClInclude Include="tznames_impl.h" />
+    <ClInclude Include="ucol_imp.h" />
+    <CustomBuild Include="unicode\ucoleitr.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\usearch.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\tzfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\tznames.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="uitercollationiterator.h" />
+    <CustomBuild Include="unicode\region.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uregion.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="usrchimp.h" />
+    <ClInclude Include="astro.h" />
+    <CustomBuild Include="unicode\basictz.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="buddhcal.h" />
+    <CustomBuild Include="unicode\calendar.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="cecal.h" />
+    <ClInclude Include="chnsecal.h" />
+    <CustomBuild Include="unicode\choicfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\compactdecimalformat.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="coptccal.h" />
+    <CustomBuild Include="unicode\curramt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="currfmt.h" />
+    <CustomBuild Include="unicode\currpinf.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\currunit.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="dangical.h" />
+    <CustomBuild Include="unicode\datefmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\dcfmtsym.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="decContext.h" />
+    <ClInclude Include="decfmtst.h" />
+    <ClInclude Include="decimalformatpattern.h" />
+    <CustomBuild Include="unicode\decimfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="decNumber.h" />
+    <ClInclude Include="decNumberLocal.h" />
+    <ClInclude Include="digitlst.h" />
+    <ClInclude Include="dt_impl.h" />
+    <CustomBuild Include="unicode\dtfmtsym.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="dtitv_impl.h" />
+    <CustomBuild Include="unicode\dtitvfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\dtitvinf.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\dtptngen.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="dtptngen_impl.h" />
+    <CustomBuild Include="unicode\dtrule.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="ethpccal.h" />
+    <CustomBuild Include="unicode\fieldpos.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\fmtable.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uformattable.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\format.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="fphdlimp.h" />
+    <CustomBuild Include="unicode\fpositer.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\gender.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ugender.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\gregocal.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="gregoimp.h" />
+    <ClInclude Include="hebrwcal.h" />
+    <ClInclude Include="indiancal.h" />
+    <ClInclude Include="islamcal.h" />
+    <ClInclude Include="japancal.h" />
+    <CustomBuild Include="unicode\measfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\measunit.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\measure.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\msgfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="msgfmt_impl.h" />
+    <ClInclude Include="nfrlist.h" />
+    <ClInclude Include="nfrs.h" />
+    <ClInclude Include="nfrule.h" />
+    <ClInclude Include="nfsubs.h" />
+    <CustomBuild Include="unicode\numfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\numsys.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="olsontz.h" />
+    <ClInclude Include="persncal.h" />
+    <CustomBuild Include="unicode\plurfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\plurrule.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="plurrule_impl.h" />
+    <ClInclude Include="quantityformatter.h" />
+    <ClInclude Include="sharedbreakiterator.h" />
+    <ClInclude Include="sharedcalendar.h" />
+    <ClInclude Include="shareddateformatsymbols.h" />
+    <ClInclude Include="sharednumberformat.h" />
+    <ClInclude Include="sharedpluralrules.h" />
+    <CustomBuild Include="unicode\rbnf.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\rbtz.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\reldatefmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="reldtfmt.h" />
+    <CustomBuild Include="unicode\scientificnumberformatter.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\selfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\simpletz.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\smpdtfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="smpdtfst.h" />
+    <ClInclude Include="standardplural.h" />
+    <ClInclude Include="taiwncal.h" />
+    <CustomBuild Include="unicode\timezone.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\tmunit.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\tmutamt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\tmutfmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\tzrule.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\tztrans.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ucal.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\udat.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\udateintervalformat.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\udatpg.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ufieldpositer.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ulocdata.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\umsg.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="umsg_imp.h" />
+    <CustomBuild Include="unicode\unum.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\unumsys.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\upluralrules.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\ureldatefmt.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utmscale.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\vtzone.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="utf16collationiterator.h" />
+    <ClInclude Include="utf8collationiterator.h" />
+    <ClInclude Include="vzone.h" />
+    <ClInclude Include="windtfmt.h" />
+    <ClInclude Include="winnmfmt.h" />
+    <ClInclude Include="wintzimpl.h" />
+    <ClInclude Include="zonemeta.h" />
+    <ClInclude Include="zrule.h" />
+    <ClInclude Include="ztrans.h" />
+    <ClInclude Include="ucln_in.h" />
+    <CustomBuild Include="unicode\regex.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="regexcmp.h" />
+    <ClInclude Include="regexcst.h" />
+    <ClInclude Include="regeximp.h" />
+    <ClInclude Include="regexst.h" />
+    <ClInclude Include="regextxt.h" />
+    <CustomBuild Include="unicode\uregex.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="anytrans.h" />
+    <ClInclude Include="brktrans.h" />
+    <ClInclude Include="casetrn.h" />
+    <ClInclude Include="cpdtrans.h" />
+    <ClInclude Include="esctrn.h" />
+    <ClInclude Include="funcrepl.h" />
+    <ClInclude Include="name2uni.h" />
+    <ClInclude Include="nortrans.h" />
+    <ClInclude Include="nultrans.h" />
+    <ClInclude Include="quant.h" />
+    <ClInclude Include="rbt.h" />
+    <ClInclude Include="rbt_data.h" />
+    <ClInclude Include="rbt_pars.h" />
+    <ClInclude Include="rbt_rule.h" />
+    <ClInclude Include="rbt_set.h" />
+    <ClInclude Include="remtrans.h" />
+    <ClInclude Include="strmatch.h" />
+    <ClInclude Include="strrepl.h" />
+    <ClInclude Include="titletrn.h" />
+    <ClInclude Include="tolowtrn.h" />
+    <ClInclude Include="toupptrn.h" />
+    <CustomBuild Include="unicode\translit.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="transreg.h" />
+    <ClInclude Include="tridpars.h" />
+    <ClInclude Include="unesctrn.h" />
+    <ClInclude Include="uni2name.h" />
+    <CustomBuild Include="unicode\unirepl.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\utrans.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="csdetect.h" />
+    <ClInclude Include="csmatch.h" />
+    <ClInclude Include="csr2022.h" />
+    <ClInclude Include="csrecog.h" />
+    <ClInclude Include="csrmbcs.h" />
+    <ClInclude Include="csrsbcs.h" />
+    <ClInclude Include="csrucode.h" />
+    <ClInclude Include="csrutf8.h" />
+    <ClInclude Include="inputext.h" />
+    <CustomBuild Include="unicode\ucsdet.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\uspoof.h">
+      <Command>copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs>..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <ClInclude Include="scriptset.h" />
+    <ClInclude Include="uspoof_conf.h" />
+    <ClInclude Include="uspoof_impl.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="i18n.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\common\common UWP.vcxproj">
+      <Project>{C10CF34B-3F79-430E-AD38-5A32DC0589C2}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
index 4afb2032cbe760bdc885590f5b25c1c7ce058a23..f9b575f8ab030f4966a8f13f0a1c82df476f6958 100644 (file)
@@ -35,7 +35,9 @@
 #include "windtfmt.h"
 #include "wintzimpl.h"
 
+#ifndef WIN32_LEAN_AND_MEAN
 #   define WIN32_LEAN_AND_MEAN
+#endif
 #   define VC_EXTRALEAN
 #   define NOUSER
 #   define NOSERVICE
@@ -92,12 +94,83 @@ UnicodeString* Win32DateFormat::getTimeDateFormat(const Calendar *cal, const Loc
     return result;
 }
 
+// TODO: This is copied in both winnmfmt.cpp and windtfmt.cpp, but really should
+// be factored out into a common helper for both.
+static UErrorCode GetEquivalentWindowsLocaleName(const Locale& locale, UnicodeString** buffer)
+{
+    UErrorCode status = U_ZERO_ERROR;
+    char asciiBCP47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+
+    // Convert from names like "en_CA" and "de_DE@collation=phonebook" to "en-CA" and "de-DE-u-co-phonebk".
+    int32_t length = uloc_toLanguageTag(locale.getName(), asciiBCP47Tag, UPRV_LENGTHOF(asciiBCP47Tag), FALSE, &status);
+
+    if (U_SUCCESS(status))
+    {
+        // Need it to be UTF-16, not 8-bit
+        // TODO: This seems like a good thing for a helper
+        wchar_t bcp47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+        int i;
+        for (i = 0; i < UPRV_LENGTHOF(bcp47Tag); i++)
+        {
+            if (asciiBCP47Tag[i] == '\0')
+            {
+                break;
+            }
+            else
+            {
+                // normally just copy the character
+                bcp47Tag[i] = static_cast<wchar_t>(asciiBCP47Tag[i]);
+            }
+        }
+
+        // Ensure it's null terminated
+        if (i < (UPRV_LENGTHOF(bcp47Tag) - 1))
+        {
+            bcp47Tag[i] = L'\0';
+        }
+        else
+        {
+            // Ran out of room.
+            bcp47Tag[UPRV_LENGTHOF(bcp47Tag) - 1] = L'\0';
+        }
+
+
+        wchar_t windowsLocaleName[LOCALE_NAME_MAX_LENGTH] = {};
+
+        // Note: On Windows versions below 10, there is no support for locale name aliases.
+        // This means that it will fail for locales where ICU has a completely different
+        // name (like ku vs ckb), and it will also not work for alternate sort locale
+        // names like "de-DE-u-co-phonebk".
+        
+        // TODO: We could add some sort of exception table for cases like ku vs ckb.
+
+        int length = ResolveLocaleName(bcp47Tag, windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName));
+
+        if (length > 0)
+        {
+            *buffer = new UnicodeString(windowsLocaleName);
+        }
+        else
+        {
+            status = U_UNSUPPORTED_ERROR;
+        }
+    }
+    return status;
+}
+
 // TODO: Range-check timeStyle, dateStyle
 Win32DateFormat::Win32DateFormat(DateFormat::EStyle timeStyle, DateFormat::EStyle dateStyle, const Locale &locale, UErrorCode &status)
-  : DateFormat(), fDateTimeMsg(NULL), fTimeStyle(timeStyle), fDateStyle(dateStyle), fLocale(locale), fZoneID()
+  : DateFormat(), fDateTimeMsg(NULL), fTimeStyle(timeStyle), fDateStyle(dateStyle), fLocale(locale), fZoneID(), fWindowsLocaleName(nullptr)
 {
     if (U_SUCCESS(status)) {
-        fLCID = locale.getLCID();
+        GetEquivalentWindowsLocaleName(locale, &fWindowsLocaleName);
+        // Note: In the previous code, it would look up the LCID for the locale, and if
+        // the locale was not recognized then it would get an LCID of 0, which is a
+        // synonym for LOCALE_USER_DEFAULT on Windows.
+        // If the above method fails, then fWindowsLocaleName will remain as nullptr, and 
+        // then we will pass nullptr to API GetLocaleInfoEx, which is the same as passing
+        // LOCALE_USER_DEFAULT.
+
         fTZI = NEW_ARRAY(TIME_ZONE_INFORMATION, 1);
         uprv_memset(fTZI, 0, sizeof(TIME_ZONE_INFORMATION));
         adoptCalendar(Calendar::createInstance(locale, status));
@@ -115,6 +188,7 @@ Win32DateFormat::~Win32DateFormat()
 //    delete fCalendar;
     uprv_free(fTZI);
     delete fDateTimeMsg;
+    delete fWindowsLocaleName;
 }
 
 Win32DateFormat &Win32DateFormat::operator=(const Win32DateFormat &other)
@@ -128,13 +202,14 @@ Win32DateFormat &Win32DateFormat::operator=(const Win32DateFormat &other)
     this->fTimeStyle   = other.fTimeStyle;
     this->fDateStyle   = other.fDateStyle;
     this->fLocale      = other.fLocale;
-    this->fLCID        = other.fLCID;
 //    this->fCalendar    = other.fCalendar->clone();
     this->fZoneID      = other.fZoneID;
 
     this->fTZI = NEW_ARRAY(TIME_ZONE_INFORMATION, 1);
     *this->fTZI = *other.fTZI;
 
+    this->fWindowsLocaleName = other.fWindowsLocaleName == NULL ? NULL : new UnicodeString(*other.fWindowsLocaleName);
+
     return *this;
 }
 
@@ -231,18 +306,25 @@ static const DWORD dfFlags[] = {DATE_LONGDATE, DATE_LONGDATE, DATE_SHORTDATE, DA
 
 void Win32DateFormat::formatDate(const SYSTEMTIME *st, UnicodeString &appendTo) const
 {
-    int result;
+    int result=0;
     wchar_t stackBuffer[STACK_BUFFER_SIZE];
     wchar_t *buffer = stackBuffer;
+    const wchar_t *localeName = nullptr;
 
-    result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, STACK_BUFFER_SIZE);
+    if (fWindowsLocaleName != nullptr)
+    {
+        localeName = reinterpret_cast<const wchar_t*>(toOldUCharPtr(fWindowsLocaleName->getTerminatedBuffer()));
+    }
+
+    result = GetDateFormatEx(localeName, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, STACK_BUFFER_SIZE, NULL);
 
     if (result == 0) {
         if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
-            int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0);
+            int newLength = GetDateFormatEx(localeName, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0, NULL);
 
             buffer = NEW_ARRAY(wchar_t, newLength);
-            GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, newLength);
+
+            GetDateFormatEx(localeName, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, newLength, NULL);
         }
     }
 
@@ -260,15 +342,22 @@ void Win32DateFormat::formatTime(const SYSTEMTIME *st, UnicodeString &appendTo)
     int result;
     wchar_t stackBuffer[STACK_BUFFER_SIZE];
     wchar_t *buffer = stackBuffer;
+    const wchar_t *localeName = nullptr;
 
-    result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, STACK_BUFFER_SIZE);
+    if (fWindowsLocaleName != nullptr)
+    {
+        localeName = reinterpret_cast<const wchar_t*>(toOldUCharPtr(fWindowsLocaleName->getTerminatedBuffer()));
+    }
+
+    result = GetTimeFormatEx(localeName, tfFlags[fTimeStyle], st, NULL, buffer, STACK_BUFFER_SIZE);
 
     if (result == 0) {
         if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
-            int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0);
+            int newLength = GetTimeFormatEx(localeName, tfFlags[fTimeStyle], st, NULL, NULL, 0);
 
             buffer = NEW_ARRAY(wchar_t, newLength);
-            GetDateFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, newLength);
+
+            GetTimeFormatEx(localeName, tfFlags[fTimeStyle], st, NULL, buffer, newLength);
         }
     }
 
index 492da150dc5248f7a7eeb81d932cb3a9f4aeb6a0..6d72a38e0cd274d62c86793ea64847922e54b3f9 100644 (file)
@@ -95,7 +95,7 @@ public:
      * <pre>
      * .   Base* polymorphic_pointer = createPolymorphicObject();
      * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
+     * .       derived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
      */
@@ -124,9 +124,10 @@ private:
     DateFormat::EStyle fTimeStyle;
     DateFormat::EStyle fDateStyle;
     Locale fLocale;
-    int32_t fLCID;
     UnicodeString fZoneID;
     TIME_ZONE_INFORMATION *fTZI;
+
+    UnicodeString* fWindowsLocaleName; // Stores the equivalent Windows locale name.
 };
 
 U_NAMESPACE_END
index 5b4a191747badb95700e87bc973cc8e1e1d23e42..3f8271efaf08acf9e50b0ce03f295a1e40719527 100644 (file)
@@ -28,7 +28,9 @@
 #include "uassert.h"
 #include "locmap.h"
 
+#ifndef WIN32_LEAN_AND_MEAN
 #   define WIN32_LEAN_AND_MEAN
+#endif
 #   define VC_EXTRALEAN
 #   define NOUSER
 #   define NOSERVICE
@@ -58,43 +60,43 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Win32NumberFormat)
  * end in ";0" then the return value should be multiplied by 10.
  * (e.g. "3" => 30, "3;2" => 320)
  */
-static UINT getGrouping(const char *grouping)
+static UINT getGrouping(const wchar_t *grouping)
 {
     UINT g = 0;
-       const char *s;
+    const wchar_t *s;
 
-    for (s = grouping; *s != '\0'; s += 1) {
-        if (*s > '0' && *s < '9') {
-            g = g * 10 + (*s - '0');
-        } else if (*s != ';') {
+    for (s = grouping; *s != L'\0'; s += 1) {
+        if (*s > L'0' && *s < L'9') {
+            g = g * 10 + (*s - L'0');
+        } else if (*s != L';') {
             break;
         }
     }
 
-    if (*s != '0') {
+    if (*s != L'0') {
         g *= 10;
     }
 
     return g;
 }
 
-static void getNumberFormat(NUMBERFMTW *fmt, int32_t lcid)
+static void getNumberFormat(NUMBERFMTW *fmt, const wchar_t *windowsLocaleName)
 {
-    char buf[10];
+    wchar_t buf[10];
 
-    GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_IDIGITS, (LPWSTR) &fmt->NumDigits, sizeof(UINT));
-    GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ILZERO,  (LPWSTR) &fmt->LeadingZero, sizeof(UINT));
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_RETURN_NUMBER|LOCALE_IDIGITS, (LPWSTR) &fmt->NumDigits, sizeof(UINT));
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_RETURN_NUMBER|LOCALE_ILZERO,  (LPWSTR) &fmt->LeadingZero, sizeof(UINT));
 
-    GetLocaleInfoA(lcid, LOCALE_SGROUPING, buf, 10);
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_SGROUPING, (LPWSTR)buf, 10);
     fmt->Grouping = getGrouping(buf);
 
     fmt->lpDecimalSep = NEW_ARRAY(wchar_t, 6);
-    GetLocaleInfoW(lcid, LOCALE_SDECIMAL,  fmt->lpDecimalSep,  6);
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_SDECIMAL,  fmt->lpDecimalSep,  6);
 
     fmt->lpThousandSep = NEW_ARRAY(wchar_t, 6);
-    GetLocaleInfoW(lcid, LOCALE_STHOUSAND, fmt->lpThousandSep, 6);
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_STHOUSAND, fmt->lpThousandSep, 6);
 
-    GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGNUMBER, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT));
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_RETURN_NUMBER|LOCALE_INEGNUMBER, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT));
 }
 
 static void freeNumberFormat(NUMBERFMTW *fmt)
@@ -105,27 +107,27 @@ static void freeNumberFormat(NUMBERFMTW *fmt)
     }
 }
 
-static void getCurrencyFormat(CURRENCYFMTW *fmt, int32_t lcid)
+static void getCurrencyFormat(CURRENCYFMTW *fmt, const wchar_t *windowsLocaleName)
 {
-    char buf[10];
+    wchar_t buf[10];
 
-    GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ICURRDIGITS, (LPWSTR) &fmt->NumDigits, sizeof(UINT));
-    GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ILZERO, (LPWSTR) &fmt->LeadingZero, sizeof(UINT));
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_RETURN_NUMBER|LOCALE_ICURRDIGITS, (LPWSTR) &fmt->NumDigits, sizeof(UINT));
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_RETURN_NUMBER|LOCALE_ILZERO, (LPWSTR) &fmt->LeadingZero, sizeof(UINT));
 
-    GetLocaleInfoA(lcid, LOCALE_SMONGROUPING, buf, sizeof(buf));
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_SMONGROUPING, (LPWSTR)buf, sizeof(buf));
     fmt->Grouping = getGrouping(buf);
 
     fmt->lpDecimalSep = NEW_ARRAY(wchar_t, 6);
-    GetLocaleInfoW(lcid, LOCALE_SMONDECIMALSEP,  fmt->lpDecimalSep,  6);
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_SMONDECIMALSEP,  fmt->lpDecimalSep,  6);
 
     fmt->lpThousandSep = NEW_ARRAY(wchar_t, 6);
-    GetLocaleInfoW(lcid, LOCALE_SMONTHOUSANDSEP, fmt->lpThousandSep, 6);
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_SMONTHOUSANDSEP, fmt->lpThousandSep, 6);
 
-    GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGCURR,  (LPWSTR) &fmt->NegativeOrder, sizeof(UINT));
-    GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ICURRENCY, (LPWSTR) &fmt->PositiveOrder, sizeof(UINT));
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_RETURN_NUMBER|LOCALE_INEGCURR,  (LPWSTR) &fmt->NegativeOrder, sizeof(UINT));
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_RETURN_NUMBER|LOCALE_ICURRENCY, (LPWSTR) &fmt->PositiveOrder, sizeof(UINT));
 
     fmt->lpCurrencySymbol = NEW_ARRAY(wchar_t, 8);
-    GetLocaleInfoW(lcid, LOCALE_SCURRENCY, (LPWSTR) fmt->lpCurrencySymbol, 8);
+    GetLocaleInfoEx(windowsLocaleName, LOCALE_SCURRENCY, (LPWSTR) fmt->lpCurrencySymbol, 8);
 }
 
 static void freeCurrencyFormat(CURRENCYFMTW *fmt)
@@ -137,12 +139,84 @@ static void freeCurrencyFormat(CURRENCYFMTW *fmt)
     }
 }
 
+// TODO: This is copied in both winnmfmt.cpp and windtfmt.cpp, but really should
+// be factored out into a common helper for both.
+static UErrorCode GetEquivalentWindowsLocaleName(const Locale& locale, UnicodeString** buffer)
+{
+    UErrorCode status = U_ZERO_ERROR;
+    char asciiBCP47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+
+    // Convert from names like "en_CA" and "de_DE@collation=phonebook" to "en-CA" and "de-DE-u-co-phonebk".
+    int32_t length = uloc_toLanguageTag(locale.getName(), asciiBCP47Tag, UPRV_LENGTHOF(asciiBCP47Tag), FALSE, &status);
+
+    if (U_SUCCESS(status))
+    {
+        // Need it to be UTF-16, not 8-bit
+        // TODO: This seems like a good thing for a helper
+        wchar_t bcp47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+        int i;
+        for (i = 0; i < UPRV_LENGTHOF(bcp47Tag); i++)
+        {
+            if (asciiBCP47Tag[i] == '\0')
+            {
+                break;
+            }
+            else
+            {
+                // normally just copy the character
+                bcp47Tag[i] = static_cast<wchar_t>(asciiBCP47Tag[i]);
+            }
+        }
+
+        // Ensure it's null terminated
+        if (i < (UPRV_LENGTHOF(bcp47Tag) - 1))
+        {
+            bcp47Tag[i] = L'\0';
+        }
+        else
+        {
+            // Ran out of room.
+            bcp47Tag[UPRV_LENGTHOF(bcp47Tag) - 1] = L'\0';
+        }
+
+
+        wchar_t windowsLocaleName[LOCALE_NAME_MAX_LENGTH] = {};
+
+        // Note: On Windows versions below 10, there is no support for locale name aliases.
+        // This means that it will fail for locales where ICU has a completely different
+        // name (like ku vs ckb), and it will also not work for alternate sort locale
+        // names like "de-DE-u-co-phonebk".
+
+        // TODO: We could add some sort of exception table for cases like ku vs ckb.
+
+        int length = ResolveLocaleName(bcp47Tag, windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName));
+
+        if (length > 0)
+        {
+            *buffer = new UnicodeString(windowsLocaleName);
+        }
+        else
+        {
+            status = U_UNSUPPORTED_ERROR;
+        }
+    }
+    return status;
+}
+
 Win32NumberFormat::Win32NumberFormat(const Locale &locale, UBool currency, UErrorCode &status)
-  : NumberFormat(), fCurrency(currency), fFormatInfo(NULL), fFractionDigitsSet(FALSE)
+  : NumberFormat(), fCurrency(currency), fFormatInfo(NULL), fFractionDigitsSet(FALSE), fWindowsLocaleName(nullptr)
 {
     if (!U_FAILURE(status)) {
         fLCID = locale.getLCID();
 
+        GetEquivalentWindowsLocaleName(locale, &fWindowsLocaleName);
+        // Note: In the previous code, it would look up the LCID for the locale, and if
+        // the locale was not recognized then it would get an LCID of 0, which is a
+        // synonym for LOCALE_USER_DEFAULT on Windows.
+        // If the above method fails, then fWindowsLocaleName will remain as nullptr, and 
+        // then we will pass nullptr to API GetLocaleInfoEx, which is the same as passing
+        // LOCALE_USER_DEFAULT.
+
         // Resolve actual locale to be used later
         UErrorCode tmpsts = U_ZERO_ERROR;
         char tmpLocID[ULOC_FULLNAME_CAPACITY];
@@ -152,12 +226,19 @@ Win32NumberFormat::Win32NumberFormat(const Locale &locale, UBool currency, UErro
             fLocale = Locale((const char*)tmpLocID);
         }
 
+        const wchar_t *localeName = nullptr;
+
+        if (fWindowsLocaleName != nullptr)
+        {
+            localeName = reinterpret_cast<const wchar_t*>(toOldUCharPtr(fWindowsLocaleName->getTerminatedBuffer()));
+        }
+
         fFormatInfo = (FormatInfo*)uprv_malloc(sizeof(FormatInfo));
 
         if (fCurrency) {
-            getCurrencyFormat(&fFormatInfo->currency, fLCID);
+            getCurrencyFormat(&fFormatInfo->currency, localeName);
         } else {
-            getNumberFormat(&fFormatInfo->number, fLCID);
+            getNumberFormat(&fFormatInfo->number, localeName);
         }
     }
 }
@@ -182,6 +263,7 @@ Win32NumberFormat::~Win32NumberFormat()
 
         uprv_free(fFormatInfo);
     }
+    delete fWindowsLocaleName;
 }
 
 Win32NumberFormat &Win32NumberFormat::operator=(const Win32NumberFormat &other)
@@ -192,13 +274,21 @@ Win32NumberFormat &Win32NumberFormat::operator=(const Win32NumberFormat &other)
     this->fLocale            = other.fLocale;
     this->fLCID              = other.fLCID;
     this->fFractionDigitsSet = other.fFractionDigitsSet;
+    this->fWindowsLocaleName = other.fWindowsLocaleName == NULL ? NULL : new UnicodeString(*other.fWindowsLocaleName);
+    
+    const wchar_t *localeName = nullptr;
+
+    if (fWindowsLocaleName != nullptr)
+    {
+        localeName = reinterpret_cast<const wchar_t*>(toOldUCharPtr(fWindowsLocaleName->getTerminatedBuffer()));
+    }
 
     if (fCurrency) {
         freeCurrencyFormat(&fFormatInfo->currency);
-        getCurrencyFormat(&fFormatInfo->currency, fLCID);
+        getCurrencyFormat(&fFormatInfo->currency, localeName);
     } else {
         freeNumberFormat(&fFormatInfo->number);
-        getNumberFormat(&fFormatInfo->number, fLCID);
+        getNumberFormat(&fFormatInfo->number, localeName);
     }
 
     return *this;
@@ -299,6 +389,13 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen
     formatInfo = *fFormatInfo;
     buffer[0] = 0x0000;
 
+    const wchar_t *localeName = nullptr;
+
+    if (fWindowsLocaleName != nullptr)
+    {
+        localeName = reinterpret_cast<const wchar_t*>(toOldUCharPtr(fWindowsLocaleName->getTerminatedBuffer()));
+    }
+
     if (fCurrency) {
         if (fFractionDigitsSet) {
             formatInfo.currency.NumDigits = (UINT) numDigits;
@@ -308,17 +405,17 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen
             formatInfo.currency.Grouping = 0;
         }
 
-        result = GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, buffer, STACK_BUFFER_SIZE);
+        result = GetCurrencyFormatEx(localeName, 0, nBuffer, &formatInfo.currency, buffer, STACK_BUFFER_SIZE);
 
         if (result == 0) {
             DWORD lastError = GetLastError();
 
             if (lastError == ERROR_INSUFFICIENT_BUFFER) {
-                int newLength = GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, NULL, 0);
+                int newLength = GetCurrencyFormatEx(localeName, 0, nBuffer, &formatInfo.currency, NULL, 0);
 
                 buffer = NEW_ARRAY(wchar_t, newLength);
                 buffer[0] = 0x0000;
-                GetCurrencyFormatW(fLCID, 0, nBuffer,  &formatInfo.currency, buffer, newLength);
+                GetCurrencyFormatEx(localeName, 0, nBuffer,  &formatInfo.currency, buffer, newLength);
             }
         }
     } else {
@@ -330,15 +427,15 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen
             formatInfo.number.Grouping = 0;
         }
 
-        result = GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, buffer, STACK_BUFFER_SIZE);
+        result = GetNumberFormatEx(localeName, 0, nBuffer, &formatInfo.number, buffer, STACK_BUFFER_SIZE);
 
         if (result == 0) {
             if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
-                int newLength = GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, NULL, 0);
+                int newLength = GetNumberFormatEx(localeName, 0, nBuffer, &formatInfo.number, NULL, 0);
 
                 buffer = NEW_ARRAY(wchar_t, newLength);
                 buffer[0] = 0x0000;
-                GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, buffer, newLength);
+                GetNumberFormatEx(localeName, 0, nBuffer, &formatInfo.number, buffer, newLength);
             }
         }
     }
index 1b1977152e9cd1ee171b357729a2b85cd9528ea0..6139c1ff68a9d23a6230e4cf26bf21fc6764386c 100644 (file)
@@ -128,7 +128,7 @@ public:
      * <pre>
      * .   Base* polymorphic_pointer = createPolymorphicObject();
      * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
+     * .       derived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
      */
@@ -155,6 +155,7 @@ private:
     FormatInfo *fFormatInfo;
     UBool fFractionDigitsSet;
 
+    UnicodeString* fWindowsLocaleName; // Stores the equivalent Windows locale name.
 };
 
 U_NAMESPACE_END
index 78629e5f4855d7a896414516e951d5561794d1fb..5a29f29a77a0185daca0fab381c02824f3f48305 100644 (file)
@@ -24,7 +24,9 @@
 #include "uassert.h"
 #include "cmemory.h"
 
+#ifndef WIN32_LEAN_AND_MEAN
 #   define WIN32_LEAN_AND_MEAN
+#endif
 #   define VC_EXTRALEAN
 #   define NOUSER
 #   define NOSERVICE
index 1f998e33cbff7df19a69a2f33bfc2d757ef25ad8..87b2d402e835a52ed96567d90e57d031bd00f692 100644 (file)
@@ -36,6 +36,7 @@ static Win32Utilities::LCIDRecord *lcidRecords = NULL;
 static int32_t lcidCount  = 0;
 static int32_t lcidMax = 0;
 
+// TODO: Note that this test will skip locale names and only hit locales with assigned LCIDs
 BOOL CALLBACK EnumLocalesProc(LPSTR lpLocaleString)
 {
     char localeID[ULOC_FULLNAME_CAPACITY];
@@ -70,6 +71,7 @@ BOOL CALLBACK EnumLocalesProc(LPSTR lpLocaleString)
     return TRUE;
 }
 
+// TODO: Note that this test will skip locale names and only hit locales with assigned LCIDs
 Win32Utilities::LCIDRecord *Win32Utilities::getLocales(int32_t &localeCount)
 {
     LCIDRecord *result;
index 432552160b611bd9fdbba5549a834aab2bc8b472..ffcf459c349e91964be13264a5acf9488200127f 100644 (file)
@@ -121,7 +121,9 @@ enum {
     LIBNAME,
     QUIET,
     WITHOUT_ASSEMBLY,
-    PDS_BUILD
+    PDS_BUILD,
+    UWP_BUILD,
+    UWP_ARM_BUILD
 };
 
 /* This sets the modes that are available */
@@ -163,7 +165,9 @@ static UOption options[]={
     /*18*/    UOPTION_DEF( "libname", 'L', UOPT_REQUIRES_ARG),
     /*19*/    UOPTION_DEF( "quiet", 'q', UOPT_NO_ARG),
     /*20*/    UOPTION_DEF( "without-assembly", 'w', UOPT_NO_ARG),
-    /*21*/    UOPTION_DEF( "zos-pds-build", 'z', UOPT_NO_ARG)
+    /*21*/    UOPTION_DEF("zos-pds-build", 'z', UOPT_NO_ARG),
+    /*22*/    UOPTION_DEF("windows-uwp-build", 'u', UOPT_NO_ARG),
+    /*23*/    UOPTION_DEF("windows-uwp-arm-build", 'a', UOPT_NO_ARG)
 };
 
 /* This enum and the following char array should be kept in sync. */
@@ -250,9 +254,11 @@ const char options_help[][320]={
     "Specify a version when packaging in dll or static mode",
     "Add package to all file names if not present",
     "Library name to build (if different than package name)",
-    "Quite mode. (e.g. Do not output a readme file for static libraries)",
+    "Quiet mode. (e.g. Do not output a readme file for static libraries)",
     "Build the data without assembly code",
-    "Build PDS dataset (zOS build only)"
+    "Build PDS dataset (zOS build only)",
+    "Build for Universal Windows Platform (Windows build only)",
+    "Set DLL machine type for UWP to target windows ARM (Windows UWP build only)"
 };
 
 const char  *progname = "PKGDATA";
@@ -1751,7 +1757,14 @@ static int32_t pkg_createWithoutAssemblyCode(UPKGOptions *o, const char *targetD
 
 #ifdef WINDOWS_WITH_MSVC
 #define LINK_CMD "link.exe /nologo /release /out:"
-#define LINK_FLAGS "/DLL /NOENTRY /MANIFEST:NO  /base:0x4ad00000 /implib:"
+#define LINK_FLAGS "/DLL /NOENTRY /MANIFEST:NO /implib:"
+#ifdef _WIN64
+#define LINK_EXTRA_UWP_FLAGS "/NXCOMPAT /DYNAMICBASE /APPCONTAINER "
+#else
+#define LINK_EXTRA_UWP_FLAGS "/NXCOMPAT /SAFESEH /DYNAMICBASE /APPCONTAINER /MACHINE:X86"
+#endif
+#define LINK_EXTRA_UWP_FLAGS_ARM "/NXCOMPAT /DYNAMICBASE /APPCONTAINER /MACHINE:ARM"
+#define LINK_EXTRA_NO_UWP_FLAGS "/base:0x4ad00000 "
 #define LIB_CMD "LIB.exe /nologo /out:"
 #define LIB_FILE "icudt.lib"
 #define LIB_EXT UDATA_LIB_SUFFIX
@@ -1831,14 +1844,33 @@ static int32_t pkg_createWindowsDLL(const char mode, const char *gencFilePath, U
           return 0;
         }
 
-        sprintf(cmd, "%s\"%s\" %s\"%s\" \"%s\" %s",
-                LINK_CMD,
-                dllFilePath,
-                LINK_FLAGS,
-                libFilePath,
-                gencFilePath,
-                resFilePath
-                );
+        char *extraFlags = "";
+#ifdef WINDOWS_WITH_MSVC
+        if (options[UWP_BUILD].doesOccur)
+        {
+            if (options[UWP_ARM_BUILD].doesOccur)
+            {
+                extraFlags = LINK_EXTRA_UWP_FLAGS_ARM;
+            }
+            else
+            {
+                extraFlags = LINK_EXTRA_UWP_FLAGS;
+            }
+        }
+        else
+        {
+            extraFlags = LINK_EXTRA_NO_UWP_FLAGS;
+        }
+#endif
+        sprintf(cmd, "%s\"%s\" %s %s\"%s\" \"%s\" %s",
+            LINK_CMD,
+            dllFilePath,
+            extraFlags,
+            LINK_FLAGS,
+            libFilePath,
+            gencFilePath,
+            resFilePath
+        );
     }
 
     result = runCommand(cmd, TRUE);
index 9ff6ce56df8f2cc8e06b65548ebc2aafd8c57bb6..e4d11956bdcd92b1fe39b669375e94000b4f1fdf 100644 (file)
@@ -687,12 +687,19 @@ getArchitecture(uint16_t *pCPU, uint16_t *pBits, UBool *pIsBigEndian, const char
 /* _M_IA64 should be defined in windows.h */
 #   if defined(_M_IA64)
         *pCPU=IMAGE_FILE_MACHINE_IA64;
+        *pBits = 64;
 #   elif defined(_M_AMD64)
-        *pCPU=IMAGE_FILE_MACHINE_AMD64;
+// link.exe does not really care about the .obj machine type and this will
+// allow us to build a dll for both ARM & x64 with an amd64 built tool
+// ARM is same as x64 except for first 2 bytes of object file
+        *pCPU = IMAGE_FILE_MACHINE_UNKNOWN;
+        // *pCPU = IMAGE_FILE_MACHINE_ARMNT;   // If we wanted to be explicit
+        // *pCPU = IMAGE_FILE_MACHINE_AMD64;   // We would use one of these names
+        *pBits = 64;                           // Doesn't seem to be used for anything interesting?
 #   else
-        *pCPU=IMAGE_FILE_MACHINE_I386;
+        *pCPU=IMAGE_FILE_MACHINE_I386;    // We would use one of these names
+        *pBits = 32;
 #   endif
-        *pBits= *pCPU==IMAGE_FILE_MACHINE_I386 ? 32 : 64;
         *pIsBigEndian=FALSE;
 #else
 #   error "Unknown platform for CAN_GENERATE_OBJECTS."
@@ -1030,7 +1037,14 @@ writeObjectCode(const char *filename, const char *destdir, const char *optEntryP
 
     /* deal with options, files and the entry point name */
     getArchitecture(&cpu, &bits, &makeBigEndian, optMatchArch);
-    printf("genccode: --match-arch cpu=%hu bits=%hu big-endian=%d\n", cpu, bits, makeBigEndian);
+    if (optMatchArch)
+    {
+        printf("genccode: --match-arch cpu=%hu bits=%hu big-endian=%d\n", cpu, bits, makeBigEndian);
+    }
+    else
+    {
+        printf("genccode: using architecture cpu=%hu bits=%hu big-endian=%d\n", cpu, bits, makeBigEndian);
+    }
 #if U_PLATFORM_HAS_WIN32_API
     if(cpu==IMAGE_FILE_MACHINE_I386) {
         entryOffset=1;