unicode_data.cmake 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. option(ENABLE_UNICODE_DATABASE_DOWNLOAD "Enable download of Unicode UCD files at build time" ON)
  2. set(UNICODE_DATA_URL https://www.unicode.org/Public/13.0.0/ucd/UnicodeData.txt)
  3. set(UNICODE_DATA_PATH ${CMAKE_BINARY_DIR}/UCD/UnicodeData.txt)
  4. set(SPECIAL_CASING_URL https://www.unicode.org/Public/13.0.0/ucd/SpecialCasing.txt)
  5. set(SPECIAL_CASING_PATH ${CMAKE_BINARY_DIR}/UCD/SpecialCasing.txt)
  6. set(DERIVED_GENERAL_CATEGORY_URL https://www.unicode.org/Public/13.0.0/ucd/extracted/DerivedGeneralCategory.txt)
  7. set(DERIVED_GENERAL_CATEGORY_PATH ${CMAKE_BINARY_DIR}/UCD/DerivedGeneralCategory.txt)
  8. set(PROP_LIST_URL https://www.unicode.org/Public/13.0.0/ucd/PropList.txt)
  9. set(PROP_LIST_PATH ${CMAKE_BINARY_DIR}/UCD/PropList.txt)
  10. set(DERIVED_CORE_PROP_URL https://www.unicode.org/Public/13.0.0/ucd/DerivedCoreProperties.txt)
  11. set(DERIVED_CORE_PROP_PATH ${CMAKE_BINARY_DIR}/UCD/DerivedCoreProperties.txt)
  12. set(DERIVED_BINARY_PROP_URL https://www.unicode.org/Public/13.0.0/ucd/extracted/DerivedBinaryProperties.txt)
  13. set(DERIVED_BINARY_PROP_PATH ${CMAKE_BINARY_DIR}/UCD/DerivedBinaryProperties.txt)
  14. set(PROP_ALIAS_URL https://www.unicode.org/Public/13.0.0/ucd/PropertyAliases.txt)
  15. set(PROP_ALIAS_PATH ${CMAKE_BINARY_DIR}/UCD/PropertyAliases.txt)
  16. set(PROP_VALUE_ALIAS_URL https://www.unicode.org/Public/13.0.0/ucd/PropertyValueAliases.txt)
  17. set(PROP_VALUE_ALIAS_PATH ${CMAKE_BINARY_DIR}/UCD/PropertyValueAliases.txt)
  18. set(SCRIPTS_URL https://www.unicode.org/Public/13.0.0/ucd/Scripts.txt)
  19. set(SCRIPTS_PATH ${CMAKE_BINARY_DIR}/UCD/Scripts.txt)
  20. set(SCRIPT_EXTENSIONS_URL https://www.unicode.org/Public/13.0.0/ucd/ScriptExtensions.txt)
  21. set(SCRIPT_EXTENSIONS_PATH ${CMAKE_BINARY_DIR}/UCD/ScriptExtensions.txt)
  22. set(EMOJI_DATA_URL https://www.unicode.org/Public/13.0.0/ucd/emoji/emoji-data.txt)
  23. set(EMOJI_DATA_PATH ${CMAKE_BINARY_DIR}/UCD/emoji-data.txt)
  24. set(NORM_PROPS_URL https://www.unicode.org/Public/13.0.0/ucd/DerivedNormalizationProps.txt)
  25. set(NORM_PROPS_PATH ${CMAKE_BINARY_DIR}/UCD/DerivedNormalizationProps.txt)
  26. if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
  27. if (NOT EXISTS ${UNICODE_DATA_PATH})
  28. message(STATUS "Downloading UCD UnicodeData.txt from ${UNICODE_DATA_URL}...")
  29. file(DOWNLOAD ${UNICODE_DATA_URL} ${UNICODE_DATA_PATH} INACTIVITY_TIMEOUT 10)
  30. endif()
  31. if (NOT EXISTS ${SPECIAL_CASING_PATH})
  32. message(STATUS "Downloading UCD SpecialCasing.txt from ${SPECIAL_CASING_URL}...")
  33. file(DOWNLOAD ${SPECIAL_CASING_URL} ${SPECIAL_CASING_PATH} INACTIVITY_TIMEOUT 10)
  34. endif()
  35. if (NOT EXISTS ${DERIVED_GENERAL_CATEGORY_PATH})
  36. message(STATUS "Downloading UCD DerivedGeneralCategory.txt from ${DERIVED_GENERAL_CATEGORY_URL}...")
  37. file(DOWNLOAD ${DERIVED_GENERAL_CATEGORY_URL} ${DERIVED_GENERAL_CATEGORY_PATH} INACTIVITY_TIMEOUT 10)
  38. endif()
  39. if (NOT EXISTS ${PROP_LIST_PATH})
  40. message(STATUS "Downloading UCD PropList.txt from ${PROP_LIST_URL}...")
  41. file(DOWNLOAD ${PROP_LIST_URL} ${PROP_LIST_PATH} INACTIVITY_TIMEOUT 10)
  42. endif()
  43. if (NOT EXISTS ${DERIVED_CORE_PROP_PATH})
  44. message(STATUS "Downloading UCD DerivedCoreProperties.txt from ${DERIVED_CORE_PROP_URL}...")
  45. file(DOWNLOAD ${DERIVED_CORE_PROP_URL} ${DERIVED_CORE_PROP_PATH} INACTIVITY_TIMEOUT 10)
  46. endif()
  47. if (NOT EXISTS ${DERIVED_BINARY_PROP_PATH})
  48. message(STATUS "Downloading UCD DerivedBinaryProperties.txt from ${DERIVED_BINARY_PROP_URL}...")
  49. file(DOWNLOAD ${DERIVED_BINARY_PROP_URL} ${DERIVED_BINARY_PROP_PATH} INACTIVITY_TIMEOUT 10)
  50. endif()
  51. if (NOT EXISTS ${PROP_ALIAS_PATH})
  52. message(STATUS "Downloading UCD PropertyAliases.txt from ${PROP_ALIAS_URL}...")
  53. file(DOWNLOAD ${PROP_ALIAS_URL} ${PROP_ALIAS_PATH} INACTIVITY_TIMEOUT 10)
  54. endif()
  55. if (NOT EXISTS ${PROP_VALUE_ALIAS_PATH})
  56. message(STATUS "Downloading UCD PropertyValueAliases.txt from ${PROP_VALUE_ALIAS_URL}...")
  57. file(DOWNLOAD ${PROP_VALUE_ALIAS_URL} ${PROP_VALUE_ALIAS_PATH} INACTIVITY_TIMEOUT 10)
  58. endif()
  59. if (NOT EXISTS ${SCRIPTS_PATH})
  60. message(STATUS "Downloading UCD Scripts.txt from ${SCRIPTS_URL}...")
  61. file(DOWNLOAD ${SCRIPTS_URL} ${SCRIPTS_PATH} INACTIVITY_TIMEOUT 10)
  62. endif()
  63. if (NOT EXISTS ${SCRIPT_EXTENSIONS_PATH})
  64. message(STATUS "Downloading UCD ScriptExtensions.txt from ${SCRIPT_EXTENSIONS_URL}...")
  65. file(DOWNLOAD ${SCRIPT_EXTENSIONS_URL} ${SCRIPT_EXTENSIONS_PATH} INACTIVITY_TIMEOUT 10)
  66. endif()
  67. if (NOT EXISTS ${EMOJI_DATA_PATH})
  68. message(STATUS "Downloading UCD emoji-data.txt from ${EMOJI_DATA_URL}...")
  69. file(DOWNLOAD ${EMOJI_DATA_URL} ${EMOJI_DATA_PATH} INACTIVITY_TIMEOUT 10)
  70. endif()
  71. if (NOT EXISTS ${NORM_PROPS_PATH})
  72. message(STATUS "Downloading UCD DerivedNormalizationProps.txt from ${NORM_PROPS_URL}...")
  73. file(DOWNLOAD ${NORM_PROPS_URL} ${NORM_PROPS_PATH} INACTIVITY_TIMEOUT 10)
  74. endif()
  75. set(UNICODE_DATA_HEADER LibUnicode/UnicodeData.h)
  76. set(UNICODE_DATA_IMPLEMENTATION LibUnicode/UnicodeData.cpp)
  77. if (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/LibUnicode") # Serenity build.
  78. set(UNICODE_DATA_HEADER UnicodeData.h)
  79. set(UNICODE_DATA_IMPLEMENTATION UnicodeData.cpp)
  80. endif()
  81. add_custom_command(
  82. OUTPUT ${UNICODE_DATA_HEADER} ${UNICODE_DATA_IMPLEMENTATION}
  83. COMMAND $<TARGET_FILE:GenerateUnicodeData> -h ${UNICODE_DATA_HEADER} -c ${UNICODE_DATA_IMPLEMENTATION} -u ${UNICODE_DATA_PATH} -s ${SPECIAL_CASING_PATH} -g ${DERIVED_GENERAL_CATEGORY_PATH} -p ${PROP_LIST_PATH} -d ${DERIVED_CORE_PROP_PATH} -b ${DERIVED_BINARY_PROP_PATH} -a ${PROP_ALIAS_PATH} -v ${PROP_VALUE_ALIAS_PATH} -r ${SCRIPTS_PATH} -x ${SCRIPT_EXTENSIONS_PATH} -e ${EMOJI_DATA_PATH} -n ${NORM_PROPS_PATH}
  84. VERBATIM
  85. DEPENDS GenerateUnicodeData ${UNICODE_DATA_PATH} ${SPECIAL_CASING_PATH} ${DERIVED_GENERAL_CATEGORY_PATH} ${PROP_LIST_PATH} ${DERIVED_CORE_PROP_PATH} ${DERIVED_BINARY_PROP_PATH} ${PROP_ALIAS_PATH} ${PROP_VALUE_ALIAS_PATH} ${SCRIPTS_PATH} ${SCRIPT_EXTENSIONS_PATH} ${EMOJI_DATA_PATH} ${NORM_PROPS_PATH}
  86. )
  87. set(UNICODE_DATA_SOURCES ${UNICODE_DATA_HEADER} ${UNICODE_DATA_IMPLEMENTATION})
  88. add_compile_definitions(ENABLE_UNICODE_DATA=1)
  89. else()
  90. add_compile_definitions(ENABLE_UNICODE_DATA=0)
  91. endif()