CMake: Enable default usage of utf8 sources for Qt consumers

And enable the same default when building Qt itself (it's implicit).

Allow opting out on a target-by-target basis, by using the public
qt_disable_utf8_sources() API call.

Change-Id: Ifc19a744d57b96b1c74a6926a0c6628c2a820464
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
Alexandru Croitor 2020-05-12 14:57:23 +02:00
parent d5cb44cd3a
commit 0cdcbb40a1
4 changed files with 27 additions and 1 deletions

View File

@ -271,6 +271,9 @@ add_library(Qt::GlobalConfigPrivate ALIAS GlobalConfigPrivate)
# are computed.
qt_set_language_standards_interface_compile_features(Platform)
# By default enable utf8 sources for both Qt and Qt consumers. Can be opted out.
qt_enable_utf8_sources(Platform)
# defines PlatformCommonInternal PlatformModuleInternal PlatformPluginInternal PlatformToolInternal
include(QtInternalTargets)

View File

@ -4674,6 +4674,22 @@ function(qt_enable_msvc_cplusplus_define target visibility)
endif()
endfunction()
function(qt_enable_utf8_sources target)
set(utf8_flags "")
if(MSVC)
list(APPEND utf8_flags "-utf-8")
elseif(WIN32 AND ICC)
list(APPEND utf8_flags "-Qoption,cpp,--unicode_source_kind,UTF-8")
endif()
if(utf8_flags)
# Allow opting out by specifying the QT_NO_UTF8_SOURCE target property.
set(genex_condition "$<NOT:$<BOOL:$<TARGET_PROPERTY:QT_NO_UTF8_SOURCE>>>")
set(utf8_flags "$<${genex_condition}:${utf8_flags}>")
target_compile_options("${target}" INTERFACE "${utf8_flags}")
endif()
endfunction()
# Equivalent of qmake's qtNomakeTools(directory1 directory2).
# If QT_NO_MAKE_TOOLS is true, then targets within the given directories will be excluded from the
# default 'all' target, as well as from install phase.

View File

@ -147,7 +147,7 @@ if (MSVC)
)
endif()
target_compile_options(PlatformCommonInternal INTERFACE -Zc:wchar_t -utf-8)
target_compile_options(PlatformCommonInternal INTERFACE -Zc:wchar_t)
target_link_options(PlatformCommonInternal INTERFACE
-DYNAMICBASE -NXCOMPAT

View File

@ -1257,3 +1257,10 @@ if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
endif()
endfunction()
endif()
# By default Qt6 forces usage of utf8 sources for consumers of Qt.
# Users can opt out of utf8 sources by calling this function with the target name of their
# application or library.
function(qt_disable_utf8_sources target)
set_target_properties("${target}" PROPERTIES QT_NO_UTF8_SOURCE TRUE)
endfunction()