diff options
-rw-r--r-- | .github/workflows/build_cmake.yml | 214 | ||||
-rwxr-xr-x | scripts/build.py | 51 | ||||
-rw-r--r-- | scripts/common.py | 8 | ||||
-rwxr-xr-x | scripts/deployqt.py | 16 |
4 files changed, 189 insertions, 100 deletions
diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml index 0145148992..1bbb6f82f4 100644 --- a/.github/workflows/build_cmake.yml +++ b/.github/workflows/build_cmake.yml @@ -23,12 +23,14 @@ jobs: name: "Windows Latest MSVC", artifact: "Windows-MSVC", os: windows-latest, cc: "cl", cxx: "cl", - environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat" + environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", + is_msvc: true } - { name: "Windows Latest MinGW", artifact: "Windows-MinGW", os: windows-latest, - cc: "gcc", cxx: "g++" + cc: "gcc", cxx: "g++", + is_msvc: false } - { name: "Ubuntu Latest GCC", artifact: "Linux", @@ -139,7 +141,7 @@ jobs: execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${archive} WORKING_DIRECTORY qt5) endfunction() - foreach(package qtbase qtdeclarative qttools qtsvg qtserialport qtquickcontrols qtquickcontrols2 qtgraphicaleffects qtlocation qtimageformats) + foreach(package qtbase qtdeclarative qttools qtsvg qtserialport qtquickcontrols qtquickcontrols2 qtgraphicaleffects qtlocation qtimageformats qttranslations) downloadAndExtract( "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" ${package}.7z @@ -168,18 +170,37 @@ jobs: string(REPLACE "licheck_mac" "" qtconfig "${qtconfig}") file(WRITE "qt5/${qt_dir_prefix}/mkspecs/qconfig.pri" "${qtconfig}") + if ("${{ runner.os }}" STREQUAL "Windows") + # deploy "system" runtimes into Qt, so they get deployed as well + if ("x${{ matrix.config.environment_script }}" STREQUAL "x") + # deploy MinGW + foreach(file libwinpthread-1.dll libstdc++-6.dll libgcc_s_seh-1.dll) + file(INSTALL "C:/ProgramData/chocolatey/lib/mingw/tools/install/mingw64/bin/${file}" + DESTINATION "qt5/${qt_dir_prefix}/bin" + USE_SOURCE_PERMISSIONS) + endforeach() + else() + # deploy MSVC + foreach(file vcruntime140.dll concrt140.dll msvcp140_1.dll msvcp140_2.dll + msvcp140_codecvt_ids.dll vcruntime140_1.dll msvcp140.dll) + file(INSTALL "C:/Windows/System32/${file}" + DESTINATION "qt5/${qt_dir_prefix}/bin") + endforeach() + endif() + endif() + - name: Download OpenSSL shell: cmake -P {0} run: | if ("${{ runner.os }}" STREQUAL "Windows") set(url_os "windows_x86") set(openssl_localdir "Tools/OpenSSL/Win_x64/bin") - set(openssl_dest_dir "instdir/bin") + set(openssl_dest_dir "${{ steps.qt.outputs.qt_dir }}/bin") set(shared_suffix ".dll") elseif ("${{ runner.os }}" STREQUAL "Linux") set(url_os "linux_x64") set(openssl_localdir "Tools/OpenSSL/binary/lib") - set(openssl_dest_dir "instdir/lib/Qt/lib") + set(openssl_dest_dir "${{ steps.qt.outputs.qt_dir }}/lib/Qt/lib") set(shared_suffix ".so*") elseif ("${{ runner.os }}" STREQUAL "macOS") # Not needed on macOS @@ -289,7 +310,7 @@ jobs: file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/googletest-release-$ENV{GOOGLETEST_VERSION}" googletest_dir) message("::set-output name=googletest_dir::${googletest_dir}") - - name: Configure + - name: Build shell: cmake -P {0} run: | set(ENV{CC} ${{ matrix.config.cc }}) @@ -312,56 +333,12 @@ jobs: if ("${{ runner.os }}" STREQUAL "Windows") set(path_separator ";") endif() - set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") + set(ENV{PATH} "${{ steps.cmake_and_ninja.outputs.cmake_dir }}${path_separator}$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") set(ENV{GOOGLETEST_DIR} "${{ steps.googletest.outputs.googletest_dir }}") - # Workaround for https://gitlab.kitware.com/cmake/cmake/issues/20119 - foreach(step 1 2) - execute_process( - COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake - -S . - -B build - -D CMAKE_BUILD_TYPE=$ENV{BUILD_TYPE} - -D "CMAKE_PREFIX_PATH=${{ steps.libclang.outputs.libclang_dir }};${{ steps.qt.outputs.qt_dir }}" - -G Ninja - -D CMAKE_MAKE_PROGRAM=ninja - -D CMAKE_FIND_PACKAGE_PREFER_CONFIG=TRUE - -D CMAKE_C_COMPILER_LAUNCHER=ccache - -D CMAKE_CXX_COMPILER_LAUNCHER=ccache - -D BUILD_WITH_PCH=OFF - -D WITH_TESTS=ON - -D IDE_REVISION=TRUE - -D IDE_REVISION_STR=$ENV{GITHUB_SHA} - -D IDE_REVISION_URL=https://github.com/$ENV{GITHUB_REPOSITORY}/commits/$ENV{GITHUB_SHA} - RESULT_VARIABLE result - COMMAND_ECHO STDOUT - ) - if (NOT result EQUAL 0) - message(FATAL_ERROR "Bad exit status") - endif() - endforeach() - - - name: Build - shell: cmake -P {0} - run: | set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") - if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") - file(STRINGS environment_script_output.txt output_lines) - foreach(line IN LISTS output_lines) - if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") - set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") - endif() - endforeach() - endif() - - set(path_separator ":") - if ("${{ runner.os }}" STREQUAL "Windows") - set(path_separator ";") - endif() - set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}" ccache_basedir) set(ENV{CCACHE_BASEDIR} "${ccache_basedir}") set(ENV{CCACHE_DIR} "${ccache_basedir}/.ccache") @@ -376,11 +353,29 @@ jobs: execute_process(COMMAND ccache -p) execute_process(COMMAND ccache -z) + if ("x${{ matrix.config.environment_script }}" STREQUAL "x") + set(CDB_OPTION "--no-cdb") + else() + set(CDB_OPTION) + endif() + execute_process( - COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build build + COMMAND python + -u + scripts/build.py + --src . + --build build + --qt-path "${{ steps.qt.outputs.qt_dir }}" + --llvm-path "${{ steps.libclang.outputs.libclang_dir }}" + --with-tests + ${CDB_OPTION} + --add-config=-DCMAKE_C_COMPILER_LAUNCHER=ccache + --add-config=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache + --add-config=-DIDE_REVISION_URL=https://github.com/$ENV{GITHUB_REPOSITORY}/commits/$ENV{GITHUB_SHA} + --zip-infix=-${{ matrix.config.artifact }}-${{ github.run_id }} RESULT_VARIABLE result + COMMAND_ECHO STDOUT ) - if (NOT result EQUAL 0) message(FATAL_ERROR "Bad exit status") endif() @@ -397,7 +392,7 @@ jobs: execute_process( COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/ctest -j ${N} - WORKING_DIRECTORY build + WORKING_DIRECTORY build/build RESULT_VARIABLE result OUTPUT_VARIABLE stdout ERROR_VARIABLE stdout @@ -412,33 +407,38 @@ jobs: message("::warning::${pass_rate}") endif() - - name: Install Strip - run: | - ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --install build --prefix instdir --strip - ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --install build --prefix instdir --component Dependencies - - - name: Install Devel - run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --install build --prefix instdir-dev --component Devel + - name: Upload + uses: actions/upload-artifact@v1 + with: + path: build/qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - - name: Pack - working-directory: instdir - run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake -E tar cfv ../QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z --format=7zip . + - name: Upload Devel + uses: actions/upload-artifact@v1 + with: + path: build/qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z + name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z - - name: Pack Devel - working-directory: instdir-dev - run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake -E tar cfv ../QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}-dev.7z --format=7zip . + - name: Upload wininterrupt + if: runner.os == 'Windows' + uses: actions/upload-artifact@v1 + with: + path: build/wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + name: wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - - name: Upload + - name: Upload qtcreatorcdbext + if: runner.os == 'Windows' && matrix.config.is_msvc uses: actions/upload-artifact@v1 with: - path: ./QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - name: QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + path: build/qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + name: qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - - name: Upload Devel + - name: Upload disk image + if: runner.os == 'macOS' uses: actions/upload-artifact@v1 with: - path: ./QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}-dev.7z - name: QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}-dev.7z + path: build/qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg + name: qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg release: if: contains(github.ref, 'tags/v') @@ -476,10 +476,12 @@ jobs: config: - { name: "Windows Latest MSVC", artifact: "Windows-MSVC", + is_msvc: true, os: ubuntu-latest } - { name: "Windows Latest MinGW", artifact: "Windows-MinGW", + is_msvc: false, os: ubuntu-latest } - { @@ -496,13 +498,34 @@ jobs: - name: Download artifact uses: actions/download-artifact@v1 with: - name: QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z path: ./ - name: Download Devel artifact uses: actions/download-artifact@v1 with: - name: QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}-dev.7z + name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z + path: ./ + + - name: Download wininterrupt artifact + if: runner.os == 'Windows' + uses: actions/download-artifact@v1 + with: + name: wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + path: ./ + + - name: Download qtcreatorcdbext artifact + if: runner.os == 'Windows' && matrix.config.is_msvc + uses: actions/upload-artifact@v1 + with: + name: qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + path: ./ + + - name: Download disk image artifact + if: runner.os == 'macOS' + uses: actions/upload-artifact@v1 + with: + name: qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg path: ./ - name: Download URL @@ -521,8 +544,8 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.set_upload_url.outputs.upload_url }} - asset_path: ./QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - asset_name: QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + asset_path: ./qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + asset_name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z asset_content_type: application/x-gtar - name: Upload Devel to Release @@ -531,6 +554,39 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.set_upload_url.outputs.upload_url }} - asset_path: ./QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}-dev.7z - asset_name: QtCreator-${{ matrix.config.artifact }}-${{ github.run_id }}-dev.7z + asset_path: ./qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z + asset_name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z + asset_content_type: application/x-gtar + + - name: Upload wininterrupt to Release + if: runner.os == 'Windows' + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.set_upload_url.outputs.upload_url }} + asset_path: ./wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + asset_name: wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + asset_content_type: application/x-gtar + + - name: Upload qtcreatorcdbext to Release + if: runner.os == 'Windows' && matrix.config.is_msvc + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.set_upload_url.outputs.upload_url }} + asset_path: ./qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + asset_name: qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + asset_content_type: application/x-gtar + + - name: Upload disk image to Release + if: runner.os == 'macOS' + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.set_upload_url.outputs.upload_url }} + asset_path: ./qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg + asset_name: qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg asset_content_type: application/x-gtar diff --git a/scripts/build.py b/scripts/build.py index 11b7e0a387..6fd8d976b2 100755 --- a/scripts/build.py +++ b/scripts/build.py @@ -89,21 +89,29 @@ def get_arguments(): action='store_true', default=False) parser.add_argument('--no-zip', help='Skip creation of 7zip files for install and developer package', action='store_true', default=False) + parser.add_argument('--with-tests', help='Enable building of tests', + action='store_true', default=False) parser.add_argument('--add-make-arg', help='Passes the argument to the make tool.', action='append', dest='make_args', default=[]) + parser.add_argument('--add-config', help=('Adds the argument to the CMake configuration call. ' + 'Use "--add-config=-DSOMEVAR=SOMEVALUE" if the argument begins with a dash.'), + action='append', dest='config_args', default=[]) + parser.add_argument('--zip-infix', help='Adds an infix to generated zip files, use e.g. for a build number.', + default='') return parser.parse_args() def build_qtcreator(args, paths): if not os.path.exists(paths.build): os.makedirs(paths.build) prefix_paths = [paths.qt] - if args.llvm_path: - prefix_paths += [args.llvm_path] + if paths.llvm: + prefix_paths += [paths.llvm] if paths.elfutils: prefix_paths += [paths.elfutils] build_type = 'Debug' if args.debug else 'Release' with_docs_str = 'OFF' if args.no_docs else 'ON' build_date_option = 'OFF' if args.no_build_date else 'ON' + test_option = 'ON' if args.with_tests else 'OFF' cmake_args = ['cmake', '-DCMAKE_PREFIX_PATH=' + ';'.join(prefix_paths), '-DCMAKE_BUILD_TYPE=' + build_type, @@ -112,7 +120,7 @@ def build_qtcreator(args, paths): '-DBUILD_DEVELOPER_DOCS=' + with_docs_str, '-DBUILD_EXECUTABLE_SDKTOOL=OFF', '-DCMAKE_INSTALL_PREFIX=' + paths.install, - '-DWITH_TESTS=OFF', + '-DWITH_TESTS=' + test_option, '-G', 'Ninja'] if args.python3: @@ -122,9 +130,10 @@ def build_qtcreator(args, paths): # even if MSVC is first mentioned in the PATH... # TODO would be nicer if we only did this if cl.exe is indeed first in the PATH if common.is_windows_platform(): - cmake_args += ['-DCMAKE_C_COMPILER=cl', - '-DCMAKE_CXX_COMPILER=cl', - '-DBUILD_EXECUTABLE_WIN32INTERRUPT=OFF', + if not os.environ.get('CC') and not os.environ.get('CXX'): + cmake_args += ['-DCMAKE_C_COMPILER=cl', + '-DCMAKE_CXX_COMPILER=cl'] + cmake_args += ['-DBUILD_EXECUTABLE_WIN32INTERRUPT=OFF', '-DBUILD_EXECUTABLE_WIN64INTERRUPT=OFF', '-DBUILD_LIBRARY_QTCREATORCDBEXT=OFF'] if args.python_path: @@ -142,6 +151,8 @@ def build_qtcreator(args, paths): '-DIDE_REVISION_STR=' + ide_revision, '-DIDE_REVISION_URL=https://code.qt.io/cgit/qt-creator/qt-creator.git/log/?id=' + ide_revision] + cmake_args += args.config_args + common.check_print_call(cmake_args + [paths.src], paths.build) build_args = ['cmake', '--build', '.'] if args.make_args: @@ -200,31 +211,42 @@ def deploy_qt(args, paths): qt_plugins = os.path.join(paths.qt, 'plugins') qt_imports = os.path.join(paths.qt, 'imports') qt_qml = os.path.join(paths.qt, 'qml') + env = dict(os.environ) + if paths.llvm: + env['LLVM_INSTALL_DIR'] = paths.llvm common.check_print_call([script, app, qt_bins, qt_translations, qt_plugins, qt_imports, qt_qml], - paths.build) + paths.build, + env=env) else: cmd_args = ['python', '-u', os.path.join(paths.src, 'scripts', 'deployqt.py'), '-i'] if paths.elfutils: cmd_args.extend(['--elfutils-path', paths.elfutils]) + if paths.llvm: + cmd_args.extend(['--llvm-path', paths.llvm]) exe = os.path.join(paths.install, 'bin', args.app_target) common.check_print_call(cmd_args + [exe, os.path.join(paths.qt, 'bin', 'qmake')], paths.build) def package_qtcreator(args, paths): if not args.no_zip: - common.check_print_call(['7z', 'a', '-mmt2', os.path.join(paths.result, 'qtcreator.7z'), '*'], + common.check_print_call(['7z', 'a', '-mmt2', + os.path.join(paths.result, 'qtcreator' + args.zip_infix + '.7z'), + '*'], paths.install) common.check_print_call(['7z', 'a', '-mmt2', - os.path.join(paths.result, 'qtcreator_dev.7z'), '*'], + os.path.join(paths.result, 'qtcreator' + args.zip_infix + '_dev.7z'), + '*'], paths.dev_install) if common.is_windows_platform(): common.check_print_call(['7z', 'a', '-mmt2', - os.path.join(paths.result, 'wininterrupt.7z'), '*'], + os.path.join(paths.result, 'wininterrupt' + args.zip_infix + '.7z'), + '*'], paths.wininterrupt_install) if not args.no_cdb: common.check_print_call(['7z', 'a', '-mmt2', - os.path.join(paths.result, 'qtcreatorcdbext.7z'), '*'], + os.path.join(paths.result, 'qtcreatorcdbext' + args.zip_infix + '.7z'), + '*'], paths.qtcreatorcdbext_install) if common.is_mac_platform(): @@ -233,7 +255,7 @@ def package_qtcreator(args, paths): if not args.no_dmg: common.check_print_call(['python', '-u', os.path.join(paths.src, 'scripts', 'makedmg.py'), - 'qt-creator.dmg', + 'qt-creator' + args.zip_infix + '.dmg', 'Qt Creator', paths.src, paths.install], @@ -244,7 +266,7 @@ def get_paths(args): ['qt', 'src', 'build', 'install', 'dev_install', 'wininterrupt_install', 'qtcreatorcdbext_install', 'result', - 'elfutils']) + 'elfutils', 'llvm']) build_path = os.path.abspath(args.build) install_path = os.path.join(build_path, 'install') return Paths(qt=os.path.abspath(args.qt_path), @@ -255,7 +277,8 @@ def get_paths(args): wininterrupt_install=os.path.join(install_path, 'wininterrupt'), qtcreatorcdbext_install=os.path.join(install_path, 'qtcreatorcdbext'), result=build_path, - elfutils=os.path.abspath(args.elfutils_path) if args.elfutils_path else None) + elfutils=os.path.abspath(args.elfutils_path) if args.elfutils_path else None, + llvm=os.path.abspath(args.llvm_path) if args.llvm_path else None) def main(): args = get_arguments() diff --git a/scripts/common.py b/scripts/common.py index 61923803fb..d033108648 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -40,18 +40,20 @@ def is_linux_platform(): def is_mac_platform(): return sys.platform.startswith('darwin') -def check_print_call(command, workdir): +def check_print_call(command, workdir, env=None): print('------------------------------------------') print('COMMAND:') print(' '.join(['"' + c.replace('"', '\\"') + '"' for c in command])) print('PWD: "' + workdir + '"') print('------------------------------------------') - subprocess.check_call(command, cwd=workdir) + subprocess.check_call(command, cwd=workdir, env=env) def get_git_SHA(path): try: - return subprocess.check_output(['git', 'rev-list', '-n1', 'HEAD'], cwd=path).strip() + output = subprocess.check_output(['git', 'rev-list', '-n1', 'HEAD'], cwd=path).strip() + decoded_output = output.decode(encoding) if encoding else output + return decoded_output except subprocess.CalledProcessError: return None return None diff --git a/scripts/deployqt.py b/scripts/deployqt.py index 4579c92cc3..5d7011e068 100755 --- a/scripts/deployqt.py +++ b/scripts/deployqt.py @@ -47,6 +47,10 @@ def get_args(): action='store_true', default=False) parser.add_argument('--elfutils-path', help='Path to elfutils installation for use by perfprofiler (Windows, Linux)') + # TODO remove defaulting to LLVM_INSTALL_DIR when we no longer build qmake based packages + parser.add_argument('--llvm-path', + help='Path to LLVM installation', + default=os.environ.get('LLVM_INSTALL_DIR')) parser.add_argument('qtcreator_binary', help='Path to Qt Creator binary') parser.add_argument('qmake_binary', help='Path to qmake binary') @@ -98,8 +102,12 @@ def is_debug(fpath): # bootstrap exception if coredebug.search(fpath): return True - output = subprocess.check_output(['dumpbin', '/imports', fpath]) - return coredebug.search(output.decode(encoding)) != None + try: + output = subprocess.check_output(['dumpbin', '/imports', fpath]) + return coredebug.search(output.decode(encoding)) != None + except FileNotFoundError: + # dumpbin is not there, maybe MinGW ? Just ship all .dlls. + return debug_build def is_ignored_windows_file(use_debug, basepath, filename): ignore_patterns = ['.lib', '.pdb', '.exp', '.ilk'] @@ -369,8 +377,8 @@ def main(): else: copy_qt_libs(qt_deploy_prefix, QT_INSTALL_BINS, QT_INSTALL_LIBS, QT_INSTALL_PLUGINS, QT_INSTALL_IMPORTS, QT_INSTALL_QML, plugins, imports) copy_translations(install_dir, QT_INSTALL_TRANSLATIONS) - if "LLVM_INSTALL_DIR" in os.environ: - deploy_libclang(install_dir, os.environ["LLVM_INSTALL_DIR"], chrpath_bin) + if args.llvm_path: + deploy_libclang(install_dir, args.llvm_path, chrpath_bin) if args.elfutils_path: deploy_elfutils(install_dir, chrpath_bin, args) |