diff --git a/CMakeLists.txt b/CMakeLists.txt index b6e03deb43e..e29d793d7fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,10 +34,6 @@ if (WITH_TESTS) set(IMPLICIT_DEPENDS Qt5::Test) endif() -if (BUILD_WITH_PCH) - list(APPEND IMPLICIT_DEPENDS Qt5::Core) -endif() - find_package(Qt5 COMPONENTS Concurrent Core Gui LinguistTools Network PrintSupport Qml Quick QuickWidgets Sql Widgets Xml ${QT_TEST_COMPONENT} diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index 8a729e9f5e8..09f9e3f05cf 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -329,12 +329,14 @@ function(enable_pch target) "${PROJECT_SOURCE_DIR}/src/shared/qtcreator_pch.h" Qt5::Core) endif() - set(PCH_TARGET QtCreatorPchConsole) + unset(PCH_TARGET) if ("Qt5::Widgets" IN_LIST dependencies) set(PCH_TARGET QtCreatorPchGui) + elseif ("Qt5::Core" IN_LIST dependencies) + set(PCH_TARGET QtCreatorPchConsole) endif() - if (TARGET ${PCH_TARGET}) + if (TARGET "${PCH_TARGET}") set_target_properties(${target} PROPERTIES PRECOMPILE_HEADERS_REUSE_FROM ${PCH_TARGET}) endif() @@ -364,7 +366,7 @@ endfunction() # function(add_qtc_library name) - cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION" "" + cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;BUILD_BY_DEFAULT" "DESTINATION" "DEFINES;DEPENDS;EXTRA_TRANSLATIONS;INCLUDES;PUBLIC_DEFINES;PUBLIC_DEPENDS;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;PROPERTIES" ${ARGN} ) @@ -384,8 +386,13 @@ function(add_qtc_library name) set(library_type OBJECT) endif() + set(_exclude_from_all EXCLUDE_FROM_ALL) + if (_arg_BUILD_BY_DEFAULT) + unset(_exclude_from_all) + endif() + # Do not just build libraries... - add_library(${name} ${library_type} EXCLUDE_FROM_ALL ${_arg_SOURCES}) + add_library(${name} ${library_type} ${_exclude_from_all} ${_arg_SOURCES}) add_library(${IDE_CASED_ID}::${name} ALIAS ${name}) set_public_headers(${name} "${_arg_SOURCES}") @@ -432,6 +439,11 @@ function(add_qtc_library name) set(skip_translation ON) endif() + set(_DESTINATION "${IDE_BIN_PATH}") + if (_arg_DESTINATION) + set(_DESTINATION "${_arg_DESTINATION}") + endif() + qtc_output_binary_dir(_output_binary_dir) set_target_properties(${name} PROPERTIES SOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}" @@ -440,7 +452,7 @@ function(add_qtc_library name) VISIBILITY_INLINES_HIDDEN ON BUILD_RPATH "${_LIB_RPATH}" INSTALL_RPATH "${_LIB_RPATH}" - RUNTIME_OUTPUT_DIRECTORY "${_output_binary_dir}/${IDE_BIN_PATH}" + RUNTIME_OUTPUT_DIRECTORY "${_output_binary_dir}/${_DESTINATION}" LIBRARY_OUTPUT_DIRECTORY "${_output_binary_dir}/${IDE_LIBRARY_PATH}" ARCHIVE_OUTPUT_DIRECTORY "${_output_binary_dir}/${IDE_LIBRARY_PATH}" ${_arg_PROPERTIES} @@ -454,7 +466,7 @@ function(add_qtc_library name) install(TARGETS ${name} EXPORT ${IDE_CASED_ID} - RUNTIME DESTINATION "${IDE_BIN_PATH}" + RUNTIME DESTINATION "${_DESTINATION}" LIBRARY DESTINATION "${IDE_LIBRARY_PATH}" ${NAMELINK_OPTION} diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt index 52cc1d35a9e..ef261231f4d 100644 --- a/src/libs/CMakeLists.txt +++ b/src/libs/CMakeLists.txt @@ -16,6 +16,4 @@ add_subdirectory(sqlite) add_subdirectory(clangsupport) add_subdirectory(tracing) -if (WIN32) - add_subdirectory(qtcreatorcdbext) -endif() +add_subdirectory(qtcreatorcdbext) diff --git a/src/libs/qtcreatorcdbext/CMakeLists.txt b/src/libs/qtcreatorcdbext/CMakeLists.txt index 15ab799083d..ffdd094bf7e 100644 --- a/src/libs/qtcreatorcdbext/CMakeLists.txt +++ b/src/libs/qtcreatorcdbext/CMakeLists.txt @@ -1,29 +1,41 @@ -#todo -# - handle if there is no debug python lib python35_d -# - needs to be tested - -if (MINGW) - message(STATUS "MinGW detected. Removing qtcreatorcdbext from build.") +if (NOT WIN32 AND NOT MSVC) return() endif() -include(CheckIncludeFile) -check_include_file(wdbgexts.h HAVE_WDBGEXTS_H) -if (NOT HAVE_WDBGEXTS_H) +find_path(WDbgExtsPath wdbgexts.h + HINTS + "$ENV{CDB_PATH}" + "$ENV{ProgramFiles}/Debugging Tools For Windows/sdk" + "$ENV{ProgramFiles}/Debugging Tools For Windows (x86)/sdk" + "$ENV{ProgramFiles}/Debugging Tools For Windows (x64)/sdk" + "$ENV{ProgramFiles}/Debugging Tools For Windows 64-bit/sdk" + "$ENV{ProgramW6432}/Debugging Tools For Windows (x86)/sdk" + "$ENV{ProgramW6432}/Debugging Tools For Windows (x64)/sdk" + "$ENV{ProgramW6432}/Debugging Tools For Windows 64-bit/sdk" + "$ENV{ProgramFiles}/Windows Kits/8.0/Debuggers" + "$ENV{ProgramFiles}/Windows Kits/8.1/Debuggers" + "$ENV{ProgramFiles}/Windows Kits/10/Debuggers" + "$ENV{ProgramFiles\(x86\)}/Windows Kits/8.0/Debuggers/inc" + "$ENV{ProgramFiles\(x86\)}/Windows Kits/8.1/Debuggers/inc" + "$ENV{ProgramFiles\(x86\)}/Windows Kits/10/Debuggers/inc" +) + +if (NOT WDbgExtsPath) message(WARNING "wdbgexts.h not found. Removing qtcreatorcdbext from build.") return() endif() -find_package(PythonLibs 3.5) -if (NOT ${PYTHONLIBS_FOUND}) - message(WARNING "PythonLibs 3.5 not found. Removing qtcreatorcdbext from build.") - return() +find_library(DbgEngLib dbgeng HINTS ${WDbgExtsPath}) + +set(ArchSuffix 32) +if (CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ArchSuffix 64) endif() add_qtc_library(qtcreatorcdbext - DEPENDS ${PYTHON_LIBRARIES} - INCLUDES ${PYTHON_INCLUDE_DIR} - DEFINES WITH_PYTHON=1 + BUILD_BY_DEFAULT + DEPENDS ${DbgEngLib} + DESTINATION lib/qtcreatorcdbext${ArchSuffix}/ SOURCES common.cpp common.h containers.cpp containers.h @@ -33,14 +45,47 @@ add_qtc_library(qtcreatorcdbext iinterfacepointer.h knowntype.h outputcallback.cpp outputcallback.h - pycdbextmodule.cpp pycdbextmodule.h - pyfield.cpp pyfield.h - pystdoutredirect.cpp pystdoutredirect.h - pytype.cpp pytype.h - pyvalue.cpp pyvalue.h + qtcreatorcdbext.def qtcreatorcdbextension.cpp stringutils.cpp stringutils.h symbolgroup.cpp symbolgroup.h symbolgroupnode.cpp symbolgroupnode.h symbolgroupvalue.cpp symbolgroupvalue.h ) + +find_package(PythonLibs 3.5) +if (NOT ${PYTHONLIBS_FOUND}) + message(WARNING "PythonLibs (at least version 3.5) not found. qtcreatorcdbext will be built without Python support.") + return() +endif() + +extend_qtc_target(qtcreatorcdbext + DEPENDS "${PYTHON_LIBRARIES}" + INCLUDES "${PYTHON_INCLUDE_DIR}" + DEFINES WITH_PYTHON=1 + SOURCES + pycdbextmodule.cpp pycdbextmodule.h + pyfield.cpp pyfield.h + pystdoutredirect.cpp pystdoutredirect.h + pytype.cpp pytype.h + pyvalue.cpp pyvalue.h +) + +set(PythonRegex "^(.*)/(.*)/(python[0-9]+)${CMAKE_IMPORT_LIBRARY_SUFFIX}$") +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(PythonRegex "^(.*)/(.*)/(python[0-9]+_d)${CMAKE_IMPORT_LIBRARY_SUFFIX}$") +endif() + +foreach(lib IN LISTS PYTHON_LIBRARIES) + if (lib MATCHES ${PythonRegex}) + set(PythonDll "${CMAKE_MATCH_1}/${CMAKE_MATCH_3}${CMAKE_SHARED_LIBRARY_SUFFIX}") + endif() +endforeach() + +install(FILES "${PythonDll}" DESTINATION lib/qtcreatorcdbext${ArchSuffix}/) + +add_custom_target(copy_python_dll ALL VERBATIM) +add_custom_command(TARGET copy_python_dll POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy "${PythonDll}" "${PROJECT_BINARY_DIR}/lib/qtcreatorcdbext${ArchSuffix}/" + VERBATIM +)