diff options
-rw-r--r-- | modules/FindKDE4Internal.cmake | 31 | ||||
-rw-r--r-- | modules/FindLibAttica.cmake | 10 | ||||
-rw-r--r-- | modules/FindPolkitQt-1.cmake | 11 | ||||
-rw-r--r-- | modules/FindPolkitQt.cmake | 6 | ||||
-rw-r--r-- | modules/FindQt4.cmake | 10 | ||||
-rw-r--r-- | modules/KDE4Defaults.cmake | 4 | ||||
-rw-r--r-- | modules/KDE4Macros.cmake | 19 | ||||
-rw-r--r-- | modules/MacroOptionalAddSubdirectory.cmake | 4 | ||||
-rw-r--r-- | modules/MacroOptionalFindPackage.cmake | 32 |
9 files changed, 90 insertions, 37 deletions
diff --git a/modules/FindKDE4Internal.cmake b/modules/FindKDE4Internal.cmake index 1ce3a7cb..a551fb10 100644 --- a/modules/FindKDE4Internal.cmake +++ b/modules/FindKDE4Internal.cmake @@ -123,6 +123,8 @@ # KDE4_USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR - only present for CMake >= 2.6.3, defaults to TRUE # If enabled, the package should install its <package>Config.cmake file to # lib/cmake/<package>/ instead to lib/<package>/cmake +# KDE4_SERIALIZE_TOOL - wrapper to serialize potentially resource-intensive commands during +# parallel builds (set to 'icecc' when using icecream) # # It also adds the following macros and functions (from KDE4Macros.cmake) # KDE4_ADD_UI_FILES (SRCS_VAR file1.ui ... fileN.ui) @@ -173,7 +175,7 @@ # are created. Under Windows this flag is also necessary to separate between applications # with GUI and without. On other UNIX systems this flag has no effect. # The option TEST is for internal use only. -# The option RUN_UNINSTALLED is ignored. It was necessary with KDE 4.0 and 4.1 +# The option RUN_UNINSTALLED is ignored. It was necessary with KDE 4.0 and 4.1 # if the executable had to be run from the build tree. Since KDE 4.2 all # executables can be always run uninstalled (the RPATH of executables which are not # yet installed points since then into the buildtree and is changed @@ -217,7 +219,7 @@ # KDE4_INSTALL_AUTH_ACTIONS( HELPER_ID ACTIONS_FILE ) # This macro generates an action file, depending on the backend used, for applications using KAuth. # It accepts the helper id (the DBUS name) and a file containing the actions (check kdelibs/kdecore/auth/example -# for file format). The macro will take care of generating the file according to the backend specified, +# for file format). The macro will take care of generating the file according to the backend specified, # and to install it in the right location. This (at the moment) means that on Linux (PolicyKit) a .policy # file will be generated and installed into the policykit action directory (usually /usr/share/PolicyKit/policy/), # and on Mac (Authorization Services) will be added to the system action registry using the native MacOS API during @@ -338,7 +340,7 @@ if( ${QT_MIN_VERSION} VERSION_LESS "4.5.0" ) endif( ${QT_MIN_VERSION} VERSION_LESS "4.5.0" ) # Tell FindQt4.cmake to point the QT_QTFOO_LIBRARY targets at the imported targets -# for the Qt libraries, so we get full handling of release and debug versions of the +# for the Qt libraries, so we get full handling of release and debug versions of the # Qt libs and are flexible regarding the install location of Qt under Windows: set(QT_USE_IMPORTED_TARGETS TRUE) @@ -626,6 +628,7 @@ endif(NOT PHONON_FOUND) option(KDE4_ENABLE_FINAL "Enable final all-in-one compilation") option(KDE4_BUILD_TESTS "Build the tests") option(KDE4_ENABLE_HTMLHANDBOOK "Create targets htmlhandbook for creating the html versions of the docbook docs") +set(KDE4_SERIALIZE_TOOL "" CACHE STRING "Tool to serialize resource-intensive commands in parallel builds") # if CMake 2.6.3 or above is used, provide an option which should be used by other KDE packages # whether to install a CMake FooConfig.cmake into lib/foo/cmake/ or /lib/cmake/foo/ @@ -665,6 +668,11 @@ if( KDE4_ENABLE_FINAL) add_definitions(-DKDE_USE_FINAL) endif(KDE4_ENABLE_FINAL) +if(KDE4_SERIALIZE_TOOL) + # parallel build with many meinproc invocations can consume a huge amount of memory + set(KDE4_MEINPROC_EXECUTABLE ${KDE4_SERIALIZE_TOOL} ${KDE4_MEINPROC_EXECUTABLE}) +endif(KDE4_SERIALIZE_TOOL) + # If we are building ! kdelibs, check where kdelibs are installed. # If they are installed in a directory which contains "lib64", we default to "64" for LIB_SUFFIX, # so the current project will by default also go into lib64. @@ -899,7 +907,7 @@ if (WIN32) # windows, microsoft compiler if(MSVC) set( _KDE4_PLATFORM_DEFINITIONS -DKDE_FULL_TEMPLATE_EXPORT_INSTANTIATION -DWIN32_LEAN_AND_MEAN ) - + # C4250: 'class1' : inherits 'class2::member' via dominance set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4250" ) # C4251: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' @@ -1058,7 +1066,7 @@ if (MSVC) set (KDE4_ENABLE_EXCEPTIONS -EHsc) # Qt disables the native wchar_t type, do it too to avoid linking issues - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Zc:wchar_t-" ) + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Zc:wchar_t-" ) # make sure that no header adds libcmt by default using #pragma comment(lib, "libcmt.lib") as done by mfc/afx.h kde_check_flag_exists("/NODEFAULTLIB:libcmt /DEFAULTLIB:msvcrt" CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "Release with Debug Info") @@ -1156,19 +1164,16 @@ if (CMAKE_COMPILER_IS_GNUCXX) set (KDE4_C_FLAGS "-fvisibility=hidden") # check that Qt defines Q_DECL_EXPORT as __attribute__ ((visibility("default"))) # if it doesn't and KDE compiles with hidden default visibiltiy plugins will break - set(_source "#include <QtCore/QtGlobal>\n int main()\n {\n #ifdef QT_VISIBILITY_AVAILABLE \n return 0;\n #else \n return 1; \n #endif \n }\n") + set(_source "#include <QtCore/QtGlobal>\n int main()\n {\n #ifndef QT_VISIBILITY_AVAILABLE \n #error QT_VISIBILITY_AVAILABLE is not available\n #endif \n }\n") set(_source_file ${CMAKE_BINARY_DIR}/CMakeTmp/check_qt_visibility.cpp) file(WRITE "${_source_file}" "${_source}") set(_include_dirs "-DINCLUDE_DIRECTORIES:STRING=${QT_INCLUDES}") - try_run(_run_result _compile_result ${CMAKE_BINARY_DIR} ${_source_file} CMAKE_FLAGS "${_include_dirs}" COMPILE_OUTPUT_VARIABLE _compile_output_var) + try_compile(_compile_result ${CMAKE_BINARY_DIR} ${_source_file} CMAKE_FLAGS "${_include_dirs}" COMPILE_OUTPUT_VARIABLE _compile_output_var) if(NOT _compile_result) - message(FATAL_ERROR "Could not compile simple test program:\n ${_source}\n${_compile_output_var}") - endif(NOT _compile_result) - if(_run_result) message(FATAL_ERROR "Qt compiled without support for -fvisibility=hidden. This will break plugins and linking of some applications. Please fix your Qt installation.") - endif(_run_result) + endif(NOT _compile_result) if (GCC_IS_NEWER_THAN_4_2) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") @@ -1225,13 +1230,13 @@ macro (KDE4_PRINT_RESULTS) # inside kdelibs the include dir and lib dir are internal, not "found" if (NOT _kdeBootStrapping) if(KDE4_INCLUDE_DIR) - message(STATUS "Found KDE 4.4 include dir: ${KDE4_INCLUDE_DIR}") + message(STATUS "Found KDE 4.5 include dir: ${KDE4_INCLUDE_DIR}") else(KDE4_INCLUDE_DIR) message(STATUS "ERROR: unable to find the KDE 4 headers") endif(KDE4_INCLUDE_DIR) if(KDE4_LIB_DIR) - message(STATUS "Found KDE 4.4 library dir: ${KDE4_LIB_DIR}") + message(STATUS "Found KDE 4.5 library dir: ${KDE4_LIB_DIR}") else(KDE4_LIB_DIR) message(STATUS "ERROR: unable to find the KDE 4 core library") endif(KDE4_LIB_DIR) diff --git a/modules/FindLibAttica.cmake b/modules/FindLibAttica.cmake index f901075a..b9b0610a 100644 --- a/modules/FindLibAttica.cmake +++ b/modules/FindLibAttica.cmake @@ -14,11 +14,6 @@ IF (NOT LIBATTICA_MIN_VERSION) SET(LIBATTICA_MIN_VERSION "0.1.0") ENDIF(NOT LIBATTICA_MIN_VERSION) -IF (LIBATTICA_INCLUDE_DIR AND LIBATTICA_LIBRARIES) - # in cache already - SET(libattica_FIND_QUIETLY TRUE) -ENDIF (LIBATTICA_INCLUDE_DIR AND LIBATTICA_LIBRARIES) - IF (NOT WIN32) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls @@ -59,10 +54,9 @@ FIND_LIBRARY(LIBATTICA_LIBRARIES NAMES attica libattica ) INCLUDE(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set ATTICA_FOUND to TRUE if +# handle the QUIETLY and REQUIRED arguments and set LIBATTICA_FOUND to TRUE if # all listed variables are TRUE -FIND_PACKAGE_HANDLE_STANDARD_ARGS(libattica DEFAULT_MSG LIBATTICA_LIBRARIES LIBATTICA_INCLUDE_DIR LIBATTICA_VERSION_OK) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibAttica DEFAULT_MSG LIBATTICA_LIBRARIES LIBATTICA_INCLUDE_DIR LIBATTICA_VERSION_OK) MARK_AS_ADVANCED(LIBATTICA_INCLUDE_DIR LIBATTICA_LIBRARIES) - diff --git a/modules/FindPolkitQt-1.cmake b/modules/FindPolkitQt-1.cmake index 8ef5b3c9..159a54cc 100644 --- a/modules/FindPolkitQt-1.cmake +++ b/modules/FindPolkitQt-1.cmake @@ -74,7 +74,7 @@ find_library( POLKITQT-1_GUI_LIBRARY NAMES polkit-qt-gui-1 HINTS ${PC_POLKITQT-1_LIBDIR} ) -find_library( POLKITQT-1_AGENT_LIBRARY +find_library( POLKITQT-1_AGENT_LIBRARY NAMES polkit-qt-agent-1 HINTS ${PC_POLKITQT-1_LIBDIR} ) @@ -85,9 +85,14 @@ include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set POLKITQT-1_FOUND to TRUE if # all listed variables are TRUE -find_package_handle_standard_args(PolkitQt-1 DEFAULT_MSG POLKITQT-1_LIBRARIES POLKITQT-1_INCLUDE_DIR POLKITQT-1_VERSION_OK) +find_package_handle_standard_args(PolkitQt-1 DEFAULT_MSG POLKITQT-1_LIBRARIES POLKITQT-1_INCLUDE_DIR POLKITQT-1_VERSION_OK) -mark_as_advanced(POLKITQT-1_INCLUDE_DIR POLKITQT-1_CORE_LIBRARY POLKITQT-1_GUI_LIBRARY POLKITQT-1_LIBRARIES POLKITQT-1_VERSION_OK) +mark_as_advanced(POLKITQT-1_INCLUDE_DIR + POLKITQT-1_CORE_LIBRARY + POLKITQT-1_GUI_LIBRARY + POLKITQT-1_AGENT_LIBRARY + POLKITQT-1_VERSION_FILE + ) if (POLKITQT-1_FOUND) if (NOT PC_POLKITQT-1_PREFIX STREQUAL CMAKE_INSTALL_PREFIX) diff --git a/modules/FindPolkitQt.cmake b/modules/FindPolkitQt.cmake index 8f9f712f..84a2b8b5 100644 --- a/modules/FindPolkitQt.cmake +++ b/modules/FindPolkitQt.cmake @@ -88,7 +88,11 @@ include(FindPackageHandleStandardArgs) # all listed variables are TRUE find_package_handle_standard_args(PolkitQt DEFAULT_MSG POLKITQT_INCLUDE_DIR POLKITQT_GUI_LIBRARY POLKITQT_CORE_LIBRARY POLKITQT_VERSION_OK) -mark_as_advanced(POLKITQT_INCLUDE_DIR POLKITQT_CORE_LIBRARY POLKITQT_GUI_LIBRARY POLKITQT_LIBRARIES POLKITQT_VERSION_OK) +mark_as_advanced(POLKITQT_INCLUDE_DIR + POLKITQT_CORE_LIBRARY + POLKITQT_GUI_LIBRARY + POLKITQT_VERSION_FILE + ) if(POLKITQT_FOUND) get_filename_component(_POLKITQT_INSTALL_PREFIX "${POLKITQT_CORE_LIBRARY}" PATH) diff --git a/modules/FindQt4.cmake b/modules/FindQt4.cmake index 081e996e..0fef4275 100644 --- a/modules/FindQt4.cmake +++ b/modules/FindQt4.cmake @@ -51,6 +51,7 @@ # QT_USE_QTXMLPATTERNS # QT_USE_PHONON # QT_USE_QTSCRIPTTOOLS +# QT_USE_QTDECLARATIVE # # QT_USE_IMPORTED_TARGETS # If this variable is set to TRUE, FindQt4.cmake will create imported @@ -198,6 +199,7 @@ # QT_QTXML_FOUND True if QtXml was found. # QT_QTXMLPATTERNS_FOUND True if QtXmlPatterns was found. # QT_PHONON_FOUND True if phonon was found. +# QT_QTDECLARATIVE_FOUND True if QtDeclarative was found. # # QT_MAC_USE_COCOA For Mac OS X, its whether Cocoa or Carbon is used. # In general, this should not be used, but its useful @@ -247,7 +249,8 @@ # QT_QTXMLPATTERNS_INCLUDE_DIR Path to "include/QtXmlPatterns" # QT_PHONON_INCLUDE_DIR Path to "include/phonon" # QT_QTSCRIPTTOOLS_INCLUDE_DIR Path to "include/QtScriptTools" -# +# QT_QTDECLARATIVE_INCLUDE_DIR Path to "include/QtDeclarative" +# # QT_BINARY_DIR Path to "bin" of Qt4 # QT_LIBRARY_DIR Path to "lib" of Qt4 # QT_PLUGINS_DIR Path to "plugins" for Qt4 @@ -313,6 +316,8 @@ # # The Phonon library: QT_PHONON_LIBRARY # +# The QtDeclarative library: QT_QTDECLARATIVE_LIBRARY +# # also defined, but NOT for general use are # QT_MOC_EXECUTABLE Where to find the moc tool. # QT_UIC_EXECUTABLE Where to find the uic tool. @@ -687,7 +692,7 @@ IF (QT4_QMAKE_FOUND) SET(QT_MODULES QtCore QtGui Qt3Support QtSvg QtScript QtTest QtUiTools QtHelp QtWebKit QtXmlPatterns QtNetwork QtMultimedia - QtNsPlugin QtOpenGL QtSql QtXml QtDesigner QtDBus QtScriptTools) + QtNsPlugin QtOpenGL QtSql QtXml QtDesigner QtDBus QtScriptTools QtDeclarative) IF(Q_WS_X11) SET(QT_MODULES ${QT_MODULES} QtMotif) @@ -1004,6 +1009,7 @@ IF (QT4_QMAKE_FOUND) _QT4_ADJUST_LIB_VARS(QtAssistantClient) _QT4_ADJUST_LIB_VARS(QtCLucene) _QT4_ADJUST_LIB_VARS(QtDBus) + _QT4_ADJUST_LIB_VARS(QtDeclarative) _QT4_ADJUST_LIB_VARS(QtDesigner) _QT4_ADJUST_LIB_VARS(QtDesignerComponents) _QT4_ADJUST_LIB_VARS(QtHelp) diff --git a/modules/KDE4Defaults.cmake b/modules/KDE4Defaults.cmake index 82fa6044..04c0ae2c 100644 --- a/modules/KDE4Defaults.cmake +++ b/modules/KDE4Defaults.cmake @@ -25,11 +25,11 @@ set(CMAKE_COLOR_MAKEFILE ON) # define the generic version of the libraries here # this makes it easy to advance it when the next KDE release comes # Use this version number for libraries which are at version n in KDE version n -set(GENERIC_LIB_VERSION "4.4.0") +set(GENERIC_LIB_VERSION "4.5.0") set(GENERIC_LIB_SOVERSION "4") # Use this version number for libraries which are already at version n+1 in KDE version n -set(KDE_NON_GENERIC_LIB_VERSION "5.4.0") +set(KDE_NON_GENERIC_LIB_VERSION "5.5.0") set(KDE_NON_GENERIC_LIB_SOVERSION "5") # windows does not support LD_LIBRARY_PATH or similar diff --git a/modules/KDE4Macros.cmake b/modules/KDE4Macros.cmake index 61757c89..f58b658e 100644 --- a/modules/KDE4Macros.cmake +++ b/modules/KDE4Macros.cmake @@ -106,6 +106,12 @@ macro (KDE4_ADD_KCFG_FILES _sources ) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_rel_PATH}) endif(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${_rel_PATH}") + if (CMAKE_CROSSCOMPILING) + set(IMPORT_KCONFIG_COMPILER_EXECUTABLE "${KDE_HOST_TOOLS_PATH}/ImportKConfigCompilerExecutable.cmake" CACHE FILEPATH "Point it to the export file of kconfig_compiler from a native build") + include(${IMPORT_KCONFIG_COMPILER_EXECUTABLE}) + set(KDE4_KCFGC_EXECUTABLE kconfig_compiler) + endif (CMAKE_CROSSCOMPILING) + # the command for creating the source file from the kcfg file add_custom_command(OUTPUT ${_header_FILE} ${_src_FILE} COMMAND ${KDE4_KCFGC_EXECUTABLE} @@ -283,6 +289,13 @@ macro (KDE4_CREATE_HANDBOOK _docbook) endif (_kdeBootStrapping) file(GLOB _docs *.docbook) + + if (CMAKE_CROSSCOMPILING) + set(IMPORT_MEINPROC4_EXECUTABLE "${KDE_HOST_TOOLS_PATH}/ImportMeinProc4Executable.cmake" CACHE FILEPATH "Point it to the export file of meinproc4 from a native build") + include(${IMPORT_MEINPROC4_EXECUTABLE}) + set(KDE4_MEINPROC_EXECUTABLE meinproc4) + endif (CMAKE_CROSSCOMPILING) + add_custom_command(OUTPUT ${_doc} COMMAND ${KDE4_MEINPROC_EXECUTABLE} --check ${_bootstrapOption} --cache ${_doc} ${_input} DEPENDS ${_docs} ${_KDE4_MEINPROC_EXECUTABLE_DEP} ${_ssheet} @@ -354,6 +367,12 @@ macro (KDE4_CREATE_MANPAGE _docbook _section) set(_bootstrapOption) endif (_kdeBootStrapping) + if (CMAKE_CROSSCOMPILING) + set(IMPORT_MEINPROC4_EXECUTABLE "${KDE_HOST_TOOLS_PATH}/ImportMeinProc4Executable.cmake" CACHE FILEPATH "Point it to the export file of meinproc4 from a native build") + include(${IMPORT_MEINPROC4_EXECUTABLE}) + set(KDE4_MEINPROC_EXECUTABLE meinproc4) + endif (CMAKE_CROSSCOMPILING) + add_custom_command(OUTPUT ${_outdoc} COMMAND ${KDE4_MEINPROC_EXECUTABLE} --stylesheet ${_ssheet} --check ${_bootstrapOption} ${_input} DEPENDS ${_input} ${_KDE4_MEINPROC_EXECUTABLE_DEP} ${_ssheet} diff --git a/modules/MacroOptionalAddSubdirectory.cmake b/modules/MacroOptionalAddSubdirectory.cmake index 5de49f95..ec0ea30a 100644 --- a/modules/MacroOptionalAddSubdirectory.cmake +++ b/modules/MacroOptionalAddSubdirectory.cmake @@ -24,7 +24,7 @@ MACRO (MACRO_OPTIONAL_ADD_SUBDIRECTORY _dir ) GET_FILENAME_COMPONENT(_fullPath ${_dir} ABSOLUTE) - IF(EXISTS ${_fullPath}) + IF(EXISTS ${_fullPath}/CMakeLists.txt) IF(DISABLE_ALL_OPTIONAL_SUBDIRECTORIES) SET(_DEFAULT_OPTION_VALUE FALSE) ELSE(DISABLE_ALL_OPTIONAL_SUBDIRECTORIES) @@ -37,5 +37,5 @@ MACRO (MACRO_OPTIONAL_ADD_SUBDIRECTORY _dir ) IF(BUILD_${_dir}) ADD_SUBDIRECTORY(${_dir}) ENDIF(BUILD_${_dir}) - ENDIF(EXISTS ${_fullPath}) + ENDIF(EXISTS ${_fullPath}/CMakeLists.txt) ENDMACRO (MACRO_OPTIONAL_ADD_SUBDIRECTORY) diff --git a/modules/MacroOptionalFindPackage.cmake b/modules/MacroOptionalFindPackage.cmake index f09952f3..d4ed48e3 100644 --- a/modules/MacroOptionalFindPackage.cmake +++ b/modules/MacroOptionalFindPackage.cmake @@ -7,22 +7,42 @@ # The standard <name>_FOUND variables can be used in the same way # as when using the normal FIND_PACKAGE() -# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org> +# Copyright (c) 2006-2010 Alexander Neundorf, <neundorf@kde.org> # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# This is just a helper macro to set a bunch of variables empty. +# We don't know whether the package uses UPPERCASENAME or CamelCaseName, so we try both: +macro(_MOFP_SET_EMPTY_IF_DEFINED _name _var) + if(DEFINED ${_name}_${_var}) + set(${_name}_${_var} "") + endif(DEFINED ${_name}_${_var}) + + string(TOUPPER ${_name} _nameUpper) + if(DEFINED ${_nameUpper}_${_var}) + set(${_nameUpper}_${_var} "") + endif(DEFINED ${_nameUpper}_${_var}) +endmacro(_MOFP_SET_EMPTY_IF_DEFINED _package _var) + macro (MACRO_OPTIONAL_FIND_PACKAGE _name ) option(WITH_${_name} "Search for ${_name} package" ON) if (WITH_${_name}) find_package(${_name} ${ARGN}) else (WITH_${_name}) - set(${_name}_FOUND) - set(${_name}_INCLUDE_DIR) - set(${_name}_INCLUDES) - set(${_name}_LIBRARY) - set(${_name}_LIBRARIES) + string(TOUPPER ${_name} _nameUpper) + set(${_name}_FOUND FALSE) + set(${_nameUpper}_FOUND FALSE) + + _mofp_set_empty_if_defined(${_name} INCLUDE_DIRS) + _mofp_set_empty_if_defined(${_name} INCLUDE_DIR) + _mofp_set_empty_if_defined(${_name} INCLUDES) + _mofp_set_empty_if_defined(${_name} LIBRARY) + _mofp_set_empty_if_defined(${_name} LIBRARIES) + _mofp_set_empty_if_defined(${_name} LIBS) + _mofp_set_empty_if_defined(${_name} FLAGS) + _mofp_set_empty_if_defined(${_name} DEFINITIONS) endif (WITH_${_name}) endmacro (MACRO_OPTIONAL_FIND_PACKAGE) |