aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2016-11-07 21:38:41 -0800
committerRobert Schumacher <roschuma@microsoft.com>2016-11-07 21:38:41 -0800
commitef293701aaceb6b3e8ffd91dc7ae0afa66b83998 (patch)
tree59127e5c17c46db1b96505fbc4760a97dd6cf026
parenteaebe2888ab97de74200904807ae884419ccc195 (diff)
parent5e058c21928de5092242cb6e0c590c3a2d758c6c (diff)
downloadvcpkg-ef293701aaceb6b3e8ffd91dc7ae0afa66b83998.tar.gz
vcpkg-ef293701aaceb6b3e8ffd91dc7ae0afa66b83998.zip
Merge pull request #219 Barath-Kannan/qt5-add
Qt5 add
-rw-r--r--ports/qt5/CONTROL4
-rw-r--r--ports/qt5/fixcmake.py44
-rw-r--r--ports/qt5/portfile.cmake135
-rw-r--r--ports/qt5/set-shared-qmakespec.patch18
-rw-r--r--ports/qt5/set-static-qmakespec.patch18
-rw-r--r--scripts/buildsystems/vcpkg.cmake2
-rw-r--r--scripts/cmake/vcpkg_common_functions.cmake3
-rw-r--r--scripts/cmake/vcpkg_execute_required_process_repeat.cmake28
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake12
9 files changed, 263 insertions, 1 deletions
diff --git a/ports/qt5/CONTROL b/ports/qt5/CONTROL
new file mode 100644
index 000000000..1629819e8
--- /dev/null
+++ b/ports/qt5/CONTROL
@@ -0,0 +1,4 @@
+Source: qt5
+Version: 5.7
+Build-Depends:
+Description: Qt5 application framework main components. Webengine, examples and tests not included.
diff --git a/ports/qt5/fixcmake.py b/ports/qt5/fixcmake.py
new file mode 100644
index 000000000..bd37c1e54
--- /dev/null
+++ b/ports/qt5/fixcmake.py
@@ -0,0 +1,44 @@
+import os
+import re
+from glob import glob
+
+files = [y for x in os.walk('.') for y in glob(os.path.join(x[0], '*.cmake'))]
+
+for f in files:
+ openedfile = open(f, "r")
+ builder = ""
+ exepattern = re.compile("_install_prefix}/bin/[a-z]+.exe")
+ for line in openedfile:
+ if "_install_prefix}/bin/${LIB_LOCATION}" in line:
+ builder += " if (${Configuration} STREQUAL \"RELEASE\")"
+ builder += "\n " + line
+ builder += " else()"
+ builder += "\n " + line.replace("/bin/", "/debug/bin/")
+ builder += " endif()\n"
+ elif "_install_prefix}/lib/${LIB_LOCATION}" in line:
+ builder += " if (${Configuration} STREQUAL \"RELEASE\")"
+ builder += "\n " + line
+ builder += " else()"
+ builder += "\n " + line.replace("/lib/", "/debug/lib/")
+ builder += " endif()\n"
+ elif "_install_prefix}/lib/${IMPLIB_LOCATION}" in line:
+ builder += " if (${Configuration} STREQUAL \"RELEASE\")"
+ builder += "\n " + line
+ builder += " else()"
+ builder += "\n " + line.replace("/lib/", "/debug/lib/")
+ builder += " endif()\n"
+ elif "_install_prefix}/lib/qtmaind.lib" in line:
+ builder += line.replace("/lib/", "/debug/lib/")
+ elif "_install_prefix}/plugins/${PLUGIN_LOCATION}" in line:
+ builder += " if (${Configuration} STREQUAL \"RELEASE\")"
+ builder += "\n " + line
+ builder += " else()"
+ builder += "\n " + line.replace("/plugins/", "/debug/plugins/")
+ builder += " endif()\n"
+ elif exepattern.search(line) != None:
+ builder += line.replace("/bin/", "/tools/")
+ else:
+ builder += line
+ new_file = open(f, "w")
+ new_file.write(builder)
+ new_file.close() \ No newline at end of file
diff --git a/ports/qt5/portfile.cmake b/ports/qt5/portfile.cmake
new file mode 100644
index 000000000..f65bee4ba
--- /dev/null
+++ b/ports/qt5/portfile.cmake
@@ -0,0 +1,135 @@
+include(${CMAKE_TRIPLET_FILE})
+include(vcpkg_common_functions)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/qt-5.7.0)
+set(OUTPUT_PATH ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET})
+set(ENV{QTDIR} ${OUTPUT_PATH}/qtbase)
+set(ENV{PATH} "${OUTPUT_PATH}/qtbase/bin;$ENV{PATH}")
+
+find_program(NMAKE nmake)
+vcpkg_find_acquire_program(JOM)
+vcpkg_find_acquire_program(PERL)
+vcpkg_find_acquire_program(PYTHON3)
+get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY)
+get_filename_component(PYTHON3_EXE_PATH ${PYTHON3} DIRECTORY)
+get_filename_component(JOM_EXE_PATH ${JOM} DIRECTORY)
+set(ENV{PATH} "${JOM_EXE_PATH};${PYTHON3_EXE_PATH};${PERL_EXE_PATH};$ENV{PATH}")
+
+vcpkg_download_distfile(ARCHIVE_FILE
+ URLS "http://download.qt.io/official_releases/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.7z"
+ FILENAME "qt-5.7.0.7z"
+ SHA512 96f0b6bd221be0ed819bc9b52eefcee1774945e25b89169fa927148c1c4a2d85faf63b1d09ef5067573bda9bbf1270fce5f181d086bfe585ddbad4cd77f7f418
+)
+vcpkg_extract_source_archive(${ARCHIVE_FILE})
+if (EXISTS ${CURRENT_BUILDTREES_DIR}/src/qt-everywhere-opensource-src-5.7.0)
+ file(RENAME ${CURRENT_BUILDTREES_DIR}/src/qt-everywhere-opensource-src-5.7.0 ${CURRENT_BUILDTREES_DIR}/src/qt-5.7.0)
+endif()
+
+file(MAKE_DIRECTORY ${OUTPUT_PATH})
+if(DEFINED VCPKG_CRT_LINKAGE AND VCPKG_CRT_LINKAGE STREQUAL static)
+ list(APPEND QT_RUNTIME_LINKAGE "-static")
+ list(APPEND QT_RUNTIME_LINKAGE "-static-runtime")
+ vcpkg_apply_patches(
+ SOURCE_PATH ${SOURCE_PATH}
+ PATCHES "${CMAKE_CURRENT_LIST_DIR}/set-static-qmakespec.patch"
+ )
+else()
+ vcpkg_apply_patches(
+ SOURCE_PATH ${SOURCE_PATH}
+ PATCHES "${CMAKE_CURRENT_LIST_DIR}/set-shared-qmakespec.patch"
+ )
+endif()
+
+message(STATUS "Configuring ${TARGET_TRIPLET}")
+vcpkg_execute_required_process(
+ COMMAND "${SOURCE_PATH}/configure.bat"
+ -confirm-license -opensource -platform win32-msvc2015
+ -debug-and-release -force-debug-info ${QT_RUNTIME_LINKAGE}
+ -nomake examples -nomake tests -skip webengine
+ -prefix ${CURRENT_PACKAGES_DIR}
+ -bindir ${CURRENT_PACKAGES_DIR}/bin
+ -hostbindir ${CURRENT_PACKAGES_DIR}/tools
+ -archdatadir ${CURRENT_PACKAGES_DIR}/share/qt5
+ -datadir ${CURRENT_PACKAGES_DIR}/share/qt5
+ WORKING_DIRECTORY ${OUTPUT_PATH}
+ LOGNAME configure-${TARGET_TRIPLET}
+)
+message(STATUS "Configure ${TARGET_TRIPLET} done")
+
+message(STATUS "Building ${TARGET_TRIPLET}")
+vcpkg_execute_required_process_repeat(
+ COUNT 5
+ COMMAND ${JOM}
+ WORKING_DIRECTORY ${OUTPUT_PATH}
+ LOGNAME build-${TARGET_TRIPLET}
+)
+message(STATUS "Build ${TARGET_TRIPLET} done")
+
+message(STATUS "Installing ${TARGET_TRIPLET}")
+vcpkg_execute_required_process(
+ COMMAND ${JOM} install
+ WORKING_DIRECTORY ${OUTPUT_PATH}
+ LOGNAME install-${TARGET_TRIPLET}
+)
+message(STATUS "Install ${TARGET_TRIPLET} done")
+
+message(STATUS "Packaging ${TARGET_TRIPLET}")
+file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug)
+file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/lib)
+file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/bin)
+file(RENAME ${CURRENT_PACKAGES_DIR}/lib/cmake ${CURRENT_PACKAGES_DIR}/share/cmake)
+
+if(DEFINED VCPKG_CRT_LINKAGE AND VCPKG_CRT_LINKAGE STREQUAL dynamic)
+ file(INSTALL ${CURRENT_PACKAGES_DIR}/bin
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug
+ FILES_MATCHING PATTERN "*d.dll"
+ )
+ file(INSTALL ${CURRENT_PACKAGES_DIR}/bin
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug
+ FILES_MATCHING PATTERN "*d.pdb"
+ )
+ file(GLOB DEBUG_BIN_FILES "${CURRENT_PACKAGES_DIR}/bin/*d.dll")
+ file(REMOVE ${DEBUG_BIN_FILES})
+ file(GLOB DEBUG_BIN_FILES "${CURRENT_PACKAGES_DIR}/bin/*d.pdb")
+ file(REMOVE ${DEBUG_BIN_FILES})
+ file(RENAME ${CURRENT_PACKAGES_DIR}/debug/bin/Qt5Gamepad.dll ${CURRENT_PACKAGES_DIR}/bin/Qt5Gamepad.dll)
+endif()
+
+file(INSTALL ${CURRENT_PACKAGES_DIR}/lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug
+ FILES_MATCHING PATTERN "*d.lib"
+)
+file(INSTALL ${CURRENT_PACKAGES_DIR}/lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug
+ FILES_MATCHING PATTERN "*d.prl"
+)
+file(INSTALL ${CURRENT_PACKAGES_DIR}/lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug
+ FILES_MATCHING PATTERN "*d.pdb"
+)
+file(GLOB DEBUG_LIB_FILES "${CURRENT_PACKAGES_DIR}/lib/*d.lib")
+file(REMOVE ${DEBUG_LIB_FILES})
+file(GLOB DEBUG_LIB_FILES "${CURRENT_PACKAGES_DIR}/lib/*d.prl")
+file(REMOVE ${DEBUG_LIB_FILES})
+file(GLOB DEBUG_LIB_FILES "${CURRENT_PACKAGES_DIR}/lib/*d.pdb")
+file(REMOVE ${DEBUG_LIB_FILES})
+file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/Qt5Gamepad.lib ${CURRENT_PACKAGES_DIR}/lib/Qt5Gamepad.lib)
+file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/Qt5Gamepad.prl ${CURRENT_PACKAGES_DIR}/lib/Qt5Gamepad.prl)
+file(GLOB BINARY_TOOLS "${CURRENT_PACKAGES_DIR}/bin/*.exe")
+
+file(INSTALL ${BINARY_TOOLS} DESTINATION ${CURRENT_PACKAGES_DIR}/tools)
+file(REMOVE ${BINARY_TOOLS})
+
+if(DEFINED VCPKG_CRT_LINKAGE AND VCPKG_CRT_LINKAGE STREQUAL dynamic)
+ file(GLOB RELEASE_DLLS "${CURRENT_PACKAGES_DIR}/bin/*.dll")
+ file(INSTALL ${RELEASE_DLLS} DESTINATION ${CURRENT_PACKAGES_DIR}/tools)
+endif()
+
+vcpkg_execute_required_process(
+ COMMAND ${PYTHON3} ${CMAKE_CURRENT_LIST_DIR}/fixcmake.py
+ WORKING_DIRECTORY ${CURRENT_PACKAGES_DIR}/share/cmake
+ LOGNAME fix-cmake
+)
+
+file(INSTALL ${SOURCE_PATH}/LICENSE.LGPLv3 DESTINATION ${CURRENT_PACKAGES_DIR}/share/qt5 RENAME copyright)
+
+vcpkg_copy_pdbs()
diff --git a/ports/qt5/set-shared-qmakespec.patch b/ports/qt5/set-shared-qmakespec.patch
new file mode 100644
index 000000000..d4b7c2a82
--- /dev/null
+++ b/ports/qt5/set-shared-qmakespec.patch
@@ -0,0 +1,18 @@
+diff --git a/qtbase/mkspecs/common/msvc-desktop.conf b/qtbase/mkspecs/common/msvc-desktop.conf
+index 80fcd9b..1b9d57b 100644
+--- a/qtbase/mkspecs/common/msvc-desktop.conf
++++ b/qtbase/mkspecs/common/msvc-desktop.conf
+@@ -29,9 +29,9 @@
+ QMAKE_YACCFLAGS = -d
+ QMAKE_CFLAGS = -nologo -Zc:wchar_t
+ QMAKE_CFLAGS_WARN_ON = -W3
+ QMAKE_CFLAGS_WARN_OFF = -W0
+-QMAKE_CFLAGS_RELEASE = -O2 -MT
+-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
+-QMAKE_CFLAGS_DEBUG = -Zi -MTd
++QMAKE_CFLAGS_RELEASE = -O2 -MD
++QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
++QMAKE_CFLAGS_DEBUG = -Zi -MDd
+ QMAKE_CFLAGS_YACC =
+ QMAKE_CFLAGS_LTCG = -GL
+ \ No newline at end of file
diff --git a/ports/qt5/set-static-qmakespec.patch b/ports/qt5/set-static-qmakespec.patch
new file mode 100644
index 000000000..26b312f2f
--- /dev/null
+++ b/ports/qt5/set-static-qmakespec.patch
@@ -0,0 +1,18 @@
+diff --git a/qtbase/mkspecs/common/msvc-desktop.conf b/qtbase/mkspecs/common/msvc-desktop.conf
+index 1b9d57b..80fcd9b 100644
+--- a/qtbase/mkspecs/common/msvc-desktop.conf
++++ b/qtbase/mkspecs/common/msvc-desktop.conf
+@@ -29,9 +29,9 @@
+ QMAKE_YACCFLAGS = -d
+ QMAKE_CFLAGS = -nologo -Zc:wchar_t
+ QMAKE_CFLAGS_WARN_ON = -W3
+ QMAKE_CFLAGS_WARN_OFF = -W0
+-QMAKE_CFLAGS_RELEASE = -O2 -MD
+-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
+-QMAKE_CFLAGS_DEBUG = -Zi -MDd
++QMAKE_CFLAGS_RELEASE = -O2 -MT
++QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
++QMAKE_CFLAGS_DEBUG = -Zi -MTd
+ QMAKE_CFLAGS_YACC =
+ QMAKE_CFLAGS_LTCG = -GL
+ \ No newline at end of file
diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake
index 50b489b1a..257007e45 100644
--- a/scripts/buildsystems/vcpkg.cmake
+++ b/scripts/buildsystems/vcpkg.cmake
@@ -53,12 +53,14 @@ if(NOT VCPKG_TOOLCHAIN)
if(OVERRIDE_ADD_EXECUTABLE)
function(add_executable name)
_add_executable(${ARGV})
+ if(NOT "IMPORTED" IN_LIST ARGV)
add_custom_command(TARGET ${name} POST_BUILD
COMMAND powershell -noprofile -executionpolicy UnRestricted -file ${_VCPKG_TOOLCHAIN_DIR}/msbuild/applocal.ps1
-targetBinary $<TARGET_FILE:${name}>
-installedDir "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}$<$<CONFIG:Debug>:/debug>/bin"
-OutVariable out
)
+ endif()
endfunction()
endif()
set(VCPKG_TOOLCHAIN ON)
diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake
index 59824eb17..f1bbdb9e3 100644
--- a/scripts/cmake/vcpkg_common_functions.cmake
+++ b/scripts/cmake/vcpkg_common_functions.cmake
@@ -1,10 +1,11 @@
include(vcpkg_download_distfile)
include(vcpkg_extract_source_archive)
include(vcpkg_execute_required_process)
+include(vcpkg_execute_required_process_repeat)
include(vcpkg_find_acquire_program)
include(vcpkg_build_cmake)
include(vcpkg_build_msbuild)
include(vcpkg_install_cmake)
include(vcpkg_configure_cmake)
include(vcpkg_apply_patches)
-include(vcpkg_copy_pdbs) \ No newline at end of file
+include(vcpkg_copy_pdbs)
diff --git a/scripts/cmake/vcpkg_execute_required_process_repeat.cmake b/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
new file mode 100644
index 000000000..d6fba132d
--- /dev/null
+++ b/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
@@ -0,0 +1,28 @@
+# Usage: vcpkg_execute_required_process_repeat(COUNT <num> COMMAND <cmd> [<args>...] WORKING_DIRECTORY </path/to/dir> LOGNAME <my_log_name>)
+function(vcpkg_execute_required_process_repeat)
+ cmake_parse_arguments(vcpkg_execute_required_process_repeat "" "COUNT;WORKING_DIRECTORY;LOGNAME" "COMMAND" ${ARGN})
+ #debug_message("vcpkg_execute_required_process_repeat(${vcpkg_execute_required_process_repeat_COMMAND})")
+ foreach(loop_count RANGE ${vcpkg_execute_required_process_repeat_COUNT})
+ execute_process(
+ COMMAND ${vcpkg_execute_required_process_repeat_COMMAND}
+ OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_repeat_LOGNAME}-out.log
+ ERROR_FILE ${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_repeat_LOGNAME}-err.log
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY ${vcpkg_execute_required_process_repeat_WORKING_DIRECTORY})
+ #debug_message("error_code=${error_code}")
+ file(TO_NATIVE_PATH "${CURRENT_BUILDTREES_DIR}" NATIVE_BUILDTREES_DIR)
+ if(NOT error_code)
+ set(SUCCESSFUL_EXECUTION TRUE)
+ break()
+ endif()
+ endforeach(loop_count)
+ if (NOT ${SUCCESSFUL_EXECUTION})
+ message(FATAL_ERROR
+ " Command failed: ${vcpkg_execute_required_process_repeat_COMMAND}\n"
+ " Working Directory: ${vcpkg_execute_required_process_repeat_WORKING_DIRECTORY}\n"
+ " See logs for more information:\n"
+ " ${NATIVE_BUILDTREES_DIR}\\${vcpkg_execute_required_process_repeat_LOGNAME}-out.log\n"
+ " ${NATIVE_BUILDTREES_DIR}\\${vcpkg_execute_required_process_repeat_LOGNAME}-err.log\n"
+ )
+ endif()
+endfunction()
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake
index 8f974240f..633721f0e 100644
--- a/scripts/cmake/vcpkg_find_acquire_program.cmake
+++ b/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -24,6 +24,18 @@ function(vcpkg_find_acquire_program VAR)
set(ARCHIVE "yasm.exe")
set(NOEXTRACT ON)
set(HASH 850b26be5bbbdaeaf45ac39dd27f69f1a85e600c35afbd16b9f621396b3c7a19863ea3ff316b025b578fce0a8280eef2203306a2b3e46ee1389abb65313fb720)
+ elseif(VAR MATCHES "PYTHON3")
+ set(PROGNAME python)
+ set(PATHS ${DOWNLOADS}/tools/python)
+ set(URL "https://www.python.org/ftp/python/3.5.2/python-3.5.2-embed-amd64.zip")
+ set(ARCHIVE "python-3.5.2-embed-amd64.zip")
+ set(HASH 48bdcb6f94c993acad6782ee33ad4a07a0ea3b9b1bfcdeadf446d459a9224336837e2e7b518d54d8d99c5c3f4e9f8877ea1789cae513fa2eda2a3cad9e4dfd8f)
+ elseif(VAR MATCHES "JOM")
+ set(PROGNAME jom)
+ set(PATHS ${DOWNLOADS}/tools/jom)
+ set(URL "http://download.qt.io/official_releases/jom/jom_1_1_1.zip")
+ set(ARCHIVE "jom_1_1_1.zip")
+ set(HASH 23a26dc7e29979bec5dcd3bfcabf76397b93ace64f5d46f2254d6420158bac5eff1c1a8454e3427e7a2fe2c233c5f2cffc87b376772399e12e40b51be2c065f4)
else()
message(FATAL "unknown tool ${VAR} -- unable to acquire.")
endif()