diff --git a/make-ring.py b/make-ring.py index 1ed9fd76ad3ab79bed62ded205f6da68964f1e58..932ed7eb4b56d5173b7988e3b0ef66894f311fde 100755 --- a/make-ring.py +++ b/make-ring.py @@ -22,9 +22,7 @@ OSX_DISTRIBUTION_NAME = "osx" ANDROID_DISTRIBUTION_NAME = "android" WIN32_DISTRIBUTION_NAME = "win32" -# Qt 5.15 is currently only available using the maintenance tool. QT5_VERSION = "5.15.0" -DEFAULT_QT_PATH = "~/Qt/{0}/gcc_64".format(QT5_VERSION) # vs vars win_sdk_default = '10.0.16299.0' @@ -46,7 +44,7 @@ PACMAN_BASED_DISTROS = [ ] ZYPPER_BASED_DISTROS = [ - 'opensuse-leap', + 'opensuse-leap', 'opensuse-tumbleweed', ] FLATPAK_BASED_RUNTIMES = [ @@ -91,16 +89,24 @@ ZYPPER_DEPENDENCIES = [ 'curl', 'gzip', 'bzip2', # daemon 'speexdsp-devel', 'speex-devel', 'libdbus-c++-devel', 'jsoncpp-devel', 'yaml-cpp-devel', - 'yasm', 'libuuid-devel', 'libnettle-devel', 'libopus-devel', + 'yasm', 'libuuid-devel', 'libnettle-devel', 'libopus-devel', 'libexpat-devel', 'libgnutls-devel', 'msgpack-devel', 'libavcodec-devel', 'libavdevice-devel', 'pcre-devel', 'alsa-devel', 'libpulse-devel', 'libudev-devel', 'libva-devel', 'libvdpau-devel', - 'libopenssl-devel', + 'libopenssl-devel', 'libavutil-devel', # lrc 'libQt5Core-devel', 'libQt5DBus-devel', 'libqt5-linguist-devel', - # gnome client - 'gtk3-devel', 'clutter-gtk-devel', 'qrencode-devel', - 'gettext-tools', 'libnotify-devel', 'libappindicator3-devel', 'webkit2gtk3-devel', - 'NetworkManager-devel', 'libcanberra-gtk3-devel' + # client gnome / qt + 'qrencode-devel', 'NetworkManager-devel' +] + +ZYPPER_CLIENT_GNOME_DEPENDENCIES = [ + 'gtk3-devel', 'clutter-gtk-devel', 'gettext-tools', 'libnotify-devel', 'libappindicator3-devel', + 'webkit2gtk3-devel', 'libcanberra-gtk3-devel' +] + +ZYPPER_CLIENT_QT_DEPENDENCIES = [ + 'libqt5-qtsvg-devel', 'libqt5-qtwebengine-devel', 'libqt5-qtmultimedia-devel', + 'libqt5-qtdeclarative-devel', 'libQt5QuickControls2-devel', 'libqt5-qtquickcontrols' ] DNF_DEPENDENCIES = [ @@ -111,11 +117,20 @@ DNF_DEPENDENCIES = [ 'speex-devel', 'chrpath', 'check', 'astyle', 'uuid-c++-devel', 'gettext-devel', 'gcc-c++', 'which', 'alsa-lib-devel', 'systemd-devel', 'libuuid-devel', 'uuid-devel', 'gnutls-devel', 'nettle-devel', 'opus-devel', 'speexdsp-devel', - 'yaml-cpp-devel', 'qt5-qtbase-devel', 'swig', 'qrencode-devel', 'jsoncpp-devel', - 'gtk3-devel', 'clutter-devel', 'clutter-gtk-devel', - 'libnotify-devel', 'libappindicator-gtk3-devel', 'patch', 'libva-devel', 'openssl-devel', - 'webkitgtk4-devel', 'NetworkManager-libnm-devel', 'libvdpau-devel', 'msgpack-devel', 'libcanberra-devel', - 'sqlite-devel', 'openssl-static', 'pandoc', 'nasm' + 'yaml-cpp-devel', 'qt5-qtbase-devel', 'swig', 'jsoncpp-devel', + 'patch', 'libva-devel', 'openssl-devel', 'libvdpau-devel', 'msgpack-devel', + 'sqlite-devel', 'openssl-static', 'pandoc', 'nasm', 'qrencode-devel', 'NetworkManager-libnm-devel', + 'bzip2' +] + +DNF_CLIENT_GNOME_DEPENDENCIES = [ + 'gtk3-devel', 'clutter-devel', 'clutter-gtk-devel', 'libnotify-devel','libappindicator-gtk3-devel', + 'webkitgtk4-devel', 'libcanberra-devel' +] + +DNF_CLIENT_QT_DEPENDENCIES = [ + 'qt5-qtsvg-devel', 'qt5-qtwebengine-devel', 'qt5-qtmultimedia-devel', 'qt5-qtdeclarative-devel', + 'qt5-qtquickcontrols2-devel', 'qt5-qtquickcontrols' ] APT_DEPENDENCIES = [ @@ -128,9 +143,22 @@ APT_DEPENDENCIES = [ 'libopus-dev', 'libpcre3-dev', 'libpulse-dev', 'libssl-dev', 'libspeex-dev', 'libspeexdsp-dev', 'libswscale-dev', 'libtool', 'libudev-dev', 'libyaml-cpp-dev', 'qtbase5-dev', 'libqt5sql5-sqlite', 'sip-tester', 'swig', - 'uuid-dev', 'yasm', 'libqrencode-dev', 'libjsoncpp-dev', 'libappindicator3-dev', - 'libva-dev', 'libwebkit2gtk-4.0-dev', 'libnm-dev', 'libvdpau-dev', 'libmsgpack-dev', 'libcanberra-gtk3-dev', - 'pandoc', 'nasm' + 'uuid-dev', 'yasm', 'libjsoncpp-dev', 'libva-dev', 'libvdpau-dev', 'libmsgpack-dev', + 'pandoc', 'nasm', 'libqrencode-dev', 'libnm-dev', 'dpkg-dev' +] + +APT_CLIENT_GNOME_DEPENDENCIES = [ + 'libwebkit2gtk-4.0-dev', 'libappindicator3-dev', 'libcanberra-gtk3-dev' +] + +APT_CLIENT_QT_DEPENDENCIES = [ + 'qtmultimedia5-dev', 'libqt5svg5-dev', 'qtwebengine5-dev', 'qtdeclarative5-dev', + 'qtquickcontrols2-5-dev', 'qml-module-qtquick2', 'qml-module-qtquick-controls', + 'qml-module-qtquick-controls2', 'qml-module-qtquick-dialogs', + 'qml-module-qtquick-layouts', 'qml-module-qtquick-privatewidgets', + 'qml-module-qtquick-shapes', 'qml-module-qtquick-window2', + 'qml-module-qtquick-templates2', 'qml-module-qt-labs-platform', + 'qml-module-qtwebengine', 'qml-module-qtwebchannel' ] PACMAN_DEPENDENCIES = [ @@ -190,12 +218,12 @@ def run_powersell_cmd(cmd): return -def write_qt_conf(path): +def write_qt_conf(path, qt5version=QT5_VERSION): # Add a configuration that can be supplied to qmake # e.g. `qmake -qt=5.15 [mode] [options] [files]` if path == '': return - with open('/usr/share/qtchooser/' + QT5_VERSION + '.conf', 'w+') as fd: + with open('/usr/share/qtchooser/' + qt5version + '.conf', 'w+') as fd: fd.write(path.rstrip('/') + '/bin\n') fd.write(path.rstrip('/') + '/lib\n') return @@ -203,19 +231,27 @@ def write_qt_conf(path): def run_dependencies(args): if args.qt is not None: - write_qt_conf(args.qt) + write_qt_conf(args.qt, args.qtver) if args.distribution == WIN32_DISTRIBUTION_NAME: run_powersell_cmd( 'Set-ExecutionPolicy Unrestricted; .\\scripts\\install-deps-windows.ps1') elif args.distribution in APT_BASED_DISTROS: + if args.qt is None: + APT_DEPENDENCIES.extend(APT_CLIENT_GNOME_DEPENDENCIES) + else: + APT_DEPENDENCIES.extend(APT_CLIENT_QT_DEPENDENCIES) execute_script( APT_INSTALL_SCRIPT, {"packages": ' '.join(map(shlex.quote, APT_DEPENDENCIES))} ) elif args.distribution in DNF_BASED_DISTROS: + if args.qt is None: + DNF_DEPENDENCIES.extend(DNF_CLIENT_GNOME_DEPENDENCIES) + else: + DNF_DEPENDENCIES.extend(DNF_CLIENT_QT_DEPENDENCIES) execute_script( RPM_INSTALL_SCRIPT, {"packages": ' '.join(map(shlex.quote, DNF_DEPENDENCIES))} @@ -228,6 +264,10 @@ def run_dependencies(args): ) elif args.distribution in ZYPPER_BASED_DISTROS: + if args.qt is None: + ZYPPER_DEPENDENCIES.extend(ZYPPER_CLIENT_GNOME_DEPENDENCIES) + else: + ZYPPER_DEPENDENCIES.extend(ZYPPER_CLIENT_QT_DEPENDENCIES) execute_script( ZYPPER_INSTALL_SCRIPT, {"packages": ' '.join(map(shlex.quote, ZYPPER_DEPENDENCIES))} @@ -352,11 +392,8 @@ def run_install(args): install_args += ("-c", "client-gnome") else: install_args += ("-c", "client-qt") - install_args += ("-q", QT5_VERSION) - if args.qt == '': - install_args += ("-Q", DEFAULT_QT_PATH) - else: - install_args += ("-Q", args.qt) + install_args += ("-q", args.qtver) + install_args += ("-Q", args.qt) return subprocess.run(["./scripts/install.sh"] + install_args, env=environ, check=True) @@ -525,7 +562,9 @@ def parse_args(): ap.add_argument('--no-priv-install', dest='priv_install', default=True, action='store_false') ap.add_argument('--qt', nargs='?', const='', type=str, - help='Build the Qt client with the Qt 5.15 path supplied') + help='Build the Qt client with the Qt path supplied') + ap.add_argument('--qtver', default=QT5_VERSION, + help='Sets the Qt version to build with') dist = choose_distribution() if dist == WIN32_DISTRIBUTION_NAME: @@ -533,8 +572,6 @@ def parse_args(): help='Windows use only, specify Visual Studio toolset version') ap.add_argument('--sdk', default=win_sdk_default, type=str, help='Windows use only, specify Windows SDK version') - ap.add_argument('--qtver', default=QT5_VERSION, - help='Sets the Qt version to build with') parsed_args = ap.parse_args() diff --git a/scripts/install.sh b/scripts/install.sh index f02f3b10267599e5fa480acd85b09a5ef1fc114e..132d0f022ff25223a5a7d3afe43becba722d6d16 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -13,6 +13,9 @@ export OSTYPE set -ex +# Qt_MIN_VER required for client-qt +QT5_MIN_VER="5.14" + global=false static='' client='' @@ -104,6 +107,33 @@ fi make -j"${proc}" make_install "${global}" "${priv_install}" + +# For the client-qt, verify system's version if no path provided +if [ "${client}" = "client-qt" ] && [ -z "$qt5path" ]; then + sys_qt5ver="" + if command -v qmake &> /dev/null; then + sys_qt5ver=$(qmake -v) + elif command -v qmake-qt5 &> /dev/null; then + sys_qt5ver=$(qmake-qt5 -v) # Fedora + else + echo "No valid Qt found"; exit 1; + fi + + sys_qt5ver=${sys_qt5ver#*Qt version} + sys_qt5ver=${sys_qt5ver%\ in\ *} + + installed_qt5ver=$(echo $sys_qt5ver| cut -d'.' -f 2) + required_qt5ver=$(echo $QT5_MIN_VER| cut -d'.' -f 2) + + if [[ $installed_qt5ver -ge $required_qt5ver ]] ; then + # Disable qt5path and qt5ver in order to use system's Qt + qt5path="" + qt5ver="" + else + echo "No valid Qt found"; exit 1; + fi +fi + # libringclient cd "${TOP}/lrc" mkdir -p "${BUILDDIR}" @@ -113,12 +143,12 @@ if [ "${global}" = "true" ]; then cmake .. -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX="${prefix}" $static \ - -DQT_MIN_VER="${qt5ver}" \ + -DQT5_VER="${qt5ver}" \ -DQT5_PATH="${qt5path}" else cmake .. -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \ -DCMAKE_BUILD_TYPE=Debug $static \ - -DQT_MIN_VER="${qt5ver}" \ + -DQT5_VER="${qt5ver}" \ -DQT5_PATH="${qt5path}" fi else @@ -126,7 +156,7 @@ else -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX="${INSTALL}/lrc" \ -DRING_BUILD_DIR="${DAEMON}/src" $static \ - -DQT_MIN_VER="${qt5ver}" \ + -DQT5_VER="${qt5ver}" \ -DQT5_PATH="${qt5path}" fi make -j"${proc}" @@ -137,24 +167,18 @@ cd "${TOP}/${client}" mkdir -p "${BUILDDIR}" cd "${BUILDDIR}" if [ "${client}" = "client-qt" ]; then - echo building client-qt using Qt ${qt5ver} - if ! command -v qmake &> /dev/null; then - eval ${qt5path}/bin/qmake PREFIX="${INSTALL}/${client}" .. + if [ -z ${qt5path} ]; then + if command -v qmake &> /dev/null; then + echo "Build client-qt with $(qmake -v)" + qmake PREFIX="${INSTALL}/${client}" .. + else + echo "Build client-qt with $(qmake-qt5 -v)" # Fedora + qmake-qt5 PREFIX="${INSTALL}/${client}" .. + fi else - # Extract installed Qt version and compare with minimum required - sys_qt5ver=$(qmake -v) - sys_qt5ver=${sys_qt5ver#*Qt version} - sys_qt5ver=${sys_qt5ver%\ in\ *} - - installed_qt5ver=$(echo $sys_qt5ver| cut -d'.' -f 2) - required_qt5ver=$(echo $qt5ver| cut -d'.' -f 2) - - if [[ $installed_qt5ver -ge $required_qt5ver ]] ; then - qmake PREFIX="${INSTALL}/${client}" .. - else + echo "Build client-qt using Qt ${qt5path}" eval ${qt5path}/bin/qmake PREFIX="${INSTALL}/${client}" .. - fi - fi + fi else if [ "${global}" = "true" ]; then if [ "${prefix+set}" ]; then